.. | .. |
---|
110 | 110 | __u64 push; |
---|
111 | 111 | __u32 suffix0; |
---|
112 | 112 | __u32 suffix1; |
---|
| 113 | +#define NOUVEAU_GEM_PUSHBUF_SYNC (1ULL << 0) |
---|
113 | 114 | __u64 vram_available; |
---|
114 | 115 | __u64 gart_available; |
---|
115 | 116 | }; |
---|
.. | .. |
---|
133 | 134 | #define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05 /* deprecated */ |
---|
134 | 135 | #define DRM_NOUVEAU_GPUOBJ_FREE 0x06 /* deprecated */ |
---|
135 | 136 | #define DRM_NOUVEAU_NVIF 0x07 |
---|
| 137 | +#define DRM_NOUVEAU_SVM_INIT 0x08 |
---|
| 138 | +#define DRM_NOUVEAU_SVM_BIND 0x09 |
---|
136 | 139 | #define DRM_NOUVEAU_GEM_NEW 0x40 |
---|
137 | 140 | #define DRM_NOUVEAU_GEM_PUSHBUF 0x41 |
---|
138 | 141 | #define DRM_NOUVEAU_GEM_CPU_PREP 0x42 |
---|
139 | 142 | #define DRM_NOUVEAU_GEM_CPU_FINI 0x43 |
---|
140 | 143 | #define DRM_NOUVEAU_GEM_INFO 0x44 |
---|
141 | 144 | |
---|
| 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 | + |
---|
142 | 194 | #define DRM_IOCTL_NOUVEAU_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_NEW, struct drm_nouveau_gem_new) |
---|
143 | 195 | #define DRM_IOCTL_NOUVEAU_GEM_PUSHBUF DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_PUSHBUF, struct drm_nouveau_gem_pushbuf) |
---|
144 | 196 | #define DRM_IOCTL_NOUVEAU_GEM_CPU_PREP DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_PREP, struct drm_nouveau_gem_cpu_prep) |
---|