xref: /aosp_15_r20/external/libdrm/include/drm/nouveau_drm.h (revision 7688df22e49036ff52a766b7101da3a49edadb8c)
1*7688df22SAndroid Build Coastguard Worker /*
2*7688df22SAndroid Build Coastguard Worker  * Copyright 2005 Stephane Marchesin.
3*7688df22SAndroid Build Coastguard Worker  * All Rights Reserved.
4*7688df22SAndroid Build Coastguard Worker  *
5*7688df22SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
6*7688df22SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
7*7688df22SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
8*7688df22SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*7688df22SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
10*7688df22SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
11*7688df22SAndroid Build Coastguard Worker  *
12*7688df22SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
13*7688df22SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
14*7688df22SAndroid Build Coastguard Worker  * Software.
15*7688df22SAndroid Build Coastguard Worker  *
16*7688df22SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*7688df22SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*7688df22SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19*7688df22SAndroid Build Coastguard Worker  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20*7688df22SAndroid Build Coastguard Worker  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21*7688df22SAndroid Build Coastguard Worker  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22*7688df22SAndroid Build Coastguard Worker  * OTHER DEALINGS IN THE SOFTWARE.
23*7688df22SAndroid Build Coastguard Worker  */
24*7688df22SAndroid Build Coastguard Worker 
25*7688df22SAndroid Build Coastguard Worker #ifndef __NOUVEAU_DRM_H__
26*7688df22SAndroid Build Coastguard Worker #define __NOUVEAU_DRM_H__
27*7688df22SAndroid Build Coastguard Worker 
28*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_DRM_HEADER_PATCHLEVEL 16
29*7688df22SAndroid Build Coastguard Worker 
30*7688df22SAndroid Build Coastguard Worker #include "drm.h"
31*7688df22SAndroid Build Coastguard Worker 
32*7688df22SAndroid Build Coastguard Worker #if defined(__cplusplus)
33*7688df22SAndroid Build Coastguard Worker extern "C" {
34*7688df22SAndroid Build Coastguard Worker #endif
35*7688df22SAndroid Build Coastguard Worker 
36*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_channel_alloc {
37*7688df22SAndroid Build Coastguard Worker 	uint32_t     fb_ctxdma_handle;
38*7688df22SAndroid Build Coastguard Worker 	uint32_t     tt_ctxdma_handle;
39*7688df22SAndroid Build Coastguard Worker 
40*7688df22SAndroid Build Coastguard Worker 	int          channel;
41*7688df22SAndroid Build Coastguard Worker 	uint32_t     pushbuf_domains;
42*7688df22SAndroid Build Coastguard Worker 
43*7688df22SAndroid Build Coastguard Worker 	/* Notifier memory */
44*7688df22SAndroid Build Coastguard Worker 	uint32_t     notifier_handle;
45*7688df22SAndroid Build Coastguard Worker 
46*7688df22SAndroid Build Coastguard Worker 	/* DRM-enforced subchannel assignments */
47*7688df22SAndroid Build Coastguard Worker 	struct {
48*7688df22SAndroid Build Coastguard Worker 		uint32_t handle;
49*7688df22SAndroid Build Coastguard Worker 		uint32_t grclass;
50*7688df22SAndroid Build Coastguard Worker 	} subchan[8];
51*7688df22SAndroid Build Coastguard Worker 	uint32_t nr_subchan;
52*7688df22SAndroid Build Coastguard Worker };
53*7688df22SAndroid Build Coastguard Worker 
54*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_channel_free {
55*7688df22SAndroid Build Coastguard Worker 	int channel;
56*7688df22SAndroid Build Coastguard Worker };
57*7688df22SAndroid Build Coastguard Worker 
58*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_grobj_alloc {
59*7688df22SAndroid Build Coastguard Worker 	int      channel;
60*7688df22SAndroid Build Coastguard Worker 	uint32_t handle;
61*7688df22SAndroid Build Coastguard Worker 	int      class;
62*7688df22SAndroid Build Coastguard Worker };
63*7688df22SAndroid Build Coastguard Worker 
64*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_notifierobj_alloc {
65*7688df22SAndroid Build Coastguard Worker 	uint32_t channel;
66*7688df22SAndroid Build Coastguard Worker 	uint32_t handle;
67*7688df22SAndroid Build Coastguard Worker 	uint32_t size;
68*7688df22SAndroid Build Coastguard Worker 	uint32_t offset;
69*7688df22SAndroid Build Coastguard Worker };
70*7688df22SAndroid Build Coastguard Worker 
71*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_gpuobj_free {
72*7688df22SAndroid Build Coastguard Worker 	int      channel;
73*7688df22SAndroid Build Coastguard Worker 	uint32_t handle;
74*7688df22SAndroid Build Coastguard Worker };
75*7688df22SAndroid Build Coastguard Worker 
76*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_PCI_VENDOR      3
77*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_PCI_DEVICE      4
78*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_BUS_TYPE        5
79*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_FB_SIZE         8
80*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_AGP_SIZE        9
81*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_CHIPSET_ID      11
82*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_VM_VRAM_BASE    12
83*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_GRAPH_UNITS     13
84*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_PTIMER_TIME     14
85*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_HAS_BO_USAGE    15
86*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GETPARAM_HAS_PAGEFLIP    16
87*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_getparam {
88*7688df22SAndroid Build Coastguard Worker 	uint64_t param;
89*7688df22SAndroid Build Coastguard Worker 	uint64_t value;
90*7688df22SAndroid Build Coastguard Worker };
91*7688df22SAndroid Build Coastguard Worker 
92*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_setparam {
93*7688df22SAndroid Build Coastguard Worker 	uint64_t param;
94*7688df22SAndroid Build Coastguard Worker 	uint64_t value;
95*7688df22SAndroid Build Coastguard Worker };
96*7688df22SAndroid Build Coastguard Worker 
97*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_DOMAIN_CPU       (1 << 0)
98*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_DOMAIN_VRAM      (1 << 1)
99*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_DOMAIN_GART      (1 << 2)
100*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_DOMAIN_MAPPABLE  (1 << 3)
101*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_DOMAIN_COHERENT  (1 << 4)
102*7688df22SAndroid Build Coastguard Worker 
103*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_COMP        0x00030000 /* nv50-only */
104*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00
105*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_16BPP       0x00000001
106*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_32BPP       0x00000002
107*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_ZETA        0x00000004
108*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_TILE_NONCONTIG   0x00000008
109*7688df22SAndroid Build Coastguard Worker 
110*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_gem_info {
111*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
112*7688df22SAndroid Build Coastguard Worker 	__u32 domain;
113*7688df22SAndroid Build Coastguard Worker 	__u64 size;
114*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
115*7688df22SAndroid Build Coastguard Worker 	__u64 map_handle;
116*7688df22SAndroid Build Coastguard Worker 	__u32 tile_mode;
117*7688df22SAndroid Build Coastguard Worker 	__u32 tile_flags;
118*7688df22SAndroid Build Coastguard Worker };
119*7688df22SAndroid Build Coastguard Worker 
120*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_gem_new {
121*7688df22SAndroid Build Coastguard Worker 	struct drm_nouveau_gem_info info;
122*7688df22SAndroid Build Coastguard Worker 	__u32 channel_hint;
123*7688df22SAndroid Build Coastguard Worker 	__u32 align;
124*7688df22SAndroid Build Coastguard Worker };
125*7688df22SAndroid Build Coastguard Worker 
126*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_MAX_BUFFERS 1024
127*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_gem_pushbuf_bo_presumed {
128*7688df22SAndroid Build Coastguard Worker 	__u32 valid;
129*7688df22SAndroid Build Coastguard Worker 	__u32 domain;
130*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
131*7688df22SAndroid Build Coastguard Worker };
132*7688df22SAndroid Build Coastguard Worker 
133*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_gem_pushbuf_bo {
134*7688df22SAndroid Build Coastguard Worker 	__u64 user_priv;
135*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
136*7688df22SAndroid Build Coastguard Worker 	__u32 read_domains;
137*7688df22SAndroid Build Coastguard Worker 	__u32 write_domains;
138*7688df22SAndroid Build Coastguard Worker 	__u32 valid_domains;
139*7688df22SAndroid Build Coastguard Worker 	struct drm_nouveau_gem_pushbuf_bo_presumed presumed;
140*7688df22SAndroid Build Coastguard Worker };
141*7688df22SAndroid Build Coastguard Worker 
142*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_RELOC_LOW  (1 << 0)
143*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_RELOC_HIGH (1 << 1)
144*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_RELOC_OR   (1 << 2)
145*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_MAX_RELOCS 1024
146*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_gem_pushbuf_reloc {
147*7688df22SAndroid Build Coastguard Worker 	__u32 reloc_bo_index;
148*7688df22SAndroid Build Coastguard Worker 	__u32 reloc_bo_offset;
149*7688df22SAndroid Build Coastguard Worker 	__u32 bo_index;
150*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
151*7688df22SAndroid Build Coastguard Worker 	__u32 data;
152*7688df22SAndroid Build Coastguard Worker 	__u32 vor;
153*7688df22SAndroid Build Coastguard Worker 	__u32 tor;
154*7688df22SAndroid Build Coastguard Worker };
155*7688df22SAndroid Build Coastguard Worker 
156*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_MAX_PUSH 512
157*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_gem_pushbuf_push {
158*7688df22SAndroid Build Coastguard Worker 	__u32 bo_index;
159*7688df22SAndroid Build Coastguard Worker 	__u32 pad;
160*7688df22SAndroid Build Coastguard Worker 	__u64 offset;
161*7688df22SAndroid Build Coastguard Worker 	__u64 length;
162*7688df22SAndroid Build Coastguard Worker };
163*7688df22SAndroid Build Coastguard Worker 
164*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_gem_pushbuf {
165*7688df22SAndroid Build Coastguard Worker 	__u32 channel;
166*7688df22SAndroid Build Coastguard Worker 	__u32 nr_buffers;
167*7688df22SAndroid Build Coastguard Worker 	__u64 buffers;
168*7688df22SAndroid Build Coastguard Worker 	__u32 nr_relocs;
169*7688df22SAndroid Build Coastguard Worker 	__u32 nr_push;
170*7688df22SAndroid Build Coastguard Worker 	__u64 relocs;
171*7688df22SAndroid Build Coastguard Worker 	__u64 push;
172*7688df22SAndroid Build Coastguard Worker 	__u32 suffix0;
173*7688df22SAndroid Build Coastguard Worker 	__u32 suffix1;
174*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_PUSHBUF_SYNC                                    (1ULL << 0)
175*7688df22SAndroid Build Coastguard Worker 	__u64 vram_available;
176*7688df22SAndroid Build Coastguard Worker 	__u64 gart_available;
177*7688df22SAndroid Build Coastguard Worker };
178*7688df22SAndroid Build Coastguard Worker 
179*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_CPU_PREP_NOWAIT                                  0x00000001
180*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_GEM_CPU_PREP_WRITE                                   0x00000004
181*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_gem_cpu_prep {
182*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
183*7688df22SAndroid Build Coastguard Worker 	__u32 flags;
184*7688df22SAndroid Build Coastguard Worker };
185*7688df22SAndroid Build Coastguard Worker 
186*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_gem_cpu_fini {
187*7688df22SAndroid Build Coastguard Worker 	__u32 handle;
188*7688df22SAndroid Build Coastguard Worker };
189*7688df22SAndroid Build Coastguard Worker 
190*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GETPARAM           0x00 /* deprecated */
191*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_SETPARAM           0x01 /* deprecated */
192*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_CHANNEL_ALLOC      0x02 /* deprecated */
193*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_CHANNEL_FREE       0x03 /* deprecated */
194*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GROBJ_ALLOC        0x04 /* deprecated */
195*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC  0x05 /* deprecated */
196*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GPUOBJ_FREE        0x06 /* deprecated */
197*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_NVIF               0x07
198*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_SVM_INIT           0x08
199*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_SVM_BIND           0x09
200*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GEM_NEW            0x40
201*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GEM_PUSHBUF        0x41
202*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GEM_CPU_PREP       0x42
203*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GEM_CPU_FINI       0x43
204*7688df22SAndroid Build Coastguard Worker #define DRM_NOUVEAU_GEM_INFO           0x44
205*7688df22SAndroid Build Coastguard Worker 
206*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_svm_init {
207*7688df22SAndroid Build Coastguard Worker 	__u64 unmanaged_addr;
208*7688df22SAndroid Build Coastguard Worker 	__u64 unmanaged_size;
209*7688df22SAndroid Build Coastguard Worker };
210*7688df22SAndroid Build Coastguard Worker 
211*7688df22SAndroid Build Coastguard Worker struct drm_nouveau_svm_bind {
212*7688df22SAndroid Build Coastguard Worker 	__u64 header;
213*7688df22SAndroid Build Coastguard Worker 	__u64 va_start;
214*7688df22SAndroid Build Coastguard Worker 	__u64 va_end;
215*7688df22SAndroid Build Coastguard Worker 	__u64 npages;
216*7688df22SAndroid Build Coastguard Worker 	__u64 stride;
217*7688df22SAndroid Build Coastguard Worker 	__u64 result;
218*7688df22SAndroid Build Coastguard Worker 	__u64 reserved0;
219*7688df22SAndroid Build Coastguard Worker 	__u64 reserved1;
220*7688df22SAndroid Build Coastguard Worker };
221*7688df22SAndroid Build Coastguard Worker 
222*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_COMMAND_SHIFT          0
223*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_COMMAND_BITS           8
224*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_COMMAND_MASK           ((1 << 8) - 1)
225*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_PRIORITY_SHIFT         8
226*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_PRIORITY_BITS          8
227*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_PRIORITY_MASK          ((1 << 8) - 1)
228*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_TARGET_SHIFT           16
229*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_TARGET_BITS            32
230*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_TARGET_MASK            0xffffffff
231*7688df22SAndroid Build Coastguard Worker 
232*7688df22SAndroid Build Coastguard Worker /*
233*7688df22SAndroid Build Coastguard Worker  * Below is use to validate ioctl argument, userspace can also use it to make
234*7688df22SAndroid Build Coastguard Worker  * sure that no bit are set beyond known fields for a given kernel version.
235*7688df22SAndroid Build Coastguard Worker  */
236*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_VALID_BITS     48
237*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_VALID_MASK     ((1ULL << NOUVEAU_SVM_BIND_VALID_BITS) - 1)
238*7688df22SAndroid Build Coastguard Worker 
239*7688df22SAndroid Build Coastguard Worker 
240*7688df22SAndroid Build Coastguard Worker /*
241*7688df22SAndroid Build Coastguard Worker  * NOUVEAU_BIND_COMMAND__MIGRATE: synchronous migrate to target memory.
242*7688df22SAndroid Build Coastguard Worker  * result: number of page successfuly migrate to the target memory.
243*7688df22SAndroid Build Coastguard Worker  */
244*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_COMMAND__MIGRATE               0
245*7688df22SAndroid Build Coastguard Worker 
246*7688df22SAndroid Build Coastguard Worker /*
247*7688df22SAndroid Build Coastguard Worker  * NOUVEAU_SVM_BIND_HEADER_TARGET__GPU_VRAM: target the GPU VRAM memory.
248*7688df22SAndroid Build Coastguard Worker  */
249*7688df22SAndroid Build Coastguard Worker #define NOUVEAU_SVM_BIND_TARGET__GPU_VRAM               (1UL << 31)
250*7688df22SAndroid Build Coastguard Worker 
251*7688df22SAndroid Build Coastguard Worker 
252*7688df22SAndroid Build Coastguard Worker #if defined(__cplusplus)
253*7688df22SAndroid Build Coastguard Worker }
254*7688df22SAndroid Build Coastguard Worker #endif
255*7688df22SAndroid Build Coastguard Worker 
256*7688df22SAndroid Build Coastguard Worker #endif /* __NOUVEAU_DRM_H__ */
257