xref: /aosp_15_r20/external/libdrm/amdgpu/amdgpu.h (revision 7688df22e49036ff52a766b7101da3a49edadb8c)
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