1*d83cc019SAndroid Build Coastguard Worker /************************************************************************** 2*d83cc019SAndroid Build Coastguard Worker * 3*d83cc019SAndroid Build Coastguard Worker * Copyright © 2009-2015 VMware, Inc., Palo Alto, CA., USA 4*d83cc019SAndroid Build Coastguard Worker * All Rights Reserved. 5*d83cc019SAndroid Build Coastguard Worker * 6*d83cc019SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 7*d83cc019SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the 8*d83cc019SAndroid Build Coastguard Worker * "Software"), to deal in the Software without restriction, including 9*d83cc019SAndroid Build Coastguard Worker * without limitation the rights to use, copy, modify, merge, publish, 10*d83cc019SAndroid Build Coastguard Worker * distribute, sub license, and/or sell copies of the Software, and to 11*d83cc019SAndroid Build Coastguard Worker * permit persons to whom the Software is furnished to do so, subject to 12*d83cc019SAndroid Build Coastguard Worker * the following conditions: 13*d83cc019SAndroid Build Coastguard Worker * 14*d83cc019SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the 15*d83cc019SAndroid Build Coastguard Worker * next paragraph) shall be included in all copies or substantial portions 16*d83cc019SAndroid Build Coastguard Worker * of the Software. 17*d83cc019SAndroid Build Coastguard Worker * 18*d83cc019SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19*d83cc019SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20*d83cc019SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 21*d83cc019SAndroid Build Coastguard Worker * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 22*d83cc019SAndroid Build Coastguard Worker * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 23*d83cc019SAndroid Build Coastguard Worker * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 24*d83cc019SAndroid Build Coastguard Worker * USE OR OTHER DEALINGS IN THE SOFTWARE. 25*d83cc019SAndroid Build Coastguard Worker * 26*d83cc019SAndroid Build Coastguard Worker **************************************************************************/ 27*d83cc019SAndroid Build Coastguard Worker 28*d83cc019SAndroid Build Coastguard Worker #ifndef __VMWGFX_DRM_H__ 29*d83cc019SAndroid Build Coastguard Worker #define __VMWGFX_DRM_H__ 30*d83cc019SAndroid Build Coastguard Worker 31*d83cc019SAndroid Build Coastguard Worker #include "drm.h" 32*d83cc019SAndroid Build Coastguard Worker 33*d83cc019SAndroid Build Coastguard Worker #if defined(__cplusplus) 34*d83cc019SAndroid Build Coastguard Worker extern "C" { 35*d83cc019SAndroid Build Coastguard Worker #endif 36*d83cc019SAndroid Build Coastguard Worker 37*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_MAX_SURFACE_FACES 6 38*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_MAX_MIP_LEVELS 24 39*d83cc019SAndroid Build Coastguard Worker 40*d83cc019SAndroid Build Coastguard Worker 41*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_GET_PARAM 0 42*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_ALLOC_DMABUF 1 43*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_ALLOC_BO 1 44*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_UNREF_DMABUF 2 45*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_HANDLE_CLOSE 2 46*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_CURSOR_BYPASS 3 47*d83cc019SAndroid Build Coastguard Worker /* guarded by DRM_VMW_PARAM_NUM_STREAMS != 0*/ 48*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_CONTROL_STREAM 4 49*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_CLAIM_STREAM 5 50*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_UNREF_STREAM 6 51*d83cc019SAndroid Build Coastguard Worker /* guarded by DRM_VMW_PARAM_3D == 1 */ 52*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_CREATE_CONTEXT 7 53*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_UNREF_CONTEXT 8 54*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_CREATE_SURFACE 9 55*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_UNREF_SURFACE 10 56*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_REF_SURFACE 11 57*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_EXECBUF 12 58*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_GET_3D_CAP 13 59*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_FENCE_WAIT 14 60*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_FENCE_SIGNALED 15 61*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_FENCE_UNREF 16 62*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_FENCE_EVENT 17 63*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PRESENT 18 64*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PRESENT_READBACK 19 65*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_UPDATE_LAYOUT 20 66*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_CREATE_SHADER 21 67*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_UNREF_SHADER 22 68*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_GB_SURFACE_CREATE 23 69*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_GB_SURFACE_REF 24 70*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_SYNCCPU 25 71*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_CREATE_EXTENDED_CONTEXT 26 72*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_GB_SURFACE_CREATE_EXT 27 73*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_GB_SURFACE_REF_EXT 28 74*d83cc019SAndroid Build Coastguard Worker 75*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 76*d83cc019SAndroid Build Coastguard Worker /** 77*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_GET_PARAM - get device information. 78*d83cc019SAndroid Build Coastguard Worker * 79*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_PARAM_FIFO_OFFSET: 80*d83cc019SAndroid Build Coastguard Worker * Offset to use to map the first page of the FIFO read-only. 81*d83cc019SAndroid Build Coastguard Worker * The fifo is mapped using the mmap() system call on the drm device. 82*d83cc019SAndroid Build Coastguard Worker * 83*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_PARAM_OVERLAY_IOCTL: 84*d83cc019SAndroid Build Coastguard Worker * Does the driver support the overlay ioctl. 85*d83cc019SAndroid Build Coastguard Worker * 86*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_PARAM_SM4_1 87*d83cc019SAndroid Build Coastguard Worker * SM4_1 support is enabled. 88*d83cc019SAndroid Build Coastguard Worker */ 89*d83cc019SAndroid Build Coastguard Worker 90*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_NUM_STREAMS 0 91*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_NUM_FREE_STREAMS 1 92*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_3D 2 93*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_HW_CAPS 3 94*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_FIFO_CAPS 4 95*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_MAX_FB_SIZE 5 96*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_FIFO_HW_VERSION 6 97*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_MAX_SURF_MEMORY 7 98*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_3D_CAPS_SIZE 8 99*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_MAX_MOB_MEMORY 9 100*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_MAX_MOB_SIZE 10 101*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_SCREEN_TARGET 11 102*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_DX 12 103*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_HW_CAPS2 13 104*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_PARAM_SM4_1 14 105*d83cc019SAndroid Build Coastguard Worker 106*d83cc019SAndroid Build Coastguard Worker /** 107*d83cc019SAndroid Build Coastguard Worker * enum drm_vmw_handle_type - handle type for ref ioctls 108*d83cc019SAndroid Build Coastguard Worker * 109*d83cc019SAndroid Build Coastguard Worker */ 110*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_handle_type { 111*d83cc019SAndroid Build Coastguard Worker DRM_VMW_HANDLE_LEGACY = 0, 112*d83cc019SAndroid Build Coastguard Worker DRM_VMW_HANDLE_PRIME = 1 113*d83cc019SAndroid Build Coastguard Worker }; 114*d83cc019SAndroid Build Coastguard Worker 115*d83cc019SAndroid Build Coastguard Worker /** 116*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_getparam_arg 117*d83cc019SAndroid Build Coastguard Worker * 118*d83cc019SAndroid Build Coastguard Worker * @value: Returned value. //Out 119*d83cc019SAndroid Build Coastguard Worker * @param: Parameter to query. //In. 120*d83cc019SAndroid Build Coastguard Worker * 121*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_GET_PARAM Ioctl. 122*d83cc019SAndroid Build Coastguard Worker */ 123*d83cc019SAndroid Build Coastguard Worker 124*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_getparam_arg { 125*d83cc019SAndroid Build Coastguard Worker __u64 value; 126*d83cc019SAndroid Build Coastguard Worker __u32 param; 127*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 128*d83cc019SAndroid Build Coastguard Worker }; 129*d83cc019SAndroid Build Coastguard Worker 130*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 131*d83cc019SAndroid Build Coastguard Worker /** 132*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_CREATE_CONTEXT - Create a host context. 133*d83cc019SAndroid Build Coastguard Worker * 134*d83cc019SAndroid Build Coastguard Worker * Allocates a device unique context id, and queues a create context command 135*d83cc019SAndroid Build Coastguard Worker * for the host. Does not wait for host completion. 136*d83cc019SAndroid Build Coastguard Worker */ 137*d83cc019SAndroid Build Coastguard Worker 138*d83cc019SAndroid Build Coastguard Worker /** 139*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_context_arg 140*d83cc019SAndroid Build Coastguard Worker * 141*d83cc019SAndroid Build Coastguard Worker * @cid: Device unique context ID. 142*d83cc019SAndroid Build Coastguard Worker * 143*d83cc019SAndroid Build Coastguard Worker * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. 144*d83cc019SAndroid Build Coastguard Worker * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. 145*d83cc019SAndroid Build Coastguard Worker */ 146*d83cc019SAndroid Build Coastguard Worker 147*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_context_arg { 148*d83cc019SAndroid Build Coastguard Worker __s32 cid; 149*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 150*d83cc019SAndroid Build Coastguard Worker }; 151*d83cc019SAndroid Build Coastguard Worker 152*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 153*d83cc019SAndroid Build Coastguard Worker /** 154*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_UNREF_CONTEXT - Create a host context. 155*d83cc019SAndroid Build Coastguard Worker * 156*d83cc019SAndroid Build Coastguard Worker * Frees a global context id, and queues a destroy host command for the host. 157*d83cc019SAndroid Build Coastguard Worker * Does not wait for host completion. The context ID can be used directly 158*d83cc019SAndroid Build Coastguard Worker * in the command stream and shows up as the same context ID on the host. 159*d83cc019SAndroid Build Coastguard Worker */ 160*d83cc019SAndroid Build Coastguard Worker 161*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 162*d83cc019SAndroid Build Coastguard Worker /** 163*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_CREATE_SURFACE - Create a host suface. 164*d83cc019SAndroid Build Coastguard Worker * 165*d83cc019SAndroid Build Coastguard Worker * Allocates a device unique surface id, and queues a create surface command 166*d83cc019SAndroid Build Coastguard Worker * for the host. Does not wait for host completion. The surface ID can be 167*d83cc019SAndroid Build Coastguard Worker * used directly in the command stream and shows up as the same surface 168*d83cc019SAndroid Build Coastguard Worker * ID on the host. 169*d83cc019SAndroid Build Coastguard Worker */ 170*d83cc019SAndroid Build Coastguard Worker 171*d83cc019SAndroid Build Coastguard Worker /** 172*d83cc019SAndroid Build Coastguard Worker * struct drm_wmv_surface_create_req 173*d83cc019SAndroid Build Coastguard Worker * 174*d83cc019SAndroid Build Coastguard Worker * @flags: Surface flags as understood by the host. 175*d83cc019SAndroid Build Coastguard Worker * @format: Surface format as understood by the host. 176*d83cc019SAndroid Build Coastguard Worker * @mip_levels: Number of mip levels for each face. 177*d83cc019SAndroid Build Coastguard Worker * An unused face should have 0 encoded. 178*d83cc019SAndroid Build Coastguard Worker * @size_addr: Address of a user-space array of sruct drm_vmw_size 179*d83cc019SAndroid Build Coastguard Worker * cast to an __u64 for 32-64 bit compatibility. 180*d83cc019SAndroid Build Coastguard Worker * The size of the array should equal the total number of mipmap levels. 181*d83cc019SAndroid Build Coastguard Worker * @shareable: Boolean whether other clients (as identified by file descriptors) 182*d83cc019SAndroid Build Coastguard Worker * may reference this surface. 183*d83cc019SAndroid Build Coastguard Worker * @scanout: Boolean whether the surface is intended to be used as a 184*d83cc019SAndroid Build Coastguard Worker * scanout. 185*d83cc019SAndroid Build Coastguard Worker * 186*d83cc019SAndroid Build Coastguard Worker * Input data to the DRM_VMW_CREATE_SURFACE Ioctl. 187*d83cc019SAndroid Build Coastguard Worker * Output data from the DRM_VMW_REF_SURFACE Ioctl. 188*d83cc019SAndroid Build Coastguard Worker */ 189*d83cc019SAndroid Build Coastguard Worker 190*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_surface_create_req { 191*d83cc019SAndroid Build Coastguard Worker __u32 flags; 192*d83cc019SAndroid Build Coastguard Worker __u32 format; 193*d83cc019SAndroid Build Coastguard Worker __u32 mip_levels[DRM_VMW_MAX_SURFACE_FACES]; 194*d83cc019SAndroid Build Coastguard Worker __u64 size_addr; 195*d83cc019SAndroid Build Coastguard Worker __s32 shareable; 196*d83cc019SAndroid Build Coastguard Worker __s32 scanout; 197*d83cc019SAndroid Build Coastguard Worker }; 198*d83cc019SAndroid Build Coastguard Worker 199*d83cc019SAndroid Build Coastguard Worker /** 200*d83cc019SAndroid Build Coastguard Worker * struct drm_wmv_surface_arg 201*d83cc019SAndroid Build Coastguard Worker * 202*d83cc019SAndroid Build Coastguard Worker * @sid: Surface id of created surface or surface to destroy or reference. 203*d83cc019SAndroid Build Coastguard Worker * @handle_type: Handle type for DRM_VMW_REF_SURFACE Ioctl. 204*d83cc019SAndroid Build Coastguard Worker * 205*d83cc019SAndroid Build Coastguard Worker * Output data from the DRM_VMW_CREATE_SURFACE Ioctl. 206*d83cc019SAndroid Build Coastguard Worker * Input argument to the DRM_VMW_UNREF_SURFACE Ioctl. 207*d83cc019SAndroid Build Coastguard Worker * Input argument to the DRM_VMW_REF_SURFACE Ioctl. 208*d83cc019SAndroid Build Coastguard Worker */ 209*d83cc019SAndroid Build Coastguard Worker 210*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_surface_arg { 211*d83cc019SAndroid Build Coastguard Worker __s32 sid; 212*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_handle_type handle_type; 213*d83cc019SAndroid Build Coastguard Worker }; 214*d83cc019SAndroid Build Coastguard Worker 215*d83cc019SAndroid Build Coastguard Worker /** 216*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_size ioctl. 217*d83cc019SAndroid Build Coastguard Worker * 218*d83cc019SAndroid Build Coastguard Worker * @width - mip level width 219*d83cc019SAndroid Build Coastguard Worker * @height - mip level height 220*d83cc019SAndroid Build Coastguard Worker * @depth - mip level depth 221*d83cc019SAndroid Build Coastguard Worker * 222*d83cc019SAndroid Build Coastguard Worker * Description of a mip level. 223*d83cc019SAndroid Build Coastguard Worker * Input data to the DRM_WMW_CREATE_SURFACE Ioctl. 224*d83cc019SAndroid Build Coastguard Worker */ 225*d83cc019SAndroid Build Coastguard Worker 226*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_size { 227*d83cc019SAndroid Build Coastguard Worker __u32 width; 228*d83cc019SAndroid Build Coastguard Worker __u32 height; 229*d83cc019SAndroid Build Coastguard Worker __u32 depth; 230*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 231*d83cc019SAndroid Build Coastguard Worker }; 232*d83cc019SAndroid Build Coastguard Worker 233*d83cc019SAndroid Build Coastguard Worker /** 234*d83cc019SAndroid Build Coastguard Worker * union drm_vmw_surface_create_arg 235*d83cc019SAndroid Build Coastguard Worker * 236*d83cc019SAndroid Build Coastguard Worker * @rep: Output data as described above. 237*d83cc019SAndroid Build Coastguard Worker * @req: Input data as described above. 238*d83cc019SAndroid Build Coastguard Worker * 239*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_CREATE_SURFACE Ioctl. 240*d83cc019SAndroid Build Coastguard Worker */ 241*d83cc019SAndroid Build Coastguard Worker 242*d83cc019SAndroid Build Coastguard Worker union drm_vmw_surface_create_arg { 243*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_surface_arg rep; 244*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_surface_create_req req; 245*d83cc019SAndroid Build Coastguard Worker }; 246*d83cc019SAndroid Build Coastguard Worker 247*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 248*d83cc019SAndroid Build Coastguard Worker /** 249*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_REF_SURFACE - Reference a host surface. 250*d83cc019SAndroid Build Coastguard Worker * 251*d83cc019SAndroid Build Coastguard Worker * Puts a reference on a host surface with a give sid, as previously 252*d83cc019SAndroid Build Coastguard Worker * returned by the DRM_VMW_CREATE_SURFACE ioctl. 253*d83cc019SAndroid Build Coastguard Worker * A reference will make sure the surface isn't destroyed while we hold 254*d83cc019SAndroid Build Coastguard Worker * it and will allow the calling client to use the surface ID in the command 255*d83cc019SAndroid Build Coastguard Worker * stream. 256*d83cc019SAndroid Build Coastguard Worker * 257*d83cc019SAndroid Build Coastguard Worker * On successful return, the Ioctl returns the surface information given 258*d83cc019SAndroid Build Coastguard Worker * in the DRM_VMW_CREATE_SURFACE ioctl. 259*d83cc019SAndroid Build Coastguard Worker */ 260*d83cc019SAndroid Build Coastguard Worker 261*d83cc019SAndroid Build Coastguard Worker /** 262*d83cc019SAndroid Build Coastguard Worker * union drm_vmw_surface_reference_arg 263*d83cc019SAndroid Build Coastguard Worker * 264*d83cc019SAndroid Build Coastguard Worker * @rep: Output data as described above. 265*d83cc019SAndroid Build Coastguard Worker * @req: Input data as described above. 266*d83cc019SAndroid Build Coastguard Worker * 267*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_REF_SURFACE Ioctl. 268*d83cc019SAndroid Build Coastguard Worker */ 269*d83cc019SAndroid Build Coastguard Worker 270*d83cc019SAndroid Build Coastguard Worker union drm_vmw_surface_reference_arg { 271*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_surface_create_req rep; 272*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_surface_arg req; 273*d83cc019SAndroid Build Coastguard Worker }; 274*d83cc019SAndroid Build Coastguard Worker 275*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 276*d83cc019SAndroid Build Coastguard Worker /** 277*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_UNREF_SURFACE - Unreference a host surface. 278*d83cc019SAndroid Build Coastguard Worker * 279*d83cc019SAndroid Build Coastguard Worker * Clear a reference previously put on a host surface. 280*d83cc019SAndroid Build Coastguard Worker * When all references are gone, including the one implicitly placed 281*d83cc019SAndroid Build Coastguard Worker * on creation, 282*d83cc019SAndroid Build Coastguard Worker * a destroy surface command will be queued for the host. 283*d83cc019SAndroid Build Coastguard Worker * Does not wait for completion. 284*d83cc019SAndroid Build Coastguard Worker */ 285*d83cc019SAndroid Build Coastguard Worker 286*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 287*d83cc019SAndroid Build Coastguard Worker /** 288*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_EXECBUF 289*d83cc019SAndroid Build Coastguard Worker * 290*d83cc019SAndroid Build Coastguard Worker * Submit a command buffer for execution on the host, and return a 291*d83cc019SAndroid Build Coastguard Worker * fence seqno that when signaled, indicates that the command buffer has 292*d83cc019SAndroid Build Coastguard Worker * executed. 293*d83cc019SAndroid Build Coastguard Worker */ 294*d83cc019SAndroid Build Coastguard Worker 295*d83cc019SAndroid Build Coastguard Worker /** 296*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_execbuf_arg 297*d83cc019SAndroid Build Coastguard Worker * 298*d83cc019SAndroid Build Coastguard Worker * @commands: User-space address of a command buffer cast to an __u64. 299*d83cc019SAndroid Build Coastguard Worker * @command-size: Size in bytes of the command buffer. 300*d83cc019SAndroid Build Coastguard Worker * @throttle-us: Sleep until software is less than @throttle_us 301*d83cc019SAndroid Build Coastguard Worker * microseconds ahead of hardware. The driver may round this value 302*d83cc019SAndroid Build Coastguard Worker * to the nearest kernel tick. 303*d83cc019SAndroid Build Coastguard Worker * @fence_rep: User-space address of a struct drm_vmw_fence_rep cast to an 304*d83cc019SAndroid Build Coastguard Worker * __u64. 305*d83cc019SAndroid Build Coastguard Worker * @version: Allows expanding the execbuf ioctl parameters without breaking 306*d83cc019SAndroid Build Coastguard Worker * backwards compatibility, since user-space will always tell the kernel 307*d83cc019SAndroid Build Coastguard Worker * which version it uses. 308*d83cc019SAndroid Build Coastguard Worker * @flags: Execbuf flags. 309*d83cc019SAndroid Build Coastguard Worker * @imported_fence_fd: FD for a fence imported from another device 310*d83cc019SAndroid Build Coastguard Worker * 311*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_EXECBUF Ioctl. 312*d83cc019SAndroid Build Coastguard Worker */ 313*d83cc019SAndroid Build Coastguard Worker 314*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_EXECBUF_VERSION 2 315*d83cc019SAndroid Build Coastguard Worker 316*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_EXECBUF_FLAG_IMPORT_FENCE_FD (1 << 0) 317*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_EXECBUF_FLAG_EXPORT_FENCE_FD (1 << 1) 318*d83cc019SAndroid Build Coastguard Worker 319*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_execbuf_arg { 320*d83cc019SAndroid Build Coastguard Worker __u64 commands; 321*d83cc019SAndroid Build Coastguard Worker __u32 command_size; 322*d83cc019SAndroid Build Coastguard Worker __u32 throttle_us; 323*d83cc019SAndroid Build Coastguard Worker __u64 fence_rep; 324*d83cc019SAndroid Build Coastguard Worker __u32 version; 325*d83cc019SAndroid Build Coastguard Worker __u32 flags; 326*d83cc019SAndroid Build Coastguard Worker __u32 context_handle; 327*d83cc019SAndroid Build Coastguard Worker __s32 imported_fence_fd; 328*d83cc019SAndroid Build Coastguard Worker }; 329*d83cc019SAndroid Build Coastguard Worker 330*d83cc019SAndroid Build Coastguard Worker /** 331*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_fence_rep 332*d83cc019SAndroid Build Coastguard Worker * 333*d83cc019SAndroid Build Coastguard Worker * @handle: Fence object handle for fence associated with a command submission. 334*d83cc019SAndroid Build Coastguard Worker * @mask: Fence flags relevant for this fence object. 335*d83cc019SAndroid Build Coastguard Worker * @seqno: Fence sequence number in fifo. A fence object with a lower 336*d83cc019SAndroid Build Coastguard Worker * seqno will signal the EXEC flag before a fence object with a higher 337*d83cc019SAndroid Build Coastguard Worker * seqno. This can be used by user-space to avoid kernel calls to determine 338*d83cc019SAndroid Build Coastguard Worker * whether a fence has signaled the EXEC flag. Note that @seqno will 339*d83cc019SAndroid Build Coastguard Worker * wrap at 32-bit. 340*d83cc019SAndroid Build Coastguard Worker * @passed_seqno: The highest seqno number processed by the hardware 341*d83cc019SAndroid Build Coastguard Worker * so far. This can be used to mark user-space fence objects as signaled, and 342*d83cc019SAndroid Build Coastguard Worker * to determine whether a fence seqno might be stale. 343*d83cc019SAndroid Build Coastguard Worker * @fd: FD associated with the fence, -1 if not exported 344*d83cc019SAndroid Build Coastguard Worker * @error: This member should've been set to -EFAULT on submission. 345*d83cc019SAndroid Build Coastguard Worker * The following actions should be take on completion: 346*d83cc019SAndroid Build Coastguard Worker * error == -EFAULT: Fence communication failed. The host is synchronized. 347*d83cc019SAndroid Build Coastguard Worker * Use the last fence id read from the FIFO fence register. 348*d83cc019SAndroid Build Coastguard Worker * error != 0 && error != -EFAULT: 349*d83cc019SAndroid Build Coastguard Worker * Fence submission failed. The host is synchronized. Use the fence_seq member. 350*d83cc019SAndroid Build Coastguard Worker * error == 0: All is OK, The host may not be synchronized. 351*d83cc019SAndroid Build Coastguard Worker * Use the fence_seq member. 352*d83cc019SAndroid Build Coastguard Worker * 353*d83cc019SAndroid Build Coastguard Worker * Input / Output data to the DRM_VMW_EXECBUF Ioctl. 354*d83cc019SAndroid Build Coastguard Worker */ 355*d83cc019SAndroid Build Coastguard Worker 356*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_fence_rep { 357*d83cc019SAndroid Build Coastguard Worker __u32 handle; 358*d83cc019SAndroid Build Coastguard Worker __u32 mask; 359*d83cc019SAndroid Build Coastguard Worker __u32 seqno; 360*d83cc019SAndroid Build Coastguard Worker __u32 passed_seqno; 361*d83cc019SAndroid Build Coastguard Worker __s32 fd; 362*d83cc019SAndroid Build Coastguard Worker __s32 error; 363*d83cc019SAndroid Build Coastguard Worker }; 364*d83cc019SAndroid Build Coastguard Worker 365*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 366*d83cc019SAndroid Build Coastguard Worker /** 367*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_ALLOC_BO 368*d83cc019SAndroid Build Coastguard Worker * 369*d83cc019SAndroid Build Coastguard Worker * Allocate a buffer object that is visible also to the host. 370*d83cc019SAndroid Build Coastguard Worker * NOTE: The buffer is 371*d83cc019SAndroid Build Coastguard Worker * identified by a handle and an offset, which are private to the guest, but 372*d83cc019SAndroid Build Coastguard Worker * useable in the command stream. The guest kernel may translate these 373*d83cc019SAndroid Build Coastguard Worker * and patch up the command stream accordingly. In the future, the offset may 374*d83cc019SAndroid Build Coastguard Worker * be zero at all times, or it may disappear from the interface before it is 375*d83cc019SAndroid Build Coastguard Worker * fixed. 376*d83cc019SAndroid Build Coastguard Worker * 377*d83cc019SAndroid Build Coastguard Worker * The buffer object may stay user-space mapped in the guest at all times, 378*d83cc019SAndroid Build Coastguard Worker * and is thus suitable for sub-allocation. 379*d83cc019SAndroid Build Coastguard Worker * 380*d83cc019SAndroid Build Coastguard Worker * Buffer objects are mapped using the mmap() syscall on the drm device. 381*d83cc019SAndroid Build Coastguard Worker */ 382*d83cc019SAndroid Build Coastguard Worker 383*d83cc019SAndroid Build Coastguard Worker /** 384*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_alloc_bo_req 385*d83cc019SAndroid Build Coastguard Worker * 386*d83cc019SAndroid Build Coastguard Worker * @size: Required minimum size of the buffer. 387*d83cc019SAndroid Build Coastguard Worker * 388*d83cc019SAndroid Build Coastguard Worker * Input data to the DRM_VMW_ALLOC_BO Ioctl. 389*d83cc019SAndroid Build Coastguard Worker */ 390*d83cc019SAndroid Build Coastguard Worker 391*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_alloc_bo_req { 392*d83cc019SAndroid Build Coastguard Worker __u32 size; 393*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 394*d83cc019SAndroid Build Coastguard Worker }; 395*d83cc019SAndroid Build Coastguard Worker #define drm_vmw_alloc_dmabuf_req drm_vmw_alloc_bo_req 396*d83cc019SAndroid Build Coastguard Worker 397*d83cc019SAndroid Build Coastguard Worker /** 398*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_bo_rep 399*d83cc019SAndroid Build Coastguard Worker * 400*d83cc019SAndroid Build Coastguard Worker * @map_handle: Offset to use in the mmap() call used to map the buffer. 401*d83cc019SAndroid Build Coastguard Worker * @handle: Handle unique to this buffer. Used for unreferencing. 402*d83cc019SAndroid Build Coastguard Worker * @cur_gmr_id: GMR id to use in the command stream when this buffer is 403*d83cc019SAndroid Build Coastguard Worker * referenced. See not above. 404*d83cc019SAndroid Build Coastguard Worker * @cur_gmr_offset: Offset to use in the command stream when this buffer is 405*d83cc019SAndroid Build Coastguard Worker * referenced. See note above. 406*d83cc019SAndroid Build Coastguard Worker * 407*d83cc019SAndroid Build Coastguard Worker * Output data from the DRM_VMW_ALLOC_BO Ioctl. 408*d83cc019SAndroid Build Coastguard Worker */ 409*d83cc019SAndroid Build Coastguard Worker 410*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_bo_rep { 411*d83cc019SAndroid Build Coastguard Worker __u64 map_handle; 412*d83cc019SAndroid Build Coastguard Worker __u32 handle; 413*d83cc019SAndroid Build Coastguard Worker __u32 cur_gmr_id; 414*d83cc019SAndroid Build Coastguard Worker __u32 cur_gmr_offset; 415*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 416*d83cc019SAndroid Build Coastguard Worker }; 417*d83cc019SAndroid Build Coastguard Worker #define drm_vmw_dmabuf_rep drm_vmw_bo_rep 418*d83cc019SAndroid Build Coastguard Worker 419*d83cc019SAndroid Build Coastguard Worker /** 420*d83cc019SAndroid Build Coastguard Worker * union drm_vmw_alloc_bo_arg 421*d83cc019SAndroid Build Coastguard Worker * 422*d83cc019SAndroid Build Coastguard Worker * @req: Input data as described above. 423*d83cc019SAndroid Build Coastguard Worker * @rep: Output data as described above. 424*d83cc019SAndroid Build Coastguard Worker * 425*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_ALLOC_BO Ioctl. 426*d83cc019SAndroid Build Coastguard Worker */ 427*d83cc019SAndroid Build Coastguard Worker 428*d83cc019SAndroid Build Coastguard Worker union drm_vmw_alloc_bo_arg { 429*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_alloc_bo_req req; 430*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_bo_rep rep; 431*d83cc019SAndroid Build Coastguard Worker }; 432*d83cc019SAndroid Build Coastguard Worker #define drm_vmw_alloc_dmabuf_arg drm_vmw_alloc_bo_arg 433*d83cc019SAndroid Build Coastguard Worker 434*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 435*d83cc019SAndroid Build Coastguard Worker /** 436*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_CONTROL_STREAM - Control overlays, aka streams. 437*d83cc019SAndroid Build Coastguard Worker * 438*d83cc019SAndroid Build Coastguard Worker * This IOCTL controls the overlay units of the svga device. 439*d83cc019SAndroid Build Coastguard Worker * The SVGA overlay units does not work like regular hardware units in 440*d83cc019SAndroid Build Coastguard Worker * that they do not automaticaly read back the contents of the given dma 441*d83cc019SAndroid Build Coastguard Worker * buffer. But instead only read back for each call to this ioctl, and 442*d83cc019SAndroid Build Coastguard Worker * at any point between this call being made and a following call that 443*d83cc019SAndroid Build Coastguard Worker * either changes the buffer or disables the stream. 444*d83cc019SAndroid Build Coastguard Worker */ 445*d83cc019SAndroid Build Coastguard Worker 446*d83cc019SAndroid Build Coastguard Worker /** 447*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_rect 448*d83cc019SAndroid Build Coastguard Worker * 449*d83cc019SAndroid Build Coastguard Worker * Defines a rectangle. Used in the overlay ioctl to define 450*d83cc019SAndroid Build Coastguard Worker * source and destination rectangle. 451*d83cc019SAndroid Build Coastguard Worker */ 452*d83cc019SAndroid Build Coastguard Worker 453*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_rect { 454*d83cc019SAndroid Build Coastguard Worker __s32 x; 455*d83cc019SAndroid Build Coastguard Worker __s32 y; 456*d83cc019SAndroid Build Coastguard Worker __u32 w; 457*d83cc019SAndroid Build Coastguard Worker __u32 h; 458*d83cc019SAndroid Build Coastguard Worker }; 459*d83cc019SAndroid Build Coastguard Worker 460*d83cc019SAndroid Build Coastguard Worker /** 461*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_control_stream_arg 462*d83cc019SAndroid Build Coastguard Worker * 463*d83cc019SAndroid Build Coastguard Worker * @stream_id: Stearm to control 464*d83cc019SAndroid Build Coastguard Worker * @enabled: If false all following arguments are ignored. 465*d83cc019SAndroid Build Coastguard Worker * @handle: Handle to buffer for getting data from. 466*d83cc019SAndroid Build Coastguard Worker * @format: Format of the overlay as understood by the host. 467*d83cc019SAndroid Build Coastguard Worker * @width: Width of the overlay. 468*d83cc019SAndroid Build Coastguard Worker * @height: Height of the overlay. 469*d83cc019SAndroid Build Coastguard Worker * @size: Size of the overlay in bytes. 470*d83cc019SAndroid Build Coastguard Worker * @pitch: Array of pitches, the two last are only used for YUV12 formats. 471*d83cc019SAndroid Build Coastguard Worker * @offset: Offset from start of dma buffer to overlay. 472*d83cc019SAndroid Build Coastguard Worker * @src: Source rect, must be within the defined area above. 473*d83cc019SAndroid Build Coastguard Worker * @dst: Destination rect, x and y may be negative. 474*d83cc019SAndroid Build Coastguard Worker * 475*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_CONTROL_STREAM Ioctl. 476*d83cc019SAndroid Build Coastguard Worker */ 477*d83cc019SAndroid Build Coastguard Worker 478*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_control_stream_arg { 479*d83cc019SAndroid Build Coastguard Worker __u32 stream_id; 480*d83cc019SAndroid Build Coastguard Worker __u32 enabled; 481*d83cc019SAndroid Build Coastguard Worker 482*d83cc019SAndroid Build Coastguard Worker __u32 flags; 483*d83cc019SAndroid Build Coastguard Worker __u32 color_key; 484*d83cc019SAndroid Build Coastguard Worker 485*d83cc019SAndroid Build Coastguard Worker __u32 handle; 486*d83cc019SAndroid Build Coastguard Worker __u32 offset; 487*d83cc019SAndroid Build Coastguard Worker __s32 format; 488*d83cc019SAndroid Build Coastguard Worker __u32 size; 489*d83cc019SAndroid Build Coastguard Worker __u32 width; 490*d83cc019SAndroid Build Coastguard Worker __u32 height; 491*d83cc019SAndroid Build Coastguard Worker __u32 pitch[3]; 492*d83cc019SAndroid Build Coastguard Worker 493*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 494*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_rect src; 495*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_rect dst; 496*d83cc019SAndroid Build Coastguard Worker }; 497*d83cc019SAndroid Build Coastguard Worker 498*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 499*d83cc019SAndroid Build Coastguard Worker /** 500*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_CURSOR_BYPASS - Give extra information about cursor bypass. 501*d83cc019SAndroid Build Coastguard Worker * 502*d83cc019SAndroid Build Coastguard Worker */ 503*d83cc019SAndroid Build Coastguard Worker 504*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_CURSOR_BYPASS_ALL (1 << 0) 505*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_CURSOR_BYPASS_FLAGS (1) 506*d83cc019SAndroid Build Coastguard Worker 507*d83cc019SAndroid Build Coastguard Worker /** 508*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_cursor_bypass_arg 509*d83cc019SAndroid Build Coastguard Worker * 510*d83cc019SAndroid Build Coastguard Worker * @flags: Flags. 511*d83cc019SAndroid Build Coastguard Worker * @crtc_id: Crtc id, only used if DMR_CURSOR_BYPASS_ALL isn't passed. 512*d83cc019SAndroid Build Coastguard Worker * @xpos: X position of cursor. 513*d83cc019SAndroid Build Coastguard Worker * @ypos: Y position of cursor. 514*d83cc019SAndroid Build Coastguard Worker * @xhot: X hotspot. 515*d83cc019SAndroid Build Coastguard Worker * @yhot: Y hotspot. 516*d83cc019SAndroid Build Coastguard Worker * 517*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_CURSOR_BYPASS Ioctl. 518*d83cc019SAndroid Build Coastguard Worker */ 519*d83cc019SAndroid Build Coastguard Worker 520*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_cursor_bypass_arg { 521*d83cc019SAndroid Build Coastguard Worker __u32 flags; 522*d83cc019SAndroid Build Coastguard Worker __u32 crtc_id; 523*d83cc019SAndroid Build Coastguard Worker __s32 xpos; 524*d83cc019SAndroid Build Coastguard Worker __s32 ypos; 525*d83cc019SAndroid Build Coastguard Worker __s32 xhot; 526*d83cc019SAndroid Build Coastguard Worker __s32 yhot; 527*d83cc019SAndroid Build Coastguard Worker }; 528*d83cc019SAndroid Build Coastguard Worker 529*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 530*d83cc019SAndroid Build Coastguard Worker /** 531*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_CLAIM_STREAM - Claim a single stream. 532*d83cc019SAndroid Build Coastguard Worker */ 533*d83cc019SAndroid Build Coastguard Worker 534*d83cc019SAndroid Build Coastguard Worker /** 535*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_context_arg 536*d83cc019SAndroid Build Coastguard Worker * 537*d83cc019SAndroid Build Coastguard Worker * @stream_id: Device unique context ID. 538*d83cc019SAndroid Build Coastguard Worker * 539*d83cc019SAndroid Build Coastguard Worker * Output argument to the DRM_VMW_CREATE_CONTEXT Ioctl. 540*d83cc019SAndroid Build Coastguard Worker * Input argument to the DRM_VMW_UNREF_CONTEXT Ioctl. 541*d83cc019SAndroid Build Coastguard Worker */ 542*d83cc019SAndroid Build Coastguard Worker 543*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_stream_arg { 544*d83cc019SAndroid Build Coastguard Worker __u32 stream_id; 545*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 546*d83cc019SAndroid Build Coastguard Worker }; 547*d83cc019SAndroid Build Coastguard Worker 548*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 549*d83cc019SAndroid Build Coastguard Worker /** 550*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_UNREF_STREAM - Unclaim a stream. 551*d83cc019SAndroid Build Coastguard Worker * 552*d83cc019SAndroid Build Coastguard Worker * Return a single stream that was claimed by this process. Also makes 553*d83cc019SAndroid Build Coastguard Worker * sure that the stream has been stopped. 554*d83cc019SAndroid Build Coastguard Worker */ 555*d83cc019SAndroid Build Coastguard Worker 556*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 557*d83cc019SAndroid Build Coastguard Worker /** 558*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_GET_3D_CAP 559*d83cc019SAndroid Build Coastguard Worker * 560*d83cc019SAndroid Build Coastguard Worker * Read 3D capabilities from the FIFO 561*d83cc019SAndroid Build Coastguard Worker * 562*d83cc019SAndroid Build Coastguard Worker */ 563*d83cc019SAndroid Build Coastguard Worker 564*d83cc019SAndroid Build Coastguard Worker /** 565*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_get_3d_cap_arg 566*d83cc019SAndroid Build Coastguard Worker * 567*d83cc019SAndroid Build Coastguard Worker * @buffer: Pointer to a buffer for capability data, cast to an __u64 568*d83cc019SAndroid Build Coastguard Worker * @size: Max size to copy 569*d83cc019SAndroid Build Coastguard Worker * 570*d83cc019SAndroid Build Coastguard Worker * Input argument to the DRM_VMW_GET_3D_CAP_IOCTL 571*d83cc019SAndroid Build Coastguard Worker * ioctls. 572*d83cc019SAndroid Build Coastguard Worker */ 573*d83cc019SAndroid Build Coastguard Worker 574*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_get_3d_cap_arg { 575*d83cc019SAndroid Build Coastguard Worker __u64 buffer; 576*d83cc019SAndroid Build Coastguard Worker __u32 max_size; 577*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 578*d83cc019SAndroid Build Coastguard Worker }; 579*d83cc019SAndroid Build Coastguard Worker 580*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 581*d83cc019SAndroid Build Coastguard Worker /** 582*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_FENCE_WAIT 583*d83cc019SAndroid Build Coastguard Worker * 584*d83cc019SAndroid Build Coastguard Worker * Waits for a fence object to signal. The wait is interruptible, so that 585*d83cc019SAndroid Build Coastguard Worker * signals may be delivered during the interrupt. The wait may timeout, 586*d83cc019SAndroid Build Coastguard Worker * in which case the calls returns -EBUSY. If the wait is restarted, 587*d83cc019SAndroid Build Coastguard Worker * that is restarting without resetting @cookie_valid to zero, 588*d83cc019SAndroid Build Coastguard Worker * the timeout is computed from the first call. 589*d83cc019SAndroid Build Coastguard Worker * 590*d83cc019SAndroid Build Coastguard Worker * The flags argument to the DRM_VMW_FENCE_WAIT ioctl indicates what to wait 591*d83cc019SAndroid Build Coastguard Worker * on: 592*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_FENCE_FLAG_EXEC: All commands ahead of the fence in the command 593*d83cc019SAndroid Build Coastguard Worker * stream 594*d83cc019SAndroid Build Coastguard Worker * have executed. 595*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_FENCE_FLAG_QUERY: All query results resulting from query finish 596*d83cc019SAndroid Build Coastguard Worker * commands 597*d83cc019SAndroid Build Coastguard Worker * in the buffer given to the EXECBUF ioctl returning the fence object handle 598*d83cc019SAndroid Build Coastguard Worker * are available to user-space. 599*d83cc019SAndroid Build Coastguard Worker * 600*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_WAIT_OPTION_UNREF: If this wait option is given, and the 601*d83cc019SAndroid Build Coastguard Worker * fenc wait ioctl returns 0, the fence object has been unreferenced after 602*d83cc019SAndroid Build Coastguard Worker * the wait. 603*d83cc019SAndroid Build Coastguard Worker */ 604*d83cc019SAndroid Build Coastguard Worker 605*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_FENCE_FLAG_EXEC (1 << 0) 606*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_FENCE_FLAG_QUERY (1 << 1) 607*d83cc019SAndroid Build Coastguard Worker 608*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_WAIT_OPTION_UNREF (1 << 0) 609*d83cc019SAndroid Build Coastguard Worker 610*d83cc019SAndroid Build Coastguard Worker /** 611*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_fence_wait_arg 612*d83cc019SAndroid Build Coastguard Worker * 613*d83cc019SAndroid Build Coastguard Worker * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. 614*d83cc019SAndroid Build Coastguard Worker * @cookie_valid: Must be reset to 0 on first call. Left alone on restart. 615*d83cc019SAndroid Build Coastguard Worker * @kernel_cookie: Set to 0 on first call. Left alone on restart. 616*d83cc019SAndroid Build Coastguard Worker * @timeout_us: Wait timeout in microseconds. 0 for indefinite timeout. 617*d83cc019SAndroid Build Coastguard Worker * @lazy: Set to 1 if timing is not critical. Allow more than a kernel tick 618*d83cc019SAndroid Build Coastguard Worker * before returning. 619*d83cc019SAndroid Build Coastguard Worker * @flags: Fence flags to wait on. 620*d83cc019SAndroid Build Coastguard Worker * @wait_options: Options that control the behaviour of the wait ioctl. 621*d83cc019SAndroid Build Coastguard Worker * 622*d83cc019SAndroid Build Coastguard Worker * Input argument to the DRM_VMW_FENCE_WAIT ioctl. 623*d83cc019SAndroid Build Coastguard Worker */ 624*d83cc019SAndroid Build Coastguard Worker 625*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_fence_wait_arg { 626*d83cc019SAndroid Build Coastguard Worker __u32 handle; 627*d83cc019SAndroid Build Coastguard Worker __s32 cookie_valid; 628*d83cc019SAndroid Build Coastguard Worker __u64 kernel_cookie; 629*d83cc019SAndroid Build Coastguard Worker __u64 timeout_us; 630*d83cc019SAndroid Build Coastguard Worker __s32 lazy; 631*d83cc019SAndroid Build Coastguard Worker __s32 flags; 632*d83cc019SAndroid Build Coastguard Worker __s32 wait_options; 633*d83cc019SAndroid Build Coastguard Worker __s32 pad64; 634*d83cc019SAndroid Build Coastguard Worker }; 635*d83cc019SAndroid Build Coastguard Worker 636*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 637*d83cc019SAndroid Build Coastguard Worker /** 638*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_FENCE_SIGNALED 639*d83cc019SAndroid Build Coastguard Worker * 640*d83cc019SAndroid Build Coastguard Worker * Checks if a fence object is signaled.. 641*d83cc019SAndroid Build Coastguard Worker */ 642*d83cc019SAndroid Build Coastguard Worker 643*d83cc019SAndroid Build Coastguard Worker /** 644*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_fence_signaled_arg 645*d83cc019SAndroid Build Coastguard Worker * 646*d83cc019SAndroid Build Coastguard Worker * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. 647*d83cc019SAndroid Build Coastguard Worker * @flags: Fence object flags input to DRM_VMW_FENCE_SIGNALED ioctl 648*d83cc019SAndroid Build Coastguard Worker * @signaled: Out: Flags signaled. 649*d83cc019SAndroid Build Coastguard Worker * @sequence: Out: Highest sequence passed so far. Can be used to signal the 650*d83cc019SAndroid Build Coastguard Worker * EXEC flag of user-space fence objects. 651*d83cc019SAndroid Build Coastguard Worker * 652*d83cc019SAndroid Build Coastguard Worker * Input/Output argument to the DRM_VMW_FENCE_SIGNALED and DRM_VMW_FENCE_UNREF 653*d83cc019SAndroid Build Coastguard Worker * ioctls. 654*d83cc019SAndroid Build Coastguard Worker */ 655*d83cc019SAndroid Build Coastguard Worker 656*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_fence_signaled_arg { 657*d83cc019SAndroid Build Coastguard Worker __u32 handle; 658*d83cc019SAndroid Build Coastguard Worker __u32 flags; 659*d83cc019SAndroid Build Coastguard Worker __s32 signaled; 660*d83cc019SAndroid Build Coastguard Worker __u32 passed_seqno; 661*d83cc019SAndroid Build Coastguard Worker __u32 signaled_flags; 662*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 663*d83cc019SAndroid Build Coastguard Worker }; 664*d83cc019SAndroid Build Coastguard Worker 665*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 666*d83cc019SAndroid Build Coastguard Worker /** 667*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_FENCE_UNREF 668*d83cc019SAndroid Build Coastguard Worker * 669*d83cc019SAndroid Build Coastguard Worker * Unreferences a fence object, and causes it to be destroyed if there are no 670*d83cc019SAndroid Build Coastguard Worker * other references to it. 671*d83cc019SAndroid Build Coastguard Worker * 672*d83cc019SAndroid Build Coastguard Worker */ 673*d83cc019SAndroid Build Coastguard Worker 674*d83cc019SAndroid Build Coastguard Worker /** 675*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_fence_arg 676*d83cc019SAndroid Build Coastguard Worker * 677*d83cc019SAndroid Build Coastguard Worker * @handle: Fence object handle as returned by the DRM_VMW_EXECBUF ioctl. 678*d83cc019SAndroid Build Coastguard Worker * 679*d83cc019SAndroid Build Coastguard Worker * Input/Output argument to the DRM_VMW_FENCE_UNREF ioctl.. 680*d83cc019SAndroid Build Coastguard Worker */ 681*d83cc019SAndroid Build Coastguard Worker 682*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_fence_arg { 683*d83cc019SAndroid Build Coastguard Worker __u32 handle; 684*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 685*d83cc019SAndroid Build Coastguard Worker }; 686*d83cc019SAndroid Build Coastguard Worker 687*d83cc019SAndroid Build Coastguard Worker 688*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 689*d83cc019SAndroid Build Coastguard Worker /** 690*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_FENCE_EVENT 691*d83cc019SAndroid Build Coastguard Worker * 692*d83cc019SAndroid Build Coastguard Worker * Queues an event on a fence to be delivered on the drm character device 693*d83cc019SAndroid Build Coastguard Worker * when the fence has signaled the DRM_VMW_FENCE_FLAG_EXEC flag. 694*d83cc019SAndroid Build Coastguard Worker * Optionally the approximate time when the fence signaled is 695*d83cc019SAndroid Build Coastguard Worker * given by the event. 696*d83cc019SAndroid Build Coastguard Worker */ 697*d83cc019SAndroid Build Coastguard Worker 698*d83cc019SAndroid Build Coastguard Worker /* 699*d83cc019SAndroid Build Coastguard Worker * The event type 700*d83cc019SAndroid Build Coastguard Worker */ 701*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_EVENT_FENCE_SIGNALED 0x80000000 702*d83cc019SAndroid Build Coastguard Worker 703*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_event_fence { 704*d83cc019SAndroid Build Coastguard Worker struct drm_event base; 705*d83cc019SAndroid Build Coastguard Worker __u64 user_data; 706*d83cc019SAndroid Build Coastguard Worker __u32 tv_sec; 707*d83cc019SAndroid Build Coastguard Worker __u32 tv_usec; 708*d83cc019SAndroid Build Coastguard Worker }; 709*d83cc019SAndroid Build Coastguard Worker 710*d83cc019SAndroid Build Coastguard Worker /* 711*d83cc019SAndroid Build Coastguard Worker * Flags that may be given to the command. 712*d83cc019SAndroid Build Coastguard Worker */ 713*d83cc019SAndroid Build Coastguard Worker /* Request fence signaled time on the event. */ 714*d83cc019SAndroid Build Coastguard Worker #define DRM_VMW_FE_FLAG_REQ_TIME (1 << 0) 715*d83cc019SAndroid Build Coastguard Worker 716*d83cc019SAndroid Build Coastguard Worker /** 717*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_fence_event_arg 718*d83cc019SAndroid Build Coastguard Worker * 719*d83cc019SAndroid Build Coastguard Worker * @fence_rep: Pointer to fence_rep structure cast to __u64 or 0 if 720*d83cc019SAndroid Build Coastguard Worker * the fence is not supposed to be referenced by user-space. 721*d83cc019SAndroid Build Coastguard Worker * @user_info: Info to be delivered with the event. 722*d83cc019SAndroid Build Coastguard Worker * @handle: Attach the event to this fence only. 723*d83cc019SAndroid Build Coastguard Worker * @flags: A set of flags as defined above. 724*d83cc019SAndroid Build Coastguard Worker */ 725*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_fence_event_arg { 726*d83cc019SAndroid Build Coastguard Worker __u64 fence_rep; 727*d83cc019SAndroid Build Coastguard Worker __u64 user_data; 728*d83cc019SAndroid Build Coastguard Worker __u32 handle; 729*d83cc019SAndroid Build Coastguard Worker __u32 flags; 730*d83cc019SAndroid Build Coastguard Worker }; 731*d83cc019SAndroid Build Coastguard Worker 732*d83cc019SAndroid Build Coastguard Worker 733*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 734*d83cc019SAndroid Build Coastguard Worker /** 735*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_PRESENT 736*d83cc019SAndroid Build Coastguard Worker * 737*d83cc019SAndroid Build Coastguard Worker * Executes an SVGA present on a given fb for a given surface. The surface 738*d83cc019SAndroid Build Coastguard Worker * is placed on the framebuffer. Cliprects are given relative to the given 739*d83cc019SAndroid Build Coastguard Worker * point (the point disignated by dest_{x|y}). 740*d83cc019SAndroid Build Coastguard Worker * 741*d83cc019SAndroid Build Coastguard Worker */ 742*d83cc019SAndroid Build Coastguard Worker 743*d83cc019SAndroid Build Coastguard Worker /** 744*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_present_arg 745*d83cc019SAndroid Build Coastguard Worker * @fb_id: framebuffer id to present / read back from. 746*d83cc019SAndroid Build Coastguard Worker * @sid: Surface id to present from. 747*d83cc019SAndroid Build Coastguard Worker * @dest_x: X placement coordinate for surface. 748*d83cc019SAndroid Build Coastguard Worker * @dest_y: Y placement coordinate for surface. 749*d83cc019SAndroid Build Coastguard Worker * @clips_ptr: Pointer to an array of clip rects cast to an __u64. 750*d83cc019SAndroid Build Coastguard Worker * @num_clips: Number of cliprects given relative to the framebuffer origin, 751*d83cc019SAndroid Build Coastguard Worker * in the same coordinate space as the frame buffer. 752*d83cc019SAndroid Build Coastguard Worker * @pad64: Unused 64-bit padding. 753*d83cc019SAndroid Build Coastguard Worker * 754*d83cc019SAndroid Build Coastguard Worker * Input argument to the DRM_VMW_PRESENT ioctl. 755*d83cc019SAndroid Build Coastguard Worker */ 756*d83cc019SAndroid Build Coastguard Worker 757*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_present_arg { 758*d83cc019SAndroid Build Coastguard Worker __u32 fb_id; 759*d83cc019SAndroid Build Coastguard Worker __u32 sid; 760*d83cc019SAndroid Build Coastguard Worker __s32 dest_x; 761*d83cc019SAndroid Build Coastguard Worker __s32 dest_y; 762*d83cc019SAndroid Build Coastguard Worker __u64 clips_ptr; 763*d83cc019SAndroid Build Coastguard Worker __u32 num_clips; 764*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 765*d83cc019SAndroid Build Coastguard Worker }; 766*d83cc019SAndroid Build Coastguard Worker 767*d83cc019SAndroid Build Coastguard Worker 768*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 769*d83cc019SAndroid Build Coastguard Worker /** 770*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_PRESENT_READBACK 771*d83cc019SAndroid Build Coastguard Worker * 772*d83cc019SAndroid Build Coastguard Worker * Executes an SVGA present readback from a given fb to the dma buffer 773*d83cc019SAndroid Build Coastguard Worker * currently bound as the fb. If there is no dma buffer bound to the fb, 774*d83cc019SAndroid Build Coastguard Worker * an error will be returned. 775*d83cc019SAndroid Build Coastguard Worker * 776*d83cc019SAndroid Build Coastguard Worker */ 777*d83cc019SAndroid Build Coastguard Worker 778*d83cc019SAndroid Build Coastguard Worker /** 779*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_present_arg 780*d83cc019SAndroid Build Coastguard Worker * @fb_id: fb_id to present / read back from. 781*d83cc019SAndroid Build Coastguard Worker * @num_clips: Number of cliprects. 782*d83cc019SAndroid Build Coastguard Worker * @clips_ptr: Pointer to an array of clip rects cast to an __u64. 783*d83cc019SAndroid Build Coastguard Worker * @fence_rep: Pointer to a struct drm_vmw_fence_rep, cast to an __u64. 784*d83cc019SAndroid Build Coastguard Worker * If this member is NULL, then the ioctl should not return a fence. 785*d83cc019SAndroid Build Coastguard Worker */ 786*d83cc019SAndroid Build Coastguard Worker 787*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_present_readback_arg { 788*d83cc019SAndroid Build Coastguard Worker __u32 fb_id; 789*d83cc019SAndroid Build Coastguard Worker __u32 num_clips; 790*d83cc019SAndroid Build Coastguard Worker __u64 clips_ptr; 791*d83cc019SAndroid Build Coastguard Worker __u64 fence_rep; 792*d83cc019SAndroid Build Coastguard Worker }; 793*d83cc019SAndroid Build Coastguard Worker 794*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 795*d83cc019SAndroid Build Coastguard Worker /** 796*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_UPDATE_LAYOUT - Update layout 797*d83cc019SAndroid Build Coastguard Worker * 798*d83cc019SAndroid Build Coastguard Worker * Updates the preferred modes and connection status for connectors. The 799*d83cc019SAndroid Build Coastguard Worker * command consists of one drm_vmw_update_layout_arg pointing to an array 800*d83cc019SAndroid Build Coastguard Worker * of num_outputs drm_vmw_rect's. 801*d83cc019SAndroid Build Coastguard Worker */ 802*d83cc019SAndroid Build Coastguard Worker 803*d83cc019SAndroid Build Coastguard Worker /** 804*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_update_layout_arg 805*d83cc019SAndroid Build Coastguard Worker * 806*d83cc019SAndroid Build Coastguard Worker * @num_outputs: number of active connectors 807*d83cc019SAndroid Build Coastguard Worker * @rects: pointer to array of drm_vmw_rect cast to an __u64 808*d83cc019SAndroid Build Coastguard Worker * 809*d83cc019SAndroid Build Coastguard Worker * Input argument to the DRM_VMW_UPDATE_LAYOUT Ioctl. 810*d83cc019SAndroid Build Coastguard Worker */ 811*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_update_layout_arg { 812*d83cc019SAndroid Build Coastguard Worker __u32 num_outputs; 813*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 814*d83cc019SAndroid Build Coastguard Worker __u64 rects; 815*d83cc019SAndroid Build Coastguard Worker }; 816*d83cc019SAndroid Build Coastguard Worker 817*d83cc019SAndroid Build Coastguard Worker 818*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 819*d83cc019SAndroid Build Coastguard Worker /** 820*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_CREATE_SHADER - Create shader 821*d83cc019SAndroid Build Coastguard Worker * 822*d83cc019SAndroid Build Coastguard Worker * Creates a shader and optionally binds it to a dma buffer containing 823*d83cc019SAndroid Build Coastguard Worker * the shader byte-code. 824*d83cc019SAndroid Build Coastguard Worker */ 825*d83cc019SAndroid Build Coastguard Worker 826*d83cc019SAndroid Build Coastguard Worker /** 827*d83cc019SAndroid Build Coastguard Worker * enum drm_vmw_shader_type - Shader types 828*d83cc019SAndroid Build Coastguard Worker */ 829*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_shader_type { 830*d83cc019SAndroid Build Coastguard Worker drm_vmw_shader_type_vs = 0, 831*d83cc019SAndroid Build Coastguard Worker drm_vmw_shader_type_ps, 832*d83cc019SAndroid Build Coastguard Worker }; 833*d83cc019SAndroid Build Coastguard Worker 834*d83cc019SAndroid Build Coastguard Worker 835*d83cc019SAndroid Build Coastguard Worker /** 836*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_shader_create_arg 837*d83cc019SAndroid Build Coastguard Worker * 838*d83cc019SAndroid Build Coastguard Worker * @shader_type: Shader type of the shader to create. 839*d83cc019SAndroid Build Coastguard Worker * @size: Size of the byte-code in bytes. 840*d83cc019SAndroid Build Coastguard Worker * where the shader byte-code starts 841*d83cc019SAndroid Build Coastguard Worker * @buffer_handle: Buffer handle identifying the buffer containing the 842*d83cc019SAndroid Build Coastguard Worker * shader byte-code 843*d83cc019SAndroid Build Coastguard Worker * @shader_handle: On successful completion contains a handle that 844*d83cc019SAndroid Build Coastguard Worker * can be used to subsequently identify the shader. 845*d83cc019SAndroid Build Coastguard Worker * @offset: Offset in bytes into the buffer given by @buffer_handle, 846*d83cc019SAndroid Build Coastguard Worker * 847*d83cc019SAndroid Build Coastguard Worker * Input / Output argument to the DRM_VMW_CREATE_SHADER Ioctl. 848*d83cc019SAndroid Build Coastguard Worker */ 849*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_shader_create_arg { 850*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_shader_type shader_type; 851*d83cc019SAndroid Build Coastguard Worker __u32 size; 852*d83cc019SAndroid Build Coastguard Worker __u32 buffer_handle; 853*d83cc019SAndroid Build Coastguard Worker __u32 shader_handle; 854*d83cc019SAndroid Build Coastguard Worker __u64 offset; 855*d83cc019SAndroid Build Coastguard Worker }; 856*d83cc019SAndroid Build Coastguard Worker 857*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 858*d83cc019SAndroid Build Coastguard Worker /** 859*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_UNREF_SHADER - Unreferences a shader 860*d83cc019SAndroid Build Coastguard Worker * 861*d83cc019SAndroid Build Coastguard Worker * Destroys a user-space reference to a shader, optionally destroying 862*d83cc019SAndroid Build Coastguard Worker * it. 863*d83cc019SAndroid Build Coastguard Worker */ 864*d83cc019SAndroid Build Coastguard Worker 865*d83cc019SAndroid Build Coastguard Worker /** 866*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_shader_arg 867*d83cc019SAndroid Build Coastguard Worker * 868*d83cc019SAndroid Build Coastguard Worker * @handle: Handle identifying the shader to destroy. 869*d83cc019SAndroid Build Coastguard Worker * 870*d83cc019SAndroid Build Coastguard Worker * Input argument to the DRM_VMW_UNREF_SHADER ioctl. 871*d83cc019SAndroid Build Coastguard Worker */ 872*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_shader_arg { 873*d83cc019SAndroid Build Coastguard Worker __u32 handle; 874*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 875*d83cc019SAndroid Build Coastguard Worker }; 876*d83cc019SAndroid Build Coastguard Worker 877*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 878*d83cc019SAndroid Build Coastguard Worker /** 879*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_GB_SURFACE_CREATE - Create a host guest-backed surface. 880*d83cc019SAndroid Build Coastguard Worker * 881*d83cc019SAndroid Build Coastguard Worker * Allocates a surface handle and queues a create surface command 882*d83cc019SAndroid Build Coastguard Worker * for the host on the first use of the surface. The surface ID can 883*d83cc019SAndroid Build Coastguard Worker * be used as the surface ID in commands referencing the surface. 884*d83cc019SAndroid Build Coastguard Worker */ 885*d83cc019SAndroid Build Coastguard Worker 886*d83cc019SAndroid Build Coastguard Worker /** 887*d83cc019SAndroid Build Coastguard Worker * enum drm_vmw_surface_flags 888*d83cc019SAndroid Build Coastguard Worker * 889*d83cc019SAndroid Build Coastguard Worker * @drm_vmw_surface_flag_shareable: Whether the surface is shareable 890*d83cc019SAndroid Build Coastguard Worker * @drm_vmw_surface_flag_scanout: Whether the surface is a scanout 891*d83cc019SAndroid Build Coastguard Worker * surface. 892*d83cc019SAndroid Build Coastguard Worker * @drm_vmw_surface_flag_create_buffer: Create a backup buffer if none is 893*d83cc019SAndroid Build Coastguard Worker * given. 894*d83cc019SAndroid Build Coastguard Worker */ 895*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_surface_flags { 896*d83cc019SAndroid Build Coastguard Worker drm_vmw_surface_flag_shareable = (1 << 0), 897*d83cc019SAndroid Build Coastguard Worker drm_vmw_surface_flag_scanout = (1 << 1), 898*d83cc019SAndroid Build Coastguard Worker drm_vmw_surface_flag_create_buffer = (1 << 2) 899*d83cc019SAndroid Build Coastguard Worker }; 900*d83cc019SAndroid Build Coastguard Worker 901*d83cc019SAndroid Build Coastguard Worker /** 902*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_gb_surface_create_req 903*d83cc019SAndroid Build Coastguard Worker * 904*d83cc019SAndroid Build Coastguard Worker * @svga3d_flags: SVGA3d surface flags for the device. 905*d83cc019SAndroid Build Coastguard Worker * @format: SVGA3d format. 906*d83cc019SAndroid Build Coastguard Worker * @mip_level: Number of mip levels for all faces. 907*d83cc019SAndroid Build Coastguard Worker * @drm_surface_flags Flags as described above. 908*d83cc019SAndroid Build Coastguard Worker * @multisample_count Future use. Set to 0. 909*d83cc019SAndroid Build Coastguard Worker * @autogen_filter Future use. Set to 0. 910*d83cc019SAndroid Build Coastguard Worker * @buffer_handle Buffer handle of backup buffer. SVGA3D_INVALID_ID 911*d83cc019SAndroid Build Coastguard Worker * if none. 912*d83cc019SAndroid Build Coastguard Worker * @base_size Size of the base mip level for all faces. 913*d83cc019SAndroid Build Coastguard Worker * @array_size Must be zero for non-DX hardware, and if non-zero 914*d83cc019SAndroid Build Coastguard Worker * svga3d_flags must have proper bind flags setup. 915*d83cc019SAndroid Build Coastguard Worker * 916*d83cc019SAndroid Build Coastguard Worker * Input argument to the DRM_VMW_GB_SURFACE_CREATE Ioctl. 917*d83cc019SAndroid Build Coastguard Worker * Part of output argument for the DRM_VMW_GB_SURFACE_REF Ioctl. 918*d83cc019SAndroid Build Coastguard Worker */ 919*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_req { 920*d83cc019SAndroid Build Coastguard Worker __u32 svga3d_flags; 921*d83cc019SAndroid Build Coastguard Worker __u32 format; 922*d83cc019SAndroid Build Coastguard Worker __u32 mip_levels; 923*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_surface_flags drm_surface_flags; 924*d83cc019SAndroid Build Coastguard Worker __u32 multisample_count; 925*d83cc019SAndroid Build Coastguard Worker __u32 autogen_filter; 926*d83cc019SAndroid Build Coastguard Worker __u32 buffer_handle; 927*d83cc019SAndroid Build Coastguard Worker __u32 array_size; 928*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_size base_size; 929*d83cc019SAndroid Build Coastguard Worker }; 930*d83cc019SAndroid Build Coastguard Worker 931*d83cc019SAndroid Build Coastguard Worker /** 932*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_gb_surface_create_rep 933*d83cc019SAndroid Build Coastguard Worker * 934*d83cc019SAndroid Build Coastguard Worker * @handle: Surface handle. 935*d83cc019SAndroid Build Coastguard Worker * @backup_size: Size of backup buffers for this surface. 936*d83cc019SAndroid Build Coastguard Worker * @buffer_handle: Handle of backup buffer. SVGA3D_INVALID_ID if none. 937*d83cc019SAndroid Build Coastguard Worker * @buffer_size: Actual size of the buffer identified by 938*d83cc019SAndroid Build Coastguard Worker * @buffer_handle 939*d83cc019SAndroid Build Coastguard Worker * @buffer_map_handle: Offset into device address space for the buffer 940*d83cc019SAndroid Build Coastguard Worker * identified by @buffer_handle. 941*d83cc019SAndroid Build Coastguard Worker * 942*d83cc019SAndroid Build Coastguard Worker * Part of output argument for the DRM_VMW_GB_SURFACE_REF ioctl. 943*d83cc019SAndroid Build Coastguard Worker * Output argument for the DRM_VMW_GB_SURFACE_CREATE ioctl. 944*d83cc019SAndroid Build Coastguard Worker */ 945*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_rep { 946*d83cc019SAndroid Build Coastguard Worker __u32 handle; 947*d83cc019SAndroid Build Coastguard Worker __u32 backup_size; 948*d83cc019SAndroid Build Coastguard Worker __u32 buffer_handle; 949*d83cc019SAndroid Build Coastguard Worker __u32 buffer_size; 950*d83cc019SAndroid Build Coastguard Worker __u64 buffer_map_handle; 951*d83cc019SAndroid Build Coastguard Worker }; 952*d83cc019SAndroid Build Coastguard Worker 953*d83cc019SAndroid Build Coastguard Worker /** 954*d83cc019SAndroid Build Coastguard Worker * union drm_vmw_gb_surface_create_arg 955*d83cc019SAndroid Build Coastguard Worker * 956*d83cc019SAndroid Build Coastguard Worker * @req: Input argument as described above. 957*d83cc019SAndroid Build Coastguard Worker * @rep: Output argument as described above. 958*d83cc019SAndroid Build Coastguard Worker * 959*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_GB_SURFACE_CREATE ioctl. 960*d83cc019SAndroid Build Coastguard Worker */ 961*d83cc019SAndroid Build Coastguard Worker union drm_vmw_gb_surface_create_arg { 962*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_rep rep; 963*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_req req; 964*d83cc019SAndroid Build Coastguard Worker }; 965*d83cc019SAndroid Build Coastguard Worker 966*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 967*d83cc019SAndroid Build Coastguard Worker /** 968*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_GB_SURFACE_REF - Reference a host surface. 969*d83cc019SAndroid Build Coastguard Worker * 970*d83cc019SAndroid Build Coastguard Worker * Puts a reference on a host surface with a given handle, as previously 971*d83cc019SAndroid Build Coastguard Worker * returned by the DRM_VMW_GB_SURFACE_CREATE ioctl. 972*d83cc019SAndroid Build Coastguard Worker * A reference will make sure the surface isn't destroyed while we hold 973*d83cc019SAndroid Build Coastguard Worker * it and will allow the calling client to use the surface handle in 974*d83cc019SAndroid Build Coastguard Worker * the command stream. 975*d83cc019SAndroid Build Coastguard Worker * 976*d83cc019SAndroid Build Coastguard Worker * On successful return, the Ioctl returns the surface information given 977*d83cc019SAndroid Build Coastguard Worker * to and returned from the DRM_VMW_GB_SURFACE_CREATE ioctl. 978*d83cc019SAndroid Build Coastguard Worker */ 979*d83cc019SAndroid Build Coastguard Worker 980*d83cc019SAndroid Build Coastguard Worker /** 981*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_gb_surface_reference_arg 982*d83cc019SAndroid Build Coastguard Worker * 983*d83cc019SAndroid Build Coastguard Worker * @creq: The data used as input when the surface was created, as described 984*d83cc019SAndroid Build Coastguard Worker * above at "struct drm_vmw_gb_surface_create_req" 985*d83cc019SAndroid Build Coastguard Worker * @crep: Additional data output when the surface was created, as described 986*d83cc019SAndroid Build Coastguard Worker * above at "struct drm_vmw_gb_surface_create_rep" 987*d83cc019SAndroid Build Coastguard Worker * 988*d83cc019SAndroid Build Coastguard Worker * Output Argument to the DRM_VMW_GB_SURFACE_REF ioctl. 989*d83cc019SAndroid Build Coastguard Worker */ 990*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_ref_rep { 991*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_req creq; 992*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_rep crep; 993*d83cc019SAndroid Build Coastguard Worker }; 994*d83cc019SAndroid Build Coastguard Worker 995*d83cc019SAndroid Build Coastguard Worker /** 996*d83cc019SAndroid Build Coastguard Worker * union drm_vmw_gb_surface_reference_arg 997*d83cc019SAndroid Build Coastguard Worker * 998*d83cc019SAndroid Build Coastguard Worker * @req: Input data as described above at "struct drm_vmw_surface_arg" 999*d83cc019SAndroid Build Coastguard Worker * @rep: Output data as described above at "struct drm_vmw_gb_surface_ref_rep" 1000*d83cc019SAndroid Build Coastguard Worker * 1001*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_GB_SURFACE_REF Ioctl. 1002*d83cc019SAndroid Build Coastguard Worker */ 1003*d83cc019SAndroid Build Coastguard Worker union drm_vmw_gb_surface_reference_arg { 1004*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_ref_rep rep; 1005*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_surface_arg req; 1006*d83cc019SAndroid Build Coastguard Worker }; 1007*d83cc019SAndroid Build Coastguard Worker 1008*d83cc019SAndroid Build Coastguard Worker 1009*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 1010*d83cc019SAndroid Build Coastguard Worker /** 1011*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_SYNCCPU - Sync a DMA buffer / MOB for CPU access. 1012*d83cc019SAndroid Build Coastguard Worker * 1013*d83cc019SAndroid Build Coastguard Worker * Idles any previously submitted GPU operations on the buffer and 1014*d83cc019SAndroid Build Coastguard Worker * by default blocks command submissions that reference the buffer. 1015*d83cc019SAndroid Build Coastguard Worker * If the file descriptor used to grab a blocking CPU sync is closed, the 1016*d83cc019SAndroid Build Coastguard Worker * cpu sync is released. 1017*d83cc019SAndroid Build Coastguard Worker * The flags argument indicates how the grab / release operation should be 1018*d83cc019SAndroid Build Coastguard Worker * performed: 1019*d83cc019SAndroid Build Coastguard Worker */ 1020*d83cc019SAndroid Build Coastguard Worker 1021*d83cc019SAndroid Build Coastguard Worker /** 1022*d83cc019SAndroid Build Coastguard Worker * enum drm_vmw_synccpu_flags - Synccpu flags: 1023*d83cc019SAndroid Build Coastguard Worker * 1024*d83cc019SAndroid Build Coastguard Worker * @drm_vmw_synccpu_read: Sync for read. If sync is done for read only, it's a 1025*d83cc019SAndroid Build Coastguard Worker * hint to the kernel to allow command submissions that references the buffer 1026*d83cc019SAndroid Build Coastguard Worker * for read-only. 1027*d83cc019SAndroid Build Coastguard Worker * @drm_vmw_synccpu_write: Sync for write. Block all command submissions 1028*d83cc019SAndroid Build Coastguard Worker * referencing this buffer. 1029*d83cc019SAndroid Build Coastguard Worker * @drm_vmw_synccpu_dontblock: Dont wait for GPU idle, but rather return 1030*d83cc019SAndroid Build Coastguard Worker * -EBUSY should the buffer be busy. 1031*d83cc019SAndroid Build Coastguard Worker * @drm_vmw_synccpu_allow_cs: Allow command submission that touches the buffer 1032*d83cc019SAndroid Build Coastguard Worker * while the buffer is synced for CPU. This is similar to the GEM bo idle 1033*d83cc019SAndroid Build Coastguard Worker * behavior. 1034*d83cc019SAndroid Build Coastguard Worker */ 1035*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_synccpu_flags { 1036*d83cc019SAndroid Build Coastguard Worker drm_vmw_synccpu_read = (1 << 0), 1037*d83cc019SAndroid Build Coastguard Worker drm_vmw_synccpu_write = (1 << 1), 1038*d83cc019SAndroid Build Coastguard Worker drm_vmw_synccpu_dontblock = (1 << 2), 1039*d83cc019SAndroid Build Coastguard Worker drm_vmw_synccpu_allow_cs = (1 << 3) 1040*d83cc019SAndroid Build Coastguard Worker }; 1041*d83cc019SAndroid Build Coastguard Worker 1042*d83cc019SAndroid Build Coastguard Worker /** 1043*d83cc019SAndroid Build Coastguard Worker * enum drm_vmw_synccpu_op - Synccpu operations: 1044*d83cc019SAndroid Build Coastguard Worker * 1045*d83cc019SAndroid Build Coastguard Worker * @drm_vmw_synccpu_grab: Grab the buffer for CPU operations 1046*d83cc019SAndroid Build Coastguard Worker * @drm_vmw_synccpu_release: Release a previous grab. 1047*d83cc019SAndroid Build Coastguard Worker */ 1048*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_synccpu_op { 1049*d83cc019SAndroid Build Coastguard Worker drm_vmw_synccpu_grab, 1050*d83cc019SAndroid Build Coastguard Worker drm_vmw_synccpu_release 1051*d83cc019SAndroid Build Coastguard Worker }; 1052*d83cc019SAndroid Build Coastguard Worker 1053*d83cc019SAndroid Build Coastguard Worker /** 1054*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_synccpu_arg 1055*d83cc019SAndroid Build Coastguard Worker * 1056*d83cc019SAndroid Build Coastguard Worker * @op: The synccpu operation as described above. 1057*d83cc019SAndroid Build Coastguard Worker * @handle: Handle identifying the buffer object. 1058*d83cc019SAndroid Build Coastguard Worker * @flags: Flags as described above. 1059*d83cc019SAndroid Build Coastguard Worker */ 1060*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_synccpu_arg { 1061*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_synccpu_op op; 1062*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_synccpu_flags flags; 1063*d83cc019SAndroid Build Coastguard Worker __u32 handle; 1064*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 1065*d83cc019SAndroid Build Coastguard Worker }; 1066*d83cc019SAndroid Build Coastguard Worker 1067*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 1068*d83cc019SAndroid Build Coastguard Worker /** 1069*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_CREATE_EXTENDED_CONTEXT - Create a host context. 1070*d83cc019SAndroid Build Coastguard Worker * 1071*d83cc019SAndroid Build Coastguard Worker * Allocates a device unique context id, and queues a create context command 1072*d83cc019SAndroid Build Coastguard Worker * for the host. Does not wait for host completion. 1073*d83cc019SAndroid Build Coastguard Worker */ 1074*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_extended_context { 1075*d83cc019SAndroid Build Coastguard Worker drm_vmw_context_legacy, 1076*d83cc019SAndroid Build Coastguard Worker drm_vmw_context_dx 1077*d83cc019SAndroid Build Coastguard Worker }; 1078*d83cc019SAndroid Build Coastguard Worker 1079*d83cc019SAndroid Build Coastguard Worker /** 1080*d83cc019SAndroid Build Coastguard Worker * union drm_vmw_extended_context_arg 1081*d83cc019SAndroid Build Coastguard Worker * 1082*d83cc019SAndroid Build Coastguard Worker * @req: Context type. 1083*d83cc019SAndroid Build Coastguard Worker * @rep: Context identifier. 1084*d83cc019SAndroid Build Coastguard Worker * 1085*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_CREATE_EXTENDED_CONTEXT Ioctl. 1086*d83cc019SAndroid Build Coastguard Worker */ 1087*d83cc019SAndroid Build Coastguard Worker union drm_vmw_extended_context_arg { 1088*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_extended_context req; 1089*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_context_arg rep; 1090*d83cc019SAndroid Build Coastguard Worker }; 1091*d83cc019SAndroid Build Coastguard Worker 1092*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 1093*d83cc019SAndroid Build Coastguard Worker /* 1094*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_HANDLE_CLOSE - Close a user-space handle and release its 1095*d83cc019SAndroid Build Coastguard Worker * underlying resource. 1096*d83cc019SAndroid Build Coastguard Worker * 1097*d83cc019SAndroid Build Coastguard Worker * Note that this ioctl is overlaid on the deprecated DRM_VMW_UNREF_DMABUF 1098*d83cc019SAndroid Build Coastguard Worker * Ioctl. 1099*d83cc019SAndroid Build Coastguard Worker */ 1100*d83cc019SAndroid Build Coastguard Worker 1101*d83cc019SAndroid Build Coastguard Worker /** 1102*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_handle_close_arg 1103*d83cc019SAndroid Build Coastguard Worker * 1104*d83cc019SAndroid Build Coastguard Worker * @handle: Handle to close. 1105*d83cc019SAndroid Build Coastguard Worker * 1106*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_HANDLE_CLOSE Ioctl. 1107*d83cc019SAndroid Build Coastguard Worker */ 1108*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_handle_close_arg { 1109*d83cc019SAndroid Build Coastguard Worker __u32 handle; 1110*d83cc019SAndroid Build Coastguard Worker __u32 pad64; 1111*d83cc019SAndroid Build Coastguard Worker }; 1112*d83cc019SAndroid Build Coastguard Worker #define drm_vmw_unref_dmabuf_arg drm_vmw_handle_close_arg 1113*d83cc019SAndroid Build Coastguard Worker 1114*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 1115*d83cc019SAndroid Build Coastguard Worker /** 1116*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_GB_SURFACE_CREATE_EXT - Create a host guest-backed surface. 1117*d83cc019SAndroid Build Coastguard Worker * 1118*d83cc019SAndroid Build Coastguard Worker * Allocates a surface handle and queues a create surface command 1119*d83cc019SAndroid Build Coastguard Worker * for the host on the first use of the surface. The surface ID can 1120*d83cc019SAndroid Build Coastguard Worker * be used as the surface ID in commands referencing the surface. 1121*d83cc019SAndroid Build Coastguard Worker * 1122*d83cc019SAndroid Build Coastguard Worker * This new command extends DRM_VMW_GB_SURFACE_CREATE by adding version 1123*d83cc019SAndroid Build Coastguard Worker * parameter and 64 bit svga flag. 1124*d83cc019SAndroid Build Coastguard Worker */ 1125*d83cc019SAndroid Build Coastguard Worker 1126*d83cc019SAndroid Build Coastguard Worker /** 1127*d83cc019SAndroid Build Coastguard Worker * enum drm_vmw_surface_version 1128*d83cc019SAndroid Build Coastguard Worker * 1129*d83cc019SAndroid Build Coastguard Worker * @drm_vmw_surface_gb_v1: Corresponds to current gb surface format with 1130*d83cc019SAndroid Build Coastguard Worker * svga3d surface flags split into 2, upper half and lower half. 1131*d83cc019SAndroid Build Coastguard Worker */ 1132*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_surface_version { 1133*d83cc019SAndroid Build Coastguard Worker drm_vmw_gb_surface_v1 1134*d83cc019SAndroid Build Coastguard Worker }; 1135*d83cc019SAndroid Build Coastguard Worker 1136*d83cc019SAndroid Build Coastguard Worker /** 1137*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_gb_surface_create_ext_req 1138*d83cc019SAndroid Build Coastguard Worker * 1139*d83cc019SAndroid Build Coastguard Worker * @base: Surface create parameters. 1140*d83cc019SAndroid Build Coastguard Worker * @version: Version of surface create ioctl. 1141*d83cc019SAndroid Build Coastguard Worker * @svga3d_flags_upper_32_bits: Upper 32 bits of svga3d flags. 1142*d83cc019SAndroid Build Coastguard Worker * @multisample_pattern: Multisampling pattern when msaa is supported. 1143*d83cc019SAndroid Build Coastguard Worker * @quality_level: Precision settings for each sample. 1144*d83cc019SAndroid Build Coastguard Worker * @must_be_zero: Reserved for future usage. 1145*d83cc019SAndroid Build Coastguard Worker * 1146*d83cc019SAndroid Build Coastguard Worker * Input argument to the DRM_VMW_GB_SURFACE_CREATE_EXT Ioctl. 1147*d83cc019SAndroid Build Coastguard Worker * Part of output argument for the DRM_VMW_GB_SURFACE_REF_EXT Ioctl. 1148*d83cc019SAndroid Build Coastguard Worker */ 1149*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_ext_req { 1150*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_req base; 1151*d83cc019SAndroid Build Coastguard Worker enum drm_vmw_surface_version version; 1152*d83cc019SAndroid Build Coastguard Worker uint32_t svga3d_flags_upper_32_bits; 1153*d83cc019SAndroid Build Coastguard Worker SVGA3dMSPattern multisample_pattern; 1154*d83cc019SAndroid Build Coastguard Worker SVGA3dMSQualityLevel quality_level; 1155*d83cc019SAndroid Build Coastguard Worker uint64_t must_be_zero; 1156*d83cc019SAndroid Build Coastguard Worker }; 1157*d83cc019SAndroid Build Coastguard Worker 1158*d83cc019SAndroid Build Coastguard Worker /** 1159*d83cc019SAndroid Build Coastguard Worker * union drm_vmw_gb_surface_create_ext_arg 1160*d83cc019SAndroid Build Coastguard Worker * 1161*d83cc019SAndroid Build Coastguard Worker * @req: Input argument as described above. 1162*d83cc019SAndroid Build Coastguard Worker * @rep: Output argument as described above. 1163*d83cc019SAndroid Build Coastguard Worker * 1164*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_GB_SURFACE_CREATE_EXT ioctl. 1165*d83cc019SAndroid Build Coastguard Worker */ 1166*d83cc019SAndroid Build Coastguard Worker union drm_vmw_gb_surface_create_ext_arg { 1167*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_rep rep; 1168*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_ext_req req; 1169*d83cc019SAndroid Build Coastguard Worker }; 1170*d83cc019SAndroid Build Coastguard Worker 1171*d83cc019SAndroid Build Coastguard Worker /*************************************************************************/ 1172*d83cc019SAndroid Build Coastguard Worker /** 1173*d83cc019SAndroid Build Coastguard Worker * DRM_VMW_GB_SURFACE_REF_EXT - Reference a host surface. 1174*d83cc019SAndroid Build Coastguard Worker * 1175*d83cc019SAndroid Build Coastguard Worker * Puts a reference on a host surface with a given handle, as previously 1176*d83cc019SAndroid Build Coastguard Worker * returned by the DRM_VMW_GB_SURFACE_CREATE_EXT ioctl. 1177*d83cc019SAndroid Build Coastguard Worker * A reference will make sure the surface isn't destroyed while we hold 1178*d83cc019SAndroid Build Coastguard Worker * it and will allow the calling client to use the surface handle in 1179*d83cc019SAndroid Build Coastguard Worker * the command stream. 1180*d83cc019SAndroid Build Coastguard Worker * 1181*d83cc019SAndroid Build Coastguard Worker * On successful return, the Ioctl returns the surface information given 1182*d83cc019SAndroid Build Coastguard Worker * to and returned from the DRM_VMW_GB_SURFACE_CREATE_EXT ioctl. 1183*d83cc019SAndroid Build Coastguard Worker */ 1184*d83cc019SAndroid Build Coastguard Worker 1185*d83cc019SAndroid Build Coastguard Worker /** 1186*d83cc019SAndroid Build Coastguard Worker * struct drm_vmw_gb_surface_ref_ext_rep 1187*d83cc019SAndroid Build Coastguard Worker * 1188*d83cc019SAndroid Build Coastguard Worker * @creq: The data used as input when the surface was created, as described 1189*d83cc019SAndroid Build Coastguard Worker * above at "struct drm_vmw_gb_surface_create_ext_req" 1190*d83cc019SAndroid Build Coastguard Worker * @crep: Additional data output when the surface was created, as described 1191*d83cc019SAndroid Build Coastguard Worker * above at "struct drm_vmw_gb_surface_create_rep" 1192*d83cc019SAndroid Build Coastguard Worker * 1193*d83cc019SAndroid Build Coastguard Worker * Output Argument to the DRM_VMW_GB_SURFACE_REF_EXT ioctl. 1194*d83cc019SAndroid Build Coastguard Worker */ 1195*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_ref_ext_rep { 1196*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_ext_req creq; 1197*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_create_rep crep; 1198*d83cc019SAndroid Build Coastguard Worker }; 1199*d83cc019SAndroid Build Coastguard Worker 1200*d83cc019SAndroid Build Coastguard Worker /** 1201*d83cc019SAndroid Build Coastguard Worker * union drm_vmw_gb_surface_reference_ext_arg 1202*d83cc019SAndroid Build Coastguard Worker * 1203*d83cc019SAndroid Build Coastguard Worker * @req: Input data as described above at "struct drm_vmw_surface_arg" 1204*d83cc019SAndroid Build Coastguard Worker * @rep: Output data as described above at 1205*d83cc019SAndroid Build Coastguard Worker * "struct drm_vmw_gb_surface_ref_ext_rep" 1206*d83cc019SAndroid Build Coastguard Worker * 1207*d83cc019SAndroid Build Coastguard Worker * Argument to the DRM_VMW_GB_SURFACE_REF Ioctl. 1208*d83cc019SAndroid Build Coastguard Worker */ 1209*d83cc019SAndroid Build Coastguard Worker union drm_vmw_gb_surface_reference_ext_arg { 1210*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_gb_surface_ref_ext_rep rep; 1211*d83cc019SAndroid Build Coastguard Worker struct drm_vmw_surface_arg req; 1212*d83cc019SAndroid Build Coastguard Worker }; 1213*d83cc019SAndroid Build Coastguard Worker 1214*d83cc019SAndroid Build Coastguard Worker #if defined(__cplusplus) 1215*d83cc019SAndroid Build Coastguard Worker } 1216*d83cc019SAndroid Build Coastguard Worker #endif 1217*d83cc019SAndroid Build Coastguard Worker 1218*d83cc019SAndroid Build Coastguard Worker #endif 1219