| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef VIRTIO_GPU_H_ |
| #define VIRTIO_GPU_H_ |
| |
| #include <stdint.h> |
| #include <zircon/compiler.h> |
| |
| // clang-format off |
| |
| #define VIRTIO_GPU_F_VIRGL ((uint64_t)1 << 0) |
| |
| #define VIRTIO_GPU_EVENT_DISPLAY (1 << 0) |
| #define VIRTIO_GPU_FLAG_FENCE (1 << 0) |
| #define VIRTIO_GPU_MAX_SCANOUTS 16 |
| |
| // clang-format on |
| |
| __BEGIN_CDECLS |
| |
| enum virtio_gpu_ctrl_type { |
| /* 2d commands */ |
| VIRTIO_GPU_CMD_GET_DISPLAY_INFO = 0x0100, |
| VIRTIO_GPU_CMD_RESOURCE_CREATE_2D, |
| VIRTIO_GPU_CMD_RESOURCE_UNREF, |
| VIRTIO_GPU_CMD_SET_SCANOUT, |
| VIRTIO_GPU_CMD_RESOURCE_FLUSH, |
| VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D, |
| VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING, |
| VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING, |
| /* cursor commands */ |
| VIRTIO_GPU_CMD_UPDATE_CURSOR = 0x0300, |
| VIRTIO_GPU_CMD_MOVE_CURSOR, |
| /* success responses */ |
| VIRTIO_GPU_RESP_OK_NODATA = 0x1100, |
| VIRTIO_GPU_RESP_OK_DISPLAY_INFO, |
| /* error responses */ |
| VIRTIO_GPU_RESP_ERR_UNSPEC = 0x1200, |
| VIRTIO_GPU_RESP_ERR_OUT_OF_MEMORY, |
| VIRTIO_GPU_RESP_ERR_INVALID_SCANOUT_ID, |
| VIRTIO_GPU_RESP_ERR_INVALID_RESOURCE_ID, |
| VIRTIO_GPU_RESP_ERR_INVALID_CONTEXT_ID, |
| VIRTIO_GPU_RESP_ERR_INVALID_PARAMETER, |
| }; |
| |
| enum virtio_gpu_formats { |
| VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM = 1, |
| VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM = 2, |
| VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM = 3, |
| VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM = 4, |
| VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM = 67, |
| VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM = 68, |
| VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM = 121, |
| VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM = 134, |
| }; |
| |
| typedef struct virtio_gpu_config { |
| uint32_t events_read; |
| uint32_t events_clear; |
| uint32_t num_scanouts; |
| uint32_t reserved; |
| } __PACKED virtio_gpu_config_t; |
| |
| typedef struct virtio_gpu_ctrl_hdr { |
| uint32_t type; |
| uint32_t flags; |
| uint64_t fence_id; |
| uint32_t ctx_id; |
| uint32_t padding; |
| } __PACKED virtio_gpu_ctrl_hdr_t; |
| |
| typedef struct virtio_gpu_rect { |
| uint32_t x; |
| uint32_t y; |
| uint32_t width; |
| uint32_t height; |
| } virtio_gpu_rect_t; |
| |
| typedef struct virtio_gpu_display_one { |
| virtio_gpu_rect_t r; |
| uint32_t enabled; |
| uint32_t flags; |
| } __PACKED virtio_gpu_display_one_t; |
| |
| typedef struct virtio_gpu_resp_display_info { |
| virtio_gpu_ctrl_hdr_t hdr; |
| virtio_gpu_display_one_t pmodes[VIRTIO_GPU_MAX_SCANOUTS]; |
| } __PACKED virtio_gpu_resp_display_info_t; |
| |
| typedef struct virtio_gpu_resource_create_2d { |
| virtio_gpu_ctrl_hdr_t hdr; |
| uint32_t resource_id; |
| uint32_t format; |
| uint32_t width; |
| uint32_t height; |
| } __PACKED virtio_gpu_resource_create_2d_t; |
| |
| typedef struct virtio_gpu_resource_unref { |
| virtio_gpu_ctrl_hdr_t hdr; |
| uint32_t resource_id; |
| uint32_t padding; |
| } __PACKED virtio_gpu_resource_unref_t; |
| |
| typedef struct virtio_gpu_set_scanout { |
| virtio_gpu_ctrl_hdr_t hdr; |
| virtio_gpu_rect_t r; |
| uint32_t scanout_id; |
| uint32_t resource_id; |
| } __PACKED virtio_gpu_set_scanout_t; |
| |
| typedef struct virtio_gpu_resource_flush { |
| virtio_gpu_ctrl_hdr_t hdr; |
| virtio_gpu_rect_t r; |
| uint32_t resource_id; |
| uint32_t padding; |
| } __PACKED virtio_gpu_resource_flush_t; |
| |
| typedef struct virtio_gpu_transfer_to_host_2d { |
| virtio_gpu_ctrl_hdr_t hdr; |
| virtio_gpu_rect_t r; |
| uint64_t offset; |
| uint32_t resource_id; |
| uint32_t padding; |
| } __PACKED virtio_gpu_transfer_to_host_2d_t; |
| |
| typedef struct virtio_gpu_resource_attach_backing { |
| virtio_gpu_ctrl_hdr_t hdr; |
| uint32_t resource_id; |
| uint32_t nr_entries; |
| } __PACKED virtio_gpu_resource_attach_backing_t; |
| |
| typedef struct virtio_gpu_mem_entry { |
| uint64_t addr; |
| uint32_t length; |
| uint32_t padding; |
| } __PACKED virtio_gpu_mem_entry_t; |
| |
| typedef struct virtio_gpu_resource_detach_backing { |
| virtio_gpu_ctrl_hdr_t hdr; |
| uint32_t resource_id; |
| uint32_t padding; |
| } __PACKED virtio_gpu_resource_detach_backing_t; |
| |
| typedef struct virtio_gpu_cursor_pos { |
| uint32_t scanout_id; |
| uint32_t x; |
| uint32_t y; |
| uint32_t padding; |
| } __PACKED virtio_gpu_cursor_pos_t; |
| |
| typedef struct virtio_gpu_update_cursor { |
| virtio_gpu_ctrl_hdr_t hdr; |
| virtio_gpu_cursor_pos_t pos; |
| uint32_t resource_id; |
| uint32_t hot_x; |
| uint32_t hot_y; |
| uint32_t padding; |
| } __PACKED virtio_gpu_update_cursor_t; |
| |
| __END_CDECLS |
| |
| #endif // VIRTIO_GPU_H_ |