summaryrefslogtreecommitdiff
path: root/Kernel/Graphics/VirtIOGPU/Protocol.h
diff options
context:
space:
mode:
authorSahan Fernando <sahan.h.fernando@gmail.com>2021-07-07 23:51:33 +1000
committerAli Mohammad Pur <Ali.mpfard@gmail.com>2021-07-18 19:58:17 +0430
commit1c77f8067620dbc8eea24f8e6e80440eb09e31c5 (patch)
treec7135d995dc4441ee74f0cbad461bfad1efcc694 /Kernel/Graphics/VirtIOGPU/Protocol.h
parent215f383b126ebacdbaafef2268790016c696090d (diff)
downloadserenity-1c77f8067620dbc8eea24f8e6e80440eb09e31c5.zip
Kernel: Put VirtIOGPU related types into a namespace
Diffstat (limited to 'Kernel/Graphics/VirtIOGPU/Protocol.h')
-rw-r--r--Kernel/Graphics/VirtIOGPU/Protocol.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/Kernel/Graphics/VirtIOGPU/Protocol.h b/Kernel/Graphics/VirtIOGPU/Protocol.h
new file mode 100644
index 0000000000..8de89a7547
--- /dev/null
+++ b/Kernel/Graphics/VirtIOGPU/Protocol.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2021, Sahan Fernando <sahan.h.fernando@gmail.com>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#define VIRTIO_GPU_MAX_SCANOUTS 16
+
+namespace Kernel::Graphics::VirtIOGPU::Protocol {
+
+// Specification equivalent: enum virtio_gpu_ctrl_type
+enum class CommandType : u32 {
+ /* 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,
+ VIRTIO_GPU_CMD_GET_CAPSET_INFO,
+ VIRTIO_GPU_CMD_GET_CAPSET,
+ VIRTIO_GPU_CMD_GET_EDID,
+
+ /* 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,
+ VIRTIO_GPU_RESP_OK_CAPSET_INFO,
+ VIRTIO_GPU_RESP_OK_CAPSET,
+ VIRTIO_GPU_RESP_OK_EDID,
+
+ /* 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,
+};
+
+// Specification equivalent: struct virtio_gpu_ctrl_hdr
+struct ControlHeader {
+ u32 type;
+ u32 flags;
+ u64 fence_id;
+ u32 context_id;
+ u32 padding;
+};
+
+// Specification equivalent: struct virtio_gpu_rect
+struct Rect {
+ u32 x;
+ u32 y;
+ u32 width;
+ u32 height;
+};
+
+// Specification equivalent: struct virtio_gpu_resp_display_info
+struct DisplayInfoResponse {
+ ControlHeader header;
+ // Specification equivalent: struct virtio_gpu_display_one
+ struct Display {
+ Rect rect;
+ u32 enabled;
+ u32 flags;
+ } scanout_modes[VIRTIO_GPU_MAX_SCANOUTS];
+};
+
+// Specification equivalent: enum virtio_gpu_formats
+enum class TextureFormat : u32 {
+ 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,
+};
+
+// Specification equivalent: struct virtio_gpu_resource_create_2d
+struct ResourceCreate2D {
+ ControlHeader header;
+ u32 resource_id;
+ u32 format;
+ u32 width;
+ u32 height;
+};
+
+// Specification equivalent: struct virtio_gpu_resource_unref
+struct ResourceUnref {
+ ControlHeader header;
+ u32 resource_id;
+ u32 padding;
+};
+
+// Specification equivalent: struct virtio_gpu_set_scanout
+struct SetScanOut {
+ ControlHeader header;
+ Rect rect;
+ u32 scanout_id;
+ u32 resource_id;
+};
+
+// Specification equivalent: struct virtio_gpu_mem_entry
+struct MemoryEntry {
+ u64 address;
+ u32 length;
+ u32 padding;
+};
+
+// Specification equivalent: struct virtio_gpu_resource_attach_backing
+struct ResourceAttachBacking {
+ ControlHeader header;
+ u32 resource_id;
+ u32 num_entries;
+ MemoryEntry entries[];
+};
+
+// Specification equivalent: struct virtio_gpu_resource_detach_backing
+struct ResourceDetachBacking {
+ ControlHeader header;
+ u32 resource_id;
+ u32 padding;
+};
+
+// Specification equivalent: struct virtio_gpu_transfer_to_host_2d
+struct TransferToHost2D {
+ ControlHeader header;
+ Rect rect;
+ u64 offset;
+ u32 resource_id;
+ u32 padding;
+};
+
+// Specification equivalent: struct virtio_gpu_resource_flush
+struct ResourceFlush {
+ ControlHeader header;
+ Rect rect;
+ u32 resource_id;
+ u32 padding;
+};
+
+}