Home | History | Annotate | Download | only in CVE-2017-0333
      1 #ifndef __LOCAL_POC_H__
      2 #define __LOCAL_POC_H__
      3 
      4 #define DRM_IOCTL_BASE 'd'
      5 #define DRM_IOW(nr, type) _IOW(DRM_IOCTL_BASE, nr, type)
      6 #define DRM_IOWR(nr, type) _IOWR(DRM_IOCTL_BASE, nr, type)
      7 
      8 #define DRM_COMMAND_BASE 0x40
      9 #define DRM_NOUVEAU_EVENT_NVIF 0x80000000
     10 
     11 /* reserved object handles when using deprecated object APIs - these
     12  * are here so that libdrm can allow interoperability with the new
     13  * object APIs
     14  */
     15 #define NOUVEAU_ABI16_CLIENT 0xffffffff
     16 #define NOUVEAU_ABI16_DEVICE 0xdddddddd
     17 #define NOUVEAU_ABI16_CHAN(n) (0xcccc0000 | (n))
     18 
     19 #define NOUVEAU_GEM_DOMAIN_CPU (1 << 0)
     20 #define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1)
     21 #define NOUVEAU_GEM_DOMAIN_GART (1 << 2)
     22 #define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3)
     23 #define NOUVEAU_GEM_DOMAIN_COHERENT (1 << 4)
     24 
     25 #define NOUVEAU_GEM_TILE_COMP 0x00030000 /* nv50-only */
     26 #define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00
     27 #define NOUVEAU_GEM_TILE_16BPP 0x00000001
     28 #define NOUVEAU_GEM_TILE_32BPP 0x00000002
     29 #define NOUVEAU_GEM_TILE_ZETA 0x00000004
     30 #define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008
     31 
     32 struct drm_nouveau_gem_info {
     33   uint32_t handle;
     34   uint32_t domain;
     35   uint64_t size;
     36   uint64_t offset;
     37   uint64_t map_handle;
     38   uint32_t tile_mode;
     39   uint32_t tile_flags;
     40 };
     41 
     42 struct drm_nouveau_gem_new {
     43   struct drm_nouveau_gem_info info;
     44   uint32_t channel_hint;
     45   uint32_t align;
     46 };
     47 
     48 struct drm_nouveau_gem_set_tiling {
     49   uint32_t handle;
     50   uint32_t tile_mode;
     51   uint32_t tile_flags;
     52 };
     53 
     54 #define NOUVEAU_GEM_MAX_BUFFERS 1024
     55 struct drm_nouveau_gem_pushbuf_bo_presumed {
     56   uint32_t valid;
     57   uint32_t domain;
     58   uint64_t offset;
     59 };
     60 
     61 struct drm_nouveau_gem_pushbuf_bo {
     62   uint64_t user_priv;
     63   uint32_t handle;
     64   uint32_t read_domains;
     65   uint32_t write_domains;
     66   uint32_t valid_domains;
     67   struct drm_nouveau_gem_pushbuf_bo_presumed presumed;
     68 };
     69 
     70 #define NOUVEAU_GEM_RELOC_LOW (1 << 0)
     71 #define NOUVEAU_GEM_RELOC_HIGH (1 << 1)
     72 #define NOUVEAU_GEM_RELOC_OR (1 << 2)
     73 #define NOUVEAU_GEM_MAX_RELOCS 1024
     74 struct drm_nouveau_gem_pushbuf_reloc {
     75   uint32_t reloc_bo_index;
     76   uint32_t reloc_bo_offset;
     77   uint32_t bo_index;
     78   uint32_t flags;
     79   uint32_t data;
     80   uint32_t vor;
     81   uint32_t tor;
     82 };
     83 
     84 #define NOUVEAU_GEM_MAX_PUSH 512
     85 struct drm_nouveau_gem_pushbuf_push {
     86   uint32_t bo_index;
     87   uint32_t pad;
     88   uint64_t offset;
     89   uint64_t length;
     90 };
     91 
     92 struct drm_nouveau_gem_pushbuf {
     93   uint32_t channel;
     94   uint32_t nr_buffers;
     95   uint64_t buffers;
     96   uint32_t nr_relocs;
     97   uint32_t nr_push;
     98   uint64_t relocs;
     99   uint64_t push;
    100   uint32_t suffix0;
    101   uint32_t suffix1;
    102   uint64_t vram_available;
    103   uint64_t gart_available;
    104 };
    105 
    106 #define NOUVEAU_GEM_PUSHBUF_2_FENCE_WAIT 0x00000001
    107 #define NOUVEAU_GEM_PUSHBUF_2_FENCE_EMIT 0x00000002
    108 struct drm_nouveau_gem_pushbuf_2 {
    109   uint32_t channel;
    110   uint32_t flags;
    111   uint32_t nr_push;
    112   uint32_t nr_buffers;
    113   int32_t fence; /* in/out, depends on flags */
    114   uint32_t pad;
    115   uint64_t push;    /* in raw hw format */
    116   uint64_t buffers; /* ptr to drm_nouveau_gem_pushbuf_bo */
    117   uint64_t vram_available;
    118   uint64_t gart_available;
    119 };
    120 
    121 #define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001
    122 #define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004
    123 struct drm_nouveau_gem_cpu_prep {
    124   uint32_t handle;
    125   uint32_t flags;
    126 };
    127 
    128 struct drm_nouveau_gem_cpu_fini {
    129   uint32_t handle;
    130 };
    131 
    132 struct drm_nouveau_gem_as_alloc {
    133   uint64_t pages;     /* in, page length */
    134   uint32_t page_size; /* in, byte page size */
    135 #define NOUVEAU_GEM_AS_SPARSE 0x1
    136   uint32_t flags;
    137   uint64_t align;   /* in, requested alignment in bytes */
    138   uint64_t address; /* in/out, non-zero for fixed address allocation */
    139 };
    140 
    141 struct drm_nouveau_gem_as_free {
    142   uint64_t address; /* in, byte address */
    143 };
    144 
    145 #define NOUVEAU_GEM_CHANNEL_FIFO_ERROR_IDLE_TIMEOUT 8
    146 #define NOUVEAU_GEM_CHANNEL_GR_ERROR_SW_NOTIFY 13
    147 #define NOUVEAU_GEM_CHANNEL_FIFO_ERROR_MMU_ERR_FLT 31
    148 #define NOUVEAU_GEM_CHANNEL_PBDMA_ERROR 32
    149 struct drm_nouveau_gem_set_error_notifier {
    150   uint32_t channel;
    151   uint32_t buffer;
    152   uint32_t offset; /* bytes, u32-aligned */
    153 };
    154 
    155 struct drm_nouveau_gem_map {
    156   uint32_t handle;
    157   uint32_t domain;
    158   uint64_t offset;
    159   uint64_t delta;
    160   uint64_t length;
    161   uint32_t tile_mode;
    162   uint32_t tile_flags;
    163 };
    164 
    165 struct drm_nouveau_gem_unmap {
    166   uint32_t handle;
    167   uint32_t pad;
    168   uint64_t offset;
    169   uint64_t delta;
    170   uint64_t length;
    171 };
    172 
    173 struct nvif_ioctl_v0 {
    174   __u8 version;
    175 #define NVIF_IOCTL_V0_OWNER_NVIF 0x00
    176 #define NVIF_IOCTL_V0_OWNER_ANY 0xff
    177   __u8 owner;
    178 #define NVIF_IOCTL_V0_NOP 0x00
    179 #define NVIF_IOCTL_V0_SCLASS 0x01
    180 #define NVIF_IOCTL_V0_NEW 0x02
    181 #define NVIF_IOCTL_V0_DEL 0x03
    182 #define NVIF_IOCTL_V0_MTHD 0x04
    183 #define NVIF_IOCTL_V0_RD 0x05
    184 #define NVIF_IOCTL_V0_WR 0x06
    185 #define NVIF_IOCTL_V0_MAP 0x07
    186 #define NVIF_IOCTL_V0_UNMAP 0x08
    187 #define NVIF_IOCTL_V0_NTFY_NEW 0x09
    188 #define NVIF_IOCTL_V0_NTFY_DEL 0x0a
    189 #define NVIF_IOCTL_V0_NTFY_GET 0x0b
    190 #define NVIF_IOCTL_V0_NTFY_PUT 0x0c
    191   __u8 type;
    192   __u8 path_nr;
    193 #define NVIF_IOCTL_V0_ROUTE_NVIF 0x00
    194 #define NVIF_IOCTL_V0_ROUTE_HIDDEN 0xff
    195   __u8 pad04[3];
    196   __u8 route;
    197   __u64 token;
    198   __u32 path[8]; /* in reverse */
    199   __u8 data[];   /* ioctl data (below) */
    200 };
    201 
    202 #define DRM_NOUVEAU_GETPARAM 0x00          /* deprecated */
    203 #define DRM_NOUVEAU_SETPARAM 0x01          /* deprecated */
    204 #define DRM_NOUVEAU_CHANNEL_ALLOC 0x02     /* deprecated */
    205 #define DRM_NOUVEAU_CHANNEL_FREE 0x03      /* deprecated */
    206 #define DRM_NOUVEAU_GROBJ_ALLOC 0x04       /* deprecated */
    207 #define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05 /* deprecated */
    208 #define DRM_NOUVEAU_GPUOBJ_FREE 0x06       /* deprecated */
    209 #define DRM_NOUVEAU_NVIF 0x07
    210 #define DRM_NOUVEAU_GEM_NEW 0x40
    211 #define DRM_NOUVEAU_GEM_PUSHBUF 0x41
    212 #define DRM_NOUVEAU_GEM_CPU_PREP 0x42
    213 #define DRM_NOUVEAU_GEM_CPU_FINI 0x43
    214 #define DRM_NOUVEAU_GEM_INFO 0x44
    215 /*
    216  * range (0x50+DRM_COMMAND_BASE)..DRM_COMMAND_END is reserved for staging,
    217  * unstable ioctls
    218  */
    219 #define DRM_NOUVEAU_STAGING_IOCTL 0x50
    220 #define DRM_NOUVEAU_GEM_SET_TILING (DRM_NOUVEAU_STAGING_IOCTL + 0x0)
    221 #define DRM_NOUVEAU_GEM_PUSHBUF_2 (DRM_NOUVEAU_STAGING_IOCTL + 0x1)
    222 #define DRM_NOUVEAU_GEM_SET_INFO (DRM_NOUVEAU_STAGING_IOCTL + 0x2)
    223 #define DRM_NOUVEAU_GEM_AS_ALLOC (DRM_NOUVEAU_STAGING_IOCTL + 0x3)
    224 #define DRM_NOUVEAU_GEM_AS_FREE (DRM_NOUVEAU_STAGING_IOCTL + 0x4)
    225 #define DRM_NOUVEAU_GEM_SET_ERROR_NOTIFIER (DRM_NOUVEAU_STAGING_IOCTL + 0x5)
    226 #define DRM_NOUVEAU_GEM_MAP (DRM_NOUVEAU_STAGING_IOCTL + 0x6)
    227 #define DRM_NOUVEAU_GEM_UNMAP (DRM_NOUVEAU_STAGING_IOCTL + 0x7)
    228 
    229 #define DRM_IOCTL_NOUVEAU_GEM_NEW \
    230   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_NEW, struct drm_nouveau_gem_new)
    231 #define DRM_IOCTL_NOUVEAU_GEM_PUSHBUF                  \
    232   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_PUSHBUF, \
    233            struct drm_nouveau_gem_pushbuf)
    234 #define DRM_IOCTL_NOUVEAU_GEM_CPU_PREP                 \
    235   DRM_IOW(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_PREP, \
    236           struct drm_nouveau_gem_cpu_prep)
    237 #define DRM_IOCTL_NOUVEAU_GEM_CPU_FINI                 \
    238   DRM_IOW(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_FINI, \
    239           struct drm_nouveau_gem_cpu_fini)
    240 #define DRM_IOCTL_NOUVEAU_GEM_INFO \
    241   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_INFO, struct drm_nouveau_gem_info)
    242 #define DRM_IOCTL_NOUVEAU_GEM_SET_TILING                  \
    243   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_SET_TILING, \
    244            struct drm_nouveau_gem_set_tiling)
    245 #define DRM_IOCTL_NOUVEAU_GEM_PUSHBUF_2                  \
    246   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_PUSHBUF_2, \
    247            struct drm_nouveau_gem_pushbuf_2)
    248 #define DRM_IOCTL_NOUVEAU_GEM_SET_INFO                  \
    249   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_SET_INFO, \
    250            struct drm_nouveau_gem_info)
    251 #define DRM_IOCTL_NOUVEAU_GEM_AS_ALLOC                  \
    252   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_AS_ALLOC, \
    253            struct drm_nouveau_gem_as_alloc)
    254 #define DRM_IOCTL_NOUVEAU_GEM_AS_FREE                  \
    255   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_AS_FREE, \
    256            struct drm_nouveau_gem_as_free)
    257 #define DRM_IOCTL_NOUVEAU_GEM_SET_ERROR_NOTIFIER                  \
    258   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_SET_ERROR_NOTIFIER, \
    259            struct drm_nouveau_gem_set_error_notifier)
    260 #define DRM_IOCTL_NOUVEAU_GEM_MAP \
    261   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_MAP, struct drm_nouveau_gem_map)
    262 #define DRM_IOCTL_NOUVEAU_GEM_UNMAP                  \
    263   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_UNMAP, \
    264            struct drm_nouveau_gem_unmap)
    265 
    266 #define DRM_IOCTL_NOUVEAU_NVIF \
    267   DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_NVIF, struct nvif_ioctl_v0)
    268 
    269 #endif
    270