1*7688df22SAndroid Build Coastguard Worker /* 2*7688df22SAndroid Build Coastguard Worker * Copyright 2014 Advanced Micro Devices, Inc. 3*7688df22SAndroid Build Coastguard Worker * 4*7688df22SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 5*7688df22SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"), 6*7688df22SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation 7*7688df22SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8*7688df22SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the 9*7688df22SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions: 10*7688df22SAndroid Build Coastguard Worker * 11*7688df22SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included in 12*7688df22SAndroid Build Coastguard Worker * all copies or substantial portions of the Software. 13*7688df22SAndroid Build Coastguard Worker * 14*7688df22SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15*7688df22SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16*7688df22SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17*7688df22SAndroid Build Coastguard Worker * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18*7688df22SAndroid Build Coastguard Worker * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19*7688df22SAndroid Build Coastguard Worker * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20*7688df22SAndroid Build Coastguard Worker * OTHER DEALINGS IN THE SOFTWARE. 21*7688df22SAndroid Build Coastguard Worker * 22*7688df22SAndroid Build Coastguard Worker */ 23*7688df22SAndroid Build Coastguard Worker 24*7688df22SAndroid Build Coastguard Worker /** 25*7688df22SAndroid Build Coastguard Worker * \file amdgpu.h 26*7688df22SAndroid Build Coastguard Worker * 27*7688df22SAndroid Build Coastguard Worker * Declare public libdrm_amdgpu API 28*7688df22SAndroid Build Coastguard Worker * 29*7688df22SAndroid Build Coastguard Worker * This file define API exposed by libdrm_amdgpu library. 30*7688df22SAndroid Build Coastguard Worker * User wanted to use libdrm_amdgpu functionality must include 31*7688df22SAndroid Build Coastguard Worker * this file. 32*7688df22SAndroid Build Coastguard Worker * 33*7688df22SAndroid Build Coastguard Worker */ 34*7688df22SAndroid Build Coastguard Worker #ifndef _AMDGPU_H_ 35*7688df22SAndroid Build Coastguard Worker #define _AMDGPU_H_ 36*7688df22SAndroid Build Coastguard Worker 37*7688df22SAndroid Build Coastguard Worker #include <stdint.h> 38*7688df22SAndroid Build Coastguard Worker #include <stdbool.h> 39*7688df22SAndroid Build Coastguard Worker 40*7688df22SAndroid Build Coastguard Worker #ifdef __cplusplus 41*7688df22SAndroid Build Coastguard Worker extern "C" { 42*7688df22SAndroid Build Coastguard Worker #endif 43*7688df22SAndroid Build Coastguard Worker 44*7688df22SAndroid Build Coastguard Worker struct drm_amdgpu_info_hw_ip; 45*7688df22SAndroid Build Coastguard Worker struct drm_amdgpu_bo_list_entry; 46*7688df22SAndroid Build Coastguard Worker 47*7688df22SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------*/ 48*7688df22SAndroid Build Coastguard Worker /* --------------------------- Defines ------------------------------------ */ 49*7688df22SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------*/ 50*7688df22SAndroid Build Coastguard Worker 51*7688df22SAndroid Build Coastguard Worker /** 52*7688df22SAndroid Build Coastguard Worker * Define max. number of Command Buffers (IB) which could be sent to the single 53*7688df22SAndroid Build Coastguard Worker * hardware IP to accommodate CE/DE requirements 54*7688df22SAndroid Build Coastguard Worker * 55*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_cs_ib_info 56*7688df22SAndroid Build Coastguard Worker */ 57*7688df22SAndroid Build Coastguard Worker #define AMDGPU_CS_MAX_IBS_PER_SUBMIT 4 58*7688df22SAndroid Build Coastguard Worker 59*7688df22SAndroid Build Coastguard Worker /** 60*7688df22SAndroid Build Coastguard Worker * Special timeout value meaning that the timeout is infinite. 61*7688df22SAndroid Build Coastguard Worker */ 62*7688df22SAndroid Build Coastguard Worker #define AMDGPU_TIMEOUT_INFINITE 0xffffffffffffffffull 63*7688df22SAndroid Build Coastguard Worker 64*7688df22SAndroid Build Coastguard Worker /** 65*7688df22SAndroid Build Coastguard Worker * Used in amdgpu_cs_query_fence_status(), meaning that the given timeout 66*7688df22SAndroid Build Coastguard Worker * is absolute. 67*7688df22SAndroid Build Coastguard Worker */ 68*7688df22SAndroid Build Coastguard Worker #define AMDGPU_QUERY_FENCE_TIMEOUT_IS_ABSOLUTE (1 << 0) 69*7688df22SAndroid Build Coastguard Worker 70*7688df22SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------*/ 71*7688df22SAndroid Build Coastguard Worker /* ----------------------------- Enums ------------------------------------ */ 72*7688df22SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------*/ 73*7688df22SAndroid Build Coastguard Worker 74*7688df22SAndroid Build Coastguard Worker /** 75*7688df22SAndroid Build Coastguard Worker * Enum describing possible handle types 76*7688df22SAndroid Build Coastguard Worker * 77*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_import, amdgpu_bo_export 78*7688df22SAndroid Build Coastguard Worker * 79*7688df22SAndroid Build Coastguard Worker */ 80*7688df22SAndroid Build Coastguard Worker enum amdgpu_bo_handle_type { 81*7688df22SAndroid Build Coastguard Worker /** GEM flink name (needs DRM authentication, used by DRI2) */ 82*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle_type_gem_flink_name = 0, 83*7688df22SAndroid Build Coastguard Worker 84*7688df22SAndroid Build Coastguard Worker /** KMS handle which is used by all driver ioctls */ 85*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle_type_kms = 1, 86*7688df22SAndroid Build Coastguard Worker 87*7688df22SAndroid Build Coastguard Worker /** DMA-buf fd handle */ 88*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle_type_dma_buf_fd = 2, 89*7688df22SAndroid Build Coastguard Worker 90*7688df22SAndroid Build Coastguard Worker /** Deprecated in favour of and same behaviour as 91*7688df22SAndroid Build Coastguard Worker * amdgpu_bo_handle_type_kms, use that instead of this 92*7688df22SAndroid Build Coastguard Worker */ 93*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle_type_kms_noimport = 3, 94*7688df22SAndroid Build Coastguard Worker }; 95*7688df22SAndroid Build Coastguard Worker 96*7688df22SAndroid Build Coastguard Worker /** Define known types of GPU VM VA ranges */ 97*7688df22SAndroid Build Coastguard Worker enum amdgpu_gpu_va_range 98*7688df22SAndroid Build Coastguard Worker { 99*7688df22SAndroid Build Coastguard Worker /** Allocate from "normal"/general range */ 100*7688df22SAndroid Build Coastguard Worker amdgpu_gpu_va_range_general = 0 101*7688df22SAndroid Build Coastguard Worker }; 102*7688df22SAndroid Build Coastguard Worker 103*7688df22SAndroid Build Coastguard Worker enum amdgpu_sw_info { 104*7688df22SAndroid Build Coastguard Worker amdgpu_sw_info_address32_hi = 0, 105*7688df22SAndroid Build Coastguard Worker }; 106*7688df22SAndroid Build Coastguard Worker 107*7688df22SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------*/ 108*7688df22SAndroid Build Coastguard Worker /* -------------------------- Datatypes ----------------------------------- */ 109*7688df22SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------*/ 110*7688df22SAndroid Build Coastguard Worker 111*7688df22SAndroid Build Coastguard Worker /** 112*7688df22SAndroid Build Coastguard Worker * Define opaque pointer to context associated with fd. 113*7688df22SAndroid Build Coastguard Worker * This context will be returned as the result of 114*7688df22SAndroid Build Coastguard Worker * "initialize" function and should be pass as the first 115*7688df22SAndroid Build Coastguard Worker * parameter to any API call 116*7688df22SAndroid Build Coastguard Worker */ 117*7688df22SAndroid Build Coastguard Worker typedef struct amdgpu_device *amdgpu_device_handle; 118*7688df22SAndroid Build Coastguard Worker 119*7688df22SAndroid Build Coastguard Worker /** 120*7688df22SAndroid Build Coastguard Worker * Define GPU Context type as pointer to opaque structure 121*7688df22SAndroid Build Coastguard Worker * Example of GPU Context is the "rendering" context associated 122*7688df22SAndroid Build Coastguard Worker * with OpenGL context (glCreateContext) 123*7688df22SAndroid Build Coastguard Worker */ 124*7688df22SAndroid Build Coastguard Worker typedef struct amdgpu_context *amdgpu_context_handle; 125*7688df22SAndroid Build Coastguard Worker 126*7688df22SAndroid Build Coastguard Worker /** 127*7688df22SAndroid Build Coastguard Worker * Define handle for amdgpu resources: buffer, GDS, etc. 128*7688df22SAndroid Build Coastguard Worker */ 129*7688df22SAndroid Build Coastguard Worker typedef struct amdgpu_bo *amdgpu_bo_handle; 130*7688df22SAndroid Build Coastguard Worker 131*7688df22SAndroid Build Coastguard Worker /** 132*7688df22SAndroid Build Coastguard Worker * Define handle for list of BOs 133*7688df22SAndroid Build Coastguard Worker */ 134*7688df22SAndroid Build Coastguard Worker typedef struct amdgpu_bo_list *amdgpu_bo_list_handle; 135*7688df22SAndroid Build Coastguard Worker 136*7688df22SAndroid Build Coastguard Worker /** 137*7688df22SAndroid Build Coastguard Worker * Define handle to be used to work with VA allocated ranges 138*7688df22SAndroid Build Coastguard Worker */ 139*7688df22SAndroid Build Coastguard Worker typedef struct amdgpu_va *amdgpu_va_handle; 140*7688df22SAndroid Build Coastguard Worker 141*7688df22SAndroid Build Coastguard Worker /** 142*7688df22SAndroid Build Coastguard Worker * Define handle dealing with VA allocation. An amdgpu_device 143*7688df22SAndroid Build Coastguard Worker * owns one of these, but they can also be used without a device. 144*7688df22SAndroid Build Coastguard Worker */ 145*7688df22SAndroid Build Coastguard Worker typedef struct amdgpu_va_manager *amdgpu_va_manager_handle; 146*7688df22SAndroid Build Coastguard Worker 147*7688df22SAndroid Build Coastguard Worker /** 148*7688df22SAndroid Build Coastguard Worker * Define handle for semaphore 149*7688df22SAndroid Build Coastguard Worker */ 150*7688df22SAndroid Build Coastguard Worker typedef struct amdgpu_semaphore *amdgpu_semaphore_handle; 151*7688df22SAndroid Build Coastguard Worker 152*7688df22SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------*/ 153*7688df22SAndroid Build Coastguard Worker /* -------------------------- Structures ---------------------------------- */ 154*7688df22SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------*/ 155*7688df22SAndroid Build Coastguard Worker 156*7688df22SAndroid Build Coastguard Worker /** 157*7688df22SAndroid Build Coastguard Worker * Structure describing memory allocation request 158*7688df22SAndroid Build Coastguard Worker * 159*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_alloc() 160*7688df22SAndroid Build Coastguard Worker * 161*7688df22SAndroid Build Coastguard Worker */ 162*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_alloc_request { 163*7688df22SAndroid Build Coastguard Worker /** Allocation request. It must be aligned correctly. */ 164*7688df22SAndroid Build Coastguard Worker uint64_t alloc_size; 165*7688df22SAndroid Build Coastguard Worker 166*7688df22SAndroid Build Coastguard Worker /** 167*7688df22SAndroid Build Coastguard Worker * It may be required to have some specific alignment requirements 168*7688df22SAndroid Build Coastguard Worker * for physical back-up storage (e.g. for displayable surface). 169*7688df22SAndroid Build Coastguard Worker * If 0 there is no special alignment requirement 170*7688df22SAndroid Build Coastguard Worker */ 171*7688df22SAndroid Build Coastguard Worker uint64_t phys_alignment; 172*7688df22SAndroid Build Coastguard Worker 173*7688df22SAndroid Build Coastguard Worker /** 174*7688df22SAndroid Build Coastguard Worker * UMD should specify where to allocate memory and how it 175*7688df22SAndroid Build Coastguard Worker * will be accessed by the CPU. 176*7688df22SAndroid Build Coastguard Worker */ 177*7688df22SAndroid Build Coastguard Worker uint32_t preferred_heap; 178*7688df22SAndroid Build Coastguard Worker 179*7688df22SAndroid Build Coastguard Worker /** Additional flags passed on allocation */ 180*7688df22SAndroid Build Coastguard Worker uint64_t flags; 181*7688df22SAndroid Build Coastguard Worker }; 182*7688df22SAndroid Build Coastguard Worker 183*7688df22SAndroid Build Coastguard Worker /** 184*7688df22SAndroid Build Coastguard Worker * Special UMD specific information associated with buffer. 185*7688df22SAndroid Build Coastguard Worker * 186*7688df22SAndroid Build Coastguard Worker * It may be need to pass some buffer charactersitic as part 187*7688df22SAndroid Build Coastguard Worker * of buffer sharing. Such information are defined UMD and 188*7688df22SAndroid Build Coastguard Worker * opaque for libdrm_amdgpu as well for kernel driver. 189*7688df22SAndroid Build Coastguard Worker * 190*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_set_metadata(), amdgpu_bo_query_info, 191*7688df22SAndroid Build Coastguard Worker * amdgpu_bo_import(), amdgpu_bo_export 192*7688df22SAndroid Build Coastguard Worker * 193*7688df22SAndroid Build Coastguard Worker */ 194*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_metadata { 195*7688df22SAndroid Build Coastguard Worker /** Special flag associated with surface */ 196*7688df22SAndroid Build Coastguard Worker uint64_t flags; 197*7688df22SAndroid Build Coastguard Worker 198*7688df22SAndroid Build Coastguard Worker /** 199*7688df22SAndroid Build Coastguard Worker * ASIC-specific tiling information (also used by DCE). 200*7688df22SAndroid Build Coastguard Worker * The encoding is defined by the AMDGPU_TILING_* definitions. 201*7688df22SAndroid Build Coastguard Worker */ 202*7688df22SAndroid Build Coastguard Worker uint64_t tiling_info; 203*7688df22SAndroid Build Coastguard Worker 204*7688df22SAndroid Build Coastguard Worker /** Size of metadata associated with the buffer, in bytes. */ 205*7688df22SAndroid Build Coastguard Worker uint32_t size_metadata; 206*7688df22SAndroid Build Coastguard Worker 207*7688df22SAndroid Build Coastguard Worker /** UMD specific metadata. Opaque for kernel */ 208*7688df22SAndroid Build Coastguard Worker uint32_t umd_metadata[64]; 209*7688df22SAndroid Build Coastguard Worker }; 210*7688df22SAndroid Build Coastguard Worker 211*7688df22SAndroid Build Coastguard Worker /** 212*7688df22SAndroid Build Coastguard Worker * Structure describing allocated buffer. Client may need 213*7688df22SAndroid Build Coastguard Worker * to query such information as part of 'sharing' buffers mechanism 214*7688df22SAndroid Build Coastguard Worker * 215*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_set_metadata(), amdgpu_bo_query_info(), 216*7688df22SAndroid Build Coastguard Worker * amdgpu_bo_import(), amdgpu_bo_export() 217*7688df22SAndroid Build Coastguard Worker */ 218*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_info { 219*7688df22SAndroid Build Coastguard Worker /** Allocated memory size */ 220*7688df22SAndroid Build Coastguard Worker uint64_t alloc_size; 221*7688df22SAndroid Build Coastguard Worker 222*7688df22SAndroid Build Coastguard Worker /** 223*7688df22SAndroid Build Coastguard Worker * It may be required to have some specific alignment requirements 224*7688df22SAndroid Build Coastguard Worker * for physical back-up storage. 225*7688df22SAndroid Build Coastguard Worker */ 226*7688df22SAndroid Build Coastguard Worker uint64_t phys_alignment; 227*7688df22SAndroid Build Coastguard Worker 228*7688df22SAndroid Build Coastguard Worker /** Heap where to allocate memory. */ 229*7688df22SAndroid Build Coastguard Worker uint32_t preferred_heap; 230*7688df22SAndroid Build Coastguard Worker 231*7688df22SAndroid Build Coastguard Worker /** Additional allocation flags. */ 232*7688df22SAndroid Build Coastguard Worker uint64_t alloc_flags; 233*7688df22SAndroid Build Coastguard Worker 234*7688df22SAndroid Build Coastguard Worker /** Metadata associated with buffer if any. */ 235*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_metadata metadata; 236*7688df22SAndroid Build Coastguard Worker }; 237*7688df22SAndroid Build Coastguard Worker 238*7688df22SAndroid Build Coastguard Worker /** 239*7688df22SAndroid Build Coastguard Worker * Structure with information about "imported" buffer 240*7688df22SAndroid Build Coastguard Worker * 241*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_import() 242*7688df22SAndroid Build Coastguard Worker * 243*7688df22SAndroid Build Coastguard Worker */ 244*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_import_result { 245*7688df22SAndroid Build Coastguard Worker /** Handle of memory/buffer to use */ 246*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle buf_handle; 247*7688df22SAndroid Build Coastguard Worker 248*7688df22SAndroid Build Coastguard Worker /** Buffer size */ 249*7688df22SAndroid Build Coastguard Worker uint64_t alloc_size; 250*7688df22SAndroid Build Coastguard Worker }; 251*7688df22SAndroid Build Coastguard Worker 252*7688df22SAndroid Build Coastguard Worker /** 253*7688df22SAndroid Build Coastguard Worker * 254*7688df22SAndroid Build Coastguard Worker * Structure to describe GDS partitioning information. 255*7688df22SAndroid Build Coastguard Worker * \note OA and GWS resources are asscoiated with GDS partition 256*7688df22SAndroid Build Coastguard Worker * 257*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_gpu_resource_query_gds_info 258*7688df22SAndroid Build Coastguard Worker * 259*7688df22SAndroid Build Coastguard Worker */ 260*7688df22SAndroid Build Coastguard Worker struct amdgpu_gds_resource_info { 261*7688df22SAndroid Build Coastguard Worker uint32_t gds_gfx_partition_size; 262*7688df22SAndroid Build Coastguard Worker uint32_t compute_partition_size; 263*7688df22SAndroid Build Coastguard Worker uint32_t gds_total_size; 264*7688df22SAndroid Build Coastguard Worker uint32_t gws_per_gfx_partition; 265*7688df22SAndroid Build Coastguard Worker uint32_t gws_per_compute_partition; 266*7688df22SAndroid Build Coastguard Worker uint32_t oa_per_gfx_partition; 267*7688df22SAndroid Build Coastguard Worker uint32_t oa_per_compute_partition; 268*7688df22SAndroid Build Coastguard Worker }; 269*7688df22SAndroid Build Coastguard Worker 270*7688df22SAndroid Build Coastguard Worker /** 271*7688df22SAndroid Build Coastguard Worker * Structure describing CS fence 272*7688df22SAndroid Build Coastguard Worker * 273*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_cs_query_fence_status(), amdgpu_cs_request, amdgpu_cs_submit() 274*7688df22SAndroid Build Coastguard Worker * 275*7688df22SAndroid Build Coastguard Worker */ 276*7688df22SAndroid Build Coastguard Worker struct amdgpu_cs_fence { 277*7688df22SAndroid Build Coastguard Worker 278*7688df22SAndroid Build Coastguard Worker /** In which context IB was sent to execution */ 279*7688df22SAndroid Build Coastguard Worker amdgpu_context_handle context; 280*7688df22SAndroid Build Coastguard Worker 281*7688df22SAndroid Build Coastguard Worker /** To which HW IP type the fence belongs */ 282*7688df22SAndroid Build Coastguard Worker uint32_t ip_type; 283*7688df22SAndroid Build Coastguard Worker 284*7688df22SAndroid Build Coastguard Worker /** IP instance index if there are several IPs of the same type. */ 285*7688df22SAndroid Build Coastguard Worker uint32_t ip_instance; 286*7688df22SAndroid Build Coastguard Worker 287*7688df22SAndroid Build Coastguard Worker /** Ring index of the HW IP */ 288*7688df22SAndroid Build Coastguard Worker uint32_t ring; 289*7688df22SAndroid Build Coastguard Worker 290*7688df22SAndroid Build Coastguard Worker /** Specify fence for which we need to check submission status.*/ 291*7688df22SAndroid Build Coastguard Worker uint64_t fence; 292*7688df22SAndroid Build Coastguard Worker }; 293*7688df22SAndroid Build Coastguard Worker 294*7688df22SAndroid Build Coastguard Worker /** 295*7688df22SAndroid Build Coastguard Worker * Structure describing IB 296*7688df22SAndroid Build Coastguard Worker * 297*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_cs_request, amdgpu_cs_submit() 298*7688df22SAndroid Build Coastguard Worker * 299*7688df22SAndroid Build Coastguard Worker */ 300*7688df22SAndroid Build Coastguard Worker struct amdgpu_cs_ib_info { 301*7688df22SAndroid Build Coastguard Worker /** Special flags */ 302*7688df22SAndroid Build Coastguard Worker uint64_t flags; 303*7688df22SAndroid Build Coastguard Worker 304*7688df22SAndroid Build Coastguard Worker /** Virtual MC address of the command buffer */ 305*7688df22SAndroid Build Coastguard Worker uint64_t ib_mc_address; 306*7688df22SAndroid Build Coastguard Worker 307*7688df22SAndroid Build Coastguard Worker /** 308*7688df22SAndroid Build Coastguard Worker * Size of Command Buffer to be submitted. 309*7688df22SAndroid Build Coastguard Worker * - The size is in units of dwords (4 bytes). 310*7688df22SAndroid Build Coastguard Worker * - Could be 0 311*7688df22SAndroid Build Coastguard Worker */ 312*7688df22SAndroid Build Coastguard Worker uint32_t size; 313*7688df22SAndroid Build Coastguard Worker }; 314*7688df22SAndroid Build Coastguard Worker 315*7688df22SAndroid Build Coastguard Worker /** 316*7688df22SAndroid Build Coastguard Worker * Structure describing fence information 317*7688df22SAndroid Build Coastguard Worker * 318*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_cs_request, amdgpu_cs_query_fence, 319*7688df22SAndroid Build Coastguard Worker * amdgpu_cs_submit(), amdgpu_cs_query_fence_status() 320*7688df22SAndroid Build Coastguard Worker */ 321*7688df22SAndroid Build Coastguard Worker struct amdgpu_cs_fence_info { 322*7688df22SAndroid Build Coastguard Worker /** buffer object for the fence */ 323*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle handle; 324*7688df22SAndroid Build Coastguard Worker 325*7688df22SAndroid Build Coastguard Worker /** fence offset in the unit of sizeof(uint64_t) */ 326*7688df22SAndroid Build Coastguard Worker uint64_t offset; 327*7688df22SAndroid Build Coastguard Worker }; 328*7688df22SAndroid Build Coastguard Worker 329*7688df22SAndroid Build Coastguard Worker /** 330*7688df22SAndroid Build Coastguard Worker * Structure describing submission request 331*7688df22SAndroid Build Coastguard Worker * 332*7688df22SAndroid Build Coastguard Worker * \note We could have several IBs as packet. e.g. CE, CE, DE case for gfx 333*7688df22SAndroid Build Coastguard Worker * 334*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_cs_submit() 335*7688df22SAndroid Build Coastguard Worker */ 336*7688df22SAndroid Build Coastguard Worker struct amdgpu_cs_request { 337*7688df22SAndroid Build Coastguard Worker /** Specify flags with additional information */ 338*7688df22SAndroid Build Coastguard Worker uint64_t flags; 339*7688df22SAndroid Build Coastguard Worker 340*7688df22SAndroid Build Coastguard Worker /** Specify HW IP block type to which to send the IB. */ 341*7688df22SAndroid Build Coastguard Worker unsigned ip_type; 342*7688df22SAndroid Build Coastguard Worker 343*7688df22SAndroid Build Coastguard Worker /** IP instance index if there are several IPs of the same type. */ 344*7688df22SAndroid Build Coastguard Worker unsigned ip_instance; 345*7688df22SAndroid Build Coastguard Worker 346*7688df22SAndroid Build Coastguard Worker /** 347*7688df22SAndroid Build Coastguard Worker * Specify ring index of the IP. We could have several rings 348*7688df22SAndroid Build Coastguard Worker * in the same IP. E.g. 0 for SDMA0 and 1 for SDMA1. 349*7688df22SAndroid Build Coastguard Worker */ 350*7688df22SAndroid Build Coastguard Worker uint32_t ring; 351*7688df22SAndroid Build Coastguard Worker 352*7688df22SAndroid Build Coastguard Worker /** 353*7688df22SAndroid Build Coastguard Worker * List handle with resources used by this request. 354*7688df22SAndroid Build Coastguard Worker */ 355*7688df22SAndroid Build Coastguard Worker amdgpu_bo_list_handle resources; 356*7688df22SAndroid Build Coastguard Worker 357*7688df22SAndroid Build Coastguard Worker /** 358*7688df22SAndroid Build Coastguard Worker * Number of dependencies this Command submission needs to 359*7688df22SAndroid Build Coastguard Worker * wait for before starting execution. 360*7688df22SAndroid Build Coastguard Worker */ 361*7688df22SAndroid Build Coastguard Worker uint32_t number_of_dependencies; 362*7688df22SAndroid Build Coastguard Worker 363*7688df22SAndroid Build Coastguard Worker /** 364*7688df22SAndroid Build Coastguard Worker * Array of dependencies which need to be met before 365*7688df22SAndroid Build Coastguard Worker * execution can start. 366*7688df22SAndroid Build Coastguard Worker */ 367*7688df22SAndroid Build Coastguard Worker struct amdgpu_cs_fence *dependencies; 368*7688df22SAndroid Build Coastguard Worker 369*7688df22SAndroid Build Coastguard Worker /** Number of IBs to submit in the field ibs. */ 370*7688df22SAndroid Build Coastguard Worker uint32_t number_of_ibs; 371*7688df22SAndroid Build Coastguard Worker 372*7688df22SAndroid Build Coastguard Worker /** 373*7688df22SAndroid Build Coastguard Worker * IBs to submit. Those IBs will be submit together as single entity 374*7688df22SAndroid Build Coastguard Worker */ 375*7688df22SAndroid Build Coastguard Worker struct amdgpu_cs_ib_info *ibs; 376*7688df22SAndroid Build Coastguard Worker 377*7688df22SAndroid Build Coastguard Worker /** 378*7688df22SAndroid Build Coastguard Worker * The returned sequence number for the command submission 379*7688df22SAndroid Build Coastguard Worker */ 380*7688df22SAndroid Build Coastguard Worker uint64_t seq_no; 381*7688df22SAndroid Build Coastguard Worker 382*7688df22SAndroid Build Coastguard Worker /** 383*7688df22SAndroid Build Coastguard Worker * The fence information 384*7688df22SAndroid Build Coastguard Worker */ 385*7688df22SAndroid Build Coastguard Worker struct amdgpu_cs_fence_info fence_info; 386*7688df22SAndroid Build Coastguard Worker }; 387*7688df22SAndroid Build Coastguard Worker 388*7688df22SAndroid Build Coastguard Worker /** 389*7688df22SAndroid Build Coastguard Worker * Structure which provide information about GPU VM MC Address space 390*7688df22SAndroid Build Coastguard Worker * alignments requirements 391*7688df22SAndroid Build Coastguard Worker * 392*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_query_buffer_size_alignment 393*7688df22SAndroid Build Coastguard Worker */ 394*7688df22SAndroid Build Coastguard Worker struct amdgpu_buffer_size_alignments { 395*7688df22SAndroid Build Coastguard Worker /** Size alignment requirement for allocation in 396*7688df22SAndroid Build Coastguard Worker * local memory */ 397*7688df22SAndroid Build Coastguard Worker uint64_t size_local; 398*7688df22SAndroid Build Coastguard Worker 399*7688df22SAndroid Build Coastguard Worker /** 400*7688df22SAndroid Build Coastguard Worker * Size alignment requirement for allocation in remote memory 401*7688df22SAndroid Build Coastguard Worker */ 402*7688df22SAndroid Build Coastguard Worker uint64_t size_remote; 403*7688df22SAndroid Build Coastguard Worker }; 404*7688df22SAndroid Build Coastguard Worker 405*7688df22SAndroid Build Coastguard Worker /** 406*7688df22SAndroid Build Coastguard Worker * Structure which provide information about heap 407*7688df22SAndroid Build Coastguard Worker * 408*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_query_heap_info() 409*7688df22SAndroid Build Coastguard Worker * 410*7688df22SAndroid Build Coastguard Worker */ 411*7688df22SAndroid Build Coastguard Worker struct amdgpu_heap_info { 412*7688df22SAndroid Build Coastguard Worker /** Theoretical max. available memory in the given heap */ 413*7688df22SAndroid Build Coastguard Worker uint64_t heap_size; 414*7688df22SAndroid Build Coastguard Worker 415*7688df22SAndroid Build Coastguard Worker /** 416*7688df22SAndroid Build Coastguard Worker * Number of bytes allocated in the heap. This includes all processes 417*7688df22SAndroid Build Coastguard Worker * and private allocations in the kernel. It changes when new buffers 418*7688df22SAndroid Build Coastguard Worker * are allocated, freed, and moved. It cannot be larger than 419*7688df22SAndroid Build Coastguard Worker * heap_size. 420*7688df22SAndroid Build Coastguard Worker */ 421*7688df22SAndroid Build Coastguard Worker uint64_t heap_usage; 422*7688df22SAndroid Build Coastguard Worker 423*7688df22SAndroid Build Coastguard Worker /** 424*7688df22SAndroid Build Coastguard Worker * Theoretical possible max. size of buffer which 425*7688df22SAndroid Build Coastguard Worker * could be allocated in the given heap 426*7688df22SAndroid Build Coastguard Worker */ 427*7688df22SAndroid Build Coastguard Worker uint64_t max_allocation; 428*7688df22SAndroid Build Coastguard Worker }; 429*7688df22SAndroid Build Coastguard Worker 430*7688df22SAndroid Build Coastguard Worker /** 431*7688df22SAndroid Build Coastguard Worker * Describe GPU h/w info needed for UMD correct initialization 432*7688df22SAndroid Build Coastguard Worker * 433*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_query_gpu_info() 434*7688df22SAndroid Build Coastguard Worker */ 435*7688df22SAndroid Build Coastguard Worker struct amdgpu_gpu_info { 436*7688df22SAndroid Build Coastguard Worker /** Asic id */ 437*7688df22SAndroid Build Coastguard Worker uint32_t asic_id; 438*7688df22SAndroid Build Coastguard Worker /** Chip revision */ 439*7688df22SAndroid Build Coastguard Worker uint32_t chip_rev; 440*7688df22SAndroid Build Coastguard Worker /** Chip external revision */ 441*7688df22SAndroid Build Coastguard Worker uint32_t chip_external_rev; 442*7688df22SAndroid Build Coastguard Worker /** Family ID */ 443*7688df22SAndroid Build Coastguard Worker uint32_t family_id; 444*7688df22SAndroid Build Coastguard Worker /** Special flags */ 445*7688df22SAndroid Build Coastguard Worker uint64_t ids_flags; 446*7688df22SAndroid Build Coastguard Worker /** max engine clock*/ 447*7688df22SAndroid Build Coastguard Worker uint64_t max_engine_clk; 448*7688df22SAndroid Build Coastguard Worker /** max memory clock */ 449*7688df22SAndroid Build Coastguard Worker uint64_t max_memory_clk; 450*7688df22SAndroid Build Coastguard Worker /** number of shader engines */ 451*7688df22SAndroid Build Coastguard Worker uint32_t num_shader_engines; 452*7688df22SAndroid Build Coastguard Worker /** number of shader arrays per engine */ 453*7688df22SAndroid Build Coastguard Worker uint32_t num_shader_arrays_per_engine; 454*7688df22SAndroid Build Coastguard Worker /** Number of available good shader pipes */ 455*7688df22SAndroid Build Coastguard Worker uint32_t avail_quad_shader_pipes; 456*7688df22SAndroid Build Coastguard Worker /** Max. number of shader pipes.(including good and bad pipes */ 457*7688df22SAndroid Build Coastguard Worker uint32_t max_quad_shader_pipes; 458*7688df22SAndroid Build Coastguard Worker /** Number of parameter cache entries per shader quad pipe */ 459*7688df22SAndroid Build Coastguard Worker uint32_t cache_entries_per_quad_pipe; 460*7688df22SAndroid Build Coastguard Worker /** Number of available graphics context */ 461*7688df22SAndroid Build Coastguard Worker uint32_t num_hw_gfx_contexts; 462*7688df22SAndroid Build Coastguard Worker /** Number of render backend pipes */ 463*7688df22SAndroid Build Coastguard Worker uint32_t rb_pipes; 464*7688df22SAndroid Build Coastguard Worker /** Enabled render backend pipe mask */ 465*7688df22SAndroid Build Coastguard Worker uint32_t enabled_rb_pipes_mask; 466*7688df22SAndroid Build Coastguard Worker /** Frequency of GPU Counter */ 467*7688df22SAndroid Build Coastguard Worker uint32_t gpu_counter_freq; 468*7688df22SAndroid Build Coastguard Worker /** CC_RB_BACKEND_DISABLE.BACKEND_DISABLE per SE */ 469*7688df22SAndroid Build Coastguard Worker uint32_t backend_disable[4]; 470*7688df22SAndroid Build Coastguard Worker /** Value of MC_ARB_RAMCFG register*/ 471*7688df22SAndroid Build Coastguard Worker uint32_t mc_arb_ramcfg; 472*7688df22SAndroid Build Coastguard Worker /** Value of GB_ADDR_CONFIG */ 473*7688df22SAndroid Build Coastguard Worker uint32_t gb_addr_cfg; 474*7688df22SAndroid Build Coastguard Worker /** Values of the GB_TILE_MODE0..31 registers */ 475*7688df22SAndroid Build Coastguard Worker uint32_t gb_tile_mode[32]; 476*7688df22SAndroid Build Coastguard Worker /** Values of GB_MACROTILE_MODE0..15 registers */ 477*7688df22SAndroid Build Coastguard Worker uint32_t gb_macro_tile_mode[16]; 478*7688df22SAndroid Build Coastguard Worker /** Value of PA_SC_RASTER_CONFIG register per SE */ 479*7688df22SAndroid Build Coastguard Worker uint32_t pa_sc_raster_cfg[4]; 480*7688df22SAndroid Build Coastguard Worker /** Value of PA_SC_RASTER_CONFIG_1 register per SE */ 481*7688df22SAndroid Build Coastguard Worker uint32_t pa_sc_raster_cfg1[4]; 482*7688df22SAndroid Build Coastguard Worker /* CU info */ 483*7688df22SAndroid Build Coastguard Worker uint32_t cu_active_number; 484*7688df22SAndroid Build Coastguard Worker uint32_t cu_ao_mask; 485*7688df22SAndroid Build Coastguard Worker uint32_t cu_bitmap[4][4]; 486*7688df22SAndroid Build Coastguard Worker /* video memory type info*/ 487*7688df22SAndroid Build Coastguard Worker uint32_t vram_type; 488*7688df22SAndroid Build Coastguard Worker /* video memory bit width*/ 489*7688df22SAndroid Build Coastguard Worker uint32_t vram_bit_width; 490*7688df22SAndroid Build Coastguard Worker /** constant engine ram size*/ 491*7688df22SAndroid Build Coastguard Worker uint32_t ce_ram_size; 492*7688df22SAndroid Build Coastguard Worker /* vce harvesting instance */ 493*7688df22SAndroid Build Coastguard Worker uint32_t vce_harvest_config; 494*7688df22SAndroid Build Coastguard Worker /* PCI revision ID */ 495*7688df22SAndroid Build Coastguard Worker uint32_t pci_rev_id; 496*7688df22SAndroid Build Coastguard Worker }; 497*7688df22SAndroid Build Coastguard Worker 498*7688df22SAndroid Build Coastguard Worker 499*7688df22SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------*/ 500*7688df22SAndroid Build Coastguard Worker /*------------------------- Functions --------------------------------------*/ 501*7688df22SAndroid Build Coastguard Worker /*--------------------------------------------------------------------------*/ 502*7688df22SAndroid Build Coastguard Worker 503*7688df22SAndroid Build Coastguard Worker /* 504*7688df22SAndroid Build Coastguard Worker * Initialization / Cleanup 505*7688df22SAndroid Build Coastguard Worker * 506*7688df22SAndroid Build Coastguard Worker */ 507*7688df22SAndroid Build Coastguard Worker 508*7688df22SAndroid Build Coastguard Worker /** 509*7688df22SAndroid Build Coastguard Worker * 510*7688df22SAndroid Build Coastguard Worker * \param fd - \c [in] File descriptor for AMD GPU device 511*7688df22SAndroid Build Coastguard Worker * received previously as the result of 512*7688df22SAndroid Build Coastguard Worker * e.g. drmOpen() call. 513*7688df22SAndroid Build Coastguard Worker * For legacy fd type, the DRI2/DRI3 514*7688df22SAndroid Build Coastguard Worker * authentication should be done before 515*7688df22SAndroid Build Coastguard Worker * calling this function. 516*7688df22SAndroid Build Coastguard Worker * \param major_version - \c [out] Major version of library. It is assumed 517*7688df22SAndroid Build Coastguard Worker * that adding new functionality will cause 518*7688df22SAndroid Build Coastguard Worker * increase in major version 519*7688df22SAndroid Build Coastguard Worker * \param minor_version - \c [out] Minor version of library 520*7688df22SAndroid Build Coastguard Worker * \param device_handle - \c [out] Pointer to opaque context which should 521*7688df22SAndroid Build Coastguard Worker * be passed as the first parameter on each 522*7688df22SAndroid Build Coastguard Worker * API call 523*7688df22SAndroid Build Coastguard Worker * 524*7688df22SAndroid Build Coastguard Worker * 525*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 526*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 527*7688df22SAndroid Build Coastguard Worker * 528*7688df22SAndroid Build Coastguard Worker * 529*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_device_deinitialize() 530*7688df22SAndroid Build Coastguard Worker */ 531*7688df22SAndroid Build Coastguard Worker int amdgpu_device_initialize(int fd, 532*7688df22SAndroid Build Coastguard Worker uint32_t *major_version, 533*7688df22SAndroid Build Coastguard Worker uint32_t *minor_version, 534*7688df22SAndroid Build Coastguard Worker amdgpu_device_handle *device_handle); 535*7688df22SAndroid Build Coastguard Worker 536*7688df22SAndroid Build Coastguard Worker /** 537*7688df22SAndroid Build Coastguard Worker * Same as amdgpu_device_initialize() except when deduplicate_device 538*7688df22SAndroid Build Coastguard Worker * is false *and* fd points to a device that was already initialized. 539*7688df22SAndroid Build Coastguard Worker * In this case, amdgpu_device_initialize would return the same 540*7688df22SAndroid Build Coastguard Worker * amdgpu_device_handle while here amdgpu_device_initialize2 would 541*7688df22SAndroid Build Coastguard Worker * return a new handle. 542*7688df22SAndroid Build Coastguard Worker * amdgpu_device_initialize() should be preferred in most situations; 543*7688df22SAndroid Build Coastguard Worker * the only use-case where not-deduplicating devices make sense is 544*7688df22SAndroid Build Coastguard Worker * when one wants to have isolated device handles in the same process. 545*7688df22SAndroid Build Coastguard Worker */ 546*7688df22SAndroid Build Coastguard Worker int amdgpu_device_initialize2(int fd, bool deduplicate_device, 547*7688df22SAndroid Build Coastguard Worker uint32_t *major_version, 548*7688df22SAndroid Build Coastguard Worker uint32_t *minor_version, 549*7688df22SAndroid Build Coastguard Worker amdgpu_device_handle *device_handle); 550*7688df22SAndroid Build Coastguard Worker /** 551*7688df22SAndroid Build Coastguard Worker * 552*7688df22SAndroid Build Coastguard Worker * When access to such library does not needed any more the special 553*7688df22SAndroid Build Coastguard Worker * function must be call giving opportunity to clean up any 554*7688df22SAndroid Build Coastguard Worker * resources if needed. 555*7688df22SAndroid Build Coastguard Worker * 556*7688df22SAndroid Build Coastguard Worker * \param device_handle - \c [in] Context associated with file 557*7688df22SAndroid Build Coastguard Worker * descriptor for AMD GPU device 558*7688df22SAndroid Build Coastguard Worker * received previously as the 559*7688df22SAndroid Build Coastguard Worker * result e.g. of drmOpen() call. 560*7688df22SAndroid Build Coastguard Worker * 561*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 562*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 563*7688df22SAndroid Build Coastguard Worker * 564*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_device_initialize() 565*7688df22SAndroid Build Coastguard Worker * 566*7688df22SAndroid Build Coastguard Worker */ 567*7688df22SAndroid Build Coastguard Worker int amdgpu_device_deinitialize(amdgpu_device_handle device_handle); 568*7688df22SAndroid Build Coastguard Worker 569*7688df22SAndroid Build Coastguard Worker /** 570*7688df22SAndroid Build Coastguard Worker * 571*7688df22SAndroid Build Coastguard Worker * /param device_handle - \c [in] Device handle. 572*7688df22SAndroid Build Coastguard Worker * See #amdgpu_device_initialize() 573*7688df22SAndroid Build Coastguard Worker * 574*7688df22SAndroid Build Coastguard Worker * \return Returns the drm fd used for operations on this 575*7688df22SAndroid Build Coastguard Worker * device. This is still owned by the library and hence 576*7688df22SAndroid Build Coastguard Worker * should not be closed. Guaranteed to be valid until 577*7688df22SAndroid Build Coastguard Worker * #amdgpu_device_deinitialize gets called. 578*7688df22SAndroid Build Coastguard Worker * 579*7688df22SAndroid Build Coastguard Worker */ 580*7688df22SAndroid Build Coastguard Worker int amdgpu_device_get_fd(amdgpu_device_handle device_handle); 581*7688df22SAndroid Build Coastguard Worker 582*7688df22SAndroid Build Coastguard Worker /* 583*7688df22SAndroid Build Coastguard Worker * Memory Management 584*7688df22SAndroid Build Coastguard Worker * 585*7688df22SAndroid Build Coastguard Worker */ 586*7688df22SAndroid Build Coastguard Worker 587*7688df22SAndroid Build Coastguard Worker /** 588*7688df22SAndroid Build Coastguard Worker * Allocate memory to be used by UMD for GPU related operations 589*7688df22SAndroid Build Coastguard Worker * 590*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. 591*7688df22SAndroid Build Coastguard Worker * See #amdgpu_device_initialize() 592*7688df22SAndroid Build Coastguard Worker * \param alloc_buffer - \c [in] Pointer to the structure describing an 593*7688df22SAndroid Build Coastguard Worker * allocation request 594*7688df22SAndroid Build Coastguard Worker * \param buf_handle - \c [out] Allocated buffer handle 595*7688df22SAndroid Build Coastguard Worker * 596*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 597*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 598*7688df22SAndroid Build Coastguard Worker * 599*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_free() 600*7688df22SAndroid Build Coastguard Worker */ 601*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_alloc(amdgpu_device_handle dev, 602*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_alloc_request *alloc_buffer, 603*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle *buf_handle); 604*7688df22SAndroid Build Coastguard Worker 605*7688df22SAndroid Build Coastguard Worker /** 606*7688df22SAndroid Build Coastguard Worker * Associate opaque data with buffer to be queried by another UMD 607*7688df22SAndroid Build Coastguard Worker * 608*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 609*7688df22SAndroid Build Coastguard Worker * \param buf_handle - \c [in] Buffer handle 610*7688df22SAndroid Build Coastguard Worker * \param info - \c [in] Metadata to associated with buffer 611*7688df22SAndroid Build Coastguard Worker * 612*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 613*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 614*7688df22SAndroid Build Coastguard Worker */ 615*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_set_metadata(amdgpu_bo_handle buf_handle, 616*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_metadata *info); 617*7688df22SAndroid Build Coastguard Worker 618*7688df22SAndroid Build Coastguard Worker /** 619*7688df22SAndroid Build Coastguard Worker * Query buffer information including metadata previusly associated with 620*7688df22SAndroid Build Coastguard Worker * buffer. 621*7688df22SAndroid Build Coastguard Worker * 622*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. 623*7688df22SAndroid Build Coastguard Worker * See #amdgpu_device_initialize() 624*7688df22SAndroid Build Coastguard Worker * \param buf_handle - \c [in] Buffer handle 625*7688df22SAndroid Build Coastguard Worker * \param info - \c [out] Structure describing buffer 626*7688df22SAndroid Build Coastguard Worker * 627*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 628*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 629*7688df22SAndroid Build Coastguard Worker * 630*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_set_metadata(), amdgpu_bo_alloc() 631*7688df22SAndroid Build Coastguard Worker */ 632*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_query_info(amdgpu_bo_handle buf_handle, 633*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_info *info); 634*7688df22SAndroid Build Coastguard Worker 635*7688df22SAndroid Build Coastguard Worker /** 636*7688df22SAndroid Build Coastguard Worker * Allow others to get access to buffer 637*7688df22SAndroid Build Coastguard Worker * 638*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. 639*7688df22SAndroid Build Coastguard Worker * See #amdgpu_device_initialize() 640*7688df22SAndroid Build Coastguard Worker * \param buf_handle - \c [in] Buffer handle 641*7688df22SAndroid Build Coastguard Worker * \param type - \c [in] Type of handle requested 642*7688df22SAndroid Build Coastguard Worker * \param shared_handle - \c [out] Special "shared" handle 643*7688df22SAndroid Build Coastguard Worker * 644*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 645*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 646*7688df22SAndroid Build Coastguard Worker * 647*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_import() 648*7688df22SAndroid Build Coastguard Worker * 649*7688df22SAndroid Build Coastguard Worker */ 650*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_export(amdgpu_bo_handle buf_handle, 651*7688df22SAndroid Build Coastguard Worker enum amdgpu_bo_handle_type type, 652*7688df22SAndroid Build Coastguard Worker uint32_t *shared_handle); 653*7688df22SAndroid Build Coastguard Worker 654*7688df22SAndroid Build Coastguard Worker /** 655*7688df22SAndroid Build Coastguard Worker * Request access to "shared" buffer 656*7688df22SAndroid Build Coastguard Worker * 657*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. 658*7688df22SAndroid Build Coastguard Worker * See #amdgpu_device_initialize() 659*7688df22SAndroid Build Coastguard Worker * \param type - \c [in] Type of handle requested 660*7688df22SAndroid Build Coastguard Worker * \param shared_handle - \c [in] Shared handle received as result "import" 661*7688df22SAndroid Build Coastguard Worker * operation 662*7688df22SAndroid Build Coastguard Worker * \param output - \c [out] Pointer to structure with information 663*7688df22SAndroid Build Coastguard Worker * about imported buffer 664*7688df22SAndroid Build Coastguard Worker * 665*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 666*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 667*7688df22SAndroid Build Coastguard Worker * 668*7688df22SAndroid Build Coastguard Worker * \note Buffer must be "imported" only using new "fd" (different from 669*7688df22SAndroid Build Coastguard Worker * one used by "exporter"). 670*7688df22SAndroid Build Coastguard Worker * 671*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_export() 672*7688df22SAndroid Build Coastguard Worker * 673*7688df22SAndroid Build Coastguard Worker */ 674*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_import(amdgpu_device_handle dev, 675*7688df22SAndroid Build Coastguard Worker enum amdgpu_bo_handle_type type, 676*7688df22SAndroid Build Coastguard Worker uint32_t shared_handle, 677*7688df22SAndroid Build Coastguard Worker struct amdgpu_bo_import_result *output); 678*7688df22SAndroid Build Coastguard Worker 679*7688df22SAndroid Build Coastguard Worker /** 680*7688df22SAndroid Build Coastguard Worker * Request GPU access to user allocated memory e.g. via "malloc" 681*7688df22SAndroid Build Coastguard Worker * 682*7688df22SAndroid Build Coastguard Worker * \param dev - [in] Device handle. See #amdgpu_device_initialize() 683*7688df22SAndroid Build Coastguard Worker * \param cpu - [in] CPU address of user allocated memory which we 684*7688df22SAndroid Build Coastguard Worker * want to map to GPU address space (make GPU accessible) 685*7688df22SAndroid Build Coastguard Worker * (This address must be correctly aligned). 686*7688df22SAndroid Build Coastguard Worker * \param size - [in] Size of allocation (must be correctly aligned) 687*7688df22SAndroid Build Coastguard Worker * \param buf_handle - [out] Buffer handle for the userptr memory 688*7688df22SAndroid Build Coastguard Worker * resource on submission and be used in other operations. 689*7688df22SAndroid Build Coastguard Worker * 690*7688df22SAndroid Build Coastguard Worker * 691*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 692*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 693*7688df22SAndroid Build Coastguard Worker * 694*7688df22SAndroid Build Coastguard Worker * \note 695*7688df22SAndroid Build Coastguard Worker * This call doesn't guarantee that such memory will be persistently 696*7688df22SAndroid Build Coastguard Worker * "locked" / make non-pageable. The purpose of this call is to provide 697*7688df22SAndroid Build Coastguard Worker * opportunity for GPU get access to this resource during submission. 698*7688df22SAndroid Build Coastguard Worker * 699*7688df22SAndroid Build Coastguard Worker * The maximum amount of memory which could be mapped in this call depends 700*7688df22SAndroid Build Coastguard Worker * if overcommit is disabled or not. If overcommit is disabled than the max. 701*7688df22SAndroid Build Coastguard Worker * amount of memory to be pinned will be limited by left "free" size in total 702*7688df22SAndroid Build Coastguard Worker * amount of memory which could be locked simultaneously ("GART" size). 703*7688df22SAndroid Build Coastguard Worker * 704*7688df22SAndroid Build Coastguard Worker * Supported (theoretical) max. size of mapping is restricted only by 705*7688df22SAndroid Build Coastguard Worker * "GART" size. 706*7688df22SAndroid Build Coastguard Worker * 707*7688df22SAndroid Build Coastguard Worker * It is responsibility of caller to correctly specify access rights 708*7688df22SAndroid Build Coastguard Worker * on VA assignment. 709*7688df22SAndroid Build Coastguard Worker */ 710*7688df22SAndroid Build Coastguard Worker int amdgpu_create_bo_from_user_mem(amdgpu_device_handle dev, 711*7688df22SAndroid Build Coastguard Worker void *cpu, uint64_t size, 712*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle *buf_handle); 713*7688df22SAndroid Build Coastguard Worker 714*7688df22SAndroid Build Coastguard Worker /** 715*7688df22SAndroid Build Coastguard Worker * Validate if the user memory comes from BO 716*7688df22SAndroid Build Coastguard Worker * 717*7688df22SAndroid Build Coastguard Worker * \param dev - [in] Device handle. See #amdgpu_device_initialize() 718*7688df22SAndroid Build Coastguard Worker * \param cpu - [in] CPU address of user allocated memory which we 719*7688df22SAndroid Build Coastguard Worker * want to map to GPU address space (make GPU accessible) 720*7688df22SAndroid Build Coastguard Worker * (This address must be correctly aligned). 721*7688df22SAndroid Build Coastguard Worker * \param size - [in] Size of allocation (must be correctly aligned) 722*7688df22SAndroid Build Coastguard Worker * \param buf_handle - [out] Buffer handle for the userptr memory 723*7688df22SAndroid Build Coastguard Worker * if the user memory is not from BO, the buf_handle will be NULL. 724*7688df22SAndroid Build Coastguard Worker * \param offset_in_bo - [out] offset in this BO for this user memory 725*7688df22SAndroid Build Coastguard Worker * 726*7688df22SAndroid Build Coastguard Worker * 727*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 728*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 729*7688df22SAndroid Build Coastguard Worker * 730*7688df22SAndroid Build Coastguard Worker */ 731*7688df22SAndroid Build Coastguard Worker int amdgpu_find_bo_by_cpu_mapping(amdgpu_device_handle dev, 732*7688df22SAndroid Build Coastguard Worker void *cpu, 733*7688df22SAndroid Build Coastguard Worker uint64_t size, 734*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle *buf_handle, 735*7688df22SAndroid Build Coastguard Worker uint64_t *offset_in_bo); 736*7688df22SAndroid Build Coastguard Worker 737*7688df22SAndroid Build Coastguard Worker /** 738*7688df22SAndroid Build Coastguard Worker * Free previously allocated memory 739*7688df22SAndroid Build Coastguard Worker * 740*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 741*7688df22SAndroid Build Coastguard Worker * \param buf_handle - \c [in] Buffer handle to free 742*7688df22SAndroid Build Coastguard Worker * 743*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 744*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 745*7688df22SAndroid Build Coastguard Worker * 746*7688df22SAndroid Build Coastguard Worker * \note In the case of memory shared between different applications all 747*7688df22SAndroid Build Coastguard Worker * resources will be “physically” freed only all such applications 748*7688df22SAndroid Build Coastguard Worker * will be terminated 749*7688df22SAndroid Build Coastguard Worker * \note If is UMD responsibility to ‘free’ buffer only when there is no 750*7688df22SAndroid Build Coastguard Worker * more GPU access 751*7688df22SAndroid Build Coastguard Worker * 752*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_set_metadata(), amdgpu_bo_alloc() 753*7688df22SAndroid Build Coastguard Worker * 754*7688df22SAndroid Build Coastguard Worker */ 755*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_free(amdgpu_bo_handle buf_handle); 756*7688df22SAndroid Build Coastguard Worker 757*7688df22SAndroid Build Coastguard Worker /** 758*7688df22SAndroid Build Coastguard Worker * Increase the reference count of a buffer object 759*7688df22SAndroid Build Coastguard Worker * 760*7688df22SAndroid Build Coastguard Worker * \param bo - \c [in] Buffer object handle to increase the reference count 761*7688df22SAndroid Build Coastguard Worker * 762*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_alloc(), amdgpu_bo_free() 763*7688df22SAndroid Build Coastguard Worker * 764*7688df22SAndroid Build Coastguard Worker */ 765*7688df22SAndroid Build Coastguard Worker void amdgpu_bo_inc_ref(amdgpu_bo_handle bo); 766*7688df22SAndroid Build Coastguard Worker 767*7688df22SAndroid Build Coastguard Worker /** 768*7688df22SAndroid Build Coastguard Worker * Request CPU access to GPU accessible memory 769*7688df22SAndroid Build Coastguard Worker * 770*7688df22SAndroid Build Coastguard Worker * \param buf_handle - \c [in] Buffer handle 771*7688df22SAndroid Build Coastguard Worker * \param cpu - \c [out] CPU address to be used for access 772*7688df22SAndroid Build Coastguard Worker * 773*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 774*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 775*7688df22SAndroid Build Coastguard Worker * 776*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_cpu_unmap() 777*7688df22SAndroid Build Coastguard Worker * 778*7688df22SAndroid Build Coastguard Worker */ 779*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_cpu_map(amdgpu_bo_handle buf_handle, void **cpu); 780*7688df22SAndroid Build Coastguard Worker 781*7688df22SAndroid Build Coastguard Worker /** 782*7688df22SAndroid Build Coastguard Worker * Release CPU access to GPU memory 783*7688df22SAndroid Build Coastguard Worker * 784*7688df22SAndroid Build Coastguard Worker * \param buf_handle - \c [in] Buffer handle 785*7688df22SAndroid Build Coastguard Worker * 786*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 787*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 788*7688df22SAndroid Build Coastguard Worker * 789*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_cpu_map() 790*7688df22SAndroid Build Coastguard Worker * 791*7688df22SAndroid Build Coastguard Worker */ 792*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_cpu_unmap(amdgpu_bo_handle buf_handle); 793*7688df22SAndroid Build Coastguard Worker 794*7688df22SAndroid Build Coastguard Worker /** 795*7688df22SAndroid Build Coastguard Worker * Wait until a buffer is not used by the device. 796*7688df22SAndroid Build Coastguard Worker * 797*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 798*7688df22SAndroid Build Coastguard Worker * \param buf_handle - \c [in] Buffer handle. 799*7688df22SAndroid Build Coastguard Worker * \param timeout_ns - Timeout in nanoseconds. 800*7688df22SAndroid Build Coastguard Worker * \param buffer_busy - 0 if buffer is idle, all GPU access was completed 801*7688df22SAndroid Build Coastguard Worker * and no GPU access is scheduled. 802*7688df22SAndroid Build Coastguard Worker * 1 GPU access is in fly or scheduled 803*7688df22SAndroid Build Coastguard Worker * 804*7688df22SAndroid Build Coastguard Worker * \return 0 - on success 805*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 806*7688df22SAndroid Build Coastguard Worker */ 807*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_wait_for_idle(amdgpu_bo_handle buf_handle, 808*7688df22SAndroid Build Coastguard Worker uint64_t timeout_ns, 809*7688df22SAndroid Build Coastguard Worker bool *buffer_busy); 810*7688df22SAndroid Build Coastguard Worker 811*7688df22SAndroid Build Coastguard Worker /** 812*7688df22SAndroid Build Coastguard Worker * Creates a BO list handle for command submission. 813*7688df22SAndroid Build Coastguard Worker * 814*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. 815*7688df22SAndroid Build Coastguard Worker * See #amdgpu_device_initialize() 816*7688df22SAndroid Build Coastguard Worker * \param number_of_buffers - \c [in] Number of BOs in the list 817*7688df22SAndroid Build Coastguard Worker * \param buffers - \c [in] List of BO handles 818*7688df22SAndroid Build Coastguard Worker * \param result - \c [out] Created BO list handle 819*7688df22SAndroid Build Coastguard Worker * 820*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 821*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 822*7688df22SAndroid Build Coastguard Worker * 823*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_list_destroy_raw(), amdgpu_cs_submit_raw2() 824*7688df22SAndroid Build Coastguard Worker */ 825*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_list_create_raw(amdgpu_device_handle dev, 826*7688df22SAndroid Build Coastguard Worker uint32_t number_of_buffers, 827*7688df22SAndroid Build Coastguard Worker struct drm_amdgpu_bo_list_entry *buffers, 828*7688df22SAndroid Build Coastguard Worker uint32_t *result); 829*7688df22SAndroid Build Coastguard Worker 830*7688df22SAndroid Build Coastguard Worker /** 831*7688df22SAndroid Build Coastguard Worker * Destroys a BO list handle. 832*7688df22SAndroid Build Coastguard Worker * 833*7688df22SAndroid Build Coastguard Worker * \param bo_list - \c [in] BO list handle. 834*7688df22SAndroid Build Coastguard Worker * 835*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 836*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 837*7688df22SAndroid Build Coastguard Worker * 838*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_list_create_raw(), amdgpu_cs_submit_raw2() 839*7688df22SAndroid Build Coastguard Worker */ 840*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_list_destroy_raw(amdgpu_device_handle dev, uint32_t bo_list); 841*7688df22SAndroid Build Coastguard Worker 842*7688df22SAndroid Build Coastguard Worker /** 843*7688df22SAndroid Build Coastguard Worker * Creates a BO list handle for command submission. 844*7688df22SAndroid Build Coastguard Worker * 845*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. 846*7688df22SAndroid Build Coastguard Worker * See #amdgpu_device_initialize() 847*7688df22SAndroid Build Coastguard Worker * \param number_of_resources - \c [in] Number of BOs in the list 848*7688df22SAndroid Build Coastguard Worker * \param resources - \c [in] List of BO handles 849*7688df22SAndroid Build Coastguard Worker * \param resource_prios - \c [in] Optional priority for each handle 850*7688df22SAndroid Build Coastguard Worker * \param result - \c [out] Created BO list handle 851*7688df22SAndroid Build Coastguard Worker * 852*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 853*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 854*7688df22SAndroid Build Coastguard Worker * 855*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_list_destroy() 856*7688df22SAndroid Build Coastguard Worker */ 857*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_list_create(amdgpu_device_handle dev, 858*7688df22SAndroid Build Coastguard Worker uint32_t number_of_resources, 859*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle *resources, 860*7688df22SAndroid Build Coastguard Worker uint8_t *resource_prios, 861*7688df22SAndroid Build Coastguard Worker amdgpu_bo_list_handle *result); 862*7688df22SAndroid Build Coastguard Worker 863*7688df22SAndroid Build Coastguard Worker /** 864*7688df22SAndroid Build Coastguard Worker * Destroys a BO list handle. 865*7688df22SAndroid Build Coastguard Worker * 866*7688df22SAndroid Build Coastguard Worker * \param handle - \c [in] BO list handle. 867*7688df22SAndroid Build Coastguard Worker * 868*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 869*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 870*7688df22SAndroid Build Coastguard Worker * 871*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_list_create() 872*7688df22SAndroid Build Coastguard Worker */ 873*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_list_destroy(amdgpu_bo_list_handle handle); 874*7688df22SAndroid Build Coastguard Worker 875*7688df22SAndroid Build Coastguard Worker /** 876*7688df22SAndroid Build Coastguard Worker * Update resources for existing BO list 877*7688df22SAndroid Build Coastguard Worker * 878*7688df22SAndroid Build Coastguard Worker * \param handle - \c [in] BO list handle 879*7688df22SAndroid Build Coastguard Worker * \param number_of_resources - \c [in] Number of BOs in the list 880*7688df22SAndroid Build Coastguard Worker * \param resources - \c [in] List of BO handles 881*7688df22SAndroid Build Coastguard Worker * \param resource_prios - \c [in] Optional priority for each handle 882*7688df22SAndroid Build Coastguard Worker * 883*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 884*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 885*7688df22SAndroid Build Coastguard Worker * 886*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_list_update() 887*7688df22SAndroid Build Coastguard Worker */ 888*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_list_update(amdgpu_bo_list_handle handle, 889*7688df22SAndroid Build Coastguard Worker uint32_t number_of_resources, 890*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle *resources, 891*7688df22SAndroid Build Coastguard Worker uint8_t *resource_prios); 892*7688df22SAndroid Build Coastguard Worker 893*7688df22SAndroid Build Coastguard Worker /* 894*7688df22SAndroid Build Coastguard Worker * GPU Execution context 895*7688df22SAndroid Build Coastguard Worker * 896*7688df22SAndroid Build Coastguard Worker */ 897*7688df22SAndroid Build Coastguard Worker 898*7688df22SAndroid Build Coastguard Worker /** 899*7688df22SAndroid Build Coastguard Worker * Create GPU execution Context 900*7688df22SAndroid Build Coastguard Worker * 901*7688df22SAndroid Build Coastguard Worker * For the purpose of GPU Scheduler and GPU Robustness extensions it is 902*7688df22SAndroid Build Coastguard Worker * necessary to have information/identify rendering/compute contexts. 903*7688df22SAndroid Build Coastguard Worker * It also may be needed to associate some specific requirements with such 904*7688df22SAndroid Build Coastguard Worker * contexts. Kernel driver will guarantee that submission from the same 905*7688df22SAndroid Build Coastguard Worker * context will always be executed in order (first come, first serve). 906*7688df22SAndroid Build Coastguard Worker * 907*7688df22SAndroid Build Coastguard Worker * 908*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 909*7688df22SAndroid Build Coastguard Worker * \param priority - \c [in] Context creation flags. See AMDGPU_CTX_PRIORITY_* 910*7688df22SAndroid Build Coastguard Worker * \param context - \c [out] GPU Context handle 911*7688df22SAndroid Build Coastguard Worker * 912*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 913*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 914*7688df22SAndroid Build Coastguard Worker * 915*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_cs_ctx_free() 916*7688df22SAndroid Build Coastguard Worker * 917*7688df22SAndroid Build Coastguard Worker */ 918*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_ctx_create2(amdgpu_device_handle dev, 919*7688df22SAndroid Build Coastguard Worker uint32_t priority, 920*7688df22SAndroid Build Coastguard Worker amdgpu_context_handle *context); 921*7688df22SAndroid Build Coastguard Worker /** 922*7688df22SAndroid Build Coastguard Worker * Create GPU execution Context 923*7688df22SAndroid Build Coastguard Worker * 924*7688df22SAndroid Build Coastguard Worker * Refer to amdgpu_cs_ctx_create2 for full documentation. This call 925*7688df22SAndroid Build Coastguard Worker * is missing the priority parameter. 926*7688df22SAndroid Build Coastguard Worker * 927*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_cs_ctx_create2() 928*7688df22SAndroid Build Coastguard Worker * 929*7688df22SAndroid Build Coastguard Worker */ 930*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_ctx_create(amdgpu_device_handle dev, 931*7688df22SAndroid Build Coastguard Worker amdgpu_context_handle *context); 932*7688df22SAndroid Build Coastguard Worker 933*7688df22SAndroid Build Coastguard Worker /** 934*7688df22SAndroid Build Coastguard Worker * 935*7688df22SAndroid Build Coastguard Worker * Destroy GPU execution context when not needed any more 936*7688df22SAndroid Build Coastguard Worker * 937*7688df22SAndroid Build Coastguard Worker * \param context - \c [in] GPU Context handle 938*7688df22SAndroid Build Coastguard Worker * 939*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 940*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 941*7688df22SAndroid Build Coastguard Worker * 942*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_cs_ctx_create() 943*7688df22SAndroid Build Coastguard Worker * 944*7688df22SAndroid Build Coastguard Worker */ 945*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_ctx_free(amdgpu_context_handle context); 946*7688df22SAndroid Build Coastguard Worker 947*7688df22SAndroid Build Coastguard Worker /** 948*7688df22SAndroid Build Coastguard Worker * Override the submission priority for the given context using a master fd. 949*7688df22SAndroid Build Coastguard Worker * 950*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 951*7688df22SAndroid Build Coastguard Worker * \param context - \c [in] context handle for context id 952*7688df22SAndroid Build Coastguard Worker * \param master_fd - \c [in] The master fd to authorize the override. 953*7688df22SAndroid Build Coastguard Worker * \param priority - \c [in] The priority to assign to the context. 954*7688df22SAndroid Build Coastguard Worker * 955*7688df22SAndroid Build Coastguard Worker * \return 0 on success or a a negative Posix error code on failure. 956*7688df22SAndroid Build Coastguard Worker */ 957*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_ctx_override_priority(amdgpu_device_handle dev, 958*7688df22SAndroid Build Coastguard Worker amdgpu_context_handle context, 959*7688df22SAndroid Build Coastguard Worker int master_fd, 960*7688df22SAndroid Build Coastguard Worker unsigned priority); 961*7688df22SAndroid Build Coastguard Worker 962*7688df22SAndroid Build Coastguard Worker /** 963*7688df22SAndroid Build Coastguard Worker * Set or query the stable power state for GPU profiling. 964*7688df22SAndroid Build Coastguard Worker * 965*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 966*7688df22SAndroid Build Coastguard Worker * \param op - \c [in] AMDGPU_CTX_OP_{GET,SET}_STABLE_PSTATE 967*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] AMDGPU_CTX_STABLE_PSTATE_* 968*7688df22SAndroid Build Coastguard Worker * \param out_flags - \c [out] output current stable pstate 969*7688df22SAndroid Build Coastguard Worker * 970*7688df22SAndroid Build Coastguard Worker * \return 0 on success otherwise POSIX Error code. 971*7688df22SAndroid Build Coastguard Worker */ 972*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_ctx_stable_pstate(amdgpu_context_handle context, 973*7688df22SAndroid Build Coastguard Worker uint32_t op, 974*7688df22SAndroid Build Coastguard Worker uint32_t flags, 975*7688df22SAndroid Build Coastguard Worker uint32_t *out_flags); 976*7688df22SAndroid Build Coastguard Worker 977*7688df22SAndroid Build Coastguard Worker /** 978*7688df22SAndroid Build Coastguard Worker * Query reset state for the specific GPU Context 979*7688df22SAndroid Build Coastguard Worker * 980*7688df22SAndroid Build Coastguard Worker * \param context - \c [in] GPU Context handle 981*7688df22SAndroid Build Coastguard Worker * \param state - \c [out] One of AMDGPU_CTX_*_RESET 982*7688df22SAndroid Build Coastguard Worker * \param hangs - \c [out] Number of hangs caused by the context. 983*7688df22SAndroid Build Coastguard Worker * 984*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 985*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 986*7688df22SAndroid Build Coastguard Worker * 987*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_cs_ctx_create() 988*7688df22SAndroid Build Coastguard Worker * 989*7688df22SAndroid Build Coastguard Worker */ 990*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_query_reset_state(amdgpu_context_handle context, 991*7688df22SAndroid Build Coastguard Worker uint32_t *state, uint32_t *hangs); 992*7688df22SAndroid Build Coastguard Worker 993*7688df22SAndroid Build Coastguard Worker /** 994*7688df22SAndroid Build Coastguard Worker * Query reset state for the specific GPU Context. 995*7688df22SAndroid Build Coastguard Worker * 996*7688df22SAndroid Build Coastguard Worker * \param context - \c [in] GPU Context handle 997*7688df22SAndroid Build Coastguard Worker * \param flags - \c [out] A combination of AMDGPU_CTX_QUERY2_FLAGS_* 998*7688df22SAndroid Build Coastguard Worker * 999*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1000*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1001*7688df22SAndroid Build Coastguard Worker * 1002*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_cs_ctx_create() 1003*7688df22SAndroid Build Coastguard Worker * 1004*7688df22SAndroid Build Coastguard Worker */ 1005*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_query_reset_state2(amdgpu_context_handle context, 1006*7688df22SAndroid Build Coastguard Worker uint64_t *flags); 1007*7688df22SAndroid Build Coastguard Worker 1008*7688df22SAndroid Build Coastguard Worker /* 1009*7688df22SAndroid Build Coastguard Worker * Command Buffers Management 1010*7688df22SAndroid Build Coastguard Worker * 1011*7688df22SAndroid Build Coastguard Worker */ 1012*7688df22SAndroid Build Coastguard Worker 1013*7688df22SAndroid Build Coastguard Worker /** 1014*7688df22SAndroid Build Coastguard Worker * Send request to submit command buffers to hardware. 1015*7688df22SAndroid Build Coastguard Worker * 1016*7688df22SAndroid Build Coastguard Worker * Kernel driver could use GPU Scheduler to make decision when physically 1017*7688df22SAndroid Build Coastguard Worker * sent this request to the hardware. Accordingly this request could be put 1018*7688df22SAndroid Build Coastguard Worker * in queue and sent for execution later. The only guarantee is that request 1019*7688df22SAndroid Build Coastguard Worker * from the same GPU context to the same ip:ip_instance:ring will be executed in 1020*7688df22SAndroid Build Coastguard Worker * order. 1021*7688df22SAndroid Build Coastguard Worker * 1022*7688df22SAndroid Build Coastguard Worker * The caller can specify the user fence buffer/location with the fence_info in the 1023*7688df22SAndroid Build Coastguard Worker * cs_request.The sequence number is returned via the 'seq_no' parameter 1024*7688df22SAndroid Build Coastguard Worker * in ibs_request structure. 1025*7688df22SAndroid Build Coastguard Worker * 1026*7688df22SAndroid Build Coastguard Worker * 1027*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. 1028*7688df22SAndroid Build Coastguard Worker * See #amdgpu_device_initialize() 1029*7688df22SAndroid Build Coastguard Worker * \param context - \c [in] GPU Context 1030*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] Global submission flags 1031*7688df22SAndroid Build Coastguard Worker * \param ibs_request - \c [in/out] Pointer to submission requests. 1032*7688df22SAndroid Build Coastguard Worker * We could submit to the several 1033*7688df22SAndroid Build Coastguard Worker * engines/rings simulteniously as 1034*7688df22SAndroid Build Coastguard Worker * 'atomic' operation 1035*7688df22SAndroid Build Coastguard Worker * \param number_of_requests - \c [in] Number of submission requests 1036*7688df22SAndroid Build Coastguard Worker * 1037*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1038*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1039*7688df22SAndroid Build Coastguard Worker * 1040*7688df22SAndroid Build Coastguard Worker * \note It is required to pass correct resource list with buffer handles 1041*7688df22SAndroid Build Coastguard Worker * which will be accessible by command buffers from submission 1042*7688df22SAndroid Build Coastguard Worker * This will allow kernel driver to correctly implement "paging". 1043*7688df22SAndroid Build Coastguard Worker * Failure to do so will have unpredictable results. 1044*7688df22SAndroid Build Coastguard Worker * 1045*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_command_buffer_alloc(), amdgpu_command_buffer_free(), 1046*7688df22SAndroid Build Coastguard Worker * amdgpu_cs_query_fence_status() 1047*7688df22SAndroid Build Coastguard Worker * 1048*7688df22SAndroid Build Coastguard Worker */ 1049*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_submit(amdgpu_context_handle context, 1050*7688df22SAndroid Build Coastguard Worker uint64_t flags, 1051*7688df22SAndroid Build Coastguard Worker struct amdgpu_cs_request *ibs_request, 1052*7688df22SAndroid Build Coastguard Worker uint32_t number_of_requests); 1053*7688df22SAndroid Build Coastguard Worker 1054*7688df22SAndroid Build Coastguard Worker /** 1055*7688df22SAndroid Build Coastguard Worker * Query status of Command Buffer Submission 1056*7688df22SAndroid Build Coastguard Worker * 1057*7688df22SAndroid Build Coastguard Worker * \param fence - \c [in] Structure describing fence to query 1058*7688df22SAndroid Build Coastguard Worker * \param timeout_ns - \c [in] Timeout value to wait 1059*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] Flags for the query 1060*7688df22SAndroid Build Coastguard Worker * \param expired - \c [out] If fence expired or not.\n 1061*7688df22SAndroid Build Coastguard Worker * 0 – if fence is not expired\n 1062*7688df22SAndroid Build Coastguard Worker * !0 - otherwise 1063*7688df22SAndroid Build Coastguard Worker * 1064*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1065*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1066*7688df22SAndroid Build Coastguard Worker * 1067*7688df22SAndroid Build Coastguard Worker * \note If UMD wants only to check operation status and returned immediately 1068*7688df22SAndroid Build Coastguard Worker * then timeout value as 0 must be passed. In this case success will be 1069*7688df22SAndroid Build Coastguard Worker * returned in the case if submission was completed or timeout error 1070*7688df22SAndroid Build Coastguard Worker * code. 1071*7688df22SAndroid Build Coastguard Worker * 1072*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_cs_submit() 1073*7688df22SAndroid Build Coastguard Worker */ 1074*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_query_fence_status(struct amdgpu_cs_fence *fence, 1075*7688df22SAndroid Build Coastguard Worker uint64_t timeout_ns, 1076*7688df22SAndroid Build Coastguard Worker uint64_t flags, 1077*7688df22SAndroid Build Coastguard Worker uint32_t *expired); 1078*7688df22SAndroid Build Coastguard Worker 1079*7688df22SAndroid Build Coastguard Worker /** 1080*7688df22SAndroid Build Coastguard Worker * Wait for multiple fences 1081*7688df22SAndroid Build Coastguard Worker * 1082*7688df22SAndroid Build Coastguard Worker * \param fences - \c [in] The fence array to wait 1083*7688df22SAndroid Build Coastguard Worker * \param fence_count - \c [in] The fence count 1084*7688df22SAndroid Build Coastguard Worker * \param wait_all - \c [in] If true, wait all fences to be signaled, 1085*7688df22SAndroid Build Coastguard Worker * otherwise, wait at least one fence 1086*7688df22SAndroid Build Coastguard Worker * \param timeout_ns - \c [in] The timeout to wait, in nanoseconds 1087*7688df22SAndroid Build Coastguard Worker * \param status - \c [out] '1' for signaled, '0' for timeout 1088*7688df22SAndroid Build Coastguard Worker * \param first - \c [out] the index of the first signaled fence from @fences 1089*7688df22SAndroid Build Coastguard Worker * 1090*7688df22SAndroid Build Coastguard Worker * \return 0 on success 1091*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1092*7688df22SAndroid Build Coastguard Worker * 1093*7688df22SAndroid Build Coastguard Worker * \note Currently it supports only one amdgpu_device. All fences come from 1094*7688df22SAndroid Build Coastguard Worker * the same amdgpu_device with the same fd. 1095*7688df22SAndroid Build Coastguard Worker */ 1096*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_wait_fences(struct amdgpu_cs_fence *fences, 1097*7688df22SAndroid Build Coastguard Worker uint32_t fence_count, 1098*7688df22SAndroid Build Coastguard Worker bool wait_all, 1099*7688df22SAndroid Build Coastguard Worker uint64_t timeout_ns, 1100*7688df22SAndroid Build Coastguard Worker uint32_t *status, uint32_t *first); 1101*7688df22SAndroid Build Coastguard Worker 1102*7688df22SAndroid Build Coastguard Worker /* 1103*7688df22SAndroid Build Coastguard Worker * Query / Info API 1104*7688df22SAndroid Build Coastguard Worker * 1105*7688df22SAndroid Build Coastguard Worker */ 1106*7688df22SAndroid Build Coastguard Worker 1107*7688df22SAndroid Build Coastguard Worker /** 1108*7688df22SAndroid Build Coastguard Worker * Query allocation size alignments 1109*7688df22SAndroid Build Coastguard Worker * 1110*7688df22SAndroid Build Coastguard Worker * UMD should query information about GPU VM MC size alignments requirements 1111*7688df22SAndroid Build Coastguard Worker * to be able correctly choose required allocation size and implement 1112*7688df22SAndroid Build Coastguard Worker * internal optimization if needed. 1113*7688df22SAndroid Build Coastguard Worker * 1114*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1115*7688df22SAndroid Build Coastguard Worker * \param info - \c [out] Pointer to structure to get size alignment 1116*7688df22SAndroid Build Coastguard Worker * requirements 1117*7688df22SAndroid Build Coastguard Worker * 1118*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1119*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1120*7688df22SAndroid Build Coastguard Worker * 1121*7688df22SAndroid Build Coastguard Worker */ 1122*7688df22SAndroid Build Coastguard Worker int amdgpu_query_buffer_size_alignment(amdgpu_device_handle dev, 1123*7688df22SAndroid Build Coastguard Worker struct amdgpu_buffer_size_alignments 1124*7688df22SAndroid Build Coastguard Worker *info); 1125*7688df22SAndroid Build Coastguard Worker 1126*7688df22SAndroid Build Coastguard Worker /** 1127*7688df22SAndroid Build Coastguard Worker * Query firmware versions 1128*7688df22SAndroid Build Coastguard Worker * 1129*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1130*7688df22SAndroid Build Coastguard Worker * \param fw_type - \c [in] AMDGPU_INFO_FW_* 1131*7688df22SAndroid Build Coastguard Worker * \param ip_instance - \c [in] Index of the IP block of the same type. 1132*7688df22SAndroid Build Coastguard Worker * \param index - \c [in] Index of the engine. (for SDMA and MEC) 1133*7688df22SAndroid Build Coastguard Worker * \param version - \c [out] Pointer to to the "version" return value 1134*7688df22SAndroid Build Coastguard Worker * \param feature - \c [out] Pointer to to the "feature" return value 1135*7688df22SAndroid Build Coastguard Worker * 1136*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1137*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1138*7688df22SAndroid Build Coastguard Worker * 1139*7688df22SAndroid Build Coastguard Worker */ 1140*7688df22SAndroid Build Coastguard Worker int amdgpu_query_firmware_version(amdgpu_device_handle dev, unsigned fw_type, 1141*7688df22SAndroid Build Coastguard Worker unsigned ip_instance, unsigned index, 1142*7688df22SAndroid Build Coastguard Worker uint32_t *version, uint32_t *feature); 1143*7688df22SAndroid Build Coastguard Worker 1144*7688df22SAndroid Build Coastguard Worker /** 1145*7688df22SAndroid Build Coastguard Worker * Query the number of HW IP instances of a certain type. 1146*7688df22SAndroid Build Coastguard Worker * 1147*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1148*7688df22SAndroid Build Coastguard Worker * \param type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* 1149*7688df22SAndroid Build Coastguard Worker * \param count - \c [out] Pointer to structure to get information 1150*7688df22SAndroid Build Coastguard Worker * 1151*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1152*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1153*7688df22SAndroid Build Coastguard Worker */ 1154*7688df22SAndroid Build Coastguard Worker int amdgpu_query_hw_ip_count(amdgpu_device_handle dev, unsigned type, 1155*7688df22SAndroid Build Coastguard Worker uint32_t *count); 1156*7688df22SAndroid Build Coastguard Worker 1157*7688df22SAndroid Build Coastguard Worker /** 1158*7688df22SAndroid Build Coastguard Worker * Query engine information 1159*7688df22SAndroid Build Coastguard Worker * 1160*7688df22SAndroid Build Coastguard Worker * This query allows UMD to query information different engines and their 1161*7688df22SAndroid Build Coastguard Worker * capabilities. 1162*7688df22SAndroid Build Coastguard Worker * 1163*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1164*7688df22SAndroid Build Coastguard Worker * \param type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* 1165*7688df22SAndroid Build Coastguard Worker * \param ip_instance - \c [in] Index of the IP block of the same type. 1166*7688df22SAndroid Build Coastguard Worker * \param info - \c [out] Pointer to structure to get information 1167*7688df22SAndroid Build Coastguard Worker * 1168*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1169*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1170*7688df22SAndroid Build Coastguard Worker */ 1171*7688df22SAndroid Build Coastguard Worker int amdgpu_query_hw_ip_info(amdgpu_device_handle dev, unsigned type, 1172*7688df22SAndroid Build Coastguard Worker unsigned ip_instance, 1173*7688df22SAndroid Build Coastguard Worker struct drm_amdgpu_info_hw_ip *info); 1174*7688df22SAndroid Build Coastguard Worker 1175*7688df22SAndroid Build Coastguard Worker /** 1176*7688df22SAndroid Build Coastguard Worker * Query heap information 1177*7688df22SAndroid Build Coastguard Worker * 1178*7688df22SAndroid Build Coastguard Worker * This query allows UMD to query potentially available memory resources and 1179*7688df22SAndroid Build Coastguard Worker * adjust their logic if necessary. 1180*7688df22SAndroid Build Coastguard Worker * 1181*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1182*7688df22SAndroid Build Coastguard Worker * \param heap - \c [in] Heap type 1183*7688df22SAndroid Build Coastguard Worker * \param info - \c [in] Pointer to structure to get needed information 1184*7688df22SAndroid Build Coastguard Worker * 1185*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1186*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1187*7688df22SAndroid Build Coastguard Worker * 1188*7688df22SAndroid Build Coastguard Worker */ 1189*7688df22SAndroid Build Coastguard Worker int amdgpu_query_heap_info(amdgpu_device_handle dev, uint32_t heap, 1190*7688df22SAndroid Build Coastguard Worker uint32_t flags, struct amdgpu_heap_info *info); 1191*7688df22SAndroid Build Coastguard Worker 1192*7688df22SAndroid Build Coastguard Worker /** 1193*7688df22SAndroid Build Coastguard Worker * Get the CRTC ID from the mode object ID 1194*7688df22SAndroid Build Coastguard Worker * 1195*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1196*7688df22SAndroid Build Coastguard Worker * \param id - \c [in] Mode object ID 1197*7688df22SAndroid Build Coastguard Worker * \param result - \c [in] Pointer to the CRTC ID 1198*7688df22SAndroid Build Coastguard Worker * 1199*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1200*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1201*7688df22SAndroid Build Coastguard Worker * 1202*7688df22SAndroid Build Coastguard Worker */ 1203*7688df22SAndroid Build Coastguard Worker int amdgpu_query_crtc_from_id(amdgpu_device_handle dev, unsigned id, 1204*7688df22SAndroid Build Coastguard Worker int32_t *result); 1205*7688df22SAndroid Build Coastguard Worker 1206*7688df22SAndroid Build Coastguard Worker /** 1207*7688df22SAndroid Build Coastguard Worker * Query GPU H/w Info 1208*7688df22SAndroid Build Coastguard Worker * 1209*7688df22SAndroid Build Coastguard Worker * Query hardware specific information 1210*7688df22SAndroid Build Coastguard Worker * 1211*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1212*7688df22SAndroid Build Coastguard Worker * \param heap - \c [in] Heap type 1213*7688df22SAndroid Build Coastguard Worker * \param info - \c [in] Pointer to structure to get needed information 1214*7688df22SAndroid Build Coastguard Worker * 1215*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1216*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1217*7688df22SAndroid Build Coastguard Worker * 1218*7688df22SAndroid Build Coastguard Worker */ 1219*7688df22SAndroid Build Coastguard Worker int amdgpu_query_gpu_info(amdgpu_device_handle dev, 1220*7688df22SAndroid Build Coastguard Worker struct amdgpu_gpu_info *info); 1221*7688df22SAndroid Build Coastguard Worker 1222*7688df22SAndroid Build Coastguard Worker /** 1223*7688df22SAndroid Build Coastguard Worker * Query hardware or driver information. 1224*7688df22SAndroid Build Coastguard Worker * 1225*7688df22SAndroid Build Coastguard Worker * The return size is query-specific and depends on the "info_id" parameter. 1226*7688df22SAndroid Build Coastguard Worker * No more than "size" bytes is returned. 1227*7688df22SAndroid Build Coastguard Worker * 1228*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1229*7688df22SAndroid Build Coastguard Worker * \param info_id - \c [in] AMDGPU_INFO_* 1230*7688df22SAndroid Build Coastguard Worker * \param size - \c [in] Size of the returned value. 1231*7688df22SAndroid Build Coastguard Worker * \param value - \c [out] Pointer to the return value. 1232*7688df22SAndroid Build Coastguard Worker * 1233*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1234*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX error code 1235*7688df22SAndroid Build Coastguard Worker * 1236*7688df22SAndroid Build Coastguard Worker */ 1237*7688df22SAndroid Build Coastguard Worker int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id, 1238*7688df22SAndroid Build Coastguard Worker unsigned size, void *value); 1239*7688df22SAndroid Build Coastguard Worker 1240*7688df22SAndroid Build Coastguard Worker /** 1241*7688df22SAndroid Build Coastguard Worker * Query hardware or driver information. 1242*7688df22SAndroid Build Coastguard Worker * 1243*7688df22SAndroid Build Coastguard Worker * The return size is query-specific and depends on the "info_id" parameter. 1244*7688df22SAndroid Build Coastguard Worker * No more than "size" bytes is returned. 1245*7688df22SAndroid Build Coastguard Worker * 1246*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1247*7688df22SAndroid Build Coastguard Worker * \param info - \c [in] amdgpu_sw_info_* 1248*7688df22SAndroid Build Coastguard Worker * \param value - \c [out] Pointer to the return value. 1249*7688df22SAndroid Build Coastguard Worker * 1250*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1251*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX error code 1252*7688df22SAndroid Build Coastguard Worker * 1253*7688df22SAndroid Build Coastguard Worker */ 1254*7688df22SAndroid Build Coastguard Worker int amdgpu_query_sw_info(amdgpu_device_handle dev, enum amdgpu_sw_info info, 1255*7688df22SAndroid Build Coastguard Worker void *value); 1256*7688df22SAndroid Build Coastguard Worker 1257*7688df22SAndroid Build Coastguard Worker /** 1258*7688df22SAndroid Build Coastguard Worker * Query information about GDS 1259*7688df22SAndroid Build Coastguard Worker * 1260*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1261*7688df22SAndroid Build Coastguard Worker * \param gds_info - \c [out] Pointer to structure to get GDS information 1262*7688df22SAndroid Build Coastguard Worker * 1263*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1264*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1265*7688df22SAndroid Build Coastguard Worker * 1266*7688df22SAndroid Build Coastguard Worker */ 1267*7688df22SAndroid Build Coastguard Worker int amdgpu_query_gds_info(amdgpu_device_handle dev, 1268*7688df22SAndroid Build Coastguard Worker struct amdgpu_gds_resource_info *gds_info); 1269*7688df22SAndroid Build Coastguard Worker 1270*7688df22SAndroid Build Coastguard Worker /** 1271*7688df22SAndroid Build Coastguard Worker * Query information about sensor. 1272*7688df22SAndroid Build Coastguard Worker * 1273*7688df22SAndroid Build Coastguard Worker * The return size is query-specific and depends on the "sensor_type" 1274*7688df22SAndroid Build Coastguard Worker * parameter. No more than "size" bytes is returned. 1275*7688df22SAndroid Build Coastguard Worker * 1276*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1277*7688df22SAndroid Build Coastguard Worker * \param sensor_type - \c [in] AMDGPU_INFO_SENSOR_* 1278*7688df22SAndroid Build Coastguard Worker * \param size - \c [in] Size of the returned value. 1279*7688df22SAndroid Build Coastguard Worker * \param value - \c [out] Pointer to the return value. 1280*7688df22SAndroid Build Coastguard Worker * 1281*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1282*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1283*7688df22SAndroid Build Coastguard Worker * 1284*7688df22SAndroid Build Coastguard Worker */ 1285*7688df22SAndroid Build Coastguard Worker int amdgpu_query_sensor_info(amdgpu_device_handle dev, unsigned sensor_type, 1286*7688df22SAndroid Build Coastguard Worker unsigned size, void *value); 1287*7688df22SAndroid Build Coastguard Worker 1288*7688df22SAndroid Build Coastguard Worker /** 1289*7688df22SAndroid Build Coastguard Worker * Query information about video capabilities 1290*7688df22SAndroid Build Coastguard Worker * 1291*7688df22SAndroid Build Coastguard Worker * The return sizeof(struct drm_amdgpu_info_video_caps) 1292*7688df22SAndroid Build Coastguard Worker * 1293*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1294*7688df22SAndroid Build Coastguard Worker * \param caps_type - \c [in] AMDGPU_INFO_VIDEO_CAPS_DECODE(ENCODE) 1295*7688df22SAndroid Build Coastguard Worker * \param size - \c [in] Size of the returned value. 1296*7688df22SAndroid Build Coastguard Worker * \param value - \c [out] Pointer to the return value. 1297*7688df22SAndroid Build Coastguard Worker * 1298*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1299*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1300*7688df22SAndroid Build Coastguard Worker * 1301*7688df22SAndroid Build Coastguard Worker */ 1302*7688df22SAndroid Build Coastguard Worker int amdgpu_query_video_caps_info(amdgpu_device_handle dev, unsigned cap_type, 1303*7688df22SAndroid Build Coastguard Worker unsigned size, void *value); 1304*7688df22SAndroid Build Coastguard Worker 1305*7688df22SAndroid Build Coastguard Worker /** 1306*7688df22SAndroid Build Coastguard Worker * Query information about VM faults 1307*7688df22SAndroid Build Coastguard Worker * 1308*7688df22SAndroid Build Coastguard Worker * The return sizeof(struct drm_amdgpu_info_gpuvm_fault) 1309*7688df22SAndroid Build Coastguard Worker * 1310*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1311*7688df22SAndroid Build Coastguard Worker * \param size - \c [in] Size of the returned value. 1312*7688df22SAndroid Build Coastguard Worker * \param value - \c [out] Pointer to the return value. 1313*7688df22SAndroid Build Coastguard Worker * 1314*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1315*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1316*7688df22SAndroid Build Coastguard Worker * 1317*7688df22SAndroid Build Coastguard Worker */ 1318*7688df22SAndroid Build Coastguard Worker int amdgpu_query_gpuvm_fault_info(amdgpu_device_handle dev, unsigned size, 1319*7688df22SAndroid Build Coastguard Worker void *value); 1320*7688df22SAndroid Build Coastguard Worker 1321*7688df22SAndroid Build Coastguard Worker /** 1322*7688df22SAndroid Build Coastguard Worker * Read a set of consecutive memory-mapped registers. 1323*7688df22SAndroid Build Coastguard Worker * Not all registers are allowed to be read by userspace. 1324*7688df22SAndroid Build Coastguard Worker * 1325*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize( 1326*7688df22SAndroid Build Coastguard Worker * \param dword_offset - \c [in] Register offset in dwords 1327*7688df22SAndroid Build Coastguard Worker * \param count - \c [in] The number of registers to read starting 1328*7688df22SAndroid Build Coastguard Worker * from the offset 1329*7688df22SAndroid Build Coastguard Worker * \param instance - \c [in] GRBM_GFX_INDEX selector. It may have other 1330*7688df22SAndroid Build Coastguard Worker * uses. Set it to 0xffffffff if unsure. 1331*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] Flags with additional information. 1332*7688df22SAndroid Build Coastguard Worker * \param values - \c [out] The pointer to return values. 1333*7688df22SAndroid Build Coastguard Worker * 1334*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1335*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX error code 1336*7688df22SAndroid Build Coastguard Worker * 1337*7688df22SAndroid Build Coastguard Worker */ 1338*7688df22SAndroid Build Coastguard Worker int amdgpu_read_mm_registers(amdgpu_device_handle dev, unsigned dword_offset, 1339*7688df22SAndroid Build Coastguard Worker unsigned count, uint32_t instance, uint32_t flags, 1340*7688df22SAndroid Build Coastguard Worker uint32_t *values); 1341*7688df22SAndroid Build Coastguard Worker 1342*7688df22SAndroid Build Coastguard Worker /** 1343*7688df22SAndroid Build Coastguard Worker * Flag to request VA address range in the 32bit address space 1344*7688df22SAndroid Build Coastguard Worker */ 1345*7688df22SAndroid Build Coastguard Worker #define AMDGPU_VA_RANGE_32_BIT 0x1 1346*7688df22SAndroid Build Coastguard Worker #define AMDGPU_VA_RANGE_HIGH 0x2 1347*7688df22SAndroid Build Coastguard Worker #define AMDGPU_VA_RANGE_REPLAYABLE 0x4 1348*7688df22SAndroid Build Coastguard Worker 1349*7688df22SAndroid Build Coastguard Worker /** 1350*7688df22SAndroid Build Coastguard Worker * Allocate virtual address range 1351*7688df22SAndroid Build Coastguard Worker * 1352*7688df22SAndroid Build Coastguard Worker * \param dev - [in] Device handle. See #amdgpu_device_initialize() 1353*7688df22SAndroid Build Coastguard Worker * \param va_range_type - \c [in] Type of MC va range from which to allocate 1354*7688df22SAndroid Build Coastguard Worker * \param size - \c [in] Size of range. Size must be correctly* aligned. 1355*7688df22SAndroid Build Coastguard Worker * It is client responsibility to correctly aligned size based on the future 1356*7688df22SAndroid Build Coastguard Worker * usage of allocated range. 1357*7688df22SAndroid Build Coastguard Worker * \param va_base_alignment - \c [in] Overwrite base address alignment 1358*7688df22SAndroid Build Coastguard Worker * requirement for GPU VM MC virtual 1359*7688df22SAndroid Build Coastguard Worker * address assignment. Must be multiple of size alignments received as 1360*7688df22SAndroid Build Coastguard Worker * 'amdgpu_buffer_size_alignments'. 1361*7688df22SAndroid Build Coastguard Worker * If 0 use the default one. 1362*7688df22SAndroid Build Coastguard Worker * \param va_base_required - \c [in] Specified required va base address. 1363*7688df22SAndroid Build Coastguard Worker * If 0 then library choose available one. 1364*7688df22SAndroid Build Coastguard Worker * If !0 value will be passed and those value already "in use" then 1365*7688df22SAndroid Build Coastguard Worker * corresponding error status will be returned. 1366*7688df22SAndroid Build Coastguard Worker * \param va_base_allocated - \c [out] On return: Allocated VA base to be used 1367*7688df22SAndroid Build Coastguard Worker * by client. 1368*7688df22SAndroid Build Coastguard Worker * \param va_range_handle - \c [out] On return: Handle assigned to allocation 1369*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] flags for special VA range 1370*7688df22SAndroid Build Coastguard Worker * 1371*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1372*7688df22SAndroid Build Coastguard Worker * >0 - AMD specific error code\n 1373*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1374*7688df22SAndroid Build Coastguard Worker * 1375*7688df22SAndroid Build Coastguard Worker * \notes \n 1376*7688df22SAndroid Build Coastguard Worker * It is client responsibility to correctly handle VA assignments and usage. 1377*7688df22SAndroid Build Coastguard Worker * Neither kernel driver nor libdrm_amdpgu are able to prevent and 1378*7688df22SAndroid Build Coastguard Worker * detect wrong va assignment. 1379*7688df22SAndroid Build Coastguard Worker * 1380*7688df22SAndroid Build Coastguard Worker * It is client responsibility to correctly handle multi-GPU cases and to pass 1381*7688df22SAndroid Build Coastguard Worker * the corresponding arrays of all devices handles where corresponding VA will 1382*7688df22SAndroid Build Coastguard Worker * be used. 1383*7688df22SAndroid Build Coastguard Worker * 1384*7688df22SAndroid Build Coastguard Worker */ 1385*7688df22SAndroid Build Coastguard Worker int amdgpu_va_range_alloc(amdgpu_device_handle dev, 1386*7688df22SAndroid Build Coastguard Worker enum amdgpu_gpu_va_range va_range_type, 1387*7688df22SAndroid Build Coastguard Worker uint64_t size, 1388*7688df22SAndroid Build Coastguard Worker uint64_t va_base_alignment, 1389*7688df22SAndroid Build Coastguard Worker uint64_t va_base_required, 1390*7688df22SAndroid Build Coastguard Worker uint64_t *va_base_allocated, 1391*7688df22SAndroid Build Coastguard Worker amdgpu_va_handle *va_range_handle, 1392*7688df22SAndroid Build Coastguard Worker uint64_t flags); 1393*7688df22SAndroid Build Coastguard Worker 1394*7688df22SAndroid Build Coastguard Worker /** 1395*7688df22SAndroid Build Coastguard Worker * Free previously allocated virtual address range 1396*7688df22SAndroid Build Coastguard Worker * 1397*7688df22SAndroid Build Coastguard Worker * 1398*7688df22SAndroid Build Coastguard Worker * \param va_range_handle - \c [in] Handle assigned to VA allocation 1399*7688df22SAndroid Build Coastguard Worker * 1400*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1401*7688df22SAndroid Build Coastguard Worker * >0 - AMD specific error code\n 1402*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1403*7688df22SAndroid Build Coastguard Worker * 1404*7688df22SAndroid Build Coastguard Worker */ 1405*7688df22SAndroid Build Coastguard Worker int amdgpu_va_range_free(amdgpu_va_handle va_range_handle); 1406*7688df22SAndroid Build Coastguard Worker 1407*7688df22SAndroid Build Coastguard Worker /** 1408*7688df22SAndroid Build Coastguard Worker * Return the starting address of the allocated virtual address range. 1409*7688df22SAndroid Build Coastguard Worker */ 1410*7688df22SAndroid Build Coastguard Worker uint64_t amdgpu_va_get_start_addr(amdgpu_va_handle va_handle); 1411*7688df22SAndroid Build Coastguard Worker 1412*7688df22SAndroid Build Coastguard Worker /** 1413*7688df22SAndroid Build Coastguard Worker * Query virtual address range 1414*7688df22SAndroid Build Coastguard Worker * 1415*7688df22SAndroid Build Coastguard Worker * UMD can query GPU VM range supported by each device 1416*7688df22SAndroid Build Coastguard Worker * to initialize its own VAM accordingly. 1417*7688df22SAndroid Build Coastguard Worker * 1418*7688df22SAndroid Build Coastguard Worker * \param dev - [in] Device handle. See #amdgpu_device_initialize() 1419*7688df22SAndroid Build Coastguard Worker * \param type - \c [in] Type of virtual address range 1420*7688df22SAndroid Build Coastguard Worker * \param offset - \c [out] Start offset of virtual address range 1421*7688df22SAndroid Build Coastguard Worker * \param size - \c [out] Size of virtual address range 1422*7688df22SAndroid Build Coastguard Worker * 1423*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1424*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1425*7688df22SAndroid Build Coastguard Worker * 1426*7688df22SAndroid Build Coastguard Worker */ 1427*7688df22SAndroid Build Coastguard Worker 1428*7688df22SAndroid Build Coastguard Worker int amdgpu_va_range_query(amdgpu_device_handle dev, 1429*7688df22SAndroid Build Coastguard Worker enum amdgpu_gpu_va_range type, 1430*7688df22SAndroid Build Coastguard Worker uint64_t *start, 1431*7688df22SAndroid Build Coastguard Worker uint64_t *end); 1432*7688df22SAndroid Build Coastguard Worker 1433*7688df22SAndroid Build Coastguard Worker /** 1434*7688df22SAndroid Build Coastguard Worker * Allocate a amdgpu_va_manager object. 1435*7688df22SAndroid Build Coastguard Worker * The returned object has be initialized with the amdgpu_va_manager_init 1436*7688df22SAndroid Build Coastguard Worker * before use. 1437*7688df22SAndroid Build Coastguard Worker * On release, amdgpu_va_manager_deinit needs to be called, then the memory 1438*7688df22SAndroid Build Coastguard Worker * can be released using free(). 1439*7688df22SAndroid Build Coastguard Worker */ 1440*7688df22SAndroid Build Coastguard Worker amdgpu_va_manager_handle amdgpu_va_manager_alloc(void); 1441*7688df22SAndroid Build Coastguard Worker 1442*7688df22SAndroid Build Coastguard Worker void amdgpu_va_manager_init(amdgpu_va_manager_handle va_mgr, 1443*7688df22SAndroid Build Coastguard Worker uint64_t low_va_offset, uint64_t low_va_max, 1444*7688df22SAndroid Build Coastguard Worker uint64_t high_va_offset, uint64_t high_va_max, 1445*7688df22SAndroid Build Coastguard Worker uint32_t virtual_address_alignment); 1446*7688df22SAndroid Build Coastguard Worker 1447*7688df22SAndroid Build Coastguard Worker void amdgpu_va_manager_deinit(amdgpu_va_manager_handle va_mgr); 1448*7688df22SAndroid Build Coastguard Worker 1449*7688df22SAndroid Build Coastguard Worker /** 1450*7688df22SAndroid Build Coastguard Worker * Similar to #amdgpu_va_range_alloc() but allocates VA 1451*7688df22SAndroid Build Coastguard Worker * directly from an amdgpu_va_manager_handle instead of using 1452*7688df22SAndroid Build Coastguard Worker * the manager from an amdgpu_device. 1453*7688df22SAndroid Build Coastguard Worker */ 1454*7688df22SAndroid Build Coastguard Worker 1455*7688df22SAndroid Build Coastguard Worker int amdgpu_va_range_alloc2(amdgpu_va_manager_handle va_mgr, 1456*7688df22SAndroid Build Coastguard Worker enum amdgpu_gpu_va_range va_range_type, 1457*7688df22SAndroid Build Coastguard Worker uint64_t size, 1458*7688df22SAndroid Build Coastguard Worker uint64_t va_base_alignment, 1459*7688df22SAndroid Build Coastguard Worker uint64_t va_base_required, 1460*7688df22SAndroid Build Coastguard Worker uint64_t *va_base_allocated, 1461*7688df22SAndroid Build Coastguard Worker amdgpu_va_handle *va_range_handle, 1462*7688df22SAndroid Build Coastguard Worker uint64_t flags); 1463*7688df22SAndroid Build Coastguard Worker 1464*7688df22SAndroid Build Coastguard Worker /** 1465*7688df22SAndroid Build Coastguard Worker * VA mapping/unmapping for the buffer object 1466*7688df22SAndroid Build Coastguard Worker * 1467*7688df22SAndroid Build Coastguard Worker * \param bo - \c [in] BO handle 1468*7688df22SAndroid Build Coastguard Worker * \param offset - \c [in] Start offset to map 1469*7688df22SAndroid Build Coastguard Worker * \param size - \c [in] Size to map 1470*7688df22SAndroid Build Coastguard Worker * \param addr - \c [in] Start virtual address. 1471*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] Supported flags for mapping/unmapping 1472*7688df22SAndroid Build Coastguard Worker * \param ops - \c [in] AMDGPU_VA_OP_MAP or AMDGPU_VA_OP_UNMAP 1473*7688df22SAndroid Build Coastguard Worker * 1474*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1475*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1476*7688df22SAndroid Build Coastguard Worker * 1477*7688df22SAndroid Build Coastguard Worker */ 1478*7688df22SAndroid Build Coastguard Worker 1479*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_va_op(amdgpu_bo_handle bo, 1480*7688df22SAndroid Build Coastguard Worker uint64_t offset, 1481*7688df22SAndroid Build Coastguard Worker uint64_t size, 1482*7688df22SAndroid Build Coastguard Worker uint64_t addr, 1483*7688df22SAndroid Build Coastguard Worker uint64_t flags, 1484*7688df22SAndroid Build Coastguard Worker uint32_t ops); 1485*7688df22SAndroid Build Coastguard Worker 1486*7688df22SAndroid Build Coastguard Worker /** 1487*7688df22SAndroid Build Coastguard Worker * VA mapping/unmapping for a buffer object or PRT region. 1488*7688df22SAndroid Build Coastguard Worker * 1489*7688df22SAndroid Build Coastguard Worker * This is not a simple drop-in extension for amdgpu_bo_va_op; instead, all 1490*7688df22SAndroid Build Coastguard Worker * parameters are treated "raw", i.e. size is not automatically aligned, and 1491*7688df22SAndroid Build Coastguard Worker * all flags must be specified explicitly. 1492*7688df22SAndroid Build Coastguard Worker * 1493*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1494*7688df22SAndroid Build Coastguard Worker * \param bo - \c [in] BO handle (may be NULL) 1495*7688df22SAndroid Build Coastguard Worker * \param offset - \c [in] Start offset to map 1496*7688df22SAndroid Build Coastguard Worker * \param size - \c [in] Size to map 1497*7688df22SAndroid Build Coastguard Worker * \param addr - \c [in] Start virtual address. 1498*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] Supported flags for mapping/unmapping 1499*7688df22SAndroid Build Coastguard Worker * \param ops - \c [in] AMDGPU_VA_OP_MAP or AMDGPU_VA_OP_UNMAP 1500*7688df22SAndroid Build Coastguard Worker * 1501*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1502*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1503*7688df22SAndroid Build Coastguard Worker * 1504*7688df22SAndroid Build Coastguard Worker */ 1505*7688df22SAndroid Build Coastguard Worker 1506*7688df22SAndroid Build Coastguard Worker int amdgpu_bo_va_op_raw(amdgpu_device_handle dev, 1507*7688df22SAndroid Build Coastguard Worker amdgpu_bo_handle bo, 1508*7688df22SAndroid Build Coastguard Worker uint64_t offset, 1509*7688df22SAndroid Build Coastguard Worker uint64_t size, 1510*7688df22SAndroid Build Coastguard Worker uint64_t addr, 1511*7688df22SAndroid Build Coastguard Worker uint64_t flags, 1512*7688df22SAndroid Build Coastguard Worker uint32_t ops); 1513*7688df22SAndroid Build Coastguard Worker 1514*7688df22SAndroid Build Coastguard Worker /** 1515*7688df22SAndroid Build Coastguard Worker * create semaphore 1516*7688df22SAndroid Build Coastguard Worker * 1517*7688df22SAndroid Build Coastguard Worker * \param sem - \c [out] semaphore handle 1518*7688df22SAndroid Build Coastguard Worker * 1519*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1520*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1521*7688df22SAndroid Build Coastguard Worker * 1522*7688df22SAndroid Build Coastguard Worker */ 1523*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_create_semaphore(amdgpu_semaphore_handle *sem); 1524*7688df22SAndroid Build Coastguard Worker 1525*7688df22SAndroid Build Coastguard Worker /** 1526*7688df22SAndroid Build Coastguard Worker * signal semaphore 1527*7688df22SAndroid Build Coastguard Worker * 1528*7688df22SAndroid Build Coastguard Worker * \param context - \c [in] GPU Context 1529*7688df22SAndroid Build Coastguard Worker * \param ip_type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* 1530*7688df22SAndroid Build Coastguard Worker * \param ip_instance - \c [in] Index of the IP block of the same type 1531*7688df22SAndroid Build Coastguard Worker * \param ring - \c [in] Specify ring index of the IP 1532*7688df22SAndroid Build Coastguard Worker * \param sem - \c [in] semaphore handle 1533*7688df22SAndroid Build Coastguard Worker * 1534*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1535*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1536*7688df22SAndroid Build Coastguard Worker * 1537*7688df22SAndroid Build Coastguard Worker */ 1538*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_signal_semaphore(amdgpu_context_handle ctx, 1539*7688df22SAndroid Build Coastguard Worker uint32_t ip_type, 1540*7688df22SAndroid Build Coastguard Worker uint32_t ip_instance, 1541*7688df22SAndroid Build Coastguard Worker uint32_t ring, 1542*7688df22SAndroid Build Coastguard Worker amdgpu_semaphore_handle sem); 1543*7688df22SAndroid Build Coastguard Worker 1544*7688df22SAndroid Build Coastguard Worker /** 1545*7688df22SAndroid Build Coastguard Worker * wait semaphore 1546*7688df22SAndroid Build Coastguard Worker * 1547*7688df22SAndroid Build Coastguard Worker * \param context - \c [in] GPU Context 1548*7688df22SAndroid Build Coastguard Worker * \param ip_type - \c [in] Hardware IP block type = AMDGPU_HW_IP_* 1549*7688df22SAndroid Build Coastguard Worker * \param ip_instance - \c [in] Index of the IP block of the same type 1550*7688df22SAndroid Build Coastguard Worker * \param ring - \c [in] Specify ring index of the IP 1551*7688df22SAndroid Build Coastguard Worker * \param sem - \c [in] semaphore handle 1552*7688df22SAndroid Build Coastguard Worker * 1553*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1554*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1555*7688df22SAndroid Build Coastguard Worker * 1556*7688df22SAndroid Build Coastguard Worker */ 1557*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_wait_semaphore(amdgpu_context_handle ctx, 1558*7688df22SAndroid Build Coastguard Worker uint32_t ip_type, 1559*7688df22SAndroid Build Coastguard Worker uint32_t ip_instance, 1560*7688df22SAndroid Build Coastguard Worker uint32_t ring, 1561*7688df22SAndroid Build Coastguard Worker amdgpu_semaphore_handle sem); 1562*7688df22SAndroid Build Coastguard Worker 1563*7688df22SAndroid Build Coastguard Worker /** 1564*7688df22SAndroid Build Coastguard Worker * destroy semaphore 1565*7688df22SAndroid Build Coastguard Worker * 1566*7688df22SAndroid Build Coastguard Worker * \param sem - \c [in] semaphore handle 1567*7688df22SAndroid Build Coastguard Worker * 1568*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1569*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1570*7688df22SAndroid Build Coastguard Worker * 1571*7688df22SAndroid Build Coastguard Worker */ 1572*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_destroy_semaphore(amdgpu_semaphore_handle sem); 1573*7688df22SAndroid Build Coastguard Worker 1574*7688df22SAndroid Build Coastguard Worker /** 1575*7688df22SAndroid Build Coastguard Worker * Get the ASIC marketing name 1576*7688df22SAndroid Build Coastguard Worker * 1577*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() 1578*7688df22SAndroid Build Coastguard Worker * 1579*7688df22SAndroid Build Coastguard Worker * \return the constant string of the marketing name 1580*7688df22SAndroid Build Coastguard Worker * "NULL" means the ASIC is not found 1581*7688df22SAndroid Build Coastguard Worker */ 1582*7688df22SAndroid Build Coastguard Worker const char *amdgpu_get_marketing_name(amdgpu_device_handle dev); 1583*7688df22SAndroid Build Coastguard Worker 1584*7688df22SAndroid Build Coastguard Worker /** 1585*7688df22SAndroid Build Coastguard Worker * Create kernel sync object 1586*7688df22SAndroid Build Coastguard Worker * 1587*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1588*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] flags that affect creation 1589*7688df22SAndroid Build Coastguard Worker * \param syncobj - \c [out] sync object handle 1590*7688df22SAndroid Build Coastguard Worker * 1591*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1592*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1593*7688df22SAndroid Build Coastguard Worker * 1594*7688df22SAndroid Build Coastguard Worker */ 1595*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_create_syncobj2(amdgpu_device_handle dev, 1596*7688df22SAndroid Build Coastguard Worker uint32_t flags, 1597*7688df22SAndroid Build Coastguard Worker uint32_t *syncobj); 1598*7688df22SAndroid Build Coastguard Worker 1599*7688df22SAndroid Build Coastguard Worker /** 1600*7688df22SAndroid Build Coastguard Worker * Create kernel sync object 1601*7688df22SAndroid Build Coastguard Worker * 1602*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1603*7688df22SAndroid Build Coastguard Worker * \param syncobj - \c [out] sync object handle 1604*7688df22SAndroid Build Coastguard Worker * 1605*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1606*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1607*7688df22SAndroid Build Coastguard Worker * 1608*7688df22SAndroid Build Coastguard Worker */ 1609*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_create_syncobj(amdgpu_device_handle dev, 1610*7688df22SAndroid Build Coastguard Worker uint32_t *syncobj); 1611*7688df22SAndroid Build Coastguard Worker /** 1612*7688df22SAndroid Build Coastguard Worker * Destroy kernel sync object 1613*7688df22SAndroid Build Coastguard Worker * 1614*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1615*7688df22SAndroid Build Coastguard Worker * \param syncobj - \c [in] sync object handle 1616*7688df22SAndroid Build Coastguard Worker * 1617*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1618*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1619*7688df22SAndroid Build Coastguard Worker * 1620*7688df22SAndroid Build Coastguard Worker */ 1621*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_destroy_syncobj(amdgpu_device_handle dev, 1622*7688df22SAndroid Build Coastguard Worker uint32_t syncobj); 1623*7688df22SAndroid Build Coastguard Worker 1624*7688df22SAndroid Build Coastguard Worker /** 1625*7688df22SAndroid Build Coastguard Worker * Reset kernel sync objects to unsignalled state. 1626*7688df22SAndroid Build Coastguard Worker * 1627*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1628*7688df22SAndroid Build Coastguard Worker * \param syncobjs - \c [in] array of sync object handles 1629*7688df22SAndroid Build Coastguard Worker * \param syncobj_count - \c [in] number of handles in syncobjs 1630*7688df22SAndroid Build Coastguard Worker * 1631*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1632*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1633*7688df22SAndroid Build Coastguard Worker * 1634*7688df22SAndroid Build Coastguard Worker */ 1635*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_reset(amdgpu_device_handle dev, 1636*7688df22SAndroid Build Coastguard Worker const uint32_t *syncobjs, uint32_t syncobj_count); 1637*7688df22SAndroid Build Coastguard Worker 1638*7688df22SAndroid Build Coastguard Worker /** 1639*7688df22SAndroid Build Coastguard Worker * Signal kernel sync objects. 1640*7688df22SAndroid Build Coastguard Worker * 1641*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1642*7688df22SAndroid Build Coastguard Worker * \param syncobjs - \c [in] array of sync object handles 1643*7688df22SAndroid Build Coastguard Worker * \param syncobj_count - \c [in] number of handles in syncobjs 1644*7688df22SAndroid Build Coastguard Worker * 1645*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1646*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1647*7688df22SAndroid Build Coastguard Worker * 1648*7688df22SAndroid Build Coastguard Worker */ 1649*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_signal(amdgpu_device_handle dev, 1650*7688df22SAndroid Build Coastguard Worker const uint32_t *syncobjs, uint32_t syncobj_count); 1651*7688df22SAndroid Build Coastguard Worker 1652*7688df22SAndroid Build Coastguard Worker /** 1653*7688df22SAndroid Build Coastguard Worker * Signal kernel timeline sync objects. 1654*7688df22SAndroid Build Coastguard Worker * 1655*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1656*7688df22SAndroid Build Coastguard Worker * \param syncobjs - \c [in] array of sync object handles 1657*7688df22SAndroid Build Coastguard Worker * \param points - \c [in] array of timeline points 1658*7688df22SAndroid Build Coastguard Worker * \param syncobj_count - \c [in] number of handles in syncobjs 1659*7688df22SAndroid Build Coastguard Worker * 1660*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1661*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1662*7688df22SAndroid Build Coastguard Worker * 1663*7688df22SAndroid Build Coastguard Worker */ 1664*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_timeline_signal(amdgpu_device_handle dev, 1665*7688df22SAndroid Build Coastguard Worker const uint32_t *syncobjs, 1666*7688df22SAndroid Build Coastguard Worker uint64_t *points, 1667*7688df22SAndroid Build Coastguard Worker uint32_t syncobj_count); 1668*7688df22SAndroid Build Coastguard Worker 1669*7688df22SAndroid Build Coastguard Worker /** 1670*7688df22SAndroid Build Coastguard Worker * Wait for one or all sync objects to signal. 1671*7688df22SAndroid Build Coastguard Worker * 1672*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] self-explanatory 1673*7688df22SAndroid Build Coastguard Worker * \param handles - \c [in] array of sync object handles 1674*7688df22SAndroid Build Coastguard Worker * \param num_handles - \c [in] self-explanatory 1675*7688df22SAndroid Build Coastguard Worker * \param timeout_nsec - \c [in] self-explanatory 1676*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_WAIT_FLAGS_* 1677*7688df22SAndroid Build Coastguard Worker * \param first_signaled - \c [in] self-explanatory 1678*7688df22SAndroid Build Coastguard Worker * 1679*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1680*7688df22SAndroid Build Coastguard Worker * -ETIME - Timeout 1681*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1682*7688df22SAndroid Build Coastguard Worker * 1683*7688df22SAndroid Build Coastguard Worker */ 1684*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_wait(amdgpu_device_handle dev, 1685*7688df22SAndroid Build Coastguard Worker uint32_t *handles, unsigned num_handles, 1686*7688df22SAndroid Build Coastguard Worker int64_t timeout_nsec, unsigned flags, 1687*7688df22SAndroid Build Coastguard Worker uint32_t *first_signaled); 1688*7688df22SAndroid Build Coastguard Worker 1689*7688df22SAndroid Build Coastguard Worker /** 1690*7688df22SAndroid Build Coastguard Worker * Wait for one or all sync objects on their points to signal. 1691*7688df22SAndroid Build Coastguard Worker * 1692*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] self-explanatory 1693*7688df22SAndroid Build Coastguard Worker * \param handles - \c [in] array of sync object handles 1694*7688df22SAndroid Build Coastguard Worker * \param points - \c [in] array of sync points to wait 1695*7688df22SAndroid Build Coastguard Worker * \param num_handles - \c [in] self-explanatory 1696*7688df22SAndroid Build Coastguard Worker * \param timeout_nsec - \c [in] self-explanatory 1697*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_WAIT_FLAGS_* 1698*7688df22SAndroid Build Coastguard Worker * \param first_signaled - \c [in] self-explanatory 1699*7688df22SAndroid Build Coastguard Worker * 1700*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1701*7688df22SAndroid Build Coastguard Worker * -ETIME - Timeout 1702*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1703*7688df22SAndroid Build Coastguard Worker * 1704*7688df22SAndroid Build Coastguard Worker */ 1705*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_timeline_wait(amdgpu_device_handle dev, 1706*7688df22SAndroid Build Coastguard Worker uint32_t *handles, uint64_t *points, 1707*7688df22SAndroid Build Coastguard Worker unsigned num_handles, 1708*7688df22SAndroid Build Coastguard Worker int64_t timeout_nsec, unsigned flags, 1709*7688df22SAndroid Build Coastguard Worker uint32_t *first_signaled); 1710*7688df22SAndroid Build Coastguard Worker /** 1711*7688df22SAndroid Build Coastguard Worker * Query sync objects payloads. 1712*7688df22SAndroid Build Coastguard Worker * 1713*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] self-explanatory 1714*7688df22SAndroid Build Coastguard Worker * \param handles - \c [in] array of sync object handles 1715*7688df22SAndroid Build Coastguard Worker * \param points - \c [out] array of sync points returned, which presents 1716*7688df22SAndroid Build Coastguard Worker * syncobj payload. 1717*7688df22SAndroid Build Coastguard Worker * \param num_handles - \c [in] self-explanatory 1718*7688df22SAndroid Build Coastguard Worker * 1719*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1720*7688df22SAndroid Build Coastguard Worker * -ETIME - Timeout 1721*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1722*7688df22SAndroid Build Coastguard Worker * 1723*7688df22SAndroid Build Coastguard Worker */ 1724*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_query(amdgpu_device_handle dev, 1725*7688df22SAndroid Build Coastguard Worker uint32_t *handles, uint64_t *points, 1726*7688df22SAndroid Build Coastguard Worker unsigned num_handles); 1727*7688df22SAndroid Build Coastguard Worker /** 1728*7688df22SAndroid Build Coastguard Worker * Query sync objects last signaled or submitted point. 1729*7688df22SAndroid Build Coastguard Worker * 1730*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] self-explanatory 1731*7688df22SAndroid Build Coastguard Worker * \param handles - \c [in] array of sync object handles 1732*7688df22SAndroid Build Coastguard Worker * \param points - \c [out] array of sync points returned, which presents 1733*7688df22SAndroid Build Coastguard Worker * syncobj payload. 1734*7688df22SAndroid Build Coastguard Worker * \param num_handles - \c [in] self-explanatory 1735*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] a bitmask of DRM_SYNCOBJ_QUERY_FLAGS_* 1736*7688df22SAndroid Build Coastguard Worker * 1737*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1738*7688df22SAndroid Build Coastguard Worker * -ETIME - Timeout 1739*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1740*7688df22SAndroid Build Coastguard Worker * 1741*7688df22SAndroid Build Coastguard Worker */ 1742*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_query2(amdgpu_device_handle dev, 1743*7688df22SAndroid Build Coastguard Worker uint32_t *handles, uint64_t *points, 1744*7688df22SAndroid Build Coastguard Worker unsigned num_handles, uint32_t flags); 1745*7688df22SAndroid Build Coastguard Worker 1746*7688df22SAndroid Build Coastguard Worker /** 1747*7688df22SAndroid Build Coastguard Worker * Export kernel sync object to shareable fd. 1748*7688df22SAndroid Build Coastguard Worker * 1749*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1750*7688df22SAndroid Build Coastguard Worker * \param syncobj - \c [in] sync object handle 1751*7688df22SAndroid Build Coastguard Worker * \param shared_fd - \c [out] shared file descriptor. 1752*7688df22SAndroid Build Coastguard Worker * 1753*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1754*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1755*7688df22SAndroid Build Coastguard Worker * 1756*7688df22SAndroid Build Coastguard Worker */ 1757*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_export_syncobj(amdgpu_device_handle dev, 1758*7688df22SAndroid Build Coastguard Worker uint32_t syncobj, 1759*7688df22SAndroid Build Coastguard Worker int *shared_fd); 1760*7688df22SAndroid Build Coastguard Worker /** 1761*7688df22SAndroid Build Coastguard Worker * Import kernel sync object from shareable fd. 1762*7688df22SAndroid Build Coastguard Worker * 1763*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1764*7688df22SAndroid Build Coastguard Worker * \param shared_fd - \c [in] shared file descriptor. 1765*7688df22SAndroid Build Coastguard Worker * \param syncobj - \c [out] sync object handle 1766*7688df22SAndroid Build Coastguard Worker * 1767*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1768*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1769*7688df22SAndroid Build Coastguard Worker * 1770*7688df22SAndroid Build Coastguard Worker */ 1771*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_import_syncobj(amdgpu_device_handle dev, 1772*7688df22SAndroid Build Coastguard Worker int shared_fd, 1773*7688df22SAndroid Build Coastguard Worker uint32_t *syncobj); 1774*7688df22SAndroid Build Coastguard Worker 1775*7688df22SAndroid Build Coastguard Worker /** 1776*7688df22SAndroid Build Coastguard Worker * Export kernel sync object to a sync_file. 1777*7688df22SAndroid Build Coastguard Worker * 1778*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1779*7688df22SAndroid Build Coastguard Worker * \param syncobj - \c [in] sync object handle 1780*7688df22SAndroid Build Coastguard Worker * \param sync_file_fd - \c [out] sync_file file descriptor. 1781*7688df22SAndroid Build Coastguard Worker * 1782*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1783*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1784*7688df22SAndroid Build Coastguard Worker * 1785*7688df22SAndroid Build Coastguard Worker */ 1786*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_export_sync_file(amdgpu_device_handle dev, 1787*7688df22SAndroid Build Coastguard Worker uint32_t syncobj, 1788*7688df22SAndroid Build Coastguard Worker int *sync_file_fd); 1789*7688df22SAndroid Build Coastguard Worker 1790*7688df22SAndroid Build Coastguard Worker /** 1791*7688df22SAndroid Build Coastguard Worker * Import kernel sync object from a sync_file. 1792*7688df22SAndroid Build Coastguard Worker * 1793*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1794*7688df22SAndroid Build Coastguard Worker * \param syncobj - \c [in] sync object handle 1795*7688df22SAndroid Build Coastguard Worker * \param sync_file_fd - \c [in] sync_file file descriptor. 1796*7688df22SAndroid Build Coastguard Worker * 1797*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1798*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1799*7688df22SAndroid Build Coastguard Worker * 1800*7688df22SAndroid Build Coastguard Worker */ 1801*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_import_sync_file(amdgpu_device_handle dev, 1802*7688df22SAndroid Build Coastguard Worker uint32_t syncobj, 1803*7688df22SAndroid Build Coastguard Worker int sync_file_fd); 1804*7688df22SAndroid Build Coastguard Worker /** 1805*7688df22SAndroid Build Coastguard Worker * Export kernel timeline sync object to a sync_file. 1806*7688df22SAndroid Build Coastguard Worker * 1807*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1808*7688df22SAndroid Build Coastguard Worker * \param syncobj - \c [in] sync object handle 1809*7688df22SAndroid Build Coastguard Worker * \param point - \c [in] timeline point 1810*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] flags 1811*7688df22SAndroid Build Coastguard Worker * \param sync_file_fd - \c [out] sync_file file descriptor. 1812*7688df22SAndroid Build Coastguard Worker * 1813*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1814*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1815*7688df22SAndroid Build Coastguard Worker * 1816*7688df22SAndroid Build Coastguard Worker */ 1817*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_export_sync_file2(amdgpu_device_handle dev, 1818*7688df22SAndroid Build Coastguard Worker uint32_t syncobj, 1819*7688df22SAndroid Build Coastguard Worker uint64_t point, 1820*7688df22SAndroid Build Coastguard Worker uint32_t flags, 1821*7688df22SAndroid Build Coastguard Worker int *sync_file_fd); 1822*7688df22SAndroid Build Coastguard Worker 1823*7688df22SAndroid Build Coastguard Worker /** 1824*7688df22SAndroid Build Coastguard Worker * Import kernel timeline sync object from a sync_file. 1825*7688df22SAndroid Build Coastguard Worker * 1826*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1827*7688df22SAndroid Build Coastguard Worker * \param syncobj - \c [in] sync object handle 1828*7688df22SAndroid Build Coastguard Worker * \param point - \c [in] timeline point 1829*7688df22SAndroid Build Coastguard Worker * \param sync_file_fd - \c [in] sync_file file descriptor. 1830*7688df22SAndroid Build Coastguard Worker * 1831*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1832*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1833*7688df22SAndroid Build Coastguard Worker * 1834*7688df22SAndroid Build Coastguard Worker */ 1835*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_import_sync_file2(amdgpu_device_handle dev, 1836*7688df22SAndroid Build Coastguard Worker uint32_t syncobj, 1837*7688df22SAndroid Build Coastguard Worker uint64_t point, 1838*7688df22SAndroid Build Coastguard Worker int sync_file_fd); 1839*7688df22SAndroid Build Coastguard Worker 1840*7688df22SAndroid Build Coastguard Worker /** 1841*7688df22SAndroid Build Coastguard Worker * transfer between syncbojs. 1842*7688df22SAndroid Build Coastguard Worker * 1843*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1844*7688df22SAndroid Build Coastguard Worker * \param dst_handle - \c [in] sync object handle 1845*7688df22SAndroid Build Coastguard Worker * \param dst_point - \c [in] timeline point, 0 presents dst is binary 1846*7688df22SAndroid Build Coastguard Worker * \param src_handle - \c [in] sync object handle 1847*7688df22SAndroid Build Coastguard Worker * \param src_point - \c [in] timeline point, 0 presents src is binary 1848*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] flags 1849*7688df22SAndroid Build Coastguard Worker * 1850*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1851*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1852*7688df22SAndroid Build Coastguard Worker * 1853*7688df22SAndroid Build Coastguard Worker */ 1854*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_syncobj_transfer(amdgpu_device_handle dev, 1855*7688df22SAndroid Build Coastguard Worker uint32_t dst_handle, 1856*7688df22SAndroid Build Coastguard Worker uint64_t dst_point, 1857*7688df22SAndroid Build Coastguard Worker uint32_t src_handle, 1858*7688df22SAndroid Build Coastguard Worker uint64_t src_point, 1859*7688df22SAndroid Build Coastguard Worker uint32_t flags); 1860*7688df22SAndroid Build Coastguard Worker 1861*7688df22SAndroid Build Coastguard Worker /** 1862*7688df22SAndroid Build Coastguard Worker * Export an amdgpu fence as a handle (syncobj or fd). 1863*7688df22SAndroid Build Coastguard Worker * 1864*7688df22SAndroid Build Coastguard Worker * \param what AMDGPU_FENCE_TO_HANDLE_GET_{SYNCOBJ, FD} 1865*7688df22SAndroid Build Coastguard Worker * \param out_handle returned handle 1866*7688df22SAndroid Build Coastguard Worker * 1867*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1868*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1869*7688df22SAndroid Build Coastguard Worker */ 1870*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_fence_to_handle(amdgpu_device_handle dev, 1871*7688df22SAndroid Build Coastguard Worker struct amdgpu_cs_fence *fence, 1872*7688df22SAndroid Build Coastguard Worker uint32_t what, 1873*7688df22SAndroid Build Coastguard Worker uint32_t *out_handle); 1874*7688df22SAndroid Build Coastguard Worker 1875*7688df22SAndroid Build Coastguard Worker /** 1876*7688df22SAndroid Build Coastguard Worker * Submit raw command submission to kernel 1877*7688df22SAndroid Build Coastguard Worker * 1878*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1879*7688df22SAndroid Build Coastguard Worker * \param context - \c [in] context handle for context id 1880*7688df22SAndroid Build Coastguard Worker * \param bo_list_handle - \c [in] request bo list handle (0 for none) 1881*7688df22SAndroid Build Coastguard Worker * \param num_chunks - \c [in] number of CS chunks to submit 1882*7688df22SAndroid Build Coastguard Worker * \param chunks - \c [in] array of CS chunks 1883*7688df22SAndroid Build Coastguard Worker * \param seq_no - \c [out] output sequence number for submission. 1884*7688df22SAndroid Build Coastguard Worker * 1885*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1886*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1887*7688df22SAndroid Build Coastguard Worker * 1888*7688df22SAndroid Build Coastguard Worker */ 1889*7688df22SAndroid Build Coastguard Worker struct drm_amdgpu_cs_chunk; 1890*7688df22SAndroid Build Coastguard Worker struct drm_amdgpu_cs_chunk_dep; 1891*7688df22SAndroid Build Coastguard Worker struct drm_amdgpu_cs_chunk_data; 1892*7688df22SAndroid Build Coastguard Worker 1893*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_submit_raw(amdgpu_device_handle dev, 1894*7688df22SAndroid Build Coastguard Worker amdgpu_context_handle context, 1895*7688df22SAndroid Build Coastguard Worker amdgpu_bo_list_handle bo_list_handle, 1896*7688df22SAndroid Build Coastguard Worker int num_chunks, 1897*7688df22SAndroid Build Coastguard Worker struct drm_amdgpu_cs_chunk *chunks, 1898*7688df22SAndroid Build Coastguard Worker uint64_t *seq_no); 1899*7688df22SAndroid Build Coastguard Worker 1900*7688df22SAndroid Build Coastguard Worker /** 1901*7688df22SAndroid Build Coastguard Worker * Submit raw command submission to the kernel with a raw BO list handle. 1902*7688df22SAndroid Build Coastguard Worker * 1903*7688df22SAndroid Build Coastguard Worker * \param dev - \c [in] device handle 1904*7688df22SAndroid Build Coastguard Worker * \param context - \c [in] context handle for context id 1905*7688df22SAndroid Build Coastguard Worker * \param bo_list_handle - \c [in] raw bo list handle (0 for none) 1906*7688df22SAndroid Build Coastguard Worker * \param num_chunks - \c [in] number of CS chunks to submit 1907*7688df22SAndroid Build Coastguard Worker * \param chunks - \c [in] array of CS chunks 1908*7688df22SAndroid Build Coastguard Worker * \param seq_no - \c [out] output sequence number for submission. 1909*7688df22SAndroid Build Coastguard Worker * 1910*7688df22SAndroid Build Coastguard Worker * \return 0 on success\n 1911*7688df22SAndroid Build Coastguard Worker * <0 - Negative POSIX Error code 1912*7688df22SAndroid Build Coastguard Worker * 1913*7688df22SAndroid Build Coastguard Worker * \sa amdgpu_bo_list_create_raw(), amdgpu_bo_list_destroy_raw() 1914*7688df22SAndroid Build Coastguard Worker */ 1915*7688df22SAndroid Build Coastguard Worker int amdgpu_cs_submit_raw2(amdgpu_device_handle dev, 1916*7688df22SAndroid Build Coastguard Worker amdgpu_context_handle context, 1917*7688df22SAndroid Build Coastguard Worker uint32_t bo_list_handle, 1918*7688df22SAndroid Build Coastguard Worker int num_chunks, 1919*7688df22SAndroid Build Coastguard Worker struct drm_amdgpu_cs_chunk *chunks, 1920*7688df22SAndroid Build Coastguard Worker uint64_t *seq_no); 1921*7688df22SAndroid Build Coastguard Worker 1922*7688df22SAndroid Build Coastguard Worker void amdgpu_cs_chunk_fence_to_dep(struct amdgpu_cs_fence *fence, 1923*7688df22SAndroid Build Coastguard Worker struct drm_amdgpu_cs_chunk_dep *dep); 1924*7688df22SAndroid Build Coastguard Worker void amdgpu_cs_chunk_fence_info_to_data(struct amdgpu_cs_fence_info *fence_info, 1925*7688df22SAndroid Build Coastguard Worker struct drm_amdgpu_cs_chunk_data *data); 1926*7688df22SAndroid Build Coastguard Worker 1927*7688df22SAndroid Build Coastguard Worker /** 1928*7688df22SAndroid Build Coastguard Worker * Reserve VMID 1929*7688df22SAndroid Build Coastguard Worker * \param context - \c [in] GPU Context 1930*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] TBD 1931*7688df22SAndroid Build Coastguard Worker * 1932*7688df22SAndroid Build Coastguard Worker * \return 0 on success otherwise POSIX Error code 1933*7688df22SAndroid Build Coastguard Worker */ 1934*7688df22SAndroid Build Coastguard Worker int amdgpu_vm_reserve_vmid(amdgpu_device_handle dev, uint32_t flags); 1935*7688df22SAndroid Build Coastguard Worker 1936*7688df22SAndroid Build Coastguard Worker /** 1937*7688df22SAndroid Build Coastguard Worker * Free reserved VMID 1938*7688df22SAndroid Build Coastguard Worker * \param context - \c [in] GPU Context 1939*7688df22SAndroid Build Coastguard Worker * \param flags - \c [in] TBD 1940*7688df22SAndroid Build Coastguard Worker * 1941*7688df22SAndroid Build Coastguard Worker * \return 0 on success otherwise POSIX Error code 1942*7688df22SAndroid Build Coastguard Worker */ 1943*7688df22SAndroid Build Coastguard Worker int amdgpu_vm_unreserve_vmid(amdgpu_device_handle dev, uint32_t flags); 1944*7688df22SAndroid Build Coastguard Worker 1945*7688df22SAndroid Build Coastguard Worker #ifdef __cplusplus 1946*7688df22SAndroid Build Coastguard Worker } 1947*7688df22SAndroid Build Coastguard Worker #endif 1948*7688df22SAndroid Build Coastguard Worker #endif /* #ifdef _AMDGPU_H_ */ 1949