hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/include/uapi/drm/nouveau_drm.h
....@@ -110,6 +110,7 @@
110110 __u64 push;
111111 __u32 suffix0;
112112 __u32 suffix1;
113
+#define NOUVEAU_GEM_PUSHBUF_SYNC (1ULL << 0)
113114 __u64 vram_available;
114115 __u64 gart_available;
115116 };
....@@ -133,12 +134,63 @@
133134 #define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05 /* deprecated */
134135 #define DRM_NOUVEAU_GPUOBJ_FREE 0x06 /* deprecated */
135136 #define DRM_NOUVEAU_NVIF 0x07
137
+#define DRM_NOUVEAU_SVM_INIT 0x08
138
+#define DRM_NOUVEAU_SVM_BIND 0x09
136139 #define DRM_NOUVEAU_GEM_NEW 0x40
137140 #define DRM_NOUVEAU_GEM_PUSHBUF 0x41
138141 #define DRM_NOUVEAU_GEM_CPU_PREP 0x42
139142 #define DRM_NOUVEAU_GEM_CPU_FINI 0x43
140143 #define DRM_NOUVEAU_GEM_INFO 0x44
141144
145
+struct drm_nouveau_svm_init {
146
+ __u64 unmanaged_addr;
147
+ __u64 unmanaged_size;
148
+};
149
+
150
+struct drm_nouveau_svm_bind {
151
+ __u64 header;
152
+ __u64 va_start;
153
+ __u64 va_end;
154
+ __u64 npages;
155
+ __u64 stride;
156
+ __u64 result;
157
+ __u64 reserved0;
158
+ __u64 reserved1;
159
+};
160
+
161
+#define NOUVEAU_SVM_BIND_COMMAND_SHIFT 0
162
+#define NOUVEAU_SVM_BIND_COMMAND_BITS 8
163
+#define NOUVEAU_SVM_BIND_COMMAND_MASK ((1 << 8) - 1)
164
+#define NOUVEAU_SVM_BIND_PRIORITY_SHIFT 8
165
+#define NOUVEAU_SVM_BIND_PRIORITY_BITS 8
166
+#define NOUVEAU_SVM_BIND_PRIORITY_MASK ((1 << 8) - 1)
167
+#define NOUVEAU_SVM_BIND_TARGET_SHIFT 16
168
+#define NOUVEAU_SVM_BIND_TARGET_BITS 32
169
+#define NOUVEAU_SVM_BIND_TARGET_MASK 0xffffffff
170
+
171
+/*
172
+ * Below is use to validate ioctl argument, userspace can also use it to make
173
+ * sure that no bit are set beyond known fields for a given kernel version.
174
+ */
175
+#define NOUVEAU_SVM_BIND_VALID_BITS 48
176
+#define NOUVEAU_SVM_BIND_VALID_MASK ((1ULL << NOUVEAU_SVM_BIND_VALID_BITS) - 1)
177
+
178
+
179
+/*
180
+ * NOUVEAU_BIND_COMMAND__MIGRATE: synchronous migrate to target memory.
181
+ * result: number of page successfuly migrate to the target memory.
182
+ */
183
+#define NOUVEAU_SVM_BIND_COMMAND__MIGRATE 0
184
+
185
+/*
186
+ * NOUVEAU_SVM_BIND_HEADER_TARGET__GPU_VRAM: target the GPU VRAM memory.
187
+ */
188
+#define NOUVEAU_SVM_BIND_TARGET__GPU_VRAM (1UL << 31)
189
+
190
+
191
+#define DRM_IOCTL_NOUVEAU_SVM_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_SVM_INIT, struct drm_nouveau_svm_init)
192
+#define DRM_IOCTL_NOUVEAU_SVM_BIND DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_SVM_BIND, struct drm_nouveau_svm_bind)
193
+
142194 #define DRM_IOCTL_NOUVEAU_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_NEW, struct drm_nouveau_gem_new)
143195 #define DRM_IOCTL_NOUVEAU_GEM_PUSHBUF DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_PUSHBUF, struct drm_nouveau_gem_pushbuf)
144196 #define DRM_IOCTL_NOUVEAU_GEM_CPU_PREP DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_PREP, struct drm_nouveau_gem_cpu_prep)