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