0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 #ifndef VIRTIO_GPU_HW_H
0039 #define VIRTIO_GPU_HW_H
0040
0041 #include <linux/types.h>
0042
0043
0044
0045
0046
0047 #define VIRTIO_GPU_F_VIRGL 0
0048
0049
0050
0051
0052 #define VIRTIO_GPU_F_EDID 1
0053
0054
0055
0056 #define VIRTIO_GPU_F_RESOURCE_UUID 2
0057
0058
0059
0060
0061 #define VIRTIO_GPU_F_RESOURCE_BLOB 3
0062
0063
0064
0065
0066 #define VIRTIO_GPU_F_CONTEXT_INIT 4
0067
0068 enum virtio_gpu_ctrl_type {
0069 VIRTIO_GPU_UNDEFINED = 0,
0070
0071
0072 VIRTIO_GPU_CMD_GET_DISPLAY_INFO = 0x0100,
0073 VIRTIO_GPU_CMD_RESOURCE_CREATE_2D,
0074 VIRTIO_GPU_CMD_RESOURCE_UNREF,
0075 VIRTIO_GPU_CMD_SET_SCANOUT,
0076 VIRTIO_GPU_CMD_RESOURCE_FLUSH,
0077 VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D,
0078 VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING,
0079 VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING,
0080 VIRTIO_GPU_CMD_GET_CAPSET_INFO,
0081 VIRTIO_GPU_CMD_GET_CAPSET,
0082 VIRTIO_GPU_CMD_GET_EDID,
0083 VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID,
0084 VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB,
0085 VIRTIO_GPU_CMD_SET_SCANOUT_BLOB,
0086
0087
0088 VIRTIO_GPU_CMD_CTX_CREATE = 0x0200,
0089 VIRTIO_GPU_CMD_CTX_DESTROY,
0090 VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE,
0091 VIRTIO_GPU_CMD_CTX_DETACH_RESOURCE,
0092 VIRTIO_GPU_CMD_RESOURCE_CREATE_3D,
0093 VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D,
0094 VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D,
0095 VIRTIO_GPU_CMD_SUBMIT_3D,
0096 VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB,
0097 VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB,
0098
0099
0100 VIRTIO_GPU_CMD_UPDATE_CURSOR = 0x0300,
0101 VIRTIO_GPU_CMD_MOVE_CURSOR,
0102
0103
0104 VIRTIO_GPU_RESP_OK_NODATA = 0x1100,
0105 VIRTIO_GPU_RESP_OK_DISPLAY_INFO,
0106 VIRTIO_GPU_RESP_OK_CAPSET_INFO,
0107 VIRTIO_GPU_RESP_OK_CAPSET,
0108 VIRTIO_GPU_RESP_OK_EDID,
0109 VIRTIO_GPU_RESP_OK_RESOURCE_UUID,
0110 VIRTIO_GPU_RESP_OK_MAP_INFO,
0111
0112
0113 VIRTIO_GPU_RESP_ERR_UNSPEC = 0x1200,
0114 VIRTIO_GPU_RESP_ERR_OUT_OF_MEMORY,
0115 VIRTIO_GPU_RESP_ERR_INVALID_SCANOUT_ID,
0116 VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID,
0117 VIRTIO_GPU_RESP_ERR_INVALID_CONTEXT_ID,
0118 VIRTIO_GPU_RESP_ERR_INVALID_PARAMETER,
0119 };
0120
0121 enum virtio_gpu_shm_id {
0122 VIRTIO_GPU_SHM_ID_UNDEFINED = 0,
0123
0124
0125
0126
0127 VIRTIO_GPU_SHM_ID_HOST_VISIBLE = 1
0128 };
0129
0130 #define VIRTIO_GPU_FLAG_FENCE (1 << 0)
0131
0132
0133
0134
0135 #define VIRTIO_GPU_FLAG_INFO_RING_IDX (1 << 1)
0136
0137 struct virtio_gpu_ctrl_hdr {
0138 __le32 type;
0139 __le32 flags;
0140 __le64 fence_id;
0141 __le32 ctx_id;
0142 __u8 ring_idx;
0143 __u8 padding[3];
0144 };
0145
0146
0147
0148 struct virtio_gpu_cursor_pos {
0149 __le32 scanout_id;
0150 __le32 x;
0151 __le32 y;
0152 __le32 padding;
0153 };
0154
0155
0156 struct virtio_gpu_update_cursor {
0157 struct virtio_gpu_ctrl_hdr hdr;
0158 struct virtio_gpu_cursor_pos pos;
0159 __le32 resource_id;
0160 __le32 hot_x;
0161 __le32 hot_y;
0162 __le32 padding;
0163 };
0164
0165
0166
0167 struct virtio_gpu_rect {
0168 __le32 x;
0169 __le32 y;
0170 __le32 width;
0171 __le32 height;
0172 };
0173
0174
0175 struct virtio_gpu_resource_unref {
0176 struct virtio_gpu_ctrl_hdr hdr;
0177 __le32 resource_id;
0178 __le32 padding;
0179 };
0180
0181
0182 struct virtio_gpu_resource_create_2d {
0183 struct virtio_gpu_ctrl_hdr hdr;
0184 __le32 resource_id;
0185 __le32 format;
0186 __le32 width;
0187 __le32 height;
0188 };
0189
0190
0191 struct virtio_gpu_set_scanout {
0192 struct virtio_gpu_ctrl_hdr hdr;
0193 struct virtio_gpu_rect r;
0194 __le32 scanout_id;
0195 __le32 resource_id;
0196 };
0197
0198
0199 struct virtio_gpu_resource_flush {
0200 struct virtio_gpu_ctrl_hdr hdr;
0201 struct virtio_gpu_rect r;
0202 __le32 resource_id;
0203 __le32 padding;
0204 };
0205
0206
0207 struct virtio_gpu_transfer_to_host_2d {
0208 struct virtio_gpu_ctrl_hdr hdr;
0209 struct virtio_gpu_rect r;
0210 __le64 offset;
0211 __le32 resource_id;
0212 __le32 padding;
0213 };
0214
0215 struct virtio_gpu_mem_entry {
0216 __le64 addr;
0217 __le32 length;
0218 __le32 padding;
0219 };
0220
0221
0222 struct virtio_gpu_resource_attach_backing {
0223 struct virtio_gpu_ctrl_hdr hdr;
0224 __le32 resource_id;
0225 __le32 nr_entries;
0226 };
0227
0228
0229 struct virtio_gpu_resource_detach_backing {
0230 struct virtio_gpu_ctrl_hdr hdr;
0231 __le32 resource_id;
0232 __le32 padding;
0233 };
0234
0235
0236 #define VIRTIO_GPU_MAX_SCANOUTS 16
0237 struct virtio_gpu_resp_display_info {
0238 struct virtio_gpu_ctrl_hdr hdr;
0239 struct virtio_gpu_display_one {
0240 struct virtio_gpu_rect r;
0241 __le32 enabled;
0242 __le32 flags;
0243 } pmodes[VIRTIO_GPU_MAX_SCANOUTS];
0244 };
0245
0246
0247
0248 struct virtio_gpu_box {
0249 __le32 x, y, z;
0250 __le32 w, h, d;
0251 };
0252
0253
0254 struct virtio_gpu_transfer_host_3d {
0255 struct virtio_gpu_ctrl_hdr hdr;
0256 struct virtio_gpu_box box;
0257 __le64 offset;
0258 __le32 resource_id;
0259 __le32 level;
0260 __le32 stride;
0261 __le32 layer_stride;
0262 };
0263
0264
0265 #define VIRTIO_GPU_RESOURCE_FLAG_Y_0_TOP (1 << 0)
0266 struct virtio_gpu_resource_create_3d {
0267 struct virtio_gpu_ctrl_hdr hdr;
0268 __le32 resource_id;
0269 __le32 target;
0270 __le32 format;
0271 __le32 bind;
0272 __le32 width;
0273 __le32 height;
0274 __le32 depth;
0275 __le32 array_size;
0276 __le32 last_level;
0277 __le32 nr_samples;
0278 __le32 flags;
0279 __le32 padding;
0280 };
0281
0282
0283 #define VIRTIO_GPU_CONTEXT_INIT_CAPSET_ID_MASK 0x000000ff
0284 struct virtio_gpu_ctx_create {
0285 struct virtio_gpu_ctrl_hdr hdr;
0286 __le32 nlen;
0287 __le32 context_init;
0288 char debug_name[64];
0289 };
0290
0291
0292 struct virtio_gpu_ctx_destroy {
0293 struct virtio_gpu_ctrl_hdr hdr;
0294 };
0295
0296
0297 struct virtio_gpu_ctx_resource {
0298 struct virtio_gpu_ctrl_hdr hdr;
0299 __le32 resource_id;
0300 __le32 padding;
0301 };
0302
0303
0304 struct virtio_gpu_cmd_submit {
0305 struct virtio_gpu_ctrl_hdr hdr;
0306 __le32 size;
0307 __le32 padding;
0308 };
0309
0310 #define VIRTIO_GPU_CAPSET_VIRGL 1
0311 #define VIRTIO_GPU_CAPSET_VIRGL2 2
0312
0313
0314 struct virtio_gpu_get_capset_info {
0315 struct virtio_gpu_ctrl_hdr hdr;
0316 __le32 capset_index;
0317 __le32 padding;
0318 };
0319
0320
0321 struct virtio_gpu_resp_capset_info {
0322 struct virtio_gpu_ctrl_hdr hdr;
0323 __le32 capset_id;
0324 __le32 capset_max_version;
0325 __le32 capset_max_size;
0326 __le32 padding;
0327 };
0328
0329
0330 struct virtio_gpu_get_capset {
0331 struct virtio_gpu_ctrl_hdr hdr;
0332 __le32 capset_id;
0333 __le32 capset_version;
0334 };
0335
0336
0337 struct virtio_gpu_resp_capset {
0338 struct virtio_gpu_ctrl_hdr hdr;
0339 __u8 capset_data[];
0340 };
0341
0342
0343 struct virtio_gpu_cmd_get_edid {
0344 struct virtio_gpu_ctrl_hdr hdr;
0345 __le32 scanout;
0346 __le32 padding;
0347 };
0348
0349
0350 struct virtio_gpu_resp_edid {
0351 struct virtio_gpu_ctrl_hdr hdr;
0352 __le32 size;
0353 __le32 padding;
0354 __u8 edid[1024];
0355 };
0356
0357 #define VIRTIO_GPU_EVENT_DISPLAY (1 << 0)
0358
0359 struct virtio_gpu_config {
0360 __le32 events_read;
0361 __le32 events_clear;
0362 __le32 num_scanouts;
0363 __le32 num_capsets;
0364 };
0365
0366
0367 enum virtio_gpu_formats {
0368 VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM = 1,
0369 VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM = 2,
0370 VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM = 3,
0371 VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM = 4,
0372
0373 VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM = 67,
0374 VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM = 68,
0375
0376 VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM = 121,
0377 VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM = 134,
0378 };
0379
0380
0381 struct virtio_gpu_resource_assign_uuid {
0382 struct virtio_gpu_ctrl_hdr hdr;
0383 __le32 resource_id;
0384 __le32 padding;
0385 };
0386
0387
0388 struct virtio_gpu_resp_resource_uuid {
0389 struct virtio_gpu_ctrl_hdr hdr;
0390 __u8 uuid[16];
0391 };
0392
0393
0394 struct virtio_gpu_resource_create_blob {
0395 struct virtio_gpu_ctrl_hdr hdr;
0396 __le32 resource_id;
0397 #define VIRTIO_GPU_BLOB_MEM_GUEST 0x0001
0398 #define VIRTIO_GPU_BLOB_MEM_HOST3D 0x0002
0399 #define VIRTIO_GPU_BLOB_MEM_HOST3D_GUEST 0x0003
0400
0401 #define VIRTIO_GPU_BLOB_FLAG_USE_MAPPABLE 0x0001
0402 #define VIRTIO_GPU_BLOB_FLAG_USE_SHAREABLE 0x0002
0403 #define VIRTIO_GPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004
0404
0405 __le32 blob_mem;
0406 __le32 blob_flags;
0407 __le32 nr_entries;
0408 __le64 blob_id;
0409 __le64 size;
0410
0411
0412
0413 };
0414
0415
0416 struct virtio_gpu_set_scanout_blob {
0417 struct virtio_gpu_ctrl_hdr hdr;
0418 struct virtio_gpu_rect r;
0419 __le32 scanout_id;
0420 __le32 resource_id;
0421 __le32 width;
0422 __le32 height;
0423 __le32 format;
0424 __le32 padding;
0425 __le32 strides[4];
0426 __le32 offsets[4];
0427 };
0428
0429
0430 struct virtio_gpu_resource_map_blob {
0431 struct virtio_gpu_ctrl_hdr hdr;
0432 __le32 resource_id;
0433 __le32 padding;
0434 __le64 offset;
0435 };
0436
0437
0438 #define VIRTIO_GPU_MAP_CACHE_MASK 0x0f
0439 #define VIRTIO_GPU_MAP_CACHE_NONE 0x00
0440 #define VIRTIO_GPU_MAP_CACHE_CACHED 0x01
0441 #define VIRTIO_GPU_MAP_CACHE_UNCACHED 0x02
0442 #define VIRTIO_GPU_MAP_CACHE_WC 0x03
0443 struct virtio_gpu_resp_map_info {
0444 struct virtio_gpu_ctrl_hdr hdr;
0445 __u32 map_info;
0446 __u32 padding;
0447 };
0448
0449
0450 struct virtio_gpu_resource_unmap_blob {
0451 struct virtio_gpu_ctrl_hdr hdr;
0452 __le32 resource_id;
0453 __le32 padding;
0454 };
0455
0456 #endif