#define VIRTIO_BLOCK_DEV_ID 0x1001
#define VIRTIO_BALLOON_DEV_ID 0x1002
#define VIRTIO_CONSOLE_DEV_ID 0x1003
+#define VIRTIO_SYMBIOTIC_DEV_ID 0x100a
+#define VIRTIO_NET_SUBDEVICE_ID 1
#define VIRTIO_BLOCK_SUBDEVICE_ID 2
-
+#define VIRTIO_BALLOON_SUBDEVICE_ID 5
+#define VIRTIO_SYMBIOTIC_SUBDEVICE_ID 10
#define HOST_FEATURES_PORT 0
#define VIRTIO_STATUS_PORT 18
#define VIRTIO_ISR_PORT 19
+#define VIRTIO_PAGE_SHIFT 12
+
+
+/* Descriptor flags */
+/* This marks a buffer as continuing via the next field. */
+#define VIRTIO_NEXT_FLAG 0x1
+/* This marks a buffer as write-only (otherwise read-only). */
+#define VIRTIO_WR_ONLY_FLAG 0x2
+
+
+/* Used Flags */
+/* This means don't notify other side when buffer added. */
+#define VRING_NO_NOTIFY_FLAG 0x1
+
+
+/* Avail Flags */
+/* This means don't interrupt guest when buffer consumed. */
+#define VIRTIO_NO_IRQ_FLAG 0x1
+
+
+/* ISR Flags */
+#define VIRTIO_ISR_ACTIVE 0x1
+#define VIRTIO_ISR_CFG_CHANGED 0x2
+
/* The virtio configuration space is a hybrid io/memory mapped model
+struct virtio_queue {
+ uint16_t queue_size;
+
+ uint16_t cur_avail_idx;
+
+ addr_t ring_desc_addr;
+ addr_t ring_avail_addr;
+ addr_t ring_used_addr;
+
+
+ struct vring_desc * desc; // We can treat this as an array...
+ struct vring_avail * avail;
+ struct vring_used * used;
+
+ uint32_t pfn;
+};
+
#endif