xref: /aosp_15_r20/external/mesa3d/include/drm-uapi/nouveau_drm.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2005 Stephane Marchesin.
3*61046927SAndroid Build Coastguard Worker  * All Rights Reserved.
4*61046927SAndroid Build Coastguard Worker  *
5*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
6*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
7*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
8*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
10*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
11*61046927SAndroid Build Coastguard Worker  *
12*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
13*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
14*61046927SAndroid Build Coastguard Worker  * Software.
15*61046927SAndroid Build Coastguard Worker  *
16*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19*61046927SAndroid Build Coastguard Worker  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20*61046927SAndroid Build Coastguard Worker  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21*61046927SAndroid Build Coastguard Worker  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22*61046927SAndroid Build Coastguard Worker  * OTHER DEALINGS IN THE SOFTWARE.
23*61046927SAndroid Build Coastguard Worker  */
24*61046927SAndroid Build Coastguard Worker 
25*61046927SAndroid Build Coastguard Worker #ifndef __NOUVEAU_DRM_H__
26*61046927SAndroid Build Coastguard Worker #define __NOUVEAU_DRM_H__
27*61046927SAndroid Build Coastguard Worker 
28*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_EVENT_NVIF                                       0x80000000
29*61046927SAndroid Build Coastguard Worker 
30*61046927SAndroid Build Coastguard Worker #include "drm.h"
31*61046927SAndroid Build Coastguard Worker 
32*61046927SAndroid Build Coastguard Worker #if defined(__cplusplus)
33*61046927SAndroid Build Coastguard Worker extern "C" {
34*61046927SAndroid Build Coastguard Worker #endif
35*61046927SAndroid Build Coastguard Worker 
36*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_PCI_VENDOR      3
37*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_PCI_DEVICE      4
38*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_BUS_TYPE        5
39*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_FB_SIZE         8
40*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_AGP_SIZE        9
41*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_CHIPSET_ID      11
42*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_VM_VRAM_BASE    12
43*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_GRAPH_UNITS     13
44*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_PTIMER_TIME     14
45*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_HAS_BO_USAGE    15
46*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_HAS_PAGEFLIP    16
47*61046927SAndroid Build Coastguard Worker 
48*61046927SAndroid Build Coastguard Worker /*
49*61046927SAndroid Build Coastguard Worker  * NOUVEAU_GETPARAM_EXEC_PUSH_MAX - query max pushes through getparam
50*61046927SAndroid Build Coastguard Worker  *
51*61046927SAndroid Build Coastguard Worker  * Query the maximum amount of IBs that can be pushed through a single
52*61046927SAndroid Build Coastguard Worker  * &drm_nouveau_exec structure and hence a single &DRM_IOCTL_NOUVEAU_EXEC
53*61046927SAndroid Build Coastguard Worker  * ioctl().
54*61046927SAndroid Build Coastguard Worker  */
55*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_EXEC_PUSH_MAX   17
56*61046927SAndroid Build Coastguard Worker 
57*61046927SAndroid Build Coastguard Worker /*
58*61046927SAndroid Build Coastguard Worker  * NOUVEAU_GETPARAM_VRAM_BAR_SIZE - query bar size
59*61046927SAndroid Build Coastguard Worker  *
60*61046927SAndroid Build Coastguard Worker  * Query the VRAM BAR size.
61*61046927SAndroid Build Coastguard Worker  */
62*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_VRAM_BAR_SIZE 18
63*61046927SAndroid Build Coastguard Worker 
64*61046927SAndroid Build Coastguard Worker /*
65*61046927SAndroid Build Coastguard Worker  * NOUVEAU_GETPARAM_VRAM_USED
66*61046927SAndroid Build Coastguard Worker  *
67*61046927SAndroid Build Coastguard Worker  * Get remaining VRAM size.
68*61046927SAndroid Build Coastguard Worker  */
69*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_VRAM_USED 19
70*61046927SAndroid Build Coastguard Worker 
71*61046927SAndroid Build Coastguard Worker /*
72*61046927SAndroid Build Coastguard Worker  * NOUVEAU_GETPARAM_HAS_VMA_TILEMODE
73*61046927SAndroid Build Coastguard Worker  *
74*61046927SAndroid Build Coastguard Worker  * Query whether tile mode and PTE kind are accepted with VM allocs or not.
75*61046927SAndroid Build Coastguard Worker  */
76*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_HAS_VMA_TILEMODE 20
77*61046927SAndroid Build Coastguard Worker 
78*61046927SAndroid Build Coastguard Worker struct drm_nouveau_getparam {
79*61046927SAndroid Build Coastguard Worker 	__u64 param;
80*61046927SAndroid Build Coastguard Worker 	__u64 value;
81*61046927SAndroid Build Coastguard Worker };
82*61046927SAndroid Build Coastguard Worker 
83*61046927SAndroid Build Coastguard Worker /*
84*61046927SAndroid Build Coastguard Worker  * Those are used to support selecting the main engine used on Kepler.
85*61046927SAndroid Build Coastguard Worker  * This goes into drm_nouveau_channel_alloc::tt_ctxdma_handle
86*61046927SAndroid Build Coastguard Worker  */
87*61046927SAndroid Build Coastguard Worker #define NOUVEAU_FIFO_ENGINE_GR  0x01
88*61046927SAndroid Build Coastguard Worker #define NOUVEAU_FIFO_ENGINE_VP  0x02
89*61046927SAndroid Build Coastguard Worker #define NOUVEAU_FIFO_ENGINE_PPP 0x04
90*61046927SAndroid Build Coastguard Worker #define NOUVEAU_FIFO_ENGINE_BSP 0x08
91*61046927SAndroid Build Coastguard Worker #define NOUVEAU_FIFO_ENGINE_CE  0x30
92*61046927SAndroid Build Coastguard Worker 
93*61046927SAndroid Build Coastguard Worker struct drm_nouveau_channel_alloc {
94*61046927SAndroid Build Coastguard Worker 	__u32     fb_ctxdma_handle;
95*61046927SAndroid Build Coastguard Worker 	__u32     tt_ctxdma_handle;
96*61046927SAndroid Build Coastguard Worker 
97*61046927SAndroid Build Coastguard Worker 	__s32     channel;
98*61046927SAndroid Build Coastguard Worker 	__u32     pushbuf_domains;
99*61046927SAndroid Build Coastguard Worker 
100*61046927SAndroid Build Coastguard Worker 	/* Notifier memory */
101*61046927SAndroid Build Coastguard Worker 	__u32     notifier_handle;
102*61046927SAndroid Build Coastguard Worker 
103*61046927SAndroid Build Coastguard Worker 	/* DRM-enforced subchannel assignments */
104*61046927SAndroid Build Coastguard Worker 	struct {
105*61046927SAndroid Build Coastguard Worker 		__u32 handle;
106*61046927SAndroid Build Coastguard Worker 		__u32 grclass;
107*61046927SAndroid Build Coastguard Worker 	} subchan[8];
108*61046927SAndroid Build Coastguard Worker 	__u32 nr_subchan;
109*61046927SAndroid Build Coastguard Worker };
110*61046927SAndroid Build Coastguard Worker 
111*61046927SAndroid Build Coastguard Worker struct drm_nouveau_channel_free {
112*61046927SAndroid Build Coastguard Worker 	__s32 channel;
113*61046927SAndroid Build Coastguard Worker };
114*61046927SAndroid Build Coastguard Worker 
115*61046927SAndroid Build Coastguard Worker struct drm_nouveau_notifierobj_alloc {
116*61046927SAndroid Build Coastguard Worker 	__u32 channel;
117*61046927SAndroid Build Coastguard Worker 	__u32 handle;
118*61046927SAndroid Build Coastguard Worker 	__u32 size;
119*61046927SAndroid Build Coastguard Worker 	__u32 offset;
120*61046927SAndroid Build Coastguard Worker };
121*61046927SAndroid Build Coastguard Worker 
122*61046927SAndroid Build Coastguard Worker struct drm_nouveau_gpuobj_free {
123*61046927SAndroid Build Coastguard Worker 	__s32 channel;
124*61046927SAndroid Build Coastguard Worker 	__u32 handle;
125*61046927SAndroid Build Coastguard Worker };
126*61046927SAndroid Build Coastguard Worker 
127*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_DOMAIN_CPU       (1 << 0)
128*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_DOMAIN_VRAM      (1 << 1)
129*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_DOMAIN_GART      (1 << 2)
130*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_DOMAIN_MAPPABLE  (1 << 3)
131*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_DOMAIN_COHERENT  (1 << 4)
132*61046927SAndroid Build Coastguard Worker /* The BO will never be shared via import or export. */
133*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_DOMAIN_NO_SHARE  (1 << 5)
134*61046927SAndroid Build Coastguard Worker 
135*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_COMP        0x00030000 /* nv50-only */
136*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00
137*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_16BPP       0x00000001
138*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_32BPP       0x00000002
139*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_ZETA        0x00000004
140*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_NONCONTIG   0x00000008
141*61046927SAndroid Build Coastguard Worker 
142*61046927SAndroid Build Coastguard Worker struct drm_nouveau_gem_info {
143*61046927SAndroid Build Coastguard Worker 	__u32 handle;
144*61046927SAndroid Build Coastguard Worker 	__u32 domain;
145*61046927SAndroid Build Coastguard Worker 	__u64 size;
146*61046927SAndroid Build Coastguard Worker 	__u64 offset;
147*61046927SAndroid Build Coastguard Worker 	__u64 map_handle;
148*61046927SAndroid Build Coastguard Worker 	__u32 tile_mode;
149*61046927SAndroid Build Coastguard Worker 	__u32 tile_flags;
150*61046927SAndroid Build Coastguard Worker };
151*61046927SAndroid Build Coastguard Worker 
152*61046927SAndroid Build Coastguard Worker struct drm_nouveau_gem_new {
153*61046927SAndroid Build Coastguard Worker 	struct drm_nouveau_gem_info info;
154*61046927SAndroid Build Coastguard Worker 	__u32 channel_hint;
155*61046927SAndroid Build Coastguard Worker 	__u32 align;
156*61046927SAndroid Build Coastguard Worker };
157*61046927SAndroid Build Coastguard Worker 
158*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_MAX_BUFFERS 1024
159*61046927SAndroid Build Coastguard Worker struct drm_nouveau_gem_pushbuf_bo_presumed {
160*61046927SAndroid Build Coastguard Worker 	__u32 valid;
161*61046927SAndroid Build Coastguard Worker 	__u32 domain;
162*61046927SAndroid Build Coastguard Worker 	__u64 offset;
163*61046927SAndroid Build Coastguard Worker };
164*61046927SAndroid Build Coastguard Worker 
165*61046927SAndroid Build Coastguard Worker struct drm_nouveau_gem_pushbuf_bo {
166*61046927SAndroid Build Coastguard Worker 	__u64 user_priv;
167*61046927SAndroid Build Coastguard Worker 	__u32 handle;
168*61046927SAndroid Build Coastguard Worker 	__u32 read_domains;
169*61046927SAndroid Build Coastguard Worker 	__u32 write_domains;
170*61046927SAndroid Build Coastguard Worker 	__u32 valid_domains;
171*61046927SAndroid Build Coastguard Worker 	struct drm_nouveau_gem_pushbuf_bo_presumed presumed;
172*61046927SAndroid Build Coastguard Worker };
173*61046927SAndroid Build Coastguard Worker 
174*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_RELOC_LOW  (1 << 0)
175*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_RELOC_HIGH (1 << 1)
176*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_RELOC_OR   (1 << 2)
177*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_MAX_RELOCS 1024
178*61046927SAndroid Build Coastguard Worker struct drm_nouveau_gem_pushbuf_reloc {
179*61046927SAndroid Build Coastguard Worker 	__u32 reloc_bo_index;
180*61046927SAndroid Build Coastguard Worker 	__u32 reloc_bo_offset;
181*61046927SAndroid Build Coastguard Worker 	__u32 bo_index;
182*61046927SAndroid Build Coastguard Worker 	__u32 flags;
183*61046927SAndroid Build Coastguard Worker 	__u32 data;
184*61046927SAndroid Build Coastguard Worker 	__u32 vor;
185*61046927SAndroid Build Coastguard Worker 	__u32 tor;
186*61046927SAndroid Build Coastguard Worker };
187*61046927SAndroid Build Coastguard Worker 
188*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_MAX_PUSH 512
189*61046927SAndroid Build Coastguard Worker struct drm_nouveau_gem_pushbuf_push {
190*61046927SAndroid Build Coastguard Worker 	__u32 bo_index;
191*61046927SAndroid Build Coastguard Worker 	__u32 pad;
192*61046927SAndroid Build Coastguard Worker 	__u64 offset;
193*61046927SAndroid Build Coastguard Worker 	__u64 length;
194*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_PUSHBUF_NO_PREFETCH (1 << 23)
195*61046927SAndroid Build Coastguard Worker };
196*61046927SAndroid Build Coastguard Worker 
197*61046927SAndroid Build Coastguard Worker struct drm_nouveau_gem_pushbuf {
198*61046927SAndroid Build Coastguard Worker 	__u32 channel;
199*61046927SAndroid Build Coastguard Worker 	__u32 nr_buffers;
200*61046927SAndroid Build Coastguard Worker 	__u64 buffers;
201*61046927SAndroid Build Coastguard Worker 	__u32 nr_relocs;
202*61046927SAndroid Build Coastguard Worker 	__u32 nr_push;
203*61046927SAndroid Build Coastguard Worker 	__u64 relocs;
204*61046927SAndroid Build Coastguard Worker 	__u64 push;
205*61046927SAndroid Build Coastguard Worker 	__u32 suffix0;
206*61046927SAndroid Build Coastguard Worker 	__u32 suffix1;
207*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_PUSHBUF_SYNC                                    (1ULL << 0)
208*61046927SAndroid Build Coastguard Worker 	__u64 vram_available;
209*61046927SAndroid Build Coastguard Worker 	__u64 gart_available;
210*61046927SAndroid Build Coastguard Worker };
211*61046927SAndroid Build Coastguard Worker 
212*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_CPU_PREP_NOWAIT                                  0x00000001
213*61046927SAndroid Build Coastguard Worker #define NOUVEAU_GEM_CPU_PREP_WRITE                                   0x00000004
214*61046927SAndroid Build Coastguard Worker struct drm_nouveau_gem_cpu_prep {
215*61046927SAndroid Build Coastguard Worker 	__u32 handle;
216*61046927SAndroid Build Coastguard Worker 	__u32 flags;
217*61046927SAndroid Build Coastguard Worker };
218*61046927SAndroid Build Coastguard Worker 
219*61046927SAndroid Build Coastguard Worker struct drm_nouveau_gem_cpu_fini {
220*61046927SAndroid Build Coastguard Worker 	__u32 handle;
221*61046927SAndroid Build Coastguard Worker };
222*61046927SAndroid Build Coastguard Worker 
223*61046927SAndroid Build Coastguard Worker /**
224*61046927SAndroid Build Coastguard Worker  * struct drm_nouveau_sync - sync object
225*61046927SAndroid Build Coastguard Worker  *
226*61046927SAndroid Build Coastguard Worker  * This structure serves as synchronization mechanism for (potentially)
227*61046927SAndroid Build Coastguard Worker  * asynchronous operations such as EXEC or VM_BIND.
228*61046927SAndroid Build Coastguard Worker  */
229*61046927SAndroid Build Coastguard Worker struct drm_nouveau_sync {
230*61046927SAndroid Build Coastguard Worker 	/**
231*61046927SAndroid Build Coastguard Worker 	 * @flags: the flags for a sync object
232*61046927SAndroid Build Coastguard Worker 	 *
233*61046927SAndroid Build Coastguard Worker 	 * The first 8 bits are used to determine the type of the sync object.
234*61046927SAndroid Build Coastguard Worker 	 */
235*61046927SAndroid Build Coastguard Worker 	__u32 flags;
236*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_SYNC_SYNCOBJ 0x0
237*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_SYNC_TIMELINE_SYNCOBJ 0x1
238*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_SYNC_TYPE_MASK 0xf
239*61046927SAndroid Build Coastguard Worker 	/**
240*61046927SAndroid Build Coastguard Worker 	 * @handle: the handle of the sync object
241*61046927SAndroid Build Coastguard Worker 	 */
242*61046927SAndroid Build Coastguard Worker 	__u32 handle;
243*61046927SAndroid Build Coastguard Worker 	/**
244*61046927SAndroid Build Coastguard Worker 	 * @timeline_value:
245*61046927SAndroid Build Coastguard Worker 	 *
246*61046927SAndroid Build Coastguard Worker 	 * The timeline point of the sync object in case the syncobj is of
247*61046927SAndroid Build Coastguard Worker 	 * type DRM_NOUVEAU_SYNC_TIMELINE_SYNCOBJ.
248*61046927SAndroid Build Coastguard Worker 	 */
249*61046927SAndroid Build Coastguard Worker 	__u64 timeline_value;
250*61046927SAndroid Build Coastguard Worker };
251*61046927SAndroid Build Coastguard Worker 
252*61046927SAndroid Build Coastguard Worker /**
253*61046927SAndroid Build Coastguard Worker  * struct drm_nouveau_vm_init - GPU VA space init structure
254*61046927SAndroid Build Coastguard Worker  *
255*61046927SAndroid Build Coastguard Worker  * Used to initialize the GPU's VA space for a user client, telling the kernel
256*61046927SAndroid Build Coastguard Worker  * which portion of the VA space is managed by the UMD and kernel respectively.
257*61046927SAndroid Build Coastguard Worker  *
258*61046927SAndroid Build Coastguard Worker  * For the UMD to use the VM_BIND uAPI, this must be called before any BOs or
259*61046927SAndroid Build Coastguard Worker  * channels are created; if called afterwards DRM_IOCTL_NOUVEAU_VM_INIT fails
260*61046927SAndroid Build Coastguard Worker  * with -ENOSYS.
261*61046927SAndroid Build Coastguard Worker  */
262*61046927SAndroid Build Coastguard Worker struct drm_nouveau_vm_init {
263*61046927SAndroid Build Coastguard Worker 	/**
264*61046927SAndroid Build Coastguard Worker 	 * @kernel_managed_addr: start address of the kernel managed VA space
265*61046927SAndroid Build Coastguard Worker 	 * region
266*61046927SAndroid Build Coastguard Worker 	 */
267*61046927SAndroid Build Coastguard Worker 	__u64 kernel_managed_addr;
268*61046927SAndroid Build Coastguard Worker 	/**
269*61046927SAndroid Build Coastguard Worker 	 * @kernel_managed_size: size of the kernel managed VA space region in
270*61046927SAndroid Build Coastguard Worker 	 * bytes
271*61046927SAndroid Build Coastguard Worker 	 */
272*61046927SAndroid Build Coastguard Worker 	__u64 kernel_managed_size;
273*61046927SAndroid Build Coastguard Worker };
274*61046927SAndroid Build Coastguard Worker 
275*61046927SAndroid Build Coastguard Worker /**
276*61046927SAndroid Build Coastguard Worker  * struct drm_nouveau_vm_bind_op - VM_BIND operation
277*61046927SAndroid Build Coastguard Worker  *
278*61046927SAndroid Build Coastguard Worker  * This structure represents a single VM_BIND operation. UMDs should pass
279*61046927SAndroid Build Coastguard Worker  * an array of this structure via struct drm_nouveau_vm_bind's &op_ptr field.
280*61046927SAndroid Build Coastguard Worker  */
281*61046927SAndroid Build Coastguard Worker struct drm_nouveau_vm_bind_op {
282*61046927SAndroid Build Coastguard Worker 	/**
283*61046927SAndroid Build Coastguard Worker 	 * @op: the operation type
284*61046927SAndroid Build Coastguard Worker 	 *
285*61046927SAndroid Build Coastguard Worker 	 * Supported values:
286*61046927SAndroid Build Coastguard Worker 	 *
287*61046927SAndroid Build Coastguard Worker 	 * %DRM_NOUVEAU_VM_BIND_OP_MAP - Map a GEM object to the GPU's VA
288*61046927SAndroid Build Coastguard Worker 	 * space. Optionally, the &DRM_NOUVEAU_VM_BIND_SPARSE flag can be
289*61046927SAndroid Build Coastguard Worker 	 * passed to instruct the kernel to create sparse mappings for the
290*61046927SAndroid Build Coastguard Worker 	 * given range.
291*61046927SAndroid Build Coastguard Worker 	 *
292*61046927SAndroid Build Coastguard Worker 	 * %DRM_NOUVEAU_VM_BIND_OP_UNMAP - Unmap an existing mapping in the
293*61046927SAndroid Build Coastguard Worker 	 * GPU's VA space. If the region the mapping is located in is a
294*61046927SAndroid Build Coastguard Worker 	 * sparse region, new sparse mappings are created where the unmapped
295*61046927SAndroid Build Coastguard Worker 	 * (memory backed) mapping was mapped previously. To remove a sparse
296*61046927SAndroid Build Coastguard Worker 	 * region the &DRM_NOUVEAU_VM_BIND_SPARSE must be set.
297*61046927SAndroid Build Coastguard Worker 	 */
298*61046927SAndroid Build Coastguard Worker 	__u32 op;
299*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_VM_BIND_OP_MAP 0x0
300*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_VM_BIND_OP_UNMAP 0x1
301*61046927SAndroid Build Coastguard Worker 	/**
302*61046927SAndroid Build Coastguard Worker 	 * @flags: the flags for a &drm_nouveau_vm_bind_op
303*61046927SAndroid Build Coastguard Worker 	 *
304*61046927SAndroid Build Coastguard Worker 	 * Supported values:
305*61046927SAndroid Build Coastguard Worker 	 *
306*61046927SAndroid Build Coastguard Worker 	 * %DRM_NOUVEAU_VM_BIND_SPARSE - Indicates that an allocated VA
307*61046927SAndroid Build Coastguard Worker 	 * space region should be sparse.
308*61046927SAndroid Build Coastguard Worker 	 */
309*61046927SAndroid Build Coastguard Worker 	__u32 flags;
310*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_VM_BIND_SPARSE (1 << 8)
311*61046927SAndroid Build Coastguard Worker 	/**
312*61046927SAndroid Build Coastguard Worker 	 * @handle: the handle of the DRM GEM object to map
313*61046927SAndroid Build Coastguard Worker 	 */
314*61046927SAndroid Build Coastguard Worker 	__u32 handle;
315*61046927SAndroid Build Coastguard Worker 	/**
316*61046927SAndroid Build Coastguard Worker 	 * @pad: 32 bit padding, should be 0
317*61046927SAndroid Build Coastguard Worker 	 */
318*61046927SAndroid Build Coastguard Worker 	__u32 pad;
319*61046927SAndroid Build Coastguard Worker 	/**
320*61046927SAndroid Build Coastguard Worker 	 * @addr:
321*61046927SAndroid Build Coastguard Worker 	 *
322*61046927SAndroid Build Coastguard Worker 	 * the address the VA space region or (memory backed) mapping should be mapped to
323*61046927SAndroid Build Coastguard Worker 	 */
324*61046927SAndroid Build Coastguard Worker 	__u64 addr;
325*61046927SAndroid Build Coastguard Worker 	/**
326*61046927SAndroid Build Coastguard Worker 	 * @bo_offset: the offset within the BO backing the mapping
327*61046927SAndroid Build Coastguard Worker 	 */
328*61046927SAndroid Build Coastguard Worker 	__u64 bo_offset;
329*61046927SAndroid Build Coastguard Worker 	/**
330*61046927SAndroid Build Coastguard Worker 	 * @range: the size of the requested mapping in bytes
331*61046927SAndroid Build Coastguard Worker 	 */
332*61046927SAndroid Build Coastguard Worker 	__u64 range;
333*61046927SAndroid Build Coastguard Worker };
334*61046927SAndroid Build Coastguard Worker 
335*61046927SAndroid Build Coastguard Worker /**
336*61046927SAndroid Build Coastguard Worker  * struct drm_nouveau_vm_bind - structure for DRM_IOCTL_NOUVEAU_VM_BIND
337*61046927SAndroid Build Coastguard Worker  */
338*61046927SAndroid Build Coastguard Worker struct drm_nouveau_vm_bind {
339*61046927SAndroid Build Coastguard Worker 	/**
340*61046927SAndroid Build Coastguard Worker 	 * @op_count: the number of &drm_nouveau_vm_bind_op
341*61046927SAndroid Build Coastguard Worker 	 */
342*61046927SAndroid Build Coastguard Worker 	__u32 op_count;
343*61046927SAndroid Build Coastguard Worker 	/**
344*61046927SAndroid Build Coastguard Worker 	 * @flags: the flags for a &drm_nouveau_vm_bind ioctl
345*61046927SAndroid Build Coastguard Worker 	 *
346*61046927SAndroid Build Coastguard Worker 	 * Supported values:
347*61046927SAndroid Build Coastguard Worker 	 *
348*61046927SAndroid Build Coastguard Worker 	 * %DRM_NOUVEAU_VM_BIND_RUN_ASYNC - Indicates that the given VM_BIND
349*61046927SAndroid Build Coastguard Worker 	 * operation should be executed asynchronously by the kernel.
350*61046927SAndroid Build Coastguard Worker 	 *
351*61046927SAndroid Build Coastguard Worker 	 * If this flag is not supplied the kernel executes the associated
352*61046927SAndroid Build Coastguard Worker 	 * operations synchronously and doesn't accept any &drm_nouveau_sync
353*61046927SAndroid Build Coastguard Worker 	 * objects.
354*61046927SAndroid Build Coastguard Worker 	 */
355*61046927SAndroid Build Coastguard Worker 	__u32 flags;
356*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_VM_BIND_RUN_ASYNC 0x1
357*61046927SAndroid Build Coastguard Worker 	/**
358*61046927SAndroid Build Coastguard Worker 	 * @wait_count: the number of wait &drm_nouveau_syncs
359*61046927SAndroid Build Coastguard Worker 	 */
360*61046927SAndroid Build Coastguard Worker 	__u32 wait_count;
361*61046927SAndroid Build Coastguard Worker 	/**
362*61046927SAndroid Build Coastguard Worker 	 * @sig_count: the number of &drm_nouveau_syncs to signal when finished
363*61046927SAndroid Build Coastguard Worker 	 */
364*61046927SAndroid Build Coastguard Worker 	__u32 sig_count;
365*61046927SAndroid Build Coastguard Worker 	/**
366*61046927SAndroid Build Coastguard Worker 	 * @wait_ptr: pointer to &drm_nouveau_syncs to wait for
367*61046927SAndroid Build Coastguard Worker 	 */
368*61046927SAndroid Build Coastguard Worker 	__u64 wait_ptr;
369*61046927SAndroid Build Coastguard Worker 	/**
370*61046927SAndroid Build Coastguard Worker 	 * @sig_ptr: pointer to &drm_nouveau_syncs to signal when finished
371*61046927SAndroid Build Coastguard Worker 	 */
372*61046927SAndroid Build Coastguard Worker 	__u64 sig_ptr;
373*61046927SAndroid Build Coastguard Worker 	/**
374*61046927SAndroid Build Coastguard Worker 	 * @op_ptr: pointer to the &drm_nouveau_vm_bind_ops to execute
375*61046927SAndroid Build Coastguard Worker 	 */
376*61046927SAndroid Build Coastguard Worker 	__u64 op_ptr;
377*61046927SAndroid Build Coastguard Worker };
378*61046927SAndroid Build Coastguard Worker 
379*61046927SAndroid Build Coastguard Worker /**
380*61046927SAndroid Build Coastguard Worker  * struct drm_nouveau_exec_push - EXEC push operation
381*61046927SAndroid Build Coastguard Worker  *
382*61046927SAndroid Build Coastguard Worker  * This structure represents a single EXEC push operation. UMDs should pass an
383*61046927SAndroid Build Coastguard Worker  * array of this structure via struct drm_nouveau_exec's &push_ptr field.
384*61046927SAndroid Build Coastguard Worker  */
385*61046927SAndroid Build Coastguard Worker struct drm_nouveau_exec_push {
386*61046927SAndroid Build Coastguard Worker 	/**
387*61046927SAndroid Build Coastguard Worker 	 * @va: the virtual address of the push buffer mapping
388*61046927SAndroid Build Coastguard Worker 	 */
389*61046927SAndroid Build Coastguard Worker 	__u64 va;
390*61046927SAndroid Build Coastguard Worker 	/**
391*61046927SAndroid Build Coastguard Worker 	 * @va_len: the length of the push buffer mapping
392*61046927SAndroid Build Coastguard Worker 	 */
393*61046927SAndroid Build Coastguard Worker 	__u32 va_len;
394*61046927SAndroid Build Coastguard Worker 	/**
395*61046927SAndroid Build Coastguard Worker 	 * @flags: the flags for this push buffer mapping
396*61046927SAndroid Build Coastguard Worker 	 */
397*61046927SAndroid Build Coastguard Worker 	__u32 flags;
398*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_EXEC_PUSH_NO_PREFETCH 0x1
399*61046927SAndroid Build Coastguard Worker };
400*61046927SAndroid Build Coastguard Worker 
401*61046927SAndroid Build Coastguard Worker /**
402*61046927SAndroid Build Coastguard Worker  * struct drm_nouveau_exec - structure for DRM_IOCTL_NOUVEAU_EXEC
403*61046927SAndroid Build Coastguard Worker  */
404*61046927SAndroid Build Coastguard Worker struct drm_nouveau_exec {
405*61046927SAndroid Build Coastguard Worker 	/**
406*61046927SAndroid Build Coastguard Worker 	 * @channel: the channel to execute the push buffer in
407*61046927SAndroid Build Coastguard Worker 	 */
408*61046927SAndroid Build Coastguard Worker 	__u32 channel;
409*61046927SAndroid Build Coastguard Worker 	/**
410*61046927SAndroid Build Coastguard Worker 	 * @push_count: the number of &drm_nouveau_exec_push ops
411*61046927SAndroid Build Coastguard Worker 	 */
412*61046927SAndroid Build Coastguard Worker 	__u32 push_count;
413*61046927SAndroid Build Coastguard Worker 	/**
414*61046927SAndroid Build Coastguard Worker 	 * @wait_count: the number of wait &drm_nouveau_syncs
415*61046927SAndroid Build Coastguard Worker 	 */
416*61046927SAndroid Build Coastguard Worker 	__u32 wait_count;
417*61046927SAndroid Build Coastguard Worker 	/**
418*61046927SAndroid Build Coastguard Worker 	 * @sig_count: the number of &drm_nouveau_syncs to signal when finished
419*61046927SAndroid Build Coastguard Worker 	 */
420*61046927SAndroid Build Coastguard Worker 	__u32 sig_count;
421*61046927SAndroid Build Coastguard Worker 	/**
422*61046927SAndroid Build Coastguard Worker 	 * @wait_ptr: pointer to &drm_nouveau_syncs to wait for
423*61046927SAndroid Build Coastguard Worker 	 */
424*61046927SAndroid Build Coastguard Worker 	__u64 wait_ptr;
425*61046927SAndroid Build Coastguard Worker 	/**
426*61046927SAndroid Build Coastguard Worker 	 * @sig_ptr: pointer to &drm_nouveau_syncs to signal when finished
427*61046927SAndroid Build Coastguard Worker 	 */
428*61046927SAndroid Build Coastguard Worker 	__u64 sig_ptr;
429*61046927SAndroid Build Coastguard Worker 	/**
430*61046927SAndroid Build Coastguard Worker 	 * @push_ptr: pointer to &drm_nouveau_exec_push ops
431*61046927SAndroid Build Coastguard Worker 	 */
432*61046927SAndroid Build Coastguard Worker 	__u64 push_ptr;
433*61046927SAndroid Build Coastguard Worker };
434*61046927SAndroid Build Coastguard Worker 
435*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GETPARAM           0x00
436*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_SETPARAM           0x01 /* deprecated */
437*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_CHANNEL_ALLOC      0x02
438*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_CHANNEL_FREE       0x03
439*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GROBJ_ALLOC        0x04 /* deprecated */
440*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC  0x05 /* deprecated */
441*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GPUOBJ_FREE        0x06 /* deprecated */
442*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_NVIF               0x07
443*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_SVM_INIT           0x08
444*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_SVM_BIND           0x09
445*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_VM_INIT            0x10
446*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_VM_BIND            0x11
447*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_EXEC               0x12
448*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GEM_NEW            0x40
449*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GEM_PUSHBUF        0x41
450*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GEM_CPU_PREP       0x42
451*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GEM_CPU_FINI       0x43
452*61046927SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GEM_INFO           0x44
453*61046927SAndroid Build Coastguard Worker 
454*61046927SAndroid Build Coastguard Worker struct drm_nouveau_svm_init {
455*61046927SAndroid Build Coastguard Worker 	__u64 unmanaged_addr;
456*61046927SAndroid Build Coastguard Worker 	__u64 unmanaged_size;
457*61046927SAndroid Build Coastguard Worker };
458*61046927SAndroid Build Coastguard Worker 
459*61046927SAndroid Build Coastguard Worker struct drm_nouveau_svm_bind {
460*61046927SAndroid Build Coastguard Worker 	__u64 header;
461*61046927SAndroid Build Coastguard Worker 	__u64 va_start;
462*61046927SAndroid Build Coastguard Worker 	__u64 va_end;
463*61046927SAndroid Build Coastguard Worker 	__u64 npages;
464*61046927SAndroid Build Coastguard Worker 	__u64 stride;
465*61046927SAndroid Build Coastguard Worker 	__u64 result;
466*61046927SAndroid Build Coastguard Worker 	__u64 reserved0;
467*61046927SAndroid Build Coastguard Worker 	__u64 reserved1;
468*61046927SAndroid Build Coastguard Worker };
469*61046927SAndroid Build Coastguard Worker 
470*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_COMMAND_SHIFT          0
471*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_COMMAND_BITS           8
472*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_COMMAND_MASK           ((1 << 8) - 1)
473*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_PRIORITY_SHIFT         8
474*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_PRIORITY_BITS          8
475*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_PRIORITY_MASK          ((1 << 8) - 1)
476*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_TARGET_SHIFT           16
477*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_TARGET_BITS            32
478*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_TARGET_MASK            0xffffffff
479*61046927SAndroid Build Coastguard Worker 
480*61046927SAndroid Build Coastguard Worker /*
481*61046927SAndroid Build Coastguard Worker  * Below is use to validate ioctl argument, userspace can also use it to make
482*61046927SAndroid Build Coastguard Worker  * sure that no bit are set beyond known fields for a given kernel version.
483*61046927SAndroid Build Coastguard Worker  */
484*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_VALID_BITS     48
485*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_VALID_MASK     ((1ULL << NOUVEAU_SVM_BIND_VALID_BITS) - 1)
486*61046927SAndroid Build Coastguard Worker 
487*61046927SAndroid Build Coastguard Worker 
488*61046927SAndroid Build Coastguard Worker /*
489*61046927SAndroid Build Coastguard Worker  * NOUVEAU_BIND_COMMAND__MIGRATE: synchronous migrate to target memory.
490*61046927SAndroid Build Coastguard Worker  * result: number of page successfuly migrate to the target memory.
491*61046927SAndroid Build Coastguard Worker  */
492*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_COMMAND__MIGRATE               0
493*61046927SAndroid Build Coastguard Worker 
494*61046927SAndroid Build Coastguard Worker /*
495*61046927SAndroid Build Coastguard Worker  * NOUVEAU_SVM_BIND_HEADER_TARGET__GPU_VRAM: target the GPU VRAM memory.
496*61046927SAndroid Build Coastguard Worker  */
497*61046927SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_TARGET__GPU_VRAM               (1UL << 31)
498*61046927SAndroid Build Coastguard Worker 
499*61046927SAndroid Build Coastguard Worker 
500*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_GETPARAM           DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GETPARAM, struct drm_nouveau_getparam)
501*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_CHANNEL_ALLOC      DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_CHANNEL_ALLOC, struct drm_nouveau_channel_alloc)
502*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_CHANNEL_FREE       DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_CHANNEL_FREE, struct drm_nouveau_channel_free)
503*61046927SAndroid Build Coastguard Worker 
504*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_SVM_INIT           DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_SVM_INIT, struct drm_nouveau_svm_init)
505*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_SVM_BIND           DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_SVM_BIND, struct drm_nouveau_svm_bind)
506*61046927SAndroid Build Coastguard Worker 
507*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_GEM_NEW            DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_NEW, struct drm_nouveau_gem_new)
508*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_GEM_PUSHBUF        DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_PUSHBUF, struct drm_nouveau_gem_pushbuf)
509*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_GEM_CPU_PREP       DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_PREP, struct drm_nouveau_gem_cpu_prep)
510*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_GEM_CPU_FINI       DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_FINI, struct drm_nouveau_gem_cpu_fini)
511*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_GEM_INFO           DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_INFO, struct drm_nouveau_gem_info)
512*61046927SAndroid Build Coastguard Worker 
513*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_VM_INIT            DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_VM_INIT, struct drm_nouveau_vm_init)
514*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_VM_BIND            DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_VM_BIND, struct drm_nouveau_vm_bind)
515*61046927SAndroid Build Coastguard Worker #define DRM_IOCTL_NOUVEAU_EXEC               DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_EXEC, struct drm_nouveau_exec)
516*61046927SAndroid Build Coastguard Worker #if defined(__cplusplus)
517*61046927SAndroid Build Coastguard Worker }
518*61046927SAndroid Build Coastguard Worker #endif
519*61046927SAndroid Build Coastguard Worker 
520*61046927SAndroid Build Coastguard Worker #endif /* __NOUVEAU_DRM_H__ */
521