]>
git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/Include/IndustryStandard/Virtio095.h
3 Generic type and macro definitions corresponding to the virtio-0.9.5
6 Copyright (C) 2012-2016, Red Hat, Inc.
7 Portion of Copyright (C) 2013, ARM Ltd.
9 SPDX-License-Identifier: BSD-2-Clause-Patent
13 #ifndef _VIRTIO_0_9_5_H_
14 #define _VIRTIO_0_9_5_H_
19 // VirtIo Subsystem Device IDs
21 #define VIRTIO_SUBSYSTEM_NETWORK_CARD 1
22 #define VIRTIO_SUBSYSTEM_BLOCK_DEVICE 2
23 #define VIRTIO_SUBSYSTEM_CONSOLE 3
24 #define VIRTIO_SUBSYSTEM_ENTROPY_SOURCE 4
25 #define VIRTIO_SUBSYSTEM_MEMORY_BALLOONING 5
26 #define VIRTIO_SUBSYSTEM_IO_MEMORY 6
27 #define VIRTIO_SUBSYSTEM_RPMSG 7
28 #define VIRTIO_SUBSYSTEM_SCSI_HOST 8
29 #define VIRTIO_SUBSYSTEM_9P_TRANSPORT 9
30 #define VIRTIO_SUBSYSTEM_MAC80211_WLAN 10
35 #define VIRTIO_VENDOR_ID 0x1AF4
36 #define VIRTIO_MMIO_MAGIC 0x74726976 // "virt"
40 // VirtIo Device Specific Configuration Offsets
42 #define VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_PCI 20
43 #define VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_PCI_WITH_MSI_X 24
44 #define VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_MMIO 0x100
47 // PCI VirtIo Header Offsets
49 #define VIRTIO_PCI_OFFSET_DEVICE_FEATURES 0x00
50 #define VIRTIO_PCI_OFFSET_GUEST_FEATURES 0x04
51 #define VIRTIO_PCI_OFFSET_QUEUE_ADDRESS 0x08
52 #define VIRTIO_PCI_OFFSET_QUEUE_SIZE 0x0C
53 #define VIRTIO_PCI_OFFSET_QUEUE_SELECT 0x0E
54 #define VIRTIO_PCI_OFFSET_QUEUE_NOTIFY 0x10
55 #define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS 0x12
56 #define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_ISR 0x13
59 // MMIO VirtIo Header Offsets
61 #define VIRTIO_MMIO_OFFSET_MAGIC 0x00
62 #define VIRTIO_MMIO_OFFSET_VERSION 0x04
63 #define VIRTIO_MMIO_OFFSET_DEVICE_ID 0x08
64 #define VIRTIO_MMIO_OFFSET_VENDOR_ID 0x0C
65 #define VIRTIO_MMIO_OFFSET_HOST_FEATURES 0x10
66 #define VIRTIO_MMIO_OFFSET_HOST_FEATURES_SEL 0x14
67 #define VIRTIO_MMIO_OFFSET_GUEST_FEATURES 0x20
68 #define VIRTIO_MMIO_OFFSET_GUEST_FEATURES_SEL 0x24
69 #define VIRTIO_MMIO_OFFSET_GUEST_PAGE_SIZE 0x28
70 #define VIRTIO_MMIO_OFFSET_QUEUE_SEL 0x30
71 #define VIRTIO_MMIO_OFFSET_QUEUE_NUM_MAX 0x34
72 #define VIRTIO_MMIO_OFFSET_QUEUE_NUM 0x38
73 #define VIRTIO_MMIO_OFFSET_QUEUE_ALIGN 0x3C
74 #define VIRTIO_MMIO_OFFSET_QUEUE_PFN 0x40
75 #define VIRTIO_MMIO_OFFSET_QUEUE_NOTIFY 0x50
76 #define VIRTIO_MMIO_OFFSET_INTERRUPT_STATUS 0x60
77 #define VIRTIO_MMIO_OFFSET_INTERRUPT_ACK 0x64
78 #define VIRTIO_MMIO_OFFSET_STATUS 0x70
81 // Data in the communication area is defined as packed and accessed as
84 // Some structures contain arrays with dynamically determined size. In such
85 // cases the array and its sibling fields are replaced with pointers.
87 // All indices (variables and fields named *Idx) are free-running and wrap
88 // around after 0xFFFF. The queue size reported by the host is always an
89 // integral power of 2, not greater than 32768. Actual array indices are
90 // consistently calculated by taking the remainder of a given Idx object modulo
91 // QueueSize. Since 0x10000 is an integral multiple of the QueueSize, UINT16
92 // wraparound is a correct wraparound modulo QueueSize too (it doesn't offset
93 // the remainder class).
95 // virtio-0.9.5, 2.3.4 Available Ring
97 #define VRING_AVAIL_F_NO_INTERRUPT BIT0
100 volatile UINT16
*Flags
;
101 volatile UINT16
*Idx
;
103 volatile UINT16
*Ring
; // QueueSize elements
104 volatile UINT16
*UsedEvent
; // unused as per negotiation
109 // virtio-0.9.5, 2.3.5 Used Ring
111 #define VRING_USED_F_NO_NOTIFY BIT0
121 volatile UINT16
*Flags
;
122 volatile UINT16
*Idx
;
123 volatile VRING_USED_ELEM
*UsedElem
; // QueueSize elements
124 volatile UINT16
*AvailEvent
; // unused as per negotiation
129 // virtio-0.9.5, 2.3.2 Descriptor Table
131 #define VRING_DESC_F_NEXT BIT0 // more descriptors in this request
132 #define VRING_DESC_F_WRITE BIT1 // buffer to be written *by the host*
133 #define VRING_DESC_F_INDIRECT BIT2 // unused
146 VOID
*Base
; // deallocate only this field
147 volatile VRING_DESC
*Desc
; // QueueSize elements
154 // virtio-0.9.5, 2.2.2.1 Device Status
156 #define VSTAT_ACK BIT0
157 #define VSTAT_DRIVER BIT1
158 #define VSTAT_DRIVER_OK BIT2
159 #define VSTAT_FAILED BIT7
162 // virtio-0.9.5, Appendix B: Reserved (Device-Independent) Feature Bits
164 #define VIRTIO_F_NOTIFY_ON_EMPTY BIT24
165 #define VIRTIO_F_RING_INDIRECT_DESC BIT28
166 #define VIRTIO_F_RING_EVENT_IDX BIT29
169 #endif // _VIRTIO_0_9_5_H_