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