1*7688df22SAndroid Build Coastguard Worker /* 2*7688df22SAndroid Build Coastguard Worker * Copyright 2013 Red Hat 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 * THE AUTHORS 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 #ifndef VIRTGPU_DRM_H 25*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_DRM_H 26*7688df22SAndroid Build Coastguard Worker 27*7688df22SAndroid Build Coastguard Worker #include "drm.h" 28*7688df22SAndroid Build Coastguard Worker 29*7688df22SAndroid Build Coastguard Worker #if defined(__cplusplus) 30*7688df22SAndroid Build Coastguard Worker extern "C" { 31*7688df22SAndroid Build Coastguard Worker #endif 32*7688df22SAndroid Build Coastguard Worker 33*7688df22SAndroid Build Coastguard Worker /* Please note that modifications to all structs defined here are 34*7688df22SAndroid Build Coastguard Worker * subject to backwards-compatibility constraints. 35*7688df22SAndroid Build Coastguard Worker * 36*7688df22SAndroid Build Coastguard Worker * Do not use pointers, use __u64 instead for 32 bit / 64 bit user/kernel 37*7688df22SAndroid Build Coastguard Worker * compatibility Keep fields aligned to their size 38*7688df22SAndroid Build Coastguard Worker */ 39*7688df22SAndroid Build Coastguard Worker 40*7688df22SAndroid Build Coastguard Worker #define DRM_VIRTGPU_MAP 0x01 41*7688df22SAndroid Build Coastguard Worker #define DRM_VIRTGPU_EXECBUFFER 0x02 42*7688df22SAndroid Build Coastguard Worker #define DRM_VIRTGPU_GETPARAM 0x03 43*7688df22SAndroid Build Coastguard Worker #define DRM_VIRTGPU_RESOURCE_CREATE 0x04 44*7688df22SAndroid Build Coastguard Worker #define DRM_VIRTGPU_RESOURCE_INFO 0x05 45*7688df22SAndroid Build Coastguard Worker #define DRM_VIRTGPU_TRANSFER_FROM_HOST 0x06 46*7688df22SAndroid Build Coastguard Worker #define DRM_VIRTGPU_TRANSFER_TO_HOST 0x07 47*7688df22SAndroid Build Coastguard Worker #define DRM_VIRTGPU_WAIT 0x08 48*7688df22SAndroid Build Coastguard Worker #define DRM_VIRTGPU_GET_CAPS 0x09 49*7688df22SAndroid Build Coastguard Worker #define DRM_VIRTGPU_RESOURCE_CREATE_BLOB 0x0a 50*7688df22SAndroid Build Coastguard Worker #define DRM_VIRTGPU_CONTEXT_INIT 0x0b 51*7688df22SAndroid Build Coastguard Worker 52*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_EXECBUF_FENCE_FD_IN 0x01 53*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_EXECBUF_FENCE_FD_OUT 0x02 54*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_EXECBUF_RING_IDX 0x04 55*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_EXECBUF_FLAGS (\ 56*7688df22SAndroid Build Coastguard Worker VIRTGPU_EXECBUF_FENCE_FD_IN |\ 57*7688df22SAndroid Build Coastguard Worker VIRTGPU_EXECBUF_FENCE_FD_OUT |\ 58*7688df22SAndroid Build Coastguard Worker VIRTGPU_EXECBUF_RING_IDX |\ 59*7688df22SAndroid Build Coastguard Worker 0) 60*7688df22SAndroid Build Coastguard Worker 61*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_map { 62*7688df22SAndroid Build Coastguard Worker __u64 offset; /* use for mmap system call */ 63*7688df22SAndroid Build Coastguard Worker __u32 handle; 64*7688df22SAndroid Build Coastguard Worker __u32 pad; 65*7688df22SAndroid Build Coastguard Worker }; 66*7688df22SAndroid Build Coastguard Worker 67*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_execbuffer { 68*7688df22SAndroid Build Coastguard Worker __u32 flags; 69*7688df22SAndroid Build Coastguard Worker __u32 size; 70*7688df22SAndroid Build Coastguard Worker __u64 command; /* void* */ 71*7688df22SAndroid Build Coastguard Worker __u64 bo_handles; 72*7688df22SAndroid Build Coastguard Worker __u32 num_bo_handles; 73*7688df22SAndroid Build Coastguard Worker __s32 fence_fd; /* in/out fence fd (see VIRTGPU_EXECBUF_FENCE_FD_IN/OUT) */ 74*7688df22SAndroid Build Coastguard Worker __u32 ring_idx; /* command ring index (see VIRTGPU_EXECBUF_RING_IDX) */ 75*7688df22SAndroid Build Coastguard Worker __u32 pad; 76*7688df22SAndroid Build Coastguard Worker }; 77*7688df22SAndroid Build Coastguard Worker 78*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_PARAM_3D_FEATURES 1 /* do we have 3D features in the hw */ 79*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2 /* do we have the capset fix */ 80*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_PARAM_RESOURCE_BLOB 3 /* DRM_VIRTGPU_RESOURCE_CREATE_BLOB */ 81*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_PARAM_HOST_VISIBLE 4 /* Host blob resources are mappable */ 82*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_PARAM_CROSS_DEVICE 5 /* Cross virtio-device resource sharing */ 83*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_PARAM_CONTEXT_INIT 6 /* DRM_VIRTGPU_CONTEXT_INIT */ 84*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_PARAM_SUPPORTED_CAPSET_IDs 7 /* Bitmask of supported capability set ids */ 85*7688df22SAndroid Build Coastguard Worker 86*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_getparam { 87*7688df22SAndroid Build Coastguard Worker __u64 param; 88*7688df22SAndroid Build Coastguard Worker __u64 value; 89*7688df22SAndroid Build Coastguard Worker }; 90*7688df22SAndroid Build Coastguard Worker 91*7688df22SAndroid Build Coastguard Worker /* NO_BO flags? NO resource flag? */ 92*7688df22SAndroid Build Coastguard Worker /* resource flag for y_0_top */ 93*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_resource_create { 94*7688df22SAndroid Build Coastguard Worker __u32 target; 95*7688df22SAndroid Build Coastguard Worker __u32 format; 96*7688df22SAndroid Build Coastguard Worker __u32 bind; 97*7688df22SAndroid Build Coastguard Worker __u32 width; 98*7688df22SAndroid Build Coastguard Worker __u32 height; 99*7688df22SAndroid Build Coastguard Worker __u32 depth; 100*7688df22SAndroid Build Coastguard Worker __u32 array_size; 101*7688df22SAndroid Build Coastguard Worker __u32 last_level; 102*7688df22SAndroid Build Coastguard Worker __u32 nr_samples; 103*7688df22SAndroid Build Coastguard Worker __u32 flags; 104*7688df22SAndroid Build Coastguard Worker __u32 bo_handle; /* if this is set - recreate a new resource attached to this bo ? */ 105*7688df22SAndroid Build Coastguard Worker __u32 res_handle; /* returned by kernel */ 106*7688df22SAndroid Build Coastguard Worker __u32 size; /* validate transfer in the host */ 107*7688df22SAndroid Build Coastguard Worker __u32 stride; /* validate transfer in the host */ 108*7688df22SAndroid Build Coastguard Worker }; 109*7688df22SAndroid Build Coastguard Worker 110*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_resource_info { 111*7688df22SAndroid Build Coastguard Worker __u32 bo_handle; 112*7688df22SAndroid Build Coastguard Worker __u32 res_handle; 113*7688df22SAndroid Build Coastguard Worker __u32 size; 114*7688df22SAndroid Build Coastguard Worker __u32 blob_mem; 115*7688df22SAndroid Build Coastguard Worker }; 116*7688df22SAndroid Build Coastguard Worker 117*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_3d_box { 118*7688df22SAndroid Build Coastguard Worker __u32 x; 119*7688df22SAndroid Build Coastguard Worker __u32 y; 120*7688df22SAndroid Build Coastguard Worker __u32 z; 121*7688df22SAndroid Build Coastguard Worker __u32 w; 122*7688df22SAndroid Build Coastguard Worker __u32 h; 123*7688df22SAndroid Build Coastguard Worker __u32 d; 124*7688df22SAndroid Build Coastguard Worker }; 125*7688df22SAndroid Build Coastguard Worker 126*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_3d_transfer_to_host { 127*7688df22SAndroid Build Coastguard Worker __u32 bo_handle; 128*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_3d_box box; 129*7688df22SAndroid Build Coastguard Worker __u32 level; 130*7688df22SAndroid Build Coastguard Worker __u32 offset; 131*7688df22SAndroid Build Coastguard Worker __u32 stride; 132*7688df22SAndroid Build Coastguard Worker __u32 layer_stride; 133*7688df22SAndroid Build Coastguard Worker }; 134*7688df22SAndroid Build Coastguard Worker 135*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_3d_transfer_from_host { 136*7688df22SAndroid Build Coastguard Worker __u32 bo_handle; 137*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_3d_box box; 138*7688df22SAndroid Build Coastguard Worker __u32 level; 139*7688df22SAndroid Build Coastguard Worker __u32 offset; 140*7688df22SAndroid Build Coastguard Worker __u32 stride; 141*7688df22SAndroid Build Coastguard Worker __u32 layer_stride; 142*7688df22SAndroid Build Coastguard Worker }; 143*7688df22SAndroid Build Coastguard Worker 144*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_WAIT_NOWAIT 1 /* like it */ 145*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_3d_wait { 146*7688df22SAndroid Build Coastguard Worker __u32 handle; /* 0 is an invalid handle */ 147*7688df22SAndroid Build Coastguard Worker __u32 flags; 148*7688df22SAndroid Build Coastguard Worker }; 149*7688df22SAndroid Build Coastguard Worker 150*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_get_caps { 151*7688df22SAndroid Build Coastguard Worker __u32 cap_set_id; 152*7688df22SAndroid Build Coastguard Worker __u32 cap_set_ver; 153*7688df22SAndroid Build Coastguard Worker __u64 addr; 154*7688df22SAndroid Build Coastguard Worker __u32 size; 155*7688df22SAndroid Build Coastguard Worker __u32 pad; 156*7688df22SAndroid Build Coastguard Worker }; 157*7688df22SAndroid Build Coastguard Worker 158*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_resource_create_blob { 159*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_BLOB_MEM_GUEST 0x0001 160*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_BLOB_MEM_HOST3D 0x0002 161*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_BLOB_MEM_HOST3D_GUEST 0x0003 162*7688df22SAndroid Build Coastguard Worker 163*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_BLOB_FLAG_USE_MAPPABLE 0x0001 164*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_BLOB_FLAG_USE_SHAREABLE 0x0002 165*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004 166*7688df22SAndroid Build Coastguard Worker /* zero is invalid blob_mem */ 167*7688df22SAndroid Build Coastguard Worker __u32 blob_mem; 168*7688df22SAndroid Build Coastguard Worker __u32 blob_flags; 169*7688df22SAndroid Build Coastguard Worker __u32 bo_handle; 170*7688df22SAndroid Build Coastguard Worker __u32 res_handle; 171*7688df22SAndroid Build Coastguard Worker __u64 size; 172*7688df22SAndroid Build Coastguard Worker 173*7688df22SAndroid Build Coastguard Worker /* 174*7688df22SAndroid Build Coastguard Worker * for 3D contexts with VIRTGPU_BLOB_MEM_HOST3D_GUEST and 175*7688df22SAndroid Build Coastguard Worker * VIRTGPU_BLOB_MEM_HOST3D otherwise, must be zero. 176*7688df22SAndroid Build Coastguard Worker */ 177*7688df22SAndroid Build Coastguard Worker __u32 pad; 178*7688df22SAndroid Build Coastguard Worker __u32 cmd_size; 179*7688df22SAndroid Build Coastguard Worker __u64 cmd; 180*7688df22SAndroid Build Coastguard Worker __u64 blob_id; 181*7688df22SAndroid Build Coastguard Worker }; 182*7688df22SAndroid Build Coastguard Worker 183*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_CONTEXT_PARAM_CAPSET_ID 0x0001 184*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_CONTEXT_PARAM_NUM_RINGS 0x0002 185*7688df22SAndroid Build Coastguard Worker #define VIRTGPU_CONTEXT_PARAM_POLL_RINGS_MASK 0x0003 186*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_context_set_param { 187*7688df22SAndroid Build Coastguard Worker __u64 param; 188*7688df22SAndroid Build Coastguard Worker __u64 value; 189*7688df22SAndroid Build Coastguard Worker }; 190*7688df22SAndroid Build Coastguard Worker 191*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_context_init { 192*7688df22SAndroid Build Coastguard Worker __u32 num_params; 193*7688df22SAndroid Build Coastguard Worker __u32 pad; 194*7688df22SAndroid Build Coastguard Worker 195*7688df22SAndroid Build Coastguard Worker /* pointer to drm_virtgpu_context_set_param array */ 196*7688df22SAndroid Build Coastguard Worker __u64 ctx_set_params; 197*7688df22SAndroid Build Coastguard Worker }; 198*7688df22SAndroid Build Coastguard Worker 199*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_VIRTGPU_MAP \ 200*7688df22SAndroid Build Coastguard Worker DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MAP, struct drm_virtgpu_map) 201*7688df22SAndroid Build Coastguard Worker 202*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_VIRTGPU_EXECBUFFER \ 203*7688df22SAndroid Build Coastguard Worker DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_EXECBUFFER,\ 204*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_execbuffer) 205*7688df22SAndroid Build Coastguard Worker 206*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_VIRTGPU_GETPARAM \ 207*7688df22SAndroid Build Coastguard Worker DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GETPARAM,\ 208*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_getparam) 209*7688df22SAndroid Build Coastguard Worker 210*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE \ 211*7688df22SAndroid Build Coastguard Worker DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE, \ 212*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_resource_create) 213*7688df22SAndroid Build Coastguard Worker 214*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_VIRTGPU_RESOURCE_INFO \ 215*7688df22SAndroid Build Coastguard Worker DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_INFO, \ 216*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_resource_info) 217*7688df22SAndroid Build Coastguard Worker 218*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_VIRTGPU_TRANSFER_FROM_HOST \ 219*7688df22SAndroid Build Coastguard Worker DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_FROM_HOST, \ 220*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_3d_transfer_from_host) 221*7688df22SAndroid Build Coastguard Worker 222*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_VIRTGPU_TRANSFER_TO_HOST \ 223*7688df22SAndroid Build Coastguard Worker DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_TO_HOST, \ 224*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_3d_transfer_to_host) 225*7688df22SAndroid Build Coastguard Worker 226*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_VIRTGPU_WAIT \ 227*7688df22SAndroid Build Coastguard Worker DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_WAIT, \ 228*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_3d_wait) 229*7688df22SAndroid Build Coastguard Worker 230*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_VIRTGPU_GET_CAPS \ 231*7688df22SAndroid Build Coastguard Worker DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GET_CAPS, \ 232*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_get_caps) 233*7688df22SAndroid Build Coastguard Worker 234*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB \ 235*7688df22SAndroid Build Coastguard Worker DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE_BLOB, \ 236*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_resource_create_blob) 237*7688df22SAndroid Build Coastguard Worker 238*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_VIRTGPU_CONTEXT_INIT \ 239*7688df22SAndroid Build Coastguard Worker DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_CONTEXT_INIT, \ 240*7688df22SAndroid Build Coastguard Worker struct drm_virtgpu_context_init) 241*7688df22SAndroid Build Coastguard Worker 242*7688df22SAndroid Build Coastguard Worker #if defined(__cplusplus) 243*7688df22SAndroid Build Coastguard Worker } 244*7688df22SAndroid Build Coastguard Worker #endif 245*7688df22SAndroid Build Coastguard Worker 246*7688df22SAndroid Build Coastguard Worker #endif 247