1 /*
2  * This file is auto-generated. Modifications will be lost.
3  *
4  * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5  * for more information.
6  */
7 #ifndef __NOUVEAU_DRM_H__
8 #define __NOUVEAU_DRM_H__
9 #define DRM_NOUVEAU_EVENT_NVIF 0x80000000
10 #include "drm.h"
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 #define NOUVEAU_GETPARAM_PCI_VENDOR 3
15 #define NOUVEAU_GETPARAM_PCI_DEVICE 4
16 #define NOUVEAU_GETPARAM_BUS_TYPE 5
17 #define NOUVEAU_GETPARAM_FB_SIZE 8
18 #define NOUVEAU_GETPARAM_AGP_SIZE 9
19 #define NOUVEAU_GETPARAM_CHIPSET_ID 11
20 #define NOUVEAU_GETPARAM_VM_VRAM_BASE 12
21 #define NOUVEAU_GETPARAM_GRAPH_UNITS 13
22 #define NOUVEAU_GETPARAM_PTIMER_TIME 14
23 #define NOUVEAU_GETPARAM_HAS_BO_USAGE 15
24 #define NOUVEAU_GETPARAM_HAS_PAGEFLIP 16
25 #define NOUVEAU_GETPARAM_EXEC_PUSH_MAX 17
26 #define NOUVEAU_GETPARAM_VRAM_BAR_SIZE 18
27 #define NOUVEAU_GETPARAM_VRAM_USED 19
28 #define NOUVEAU_GETPARAM_HAS_VMA_TILEMODE 20
29 struct drm_nouveau_getparam {
30   __u64 param;
31   __u64 value;
32 };
33 #define NOUVEAU_FIFO_ENGINE_GR 0x01
34 #define NOUVEAU_FIFO_ENGINE_VP 0x02
35 #define NOUVEAU_FIFO_ENGINE_PPP 0x04
36 #define NOUVEAU_FIFO_ENGINE_BSP 0x08
37 #define NOUVEAU_FIFO_ENGINE_CE 0x30
38 struct drm_nouveau_channel_alloc {
39   __u32 fb_ctxdma_handle;
40   __u32 tt_ctxdma_handle;
41   __s32 channel;
42   __u32 pushbuf_domains;
43   __u32 notifier_handle;
44   struct {
45     __u32 handle;
46     __u32 grclass;
47   } subchan[8];
48   __u32 nr_subchan;
49 };
50 struct drm_nouveau_channel_free {
51   __s32 channel;
52 };
53 struct drm_nouveau_notifierobj_alloc {
54   __u32 channel;
55   __u32 handle;
56   __u32 size;
57   __u32 offset;
58 };
59 struct drm_nouveau_gpuobj_free {
60   __s32 channel;
61   __u32 handle;
62 };
63 #define NOUVEAU_GEM_DOMAIN_CPU (1 << 0)
64 #define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1)
65 #define NOUVEAU_GEM_DOMAIN_GART (1 << 2)
66 #define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3)
67 #define NOUVEAU_GEM_DOMAIN_COHERENT (1 << 4)
68 #define NOUVEAU_GEM_DOMAIN_NO_SHARE (1 << 5)
69 #define NOUVEAU_GEM_TILE_COMP 0x00030000
70 #define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00
71 #define NOUVEAU_GEM_TILE_16BPP 0x00000001
72 #define NOUVEAU_GEM_TILE_32BPP 0x00000002
73 #define NOUVEAU_GEM_TILE_ZETA 0x00000004
74 #define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008
75 struct drm_nouveau_gem_info {
76   __u32 handle;
77   __u32 domain;
78   __u64 size;
79   __u64 offset;
80   __u64 map_handle;
81   __u32 tile_mode;
82   __u32 tile_flags;
83 };
84 struct drm_nouveau_gem_new {
85   struct drm_nouveau_gem_info info;
86   __u32 channel_hint;
87   __u32 align;
88 };
89 #define NOUVEAU_GEM_MAX_BUFFERS 1024
90 struct drm_nouveau_gem_pushbuf_bo_presumed {
91   __u32 valid;
92   __u32 domain;
93   __u64 offset;
94 };
95 struct drm_nouveau_gem_pushbuf_bo {
96   __u64 user_priv;
97   __u32 handle;
98   __u32 read_domains;
99   __u32 write_domains;
100   __u32 valid_domains;
101   struct drm_nouveau_gem_pushbuf_bo_presumed presumed;
102 };
103 #define NOUVEAU_GEM_RELOC_LOW (1 << 0)
104 #define NOUVEAU_GEM_RELOC_HIGH (1 << 1)
105 #define NOUVEAU_GEM_RELOC_OR (1 << 2)
106 #define NOUVEAU_GEM_MAX_RELOCS 1024
107 struct drm_nouveau_gem_pushbuf_reloc {
108   __u32 reloc_bo_index;
109   __u32 reloc_bo_offset;
110   __u32 bo_index;
111   __u32 flags;
112   __u32 data;
113   __u32 vor;
114   __u32 tor;
115 };
116 #define NOUVEAU_GEM_MAX_PUSH 512
117 struct drm_nouveau_gem_pushbuf_push {
118   __u32 bo_index;
119   __u32 pad;
120   __u64 offset;
121   __u64 length;
122 #define NOUVEAU_GEM_PUSHBUF_NO_PREFETCH (1 << 23)
123 };
124 struct drm_nouveau_gem_pushbuf {
125   __u32 channel;
126   __u32 nr_buffers;
127   __u64 buffers;
128   __u32 nr_relocs;
129   __u32 nr_push;
130   __u64 relocs;
131   __u64 push;
132   __u32 suffix0;
133   __u32 suffix1;
134 #define NOUVEAU_GEM_PUSHBUF_SYNC (1ULL << 0)
135   __u64 vram_available;
136   __u64 gart_available;
137 };
138 #define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001
139 #define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004
140 struct drm_nouveau_gem_cpu_prep {
141   __u32 handle;
142   __u32 flags;
143 };
144 struct drm_nouveau_gem_cpu_fini {
145   __u32 handle;
146 };
147 struct drm_nouveau_sync {
148   __u32 flags;
149 #define DRM_NOUVEAU_SYNC_SYNCOBJ 0x0
150 #define DRM_NOUVEAU_SYNC_TIMELINE_SYNCOBJ 0x1
151 #define DRM_NOUVEAU_SYNC_TYPE_MASK 0xf
152   __u32 handle;
153   __u64 timeline_value;
154 };
155 struct drm_nouveau_vm_init {
156   __u64 kernel_managed_addr;
157   __u64 kernel_managed_size;
158 };
159 struct drm_nouveau_vm_bind_op {
160   __u32 op;
161 #define DRM_NOUVEAU_VM_BIND_OP_MAP 0x0
162 #define DRM_NOUVEAU_VM_BIND_OP_UNMAP 0x1
163   __u32 flags;
164 #define DRM_NOUVEAU_VM_BIND_SPARSE (1 << 8)
165   __u32 handle;
166   __u32 pad;
167   __u64 addr;
168   __u64 bo_offset;
169   __u64 range;
170 };
171 struct drm_nouveau_vm_bind {
172   __u32 op_count;
173   __u32 flags;
174 #define DRM_NOUVEAU_VM_BIND_RUN_ASYNC 0x1
175   __u32 wait_count;
176   __u32 sig_count;
177   __u64 wait_ptr;
178   __u64 sig_ptr;
179   __u64 op_ptr;
180 };
181 struct drm_nouveau_exec_push {
182   __u64 va;
183   __u32 va_len;
184   __u32 flags;
185 #define DRM_NOUVEAU_EXEC_PUSH_NO_PREFETCH 0x1
186 };
187 struct drm_nouveau_exec {
188   __u32 channel;
189   __u32 push_count;
190   __u32 wait_count;
191   __u32 sig_count;
192   __u64 wait_ptr;
193   __u64 sig_ptr;
194   __u64 push_ptr;
195 };
196 #define DRM_NOUVEAU_GETPARAM 0x00
197 #define DRM_NOUVEAU_SETPARAM 0x01
198 #define DRM_NOUVEAU_CHANNEL_ALLOC 0x02
199 #define DRM_NOUVEAU_CHANNEL_FREE 0x03
200 #define DRM_NOUVEAU_GROBJ_ALLOC 0x04
201 #define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05
202 #define DRM_NOUVEAU_GPUOBJ_FREE 0x06
203 #define DRM_NOUVEAU_NVIF 0x07
204 #define DRM_NOUVEAU_SVM_INIT 0x08
205 #define DRM_NOUVEAU_SVM_BIND 0x09
206 #define DRM_NOUVEAU_VM_INIT 0x10
207 #define DRM_NOUVEAU_VM_BIND 0x11
208 #define DRM_NOUVEAU_EXEC 0x12
209 #define DRM_NOUVEAU_GEM_NEW 0x40
210 #define DRM_NOUVEAU_GEM_PUSHBUF 0x41
211 #define DRM_NOUVEAU_GEM_CPU_PREP 0x42
212 #define DRM_NOUVEAU_GEM_CPU_FINI 0x43
213 #define DRM_NOUVEAU_GEM_INFO 0x44
214 struct drm_nouveau_svm_init {
215   __u64 unmanaged_addr;
216   __u64 unmanaged_size;
217 };
218 struct drm_nouveau_svm_bind {
219   __u64 header;
220   __u64 va_start;
221   __u64 va_end;
222   __u64 npages;
223   __u64 stride;
224   __u64 result;
225   __u64 reserved0;
226   __u64 reserved1;
227 };
228 #define NOUVEAU_SVM_BIND_COMMAND_SHIFT 0
229 #define NOUVEAU_SVM_BIND_COMMAND_BITS 8
230 #define NOUVEAU_SVM_BIND_COMMAND_MASK ((1 << 8) - 1)
231 #define NOUVEAU_SVM_BIND_PRIORITY_SHIFT 8
232 #define NOUVEAU_SVM_BIND_PRIORITY_BITS 8
233 #define NOUVEAU_SVM_BIND_PRIORITY_MASK ((1 << 8) - 1)
234 #define NOUVEAU_SVM_BIND_TARGET_SHIFT 16
235 #define NOUVEAU_SVM_BIND_TARGET_BITS 32
236 #define NOUVEAU_SVM_BIND_TARGET_MASK 0xffffffff
237 #define NOUVEAU_SVM_BIND_VALID_BITS 48
238 #define NOUVEAU_SVM_BIND_VALID_MASK ((1ULL << NOUVEAU_SVM_BIND_VALID_BITS) - 1)
239 #define NOUVEAU_SVM_BIND_COMMAND__MIGRATE 0
240 #define NOUVEAU_SVM_BIND_TARGET__GPU_VRAM (1UL << 31)
241 #define DRM_IOCTL_NOUVEAU_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GETPARAM, struct drm_nouveau_getparam)
242 #define DRM_IOCTL_NOUVEAU_CHANNEL_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_CHANNEL_ALLOC, struct drm_nouveau_channel_alloc)
243 #define DRM_IOCTL_NOUVEAU_CHANNEL_FREE DRM_IOW(DRM_COMMAND_BASE + DRM_NOUVEAU_CHANNEL_FREE, struct drm_nouveau_channel_free)
244 #define DRM_IOCTL_NOUVEAU_SVM_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_SVM_INIT, struct drm_nouveau_svm_init)
245 #define DRM_IOCTL_NOUVEAU_SVM_BIND DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_SVM_BIND, struct drm_nouveau_svm_bind)
246 #define DRM_IOCTL_NOUVEAU_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_NEW, struct drm_nouveau_gem_new)
247 #define DRM_IOCTL_NOUVEAU_GEM_PUSHBUF DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_PUSHBUF, struct drm_nouveau_gem_pushbuf)
248 #define DRM_IOCTL_NOUVEAU_GEM_CPU_PREP DRM_IOW(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_PREP, struct drm_nouveau_gem_cpu_prep)
249 #define DRM_IOCTL_NOUVEAU_GEM_CPU_FINI DRM_IOW(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_FINI, struct drm_nouveau_gem_cpu_fini)
250 #define DRM_IOCTL_NOUVEAU_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_INFO, struct drm_nouveau_gem_info)
251 #define DRM_IOCTL_NOUVEAU_VM_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_VM_INIT, struct drm_nouveau_vm_init)
252 #define DRM_IOCTL_NOUVEAU_VM_BIND DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_VM_BIND, struct drm_nouveau_vm_bind)
253 #define DRM_IOCTL_NOUVEAU_EXEC DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_EXEC, struct drm_nouveau_exec)
254 #ifdef __cplusplus
255 }
256 #endif
257 #endif
258