Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
virtio-gpu.hpp
Go to the documentation of this file.
1#ifndef __USB_HID__HID_HPP__
2#define __USB_HID__HID_HPP__
7class VirtioGpu : public IoForgeVirtio {
8 public:
10 void load() override;
11 void unload() override;
14 protected:
15 void setup();
17 int virtio_gpu_send_command(void* cmd, uint32_t cmd_size, void* resp,
18 uint32_t resp_size);
22
23 private:
25 void virtq_free_desc(struct virtio_gpu_queue* vq, uint16_t desc_idx);
26 void virtq_init(struct virtio_gpu_queue* vq, void* vq_mem,
28 int virtq_add_buf(struct virtio_gpu_queue* vq, void** buffers,
29 uint32_t* lengths, uint16_t num_out, uint16_t num_in,
30 uint16_t* head_out);
31 void virtq_kick(uint16_t queue_index);
33 uint32_t* len);
34
39
40 static void fireHandler();
41
42 static struct virtio_gpu_queue control_queue_;
43};
44
45// VirtIO GPU Command Types
46#define VIRTIO_GPU_CMD_GET_DISPLAY_INFO 0x0100
47#define VIRTIO_GPU_CMD_RESOURCE_CREATE_2D 0x0101
48#define VIRTIO_GPU_CMD_RESOURCE_UNREF 0x0102
49#define VIRTIO_GPU_CMD_SET_SCANOUT 0x0103
50#define VIRTIO_GPU_CMD_RESOURCE_FLUSH 0x0104
51#define VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D 0x0105
52#define VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING 0x0106
53#define VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING 0x0107
54
55// Response Types
56#define VIRTIO_GPU_RESP_OK_NODATA 0x1100
57#define VIRTIO_GPU_RESP_OK_DISPLAY_INFO 0x1101
58
59// Formats
60#define VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM 1
61#define VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM 2
62#define VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM 3
63
64// VirtIO Device Status bits
65#define VIRTIO_STATUS_ACKNOWLEDGE (1 << 0)
66#define VIRTIO_STATUS_DRIVER (1 << 1)
67#define VIRTIO_STATUS_DRIVER_OK (1 << 2)
68#define VIRTIO_STATUS_FEATURES_OK (1 << 3)
69#define VIRTIO_STATUS_DEVICE_NEEDS_RESET (1 << 6)
70#define VIRTIO_STATUS_FAILED (1 << 7)
71
72// Descriptor Flags
73#define VIRTQ_DESC_F_NEXT (1 << 0)
74#define VIRTQ_DESC_F_WRITE (1 << 1)
75#define VIRTQ_DESC_F_INDIRECT (1 << 2)
76
77// ISR Status bits
78#define VIRTIO_ISR_QUEUE_INT (1 << 0)
79#define VIRTIO_ISR_DEV_CFG_INT (1 << 1)
80
81// ---------------- VirtIO PCI Common Config (BAR0) ----------------
101
102// ---------------- Virtqueue Structures ----------------
103#define VIRTIO_GPU_QUEUE_SIZE 64
104#define VIRTIO_GPU_QUEUE_ALIGN 4096
105
112
119
124
131
142
143// ---------------- VirtIO GPU Structures ----------------
151
158
167
175
181
187
194
202
209
210// Driver state
221
222#endif //__USB_HID__HID_HPP__
IoForgeVirtio(const char *mod)
void load() override
Definition init.cpp:18
void setup()
ioforge_virtio_device * dev_
uintptr_t notify_base_
static VirtioGpu * getInstance()
Definition init.cpp:11
uint32_t notify_multiplier_
int virtq_get_used_elem(struct virtio_gpu_queue *vq, uint16_t *id, uint32_t *len)
int virtio_gpu_get_display_info()
Definition ops.cpp:5
int virtio_gpu_create_resource(uint32_t resource_id, uint32_t width, uint32_t height)
Definition ops.cpp:57
void virtq_free_desc(struct virtio_gpu_queue *vq, uint16_t desc_idx)
uint16_t virtq_alloc_desc(struct virtio_gpu_queue *vq)
VirtioGpu()
Definition init.cpp:8
static struct virtio_gpu_queue control_queue_
void virtq_init(struct virtio_gpu_queue *vq, void *vq_mem, uint16_t queue_size, uintptr_t phys_addr)
static void fireHandler()
void virtq_kick(uint16_t queue_index)
int virtq_add_buf(struct virtio_gpu_queue *vq, void **buffers, uint32_t *lengths, uint16_t num_out, uint16_t num_in, uint16_t *head_out)
bool initialized_
int virtio_gpu_send_command(void *cmd, uint32_t cmd_size, void *resp, uint32_t resp_size)
uintptr_t notify_offset_
void unload() override
Definition init.cpp:15
volatile uint8_t cmd
Definition e1000.hpp:3
uintptr_t phys_addr
Definition slab.h:6
uintptr_t notify_multiplier
struct virtio_pci_common_cfg * common_cfg
uintptr_t notify_offset
volatile uint32_t * notify_base
struct virtio_gpu_queue controlq
volatile uint8_t * isr
uint32_t padding
uint32_t length
uint64_t addr
uint16_t last_used_idx
struct virtq_desc * desc
struct virtq_avail * avail
struct virtq_used * used
uintptr_t phys_addr
struct virtio_gpu_ctrl_hdr hdr
struct virtio_gpu_ctrl_hdr hdr
struct virtio_gpu_rect rect
struct virtio_gpu_ctrl_hdr hdr
struct virtio_gpu_ctrl_hdr hdr
struct virtio_gpu_rect rect
struct virtio_gpu_ctrl_hdr hdr
struct virtio_gpu_rect rect
struct virtio_gpu_ctrl_hdr hdr
uint32_t driver_feature_select
uint32_t device_feature_select
uint16_t ring[64]
uint16_t used_event
uint16_t idx
uint16_t flags
uint64_t addr
uint32_t len
uint16_t next
uint16_t flags
struct virtq_used_elem ring[64]
uint16_t flags
uint16_t avail_event
uint16_t idx
unsigned short uint16_t
Definition type.h:13
unsigned int uint32_t
Definition type.h:19
unsigned long uintptr_t
Definition type.h:73
unsigned long uint64_t
Definition type.h:25
unsigned char uint8_t
Definition type.h:7
struct virtio_gpu_display_one pmodes[16]
uint32_t width
Definition virtio-gpu.hpp:2
uint32_t height
Definition virtio-gpu.hpp:3
#define VIRTIO_GPU_QUEUE_SIZE
struct virtio_gpu_queue __attribute__
uint32_t len
Definition virtio-gpu.hpp:1
uint16_t queue_size
uint32_t resource_id
Definition virtio-gpu.hpp:1