1dc5698e8SDave Airlie /* 2dc5698e8SDave Airlie * Virtio GPU Device 3dc5698e8SDave Airlie * 4dc5698e8SDave Airlie * Copyright Red Hat, Inc. 2013-2014 5dc5698e8SDave Airlie * 6dc5698e8SDave Airlie * Authors: 7dc5698e8SDave Airlie * Dave Airlie <airlied@redhat.com> 8dc5698e8SDave Airlie * Gerd Hoffmann <kraxel@redhat.com> 9dc5698e8SDave Airlie * 10dc5698e8SDave Airlie * This header is BSD licensed so anyone can use the definitions 11dc5698e8SDave Airlie * to implement compatible drivers/servers: 12dc5698e8SDave Airlie * 13dc5698e8SDave Airlie * Redistribution and use in source and binary forms, with or without 14dc5698e8SDave Airlie * modification, are permitted provided that the following conditions 15dc5698e8SDave Airlie * are met: 16dc5698e8SDave Airlie * 1. Redistributions of source code must retain the above copyright 17dc5698e8SDave Airlie * notice, this list of conditions and the following disclaimer. 18dc5698e8SDave Airlie * 2. Redistributions in binary form must reproduce the above copyright 19dc5698e8SDave Airlie * notice, this list of conditions and the following disclaimer in the 20dc5698e8SDave Airlie * documentation and/or other materials provided with the distribution. 21dc5698e8SDave Airlie * 3. Neither the name of IBM nor the names of its contributors 22dc5698e8SDave Airlie * may be used to endorse or promote products derived from this software 23dc5698e8SDave Airlie * without specific prior written permission. 24dc5698e8SDave Airlie * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25dc5698e8SDave Airlie * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26dc5698e8SDave Airlie * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 27dc5698e8SDave Airlie * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL IBM OR 28dc5698e8SDave Airlie * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 29dc5698e8SDave Airlie * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 30dc5698e8SDave Airlie * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 31dc5698e8SDave Airlie * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 32dc5698e8SDave Airlie * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 33dc5698e8SDave Airlie * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 34dc5698e8SDave Airlie * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35dc5698e8SDave Airlie * SUCH DAMAGE. 36dc5698e8SDave Airlie */ 37dc5698e8SDave Airlie 38dc5698e8SDave Airlie #ifndef VIRTIO_GPU_HW_H 39dc5698e8SDave Airlie #define VIRTIO_GPU_HW_H 40dc5698e8SDave Airlie 41ae455773SDave Airlie #include <linux/types.h> 42ae455773SDave Airlie 43beb941b9SGerd Hoffmann /* 44beb941b9SGerd Hoffmann * VIRTIO_GPU_CMD_CTX_* 45beb941b9SGerd Hoffmann * VIRTIO_GPU_CMD_*_3D 46beb941b9SGerd Hoffmann */ 4762fb7a5eSGerd Hoffmann #define VIRTIO_GPU_F_VIRGL 0 48beb941b9SGerd Hoffmann 49beb941b9SGerd Hoffmann /* 50beb941b9SGerd Hoffmann * VIRTIO_GPU_CMD_GET_EDID 51beb941b9SGerd Hoffmann */ 52610c0c2bSGerd Hoffmann #define VIRTIO_GPU_F_EDID 1 53592d9fbaSDavid Stevens /* 54592d9fbaSDavid Stevens * VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID 55592d9fbaSDavid Stevens */ 56592d9fbaSDavid Stevens #define VIRTIO_GPU_F_RESOURCE_UUID 2 5762fb7a5eSGerd Hoffmann 58ff886cbdSGerd Hoffmann /* 59ff886cbdSGerd Hoffmann * VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB 60ff886cbdSGerd Hoffmann */ 61ff886cbdSGerd Hoffmann #define VIRTIO_GPU_F_RESOURCE_BLOB 3 6234268c9dSGurchetan Singh /* 6334268c9dSGurchetan Singh * VIRTIO_GPU_CMD_CREATE_CONTEXT with 6434268c9dSGurchetan Singh * context_init and multiple timelines 6534268c9dSGurchetan Singh */ 6634268c9dSGurchetan Singh #define VIRTIO_GPU_F_CONTEXT_INIT 4 67ff886cbdSGerd Hoffmann 68dc5698e8SDave Airlie enum virtio_gpu_ctrl_type { 69dc5698e8SDave Airlie VIRTIO_GPU_UNDEFINED = 0, 70dc5698e8SDave Airlie 71dc5698e8SDave Airlie /* 2d commands */ 72dc5698e8SDave Airlie VIRTIO_GPU_CMD_GET_DISPLAY_INFO = 0x0100, 73dc5698e8SDave Airlie VIRTIO_GPU_CMD_RESOURCE_CREATE_2D, 74dc5698e8SDave Airlie VIRTIO_GPU_CMD_RESOURCE_UNREF, 75dc5698e8SDave Airlie VIRTIO_GPU_CMD_SET_SCANOUT, 76dc5698e8SDave Airlie VIRTIO_GPU_CMD_RESOURCE_FLUSH, 77dc5698e8SDave Airlie VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D, 78dc5698e8SDave Airlie VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING, 79dc5698e8SDave Airlie VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING, 8062fb7a5eSGerd Hoffmann VIRTIO_GPU_CMD_GET_CAPSET_INFO, 8162fb7a5eSGerd Hoffmann VIRTIO_GPU_CMD_GET_CAPSET, 82610c0c2bSGerd Hoffmann VIRTIO_GPU_CMD_GET_EDID, 83592d9fbaSDavid Stevens VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID, 84ff886cbdSGerd Hoffmann VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB, 85ff886cbdSGerd Hoffmann VIRTIO_GPU_CMD_SET_SCANOUT_BLOB, 8662fb7a5eSGerd Hoffmann 8762fb7a5eSGerd Hoffmann /* 3d commands */ 8862fb7a5eSGerd Hoffmann VIRTIO_GPU_CMD_CTX_CREATE = 0x0200, 8962fb7a5eSGerd Hoffmann VIRTIO_GPU_CMD_CTX_DESTROY, 9062fb7a5eSGerd Hoffmann VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE, 9162fb7a5eSGerd Hoffmann VIRTIO_GPU_CMD_CTX_DETACH_RESOURCE, 9262fb7a5eSGerd Hoffmann VIRTIO_GPU_CMD_RESOURCE_CREATE_3D, 9362fb7a5eSGerd Hoffmann VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D, 9462fb7a5eSGerd Hoffmann VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D, 9562fb7a5eSGerd Hoffmann VIRTIO_GPU_CMD_SUBMIT_3D, 96e5cd6cbeSGerd Hoffmann VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB, 97e5cd6cbeSGerd Hoffmann VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB, 98dc5698e8SDave Airlie 99dc5698e8SDave Airlie /* cursor commands */ 100dc5698e8SDave Airlie VIRTIO_GPU_CMD_UPDATE_CURSOR = 0x0300, 101dc5698e8SDave Airlie VIRTIO_GPU_CMD_MOVE_CURSOR, 102dc5698e8SDave Airlie 103dc5698e8SDave Airlie /* success responses */ 104dc5698e8SDave Airlie VIRTIO_GPU_RESP_OK_NODATA = 0x1100, 105dc5698e8SDave Airlie VIRTIO_GPU_RESP_OK_DISPLAY_INFO, 10662fb7a5eSGerd Hoffmann VIRTIO_GPU_RESP_OK_CAPSET_INFO, 10762fb7a5eSGerd Hoffmann VIRTIO_GPU_RESP_OK_CAPSET, 108610c0c2bSGerd Hoffmann VIRTIO_GPU_RESP_OK_EDID, 109592d9fbaSDavid Stevens VIRTIO_GPU_RESP_OK_RESOURCE_UUID, 110e5cd6cbeSGerd Hoffmann VIRTIO_GPU_RESP_OK_MAP_INFO, 111dc5698e8SDave Airlie 112dc5698e8SDave Airlie /* error responses */ 113dc5698e8SDave Airlie VIRTIO_GPU_RESP_ERR_UNSPEC = 0x1200, 114dc5698e8SDave Airlie VIRTIO_GPU_RESP_ERR_OUT_OF_MEMORY, 115dc5698e8SDave Airlie VIRTIO_GPU_RESP_ERR_INVALID_SCANOUT_ID, 116dc5698e8SDave Airlie VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID, 117dc5698e8SDave Airlie VIRTIO_GPU_RESP_ERR_INVALID_CONTEXT_ID, 118dc5698e8SDave Airlie VIRTIO_GPU_RESP_ERR_INVALID_PARAMETER, 119dc5698e8SDave Airlie }; 120dc5698e8SDave Airlie 121e5cd6cbeSGerd Hoffmann enum virtio_gpu_shm_id { 122e5cd6cbeSGerd Hoffmann VIRTIO_GPU_SHM_ID_UNDEFINED = 0, 123c1209608SAnthoine Bourgeois /* 124c1209608SAnthoine Bourgeois * VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB 125c1209608SAnthoine Bourgeois * VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB 126c1209608SAnthoine Bourgeois */ 127e5cd6cbeSGerd Hoffmann VIRTIO_GPU_SHM_ID_HOST_VISIBLE = 1 128e5cd6cbeSGerd Hoffmann }; 129e5cd6cbeSGerd Hoffmann 130dc5698e8SDave Airlie #define VIRTIO_GPU_FLAG_FENCE (1 << 0) 13134268c9dSGurchetan Singh /* 13234268c9dSGurchetan Singh * If the following flag is set, then ring_idx contains the index 13334268c9dSGurchetan Singh * of the command ring that needs to used when creating the fence 13434268c9dSGurchetan Singh */ 13534268c9dSGurchetan Singh #define VIRTIO_GPU_FLAG_INFO_RING_IDX (1 << 1) 136dc5698e8SDave Airlie 137dc5698e8SDave Airlie struct virtio_gpu_ctrl_hdr { 138dc5698e8SDave Airlie __le32 type; 139dc5698e8SDave Airlie __le32 flags; 140dc5698e8SDave Airlie __le64 fence_id; 141dc5698e8SDave Airlie __le32 ctx_id; 14234268c9dSGurchetan Singh __u8 ring_idx; 14334268c9dSGurchetan Singh __u8 padding[3]; 144dc5698e8SDave Airlie }; 145dc5698e8SDave Airlie 146dc5698e8SDave Airlie /* data passed in the cursor vq */ 147dc5698e8SDave Airlie 148dc5698e8SDave Airlie struct virtio_gpu_cursor_pos { 149dc5698e8SDave Airlie __le32 scanout_id; 150dc5698e8SDave Airlie __le32 x; 151dc5698e8SDave Airlie __le32 y; 152dc5698e8SDave Airlie __le32 padding; 153dc5698e8SDave Airlie }; 154dc5698e8SDave Airlie 155dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_UPDATE_CURSOR, VIRTIO_GPU_CMD_MOVE_CURSOR */ 156dc5698e8SDave Airlie struct virtio_gpu_update_cursor { 157dc5698e8SDave Airlie struct virtio_gpu_ctrl_hdr hdr; 158dc5698e8SDave Airlie struct virtio_gpu_cursor_pos pos; /* update & move */ 159dc5698e8SDave Airlie __le32 resource_id; /* update only */ 160dc5698e8SDave Airlie __le32 hot_x; /* update only */ 161dc5698e8SDave Airlie __le32 hot_y; /* update only */ 162dc5698e8SDave Airlie __le32 padding; 163dc5698e8SDave Airlie }; 164dc5698e8SDave Airlie 165dc5698e8SDave Airlie /* data passed in the control vq, 2d related */ 166dc5698e8SDave Airlie 167dc5698e8SDave Airlie struct virtio_gpu_rect { 168dc5698e8SDave Airlie __le32 x; 169dc5698e8SDave Airlie __le32 y; 170dc5698e8SDave Airlie __le32 width; 171dc5698e8SDave Airlie __le32 height; 172dc5698e8SDave Airlie }; 173dc5698e8SDave Airlie 174dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_RESOURCE_UNREF */ 175dc5698e8SDave Airlie struct virtio_gpu_resource_unref { 176dc5698e8SDave Airlie struct virtio_gpu_ctrl_hdr hdr; 177dc5698e8SDave Airlie __le32 resource_id; 178dc5698e8SDave Airlie __le32 padding; 179dc5698e8SDave Airlie }; 180dc5698e8SDave Airlie 181dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_RESOURCE_CREATE_2D: create a 2d resource with a format */ 182dc5698e8SDave Airlie struct virtio_gpu_resource_create_2d { 183dc5698e8SDave Airlie struct virtio_gpu_ctrl_hdr hdr; 184dc5698e8SDave Airlie __le32 resource_id; 185dc5698e8SDave Airlie __le32 format; 186dc5698e8SDave Airlie __le32 width; 187dc5698e8SDave Airlie __le32 height; 188dc5698e8SDave Airlie }; 189dc5698e8SDave Airlie 190dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_SET_SCANOUT */ 191dc5698e8SDave Airlie struct virtio_gpu_set_scanout { 192dc5698e8SDave Airlie struct virtio_gpu_ctrl_hdr hdr; 193dc5698e8SDave Airlie struct virtio_gpu_rect r; 194dc5698e8SDave Airlie __le32 scanout_id; 195dc5698e8SDave Airlie __le32 resource_id; 196dc5698e8SDave Airlie }; 197dc5698e8SDave Airlie 198dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_RESOURCE_FLUSH */ 199dc5698e8SDave Airlie struct virtio_gpu_resource_flush { 200dc5698e8SDave Airlie struct virtio_gpu_ctrl_hdr hdr; 201dc5698e8SDave Airlie struct virtio_gpu_rect r; 202dc5698e8SDave Airlie __le32 resource_id; 203dc5698e8SDave Airlie __le32 padding; 204dc5698e8SDave Airlie }; 205dc5698e8SDave Airlie 206dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D: simple transfer to_host */ 207dc5698e8SDave Airlie struct virtio_gpu_transfer_to_host_2d { 208dc5698e8SDave Airlie struct virtio_gpu_ctrl_hdr hdr; 209dc5698e8SDave Airlie struct virtio_gpu_rect r; 210dc5698e8SDave Airlie __le64 offset; 211dc5698e8SDave Airlie __le32 resource_id; 212dc5698e8SDave Airlie __le32 padding; 213dc5698e8SDave Airlie }; 214dc5698e8SDave Airlie 215dc5698e8SDave Airlie struct virtio_gpu_mem_entry { 216dc5698e8SDave Airlie __le64 addr; 217dc5698e8SDave Airlie __le32 length; 218dc5698e8SDave Airlie __le32 padding; 219dc5698e8SDave Airlie }; 220dc5698e8SDave Airlie 221dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING */ 222dc5698e8SDave Airlie struct virtio_gpu_resource_attach_backing { 223dc5698e8SDave Airlie struct virtio_gpu_ctrl_hdr hdr; 224dc5698e8SDave Airlie __le32 resource_id; 225dc5698e8SDave Airlie __le32 nr_entries; 226dc5698e8SDave Airlie }; 227dc5698e8SDave Airlie 228dc5698e8SDave Airlie /* VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING */ 229dc5698e8SDave Airlie struct virtio_gpu_resource_detach_backing { 230dc5698e8SDave Airlie struct virtio_gpu_ctrl_hdr hdr; 231dc5698e8SDave Airlie __le32 resource_id; 232dc5698e8SDave Airlie __le32 padding; 233dc5698e8SDave Airlie }; 234dc5698e8SDave Airlie 235dc5698e8SDave Airlie /* VIRTIO_GPU_RESP_OK_DISPLAY_INFO */ 236dc5698e8SDave Airlie #define VIRTIO_GPU_MAX_SCANOUTS 16 237dc5698e8SDave Airlie struct virtio_gpu_resp_display_info { 238dc5698e8SDave Airlie struct virtio_gpu_ctrl_hdr hdr; 239dc5698e8SDave Airlie struct virtio_gpu_display_one { 240dc5698e8SDave Airlie struct virtio_gpu_rect r; 241dc5698e8SDave Airlie __le32 enabled; 242dc5698e8SDave Airlie __le32 flags; 243dc5698e8SDave Airlie } pmodes[VIRTIO_GPU_MAX_SCANOUTS]; 244dc5698e8SDave Airlie }; 245dc5698e8SDave Airlie 24662fb7a5eSGerd Hoffmann /* data passed in the control vq, 3d related */ 24762fb7a5eSGerd Hoffmann 24862fb7a5eSGerd Hoffmann struct virtio_gpu_box { 24962fb7a5eSGerd Hoffmann __le32 x, y, z; 25062fb7a5eSGerd Hoffmann __le32 w, h, d; 25162fb7a5eSGerd Hoffmann }; 25262fb7a5eSGerd Hoffmann 25362fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D, VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D */ 25462fb7a5eSGerd Hoffmann struct virtio_gpu_transfer_host_3d { 25562fb7a5eSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 25662fb7a5eSGerd Hoffmann struct virtio_gpu_box box; 25762fb7a5eSGerd Hoffmann __le64 offset; 25862fb7a5eSGerd Hoffmann __le32 resource_id; 25962fb7a5eSGerd Hoffmann __le32 level; 26062fb7a5eSGerd Hoffmann __le32 stride; 26162fb7a5eSGerd Hoffmann __le32 layer_stride; 26262fb7a5eSGerd Hoffmann }; 26362fb7a5eSGerd Hoffmann 26462fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_RESOURCE_CREATE_3D */ 26562fb7a5eSGerd Hoffmann #define VIRTIO_GPU_RESOURCE_FLAG_Y_0_TOP (1 << 0) 26662fb7a5eSGerd Hoffmann struct virtio_gpu_resource_create_3d { 26762fb7a5eSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 26862fb7a5eSGerd Hoffmann __le32 resource_id; 26962fb7a5eSGerd Hoffmann __le32 target; 27062fb7a5eSGerd Hoffmann __le32 format; 27162fb7a5eSGerd Hoffmann __le32 bind; 27262fb7a5eSGerd Hoffmann __le32 width; 27362fb7a5eSGerd Hoffmann __le32 height; 27462fb7a5eSGerd Hoffmann __le32 depth; 27562fb7a5eSGerd Hoffmann __le32 array_size; 27662fb7a5eSGerd Hoffmann __le32 last_level; 27762fb7a5eSGerd Hoffmann __le32 nr_samples; 27862fb7a5eSGerd Hoffmann __le32 flags; 27962fb7a5eSGerd Hoffmann __le32 padding; 28062fb7a5eSGerd Hoffmann }; 28162fb7a5eSGerd Hoffmann 28262fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_CTX_CREATE */ 28334268c9dSGurchetan Singh #define VIRTIO_GPU_CONTEXT_INIT_CAPSET_ID_MASK 0x000000ff 28462fb7a5eSGerd Hoffmann struct virtio_gpu_ctx_create { 28562fb7a5eSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 28662fb7a5eSGerd Hoffmann __le32 nlen; 28734268c9dSGurchetan Singh __le32 context_init; 28862fb7a5eSGerd Hoffmann char debug_name[64]; 28962fb7a5eSGerd Hoffmann }; 29062fb7a5eSGerd Hoffmann 29162fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_CTX_DESTROY */ 29262fb7a5eSGerd Hoffmann struct virtio_gpu_ctx_destroy { 29362fb7a5eSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 29462fb7a5eSGerd Hoffmann }; 29562fb7a5eSGerd Hoffmann 29662fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE, VIRTIO_GPU_CMD_CTX_DETACH_RESOURCE */ 29762fb7a5eSGerd Hoffmann struct virtio_gpu_ctx_resource { 29862fb7a5eSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 29962fb7a5eSGerd Hoffmann __le32 resource_id; 30062fb7a5eSGerd Hoffmann __le32 padding; 30162fb7a5eSGerd Hoffmann }; 30262fb7a5eSGerd Hoffmann 30362fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_SUBMIT_3D */ 30462fb7a5eSGerd Hoffmann struct virtio_gpu_cmd_submit { 30562fb7a5eSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 30662fb7a5eSGerd Hoffmann __le32 size; 30762fb7a5eSGerd Hoffmann __le32 padding; 30862fb7a5eSGerd Hoffmann }; 30962fb7a5eSGerd Hoffmann 31062fb7a5eSGerd Hoffmann #define VIRTIO_GPU_CAPSET_VIRGL 1 311110ab11dSDave Airlie #define VIRTIO_GPU_CAPSET_VIRGL2 2 312*216d86b9SHuang Rui /* 3 is reserved for gfxstream */ 313*216d86b9SHuang Rui #define VIRTIO_GPU_CAPSET_VENUS 4 31462fb7a5eSGerd Hoffmann 31562fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_GET_CAPSET_INFO */ 31662fb7a5eSGerd Hoffmann struct virtio_gpu_get_capset_info { 31762fb7a5eSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 31862fb7a5eSGerd Hoffmann __le32 capset_index; 31962fb7a5eSGerd Hoffmann __le32 padding; 32062fb7a5eSGerd Hoffmann }; 32162fb7a5eSGerd Hoffmann 32262fb7a5eSGerd Hoffmann /* VIRTIO_GPU_RESP_OK_CAPSET_INFO */ 32362fb7a5eSGerd Hoffmann struct virtio_gpu_resp_capset_info { 32462fb7a5eSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 32562fb7a5eSGerd Hoffmann __le32 capset_id; 32662fb7a5eSGerd Hoffmann __le32 capset_max_version; 32762fb7a5eSGerd Hoffmann __le32 capset_max_size; 32862fb7a5eSGerd Hoffmann __le32 padding; 32962fb7a5eSGerd Hoffmann }; 33062fb7a5eSGerd Hoffmann 33162fb7a5eSGerd Hoffmann /* VIRTIO_GPU_CMD_GET_CAPSET */ 33262fb7a5eSGerd Hoffmann struct virtio_gpu_get_capset { 33362fb7a5eSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 33462fb7a5eSGerd Hoffmann __le32 capset_id; 33562fb7a5eSGerd Hoffmann __le32 capset_version; 33662fb7a5eSGerd Hoffmann }; 33762fb7a5eSGerd Hoffmann 33862fb7a5eSGerd Hoffmann /* VIRTIO_GPU_RESP_OK_CAPSET */ 33962fb7a5eSGerd Hoffmann struct virtio_gpu_resp_capset { 34062fb7a5eSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 34189545d6dSMikko Rapeli __u8 capset_data[]; 34262fb7a5eSGerd Hoffmann }; 34362fb7a5eSGerd Hoffmann 344610c0c2bSGerd Hoffmann /* VIRTIO_GPU_CMD_GET_EDID */ 345610c0c2bSGerd Hoffmann struct virtio_gpu_cmd_get_edid { 346610c0c2bSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 347610c0c2bSGerd Hoffmann __le32 scanout; 348610c0c2bSGerd Hoffmann __le32 padding; 349610c0c2bSGerd Hoffmann }; 350610c0c2bSGerd Hoffmann 351610c0c2bSGerd Hoffmann /* VIRTIO_GPU_RESP_OK_EDID */ 352610c0c2bSGerd Hoffmann struct virtio_gpu_resp_edid { 353610c0c2bSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 354610c0c2bSGerd Hoffmann __le32 size; 355610c0c2bSGerd Hoffmann __le32 padding; 356610c0c2bSGerd Hoffmann __u8 edid[1024]; 357610c0c2bSGerd Hoffmann }; 358610c0c2bSGerd Hoffmann 359dc5698e8SDave Airlie #define VIRTIO_GPU_EVENT_DISPLAY (1 << 0) 360dc5698e8SDave Airlie 361dc5698e8SDave Airlie struct virtio_gpu_config { 362f378444bSMichael S. Tsirkin __le32 events_read; 363f378444bSMichael S. Tsirkin __le32 events_clear; 364f378444bSMichael S. Tsirkin __le32 num_scanouts; 365f378444bSMichael S. Tsirkin __le32 num_capsets; 366dc5698e8SDave Airlie }; 367dc5698e8SDave Airlie 368dc5698e8SDave Airlie /* simple formats for fbcon/X use */ 369dc5698e8SDave Airlie enum virtio_gpu_formats { 370dc5698e8SDave Airlie VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM = 1, 371dc5698e8SDave Airlie VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM = 2, 372dc5698e8SDave Airlie VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM = 3, 373dc5698e8SDave Airlie VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM = 4, 374dc5698e8SDave Airlie 375dc5698e8SDave Airlie VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM = 67, 376dc5698e8SDave Airlie VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM = 68, 377dc5698e8SDave Airlie 378dc5698e8SDave Airlie VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM = 121, 379dc5698e8SDave Airlie VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM = 134, 380dc5698e8SDave Airlie }; 381dc5698e8SDave Airlie 382592d9fbaSDavid Stevens /* VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID */ 383592d9fbaSDavid Stevens struct virtio_gpu_resource_assign_uuid { 384592d9fbaSDavid Stevens struct virtio_gpu_ctrl_hdr hdr; 385592d9fbaSDavid Stevens __le32 resource_id; 386592d9fbaSDavid Stevens __le32 padding; 387592d9fbaSDavid Stevens }; 388592d9fbaSDavid Stevens 389592d9fbaSDavid Stevens /* VIRTIO_GPU_RESP_OK_RESOURCE_UUID */ 390592d9fbaSDavid Stevens struct virtio_gpu_resp_resource_uuid { 391592d9fbaSDavid Stevens struct virtio_gpu_ctrl_hdr hdr; 392592d9fbaSDavid Stevens __u8 uuid[16]; 393592d9fbaSDavid Stevens }; 394592d9fbaSDavid Stevens 395ff886cbdSGerd Hoffmann /* VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB */ 396ff886cbdSGerd Hoffmann struct virtio_gpu_resource_create_blob { 397ff886cbdSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 398ff886cbdSGerd Hoffmann __le32 resource_id; 399ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_MEM_GUEST 0x0001 400ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_MEM_HOST3D 0x0002 401ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_MEM_HOST3D_GUEST 0x0003 402ff886cbdSGerd Hoffmann 403ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_FLAG_USE_MAPPABLE 0x0001 404ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_FLAG_USE_SHAREABLE 0x0002 405ff886cbdSGerd Hoffmann #define VIRTIO_GPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004 406ff886cbdSGerd Hoffmann /* zero is invalid blob mem */ 407ff886cbdSGerd Hoffmann __le32 blob_mem; 408ff886cbdSGerd Hoffmann __le32 blob_flags; 40991e515c2SAlistair Delva __le32 nr_entries; 410ff886cbdSGerd Hoffmann __le64 blob_id; 411ff886cbdSGerd Hoffmann __le64 size; 412ff886cbdSGerd Hoffmann /* 413ff886cbdSGerd Hoffmann * sizeof(nr_entries * virtio_gpu_mem_entry) bytes follow 414ff886cbdSGerd Hoffmann */ 415ff886cbdSGerd Hoffmann }; 416ff886cbdSGerd Hoffmann 417ff886cbdSGerd Hoffmann /* VIRTIO_GPU_CMD_SET_SCANOUT_BLOB */ 418ff886cbdSGerd Hoffmann struct virtio_gpu_set_scanout_blob { 419ff886cbdSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 420ff886cbdSGerd Hoffmann struct virtio_gpu_rect r; 421ff886cbdSGerd Hoffmann __le32 scanout_id; 422ff886cbdSGerd Hoffmann __le32 resource_id; 423ff886cbdSGerd Hoffmann __le32 width; 424ff886cbdSGerd Hoffmann __le32 height; 425ff886cbdSGerd Hoffmann __le32 format; 426ff886cbdSGerd Hoffmann __le32 padding; 427ff886cbdSGerd Hoffmann __le32 strides[4]; 428ff886cbdSGerd Hoffmann __le32 offsets[4]; 429ff886cbdSGerd Hoffmann }; 430ff886cbdSGerd Hoffmann 431e5cd6cbeSGerd Hoffmann /* VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB */ 432e5cd6cbeSGerd Hoffmann struct virtio_gpu_resource_map_blob { 433e5cd6cbeSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 434e5cd6cbeSGerd Hoffmann __le32 resource_id; 435e5cd6cbeSGerd Hoffmann __le32 padding; 436e5cd6cbeSGerd Hoffmann __le64 offset; 437e5cd6cbeSGerd Hoffmann }; 438e5cd6cbeSGerd Hoffmann 439e5cd6cbeSGerd Hoffmann /* VIRTIO_GPU_RESP_OK_MAP_INFO */ 440e5cd6cbeSGerd Hoffmann #define VIRTIO_GPU_MAP_CACHE_MASK 0x0f 441e5cd6cbeSGerd Hoffmann #define VIRTIO_GPU_MAP_CACHE_NONE 0x00 442e5cd6cbeSGerd Hoffmann #define VIRTIO_GPU_MAP_CACHE_CACHED 0x01 443e5cd6cbeSGerd Hoffmann #define VIRTIO_GPU_MAP_CACHE_UNCACHED 0x02 444e5cd6cbeSGerd Hoffmann #define VIRTIO_GPU_MAP_CACHE_WC 0x03 445e5cd6cbeSGerd Hoffmann struct virtio_gpu_resp_map_info { 446e5cd6cbeSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 447e5cd6cbeSGerd Hoffmann __u32 map_info; 448e5cd6cbeSGerd Hoffmann __u32 padding; 449e5cd6cbeSGerd Hoffmann }; 450e5cd6cbeSGerd Hoffmann 451e5cd6cbeSGerd Hoffmann /* VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB */ 452e5cd6cbeSGerd Hoffmann struct virtio_gpu_resource_unmap_blob { 453e5cd6cbeSGerd Hoffmann struct virtio_gpu_ctrl_hdr hdr; 454e5cd6cbeSGerd Hoffmann __le32 resource_id; 455e5cd6cbeSGerd Hoffmann __le32 padding; 456e5cd6cbeSGerd Hoffmann }; 457e5cd6cbeSGerd Hoffmann 458dc5698e8SDave Airlie #endif 459