]>
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"
39 // VirtIo Device Specific Configuration Offsets
41 #define VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_PCI 20
42 #define VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_PCI_WITH_MSI_X 24
43 #define VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_MMIO 0x100
46 // PCI VirtIo Header Offsets
48 #define VIRTIO_PCI_OFFSET_DEVICE_FEATURES 0x00
49 #define VIRTIO_PCI_OFFSET_GUEST_FEATURES 0x04
50 #define VIRTIO_PCI_OFFSET_QUEUE_ADDRESS 0x08
51 #define VIRTIO_PCI_OFFSET_QUEUE_SIZE 0x0C
52 #define VIRTIO_PCI_OFFSET_QUEUE_SELECT 0x0E
53 #define VIRTIO_PCI_OFFSET_QUEUE_NOTIFY 0x10
54 #define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS 0x12
55 #define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_ISR 0x13
58 // MMIO VirtIo Header Offsets
60 #define VIRTIO_MMIO_OFFSET_MAGIC 0x00
61 #define VIRTIO_MMIO_OFFSET_VERSION 0x04
62 #define VIRTIO_MMIO_OFFSET_DEVICE_ID 0x08
63 #define VIRTIO_MMIO_OFFSET_VENDOR_ID 0x0C
64 #define VIRTIO_MMIO_OFFSET_HOST_FEATURES 0x10
65 #define VIRTIO_MMIO_OFFSET_HOST_FEATURES_SEL 0x14
66 #define VIRTIO_MMIO_OFFSET_GUEST_FEATURES 0x20
67 #define VIRTIO_MMIO_OFFSET_GUEST_FEATURES_SEL 0x24
68 #define VIRTIO_MMIO_OFFSET_GUEST_PAGE_SIZE 0x28
69 #define VIRTIO_MMIO_OFFSET_QUEUE_SEL 0x30
70 #define VIRTIO_MMIO_OFFSET_QUEUE_NUM_MAX 0x34
71 #define VIRTIO_MMIO_OFFSET_QUEUE_NUM 0x38
72 #define VIRTIO_MMIO_OFFSET_QUEUE_ALIGN 0x3C
73 #define VIRTIO_MMIO_OFFSET_QUEUE_PFN 0x40
74 #define VIRTIO_MMIO_OFFSET_QUEUE_NOTIFY 0x50
75 #define VIRTIO_MMIO_OFFSET_INTERRUPT_STATUS 0x60
76 #define VIRTIO_MMIO_OFFSET_INTERRUPT_ACK 0x64
77 #define VIRTIO_MMIO_OFFSET_STATUS 0x70
80 // Data in the communication area is defined as packed and accessed as
83 // Some structures contain arrays with dynamically determined size. In such
84 // cases the array and its sibling fields are replaced with pointers.
86 // All indices (variables and fields named *Idx) are free-running and wrap
87 // around after 0xFFFF. The queue size reported by the host is always an
88 // integral power of 2, not greater than 32768. Actual array indices are
89 // consistently calculated by taking the remainder of a given Idx object modulo
90 // QueueSize. Since 0x10000 is an integral multiple of the QueueSize, UINT16
91 // wraparound is a correct wraparound modulo QueueSize too (it doesn't offset
92 // the remainder class).
94 // virtio-0.9.5, 2.3.4 Available Ring
96 #define VRING_AVAIL_F_NO_INTERRUPT BIT0
99 volatile UINT16
*Flags
;
100 volatile UINT16
*Idx
;
102 volatile UINT16
*Ring
; // QueueSize elements
103 volatile UINT16
*UsedEvent
; // unused as per negotiation
107 // virtio-0.9.5, 2.3.5 Used Ring
109 #define VRING_USED_F_NO_NOTIFY BIT0
119 volatile UINT16
*Flags
;
120 volatile UINT16
*Idx
;
121 volatile VRING_USED_ELEM
*UsedElem
; // QueueSize elements
122 volatile UINT16
*AvailEvent
; // unused as per negotiation
126 // virtio-0.9.5, 2.3.2 Descriptor Table
128 #define VRING_DESC_F_NEXT BIT0 // more descriptors in this request
129 #define VRING_DESC_F_WRITE BIT1 // buffer to be written *by the host*
130 #define VRING_DESC_F_INDIRECT BIT2 // unused
143 VOID
*Base
; // deallocate only this field
144 volatile VRING_DESC
*Desc
; // QueueSize elements
151 // virtio-0.9.5, 2.2.2.1 Device Status
153 #define VSTAT_ACK BIT0
154 #define VSTAT_DRIVER BIT1
155 #define VSTAT_DRIVER_OK BIT2
156 #define VSTAT_FAILED BIT7
159 // virtio-0.9.5, Appendix B: Reserved (Device-Independent) Feature Bits
161 #define VIRTIO_F_NOTIFY_ON_EMPTY BIT24
162 #define VIRTIO_F_RING_INDIRECT_DESC BIT28
163 #define VIRTIO_F_RING_EVENT_IDX BIT29
165 #endif // _VIRTIO_0_9_5_H_