diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-18 12:24:01 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-18 12:24:01 -0500 |
| commit | 53861af9a17022898619a2ae4ead0dfc601b7c13 (patch) | |
| tree | dc11088d9e86fa1d8d8479974864153a8f976897 /include/uapi/linux | |
| parent | 5c2770079fb9b8c5bfb7113d9e76de66e77a0e24 (diff) | |
| parent | 5b40a7daf51812b35cf05d1601a779a7043f8414 (diff) | |
Merge tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux
Pull virtio updates from Rusty Russell:
"OK, this has the big virtio 1.0 implementation, as specified by OASIS.
On top of tht is the major rework of lguest, to use PCI and virtio
1.0, to double-check the implementation.
Then comes the inevitable fixes and cleanups from that work"
* tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux: (80 commits)
virtio: don't set VIRTIO_CONFIG_S_DRIVER_OK twice.
virtio_net: unconditionally define struct virtio_net_hdr_v1.
tools/lguest: don't use legacy definitions for net device in example launcher.
virtio: Don't expose legacy net features when VIRTIO_NET_NO_LEGACY defined.
tools/lguest: use common error macros in the example launcher.
tools/lguest: give virtqueues names for better error messages
tools/lguest: more documentation and checking of virtio 1.0 compliance.
lguest: don't look in console features to find emerg_wr.
tools/lguest: don't start devices until DRIVER_OK status set.
tools/lguest: handle indirect partway through chain.
tools/lguest: insert driver references from the 1.0 spec (4.1 Virtio Over PCI)
tools/lguest: insert device references from the 1.0 spec (4.1 Virtio Over PCI)
tools/lguest: rename virtio_pci_cfg_cap field to match spec.
tools/lguest: fix features_accepted logic in example launcher.
tools/lguest: handle device reset correctly in example launcher.
virtual: Documentation: simplify and generalize paravirt_ops.txt
lguest: remove NOTIFY call and eventfd facility.
lguest: remove NOTIFY facility from demonstration launcher.
lguest: use the PCI console device's emerg_wr for early boot messages.
lguest: always put console in PCI slot #1.
...
Diffstat (limited to 'include/uapi/linux')
| -rw-r--r-- | include/uapi/linux/virtio_balloon.h | 3 | ||||
| -rw-r--r-- | include/uapi/linux/virtio_blk.h | 17 | ||||
| -rw-r--r-- | include/uapi/linux/virtio_config.h | 2 | ||||
| -rw-r--r-- | include/uapi/linux/virtio_net.h | 42 | ||||
| -rw-r--r-- | include/uapi/linux/virtio_pci.h | 93 |
5 files changed, 141 insertions, 16 deletions
diff --git a/include/uapi/linux/virtio_balloon.h b/include/uapi/linux/virtio_balloon.h index be40f7059e93..4b0488f20b2e 100644 --- a/include/uapi/linux/virtio_balloon.h +++ b/include/uapi/linux/virtio_balloon.h | |||
| @@ -36,8 +36,7 @@ | |||
| 36 | /* Size of a PFN in the balloon interface. */ | 36 | /* Size of a PFN in the balloon interface. */ |
| 37 | #define VIRTIO_BALLOON_PFN_SHIFT 12 | 37 | #define VIRTIO_BALLOON_PFN_SHIFT 12 |
| 38 | 38 | ||
| 39 | struct virtio_balloon_config | 39 | struct virtio_balloon_config { |
| 40 | { | ||
| 41 | /* Number of pages host wants Guest to give up. */ | 40 | /* Number of pages host wants Guest to give up. */ |
| 42 | __le32 num_pages; | 41 | __le32 num_pages; |
| 43 | /* Number of pages we've actually got in balloon. */ | 42 | /* Number of pages we've actually got in balloon. */ |
diff --git a/include/uapi/linux/virtio_blk.h b/include/uapi/linux/virtio_blk.h index 247c8ba8544a..3c53eec4ae22 100644 --- a/include/uapi/linux/virtio_blk.h +++ b/include/uapi/linux/virtio_blk.h | |||
| @@ -31,22 +31,25 @@ | |||
| 31 | #include <linux/virtio_types.h> | 31 | #include <linux/virtio_types.h> |
| 32 | 32 | ||
| 33 | /* Feature bits */ | 33 | /* Feature bits */ |
| 34 | #define VIRTIO_BLK_F_BARRIER 0 /* Does host support barriers? */ | ||
| 35 | #define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */ | 34 | #define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */ |
| 36 | #define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */ | 35 | #define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */ |
| 37 | #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ | 36 | #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ |
| 38 | #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ | 37 | #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ |
| 39 | #define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/ | 38 | #define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/ |
| 40 | #define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */ | ||
| 41 | #define VIRTIO_BLK_F_WCE 9 /* Writeback mode enabled after reset */ | ||
| 42 | #define VIRTIO_BLK_F_TOPOLOGY 10 /* Topology information is available */ | 39 | #define VIRTIO_BLK_F_TOPOLOGY 10 /* Topology information is available */ |
| 43 | #define VIRTIO_BLK_F_CONFIG_WCE 11 /* Writeback mode available in config */ | ||
| 44 | #define VIRTIO_BLK_F_MQ 12 /* support more than one vq */ | 40 | #define VIRTIO_BLK_F_MQ 12 /* support more than one vq */ |
| 45 | 41 | ||
| 42 | /* Legacy feature bits */ | ||
| 43 | #ifndef VIRTIO_BLK_NO_LEGACY | ||
| 44 | #define VIRTIO_BLK_F_BARRIER 0 /* Does host support barriers? */ | ||
| 45 | #define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */ | ||
| 46 | #define VIRTIO_BLK_F_WCE 9 /* Writeback mode enabled after reset */ | ||
| 47 | #define VIRTIO_BLK_F_CONFIG_WCE 11 /* Writeback mode available in config */ | ||
| 46 | #ifndef __KERNEL__ | 48 | #ifndef __KERNEL__ |
| 47 | /* Old (deprecated) name for VIRTIO_BLK_F_WCE. */ | 49 | /* Old (deprecated) name for VIRTIO_BLK_F_WCE. */ |
| 48 | #define VIRTIO_BLK_F_FLUSH VIRTIO_BLK_F_WCE | 50 | #define VIRTIO_BLK_F_FLUSH VIRTIO_BLK_F_WCE |
| 49 | #endif | 51 | #endif |
| 52 | #endif /* !VIRTIO_BLK_NO_LEGACY */ | ||
| 50 | 53 | ||
| 51 | #define VIRTIO_BLK_ID_BYTES 20 /* ID string length */ | 54 | #define VIRTIO_BLK_ID_BYTES 20 /* ID string length */ |
| 52 | 55 | ||
| @@ -100,8 +103,10 @@ struct virtio_blk_config { | |||
| 100 | #define VIRTIO_BLK_T_IN 0 | 103 | #define VIRTIO_BLK_T_IN 0 |
| 101 | #define VIRTIO_BLK_T_OUT 1 | 104 | #define VIRTIO_BLK_T_OUT 1 |
| 102 | 105 | ||
| 106 | #ifndef VIRTIO_BLK_NO_LEGACY | ||
| 103 | /* This bit says it's a scsi command, not an actual read or write. */ | 107 | /* This bit says it's a scsi command, not an actual read or write. */ |
| 104 | #define VIRTIO_BLK_T_SCSI_CMD 2 | 108 | #define VIRTIO_BLK_T_SCSI_CMD 2 |
| 109 | #endif /* VIRTIO_BLK_NO_LEGACY */ | ||
| 105 | 110 | ||
| 106 | /* Cache flush command */ | 111 | /* Cache flush command */ |
| 107 | #define VIRTIO_BLK_T_FLUSH 4 | 112 | #define VIRTIO_BLK_T_FLUSH 4 |
| @@ -109,8 +114,10 @@ struct virtio_blk_config { | |||
| 109 | /* Get device ID command */ | 114 | /* Get device ID command */ |
| 110 | #define VIRTIO_BLK_T_GET_ID 8 | 115 | #define VIRTIO_BLK_T_GET_ID 8 |
| 111 | 116 | ||
| 117 | #ifndef VIRTIO_BLK_NO_LEGACY | ||
| 112 | /* Barrier before this op. */ | 118 | /* Barrier before this op. */ |
| 113 | #define VIRTIO_BLK_T_BARRIER 0x80000000 | 119 | #define VIRTIO_BLK_T_BARRIER 0x80000000 |
| 120 | #endif /* !VIRTIO_BLK_NO_LEGACY */ | ||
| 114 | 121 | ||
| 115 | /* This is the first element of the read scatter-gather list. */ | 122 | /* This is the first element of the read scatter-gather list. */ |
| 116 | struct virtio_blk_outhdr { | 123 | struct virtio_blk_outhdr { |
| @@ -122,12 +129,14 @@ struct virtio_blk_outhdr { | |||
| 122 | __virtio64 sector; | 129 | __virtio64 sector; |
| 123 | }; | 130 | }; |
| 124 | 131 | ||
| 132 | #ifndef VIRTIO_BLK_NO_LEGACY | ||
| 125 | struct virtio_scsi_inhdr { | 133 | struct virtio_scsi_inhdr { |
| 126 | __virtio32 errors; | 134 | __virtio32 errors; |
| 127 | __virtio32 data_len; | 135 | __virtio32 data_len; |
| 128 | __virtio32 sense_len; | 136 | __virtio32 sense_len; |
| 129 | __virtio32 residual; | 137 | __virtio32 residual; |
| 130 | }; | 138 | }; |
| 139 | #endif /* !VIRTIO_BLK_NO_LEGACY */ | ||
| 131 | 140 | ||
| 132 | /* And this is the final byte of the write scatter-gather list. */ | 141 | /* And this is the final byte of the write scatter-gather list. */ |
| 133 | #define VIRTIO_BLK_S_OK 0 | 142 | #define VIRTIO_BLK_S_OK 0 |
diff --git a/include/uapi/linux/virtio_config.h b/include/uapi/linux/virtio_config.h index a6d0cdeaacd4..c18264df9504 100644 --- a/include/uapi/linux/virtio_config.h +++ b/include/uapi/linux/virtio_config.h | |||
| @@ -49,12 +49,14 @@ | |||
| 49 | #define VIRTIO_TRANSPORT_F_START 28 | 49 | #define VIRTIO_TRANSPORT_F_START 28 |
| 50 | #define VIRTIO_TRANSPORT_F_END 33 | 50 | #define VIRTIO_TRANSPORT_F_END 33 |
| 51 | 51 | ||
| 52 | #ifndef VIRTIO_CONFIG_NO_LEGACY | ||
| 52 | /* Do we get callbacks when the ring is completely used, even if we've | 53 | /* Do we get callbacks when the ring is completely used, even if we've |
| 53 | * suppressed them? */ | 54 | * suppressed them? */ |
| 54 | #define VIRTIO_F_NOTIFY_ON_EMPTY 24 | 55 | #define VIRTIO_F_NOTIFY_ON_EMPTY 24 |
| 55 | 56 | ||
| 56 | /* Can the device handle any descriptor layout? */ | 57 | /* Can the device handle any descriptor layout? */ |
| 57 | #define VIRTIO_F_ANY_LAYOUT 27 | 58 | #define VIRTIO_F_ANY_LAYOUT 27 |
| 59 | #endif /* VIRTIO_CONFIG_NO_LEGACY */ | ||
| 58 | 60 | ||
| 59 | /* v1.0 compliant. */ | 61 | /* v1.0 compliant. */ |
| 60 | #define VIRTIO_F_VERSION_1 32 | 62 | #define VIRTIO_F_VERSION_1 32 |
diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h index b5f1677b291c..7bbee79ca293 100644 --- a/include/uapi/linux/virtio_net.h +++ b/include/uapi/linux/virtio_net.h | |||
| @@ -35,7 +35,6 @@ | |||
| 35 | #define VIRTIO_NET_F_CSUM 0 /* Host handles pkts w/ partial csum */ | 35 | #define VIRTIO_NET_F_CSUM 0 /* Host handles pkts w/ partial csum */ |
| 36 | #define VIRTIO_NET_F_GUEST_CSUM 1 /* Guest handles pkts w/ partial csum */ | 36 | #define VIRTIO_NET_F_GUEST_CSUM 1 /* Guest handles pkts w/ partial csum */ |
| 37 | #define VIRTIO_NET_F_MAC 5 /* Host has given MAC address. */ | 37 | #define VIRTIO_NET_F_MAC 5 /* Host has given MAC address. */ |
| 38 | #define VIRTIO_NET_F_GSO 6 /* Host handles pkts w/ any GSO type */ | ||
| 39 | #define VIRTIO_NET_F_GUEST_TSO4 7 /* Guest can handle TSOv4 in. */ | 38 | #define VIRTIO_NET_F_GUEST_TSO4 7 /* Guest can handle TSOv4 in. */ |
| 40 | #define VIRTIO_NET_F_GUEST_TSO6 8 /* Guest can handle TSOv6 in. */ | 39 | #define VIRTIO_NET_F_GUEST_TSO6 8 /* Guest can handle TSOv6 in. */ |
| 41 | #define VIRTIO_NET_F_GUEST_ECN 9 /* Guest can handle TSO[6] w/ ECN in. */ | 40 | #define VIRTIO_NET_F_GUEST_ECN 9 /* Guest can handle TSO[6] w/ ECN in. */ |
| @@ -56,6 +55,10 @@ | |||
| 56 | * Steering */ | 55 | * Steering */ |
| 57 | #define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */ | 56 | #define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */ |
| 58 | 57 | ||
| 58 | #ifndef VIRTIO_NET_NO_LEGACY | ||
| 59 | #define VIRTIO_NET_F_GSO 6 /* Host handles pkts w/ any GSO type */ | ||
| 60 | #endif /* VIRTIO_NET_NO_LEGACY */ | ||
| 61 | |||
| 59 | #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ | 62 | #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ |
| 60 | #define VIRTIO_NET_S_ANNOUNCE 2 /* Announcement is needed */ | 63 | #define VIRTIO_NET_S_ANNOUNCE 2 /* Announcement is needed */ |
| 61 | 64 | ||
| @@ -71,19 +74,39 @@ struct virtio_net_config { | |||
| 71 | __u16 max_virtqueue_pairs; | 74 | __u16 max_virtqueue_pairs; |
| 72 | } __attribute__((packed)); | 75 | } __attribute__((packed)); |
| 73 | 76 | ||
| 77 | /* | ||
| 78 | * This header comes first in the scatter-gather list. If you don't | ||
| 79 | * specify GSO or CSUM features, you can simply ignore the header. | ||
| 80 | * | ||
| 81 | * This is bitwise-equivalent to the legacy struct virtio_net_hdr_mrg_rxbuf, | ||
| 82 | * only flattened. | ||
| 83 | */ | ||
| 84 | struct virtio_net_hdr_v1 { | ||
| 85 | #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 /* Use csum_start, csum_offset */ | ||
| 86 | #define VIRTIO_NET_HDR_F_DATA_VALID 2 /* Csum is valid */ | ||
| 87 | __u8 flags; | ||
| 88 | #define VIRTIO_NET_HDR_GSO_NONE 0 /* Not a GSO frame */ | ||
| 89 | #define VIRTIO_NET_HDR_GSO_TCPV4 1 /* GSO frame, IPv4 TCP (TSO) */ | ||
| 90 | #define VIRTIO_NET_HDR_GSO_UDP 3 /* GSO frame, IPv4 UDP (UFO) */ | ||
| 91 | #define VIRTIO_NET_HDR_GSO_TCPV6 4 /* GSO frame, IPv6 TCP */ | ||
| 92 | #define VIRTIO_NET_HDR_GSO_ECN 0x80 /* TCP has ECN set */ | ||
| 93 | __u8 gso_type; | ||
| 94 | __virtio16 hdr_len; /* Ethernet + IP + tcp/udp hdrs */ | ||
| 95 | __virtio16 gso_size; /* Bytes to append to hdr_len per frame */ | ||
| 96 | __virtio16 csum_start; /* Position to start checksumming from */ | ||
| 97 | __virtio16 csum_offset; /* Offset after that to place checksum */ | ||
| 98 | __virtio16 num_buffers; /* Number of merged rx buffers */ | ||
| 99 | }; | ||
| 100 | |||
| 101 | #ifndef VIRTIO_NET_NO_LEGACY | ||
| 74 | /* This header comes first in the scatter-gather list. | 102 | /* This header comes first in the scatter-gather list. |
| 75 | * If VIRTIO_F_ANY_LAYOUT is not negotiated, it must | 103 | * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, it must |
| 76 | * be the first element of the scatter-gather list. If you don't | 104 | * be the first element of the scatter-gather list. If you don't |
| 77 | * specify GSO or CSUM features, you can simply ignore the header. */ | 105 | * specify GSO or CSUM features, you can simply ignore the header. */ |
| 78 | struct virtio_net_hdr { | 106 | struct virtio_net_hdr { |
| 79 | #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 // Use csum_start, csum_offset | 107 | /* See VIRTIO_NET_HDR_F_* */ |
| 80 | #define VIRTIO_NET_HDR_F_DATA_VALID 2 // Csum is valid | ||
| 81 | __u8 flags; | 108 | __u8 flags; |
| 82 | #define VIRTIO_NET_HDR_GSO_NONE 0 // Not a GSO frame | 109 | /* See VIRTIO_NET_HDR_GSO_* */ |
| 83 | #define VIRTIO_NET_HDR_GSO_TCPV4 1 // GSO frame, IPv4 TCP (TSO) | ||
| 84 | #define VIRTIO_NET_HDR_GSO_UDP 3 // GSO frame, IPv4 UDP (UFO) | ||
| 85 | #define VIRTIO_NET_HDR_GSO_TCPV6 4 // GSO frame, IPv6 TCP | ||
| 86 | #define VIRTIO_NET_HDR_GSO_ECN 0x80 // TCP has ECN set | ||
| 87 | __u8 gso_type; | 110 | __u8 gso_type; |
| 88 | __virtio16 hdr_len; /* Ethernet + IP + tcp/udp hdrs */ | 111 | __virtio16 hdr_len; /* Ethernet + IP + tcp/udp hdrs */ |
| 89 | __virtio16 gso_size; /* Bytes to append to hdr_len per frame */ | 112 | __virtio16 gso_size; /* Bytes to append to hdr_len per frame */ |
| @@ -97,6 +120,7 @@ struct virtio_net_hdr_mrg_rxbuf { | |||
| 97 | struct virtio_net_hdr hdr; | 120 | struct virtio_net_hdr hdr; |
| 98 | __virtio16 num_buffers; /* Number of merged rx buffers */ | 121 | __virtio16 num_buffers; /* Number of merged rx buffers */ |
| 99 | }; | 122 | }; |
| 123 | #endif /* ...VIRTIO_NET_NO_LEGACY */ | ||
| 100 | 124 | ||
| 101 | /* | 125 | /* |
| 102 | * Control virtqueue data structures | 126 | * Control virtqueue data structures |
diff --git a/include/uapi/linux/virtio_pci.h b/include/uapi/linux/virtio_pci.h index 35b552c7f330..75301468359f 100644 --- a/include/uapi/linux/virtio_pci.h +++ b/include/uapi/linux/virtio_pci.h | |||
| @@ -39,7 +39,7 @@ | |||
| 39 | #ifndef _LINUX_VIRTIO_PCI_H | 39 | #ifndef _LINUX_VIRTIO_PCI_H |
| 40 | #define _LINUX_VIRTIO_PCI_H | 40 | #define _LINUX_VIRTIO_PCI_H |
| 41 | 41 | ||
| 42 | #include <linux/virtio_config.h> | 42 | #include <linux/types.h> |
| 43 | 43 | ||
| 44 | #ifndef VIRTIO_PCI_NO_LEGACY | 44 | #ifndef VIRTIO_PCI_NO_LEGACY |
| 45 | 45 | ||
| @@ -99,4 +99,95 @@ | |||
| 99 | /* Vector value used to disable MSI for queue */ | 99 | /* Vector value used to disable MSI for queue */ |
| 100 | #define VIRTIO_MSI_NO_VECTOR 0xffff | 100 | #define VIRTIO_MSI_NO_VECTOR 0xffff |
| 101 | 101 | ||
| 102 | #ifndef VIRTIO_PCI_NO_MODERN | ||
| 103 | |||
| 104 | /* IDs for different capabilities. Must all exist. */ | ||
| 105 | |||
| 106 | /* Common configuration */ | ||
| 107 | #define VIRTIO_PCI_CAP_COMMON_CFG 1 | ||
| 108 | /* Notifications */ | ||
| 109 | #define VIRTIO_PCI_CAP_NOTIFY_CFG 2 | ||
| 110 | /* ISR access */ | ||
| 111 | #define VIRTIO_PCI_CAP_ISR_CFG 3 | ||
| 112 | /* Device specific configuration */ | ||
| 113 | #define VIRTIO_PCI_CAP_DEVICE_CFG 4 | ||
| 114 | /* PCI configuration access */ | ||
| 115 | #define VIRTIO_PCI_CAP_PCI_CFG 5 | ||
| 116 | |||
| 117 | /* This is the PCI capability header: */ | ||
| 118 | struct virtio_pci_cap { | ||
| 119 | __u8 cap_vndr; /* Generic PCI field: PCI_CAP_ID_VNDR */ | ||
| 120 | __u8 cap_next; /* Generic PCI field: next ptr. */ | ||
| 121 | __u8 cap_len; /* Generic PCI field: capability length */ | ||
| 122 | __u8 cfg_type; /* Identifies the structure. */ | ||
| 123 | __u8 bar; /* Where to find it. */ | ||
| 124 | __u8 padding[3]; /* Pad to full dword. */ | ||
| 125 | __le32 offset; /* Offset within bar. */ | ||
| 126 | __le32 length; /* Length of the structure, in bytes. */ | ||
| 127 | }; | ||
| 128 | |||
| 129 | struct virtio_pci_notify_cap { | ||
| 130 | struct virtio_pci_cap cap; | ||
| 131 | __le32 notify_off_multiplier; /* Multiplier for queue_notify_off. */ | ||
| 132 | }; | ||
| 133 | |||
| 134 | /* Fields in VIRTIO_PCI_CAP_COMMON_CFG: */ | ||
| 135 | struct virtio_pci_common_cfg { | ||
| 136 | /* About the whole device. */ | ||
| 137 | __le32 device_feature_select; /* read-write */ | ||
| 138 | __le32 device_feature; /* read-only */ | ||
| 139 | __le32 guest_feature_select; /* read-write */ | ||
| 140 | __le32 guest_feature; /* read-write */ | ||
| 141 | __le16 msix_config; /* read-write */ | ||
| 142 | __le16 num_queues; /* read-only */ | ||
| 143 | __u8 device_status; /* read-write */ | ||
| 144 | __u8 config_generation; /* read-only */ | ||
| 145 | |||
| 146 | /* About a specific virtqueue. */ | ||
| 147 | __le16 queue_select; /* read-write */ | ||
| 148 | __le16 queue_size; /* read-write, power of 2. */ | ||
| 149 | __le16 queue_msix_vector; /* read-write */ | ||
| 150 | __le16 queue_enable; /* read-write */ | ||
| 151 | __le16 queue_notify_off; /* read-only */ | ||
| 152 | __le32 queue_desc_lo; /* read-write */ | ||
| 153 | __le32 queue_desc_hi; /* read-write */ | ||
| 154 | __le32 queue_avail_lo; /* read-write */ | ||
| 155 | __le32 queue_avail_hi; /* read-write */ | ||
| 156 | __le32 queue_used_lo; /* read-write */ | ||
| 157 | __le32 queue_used_hi; /* read-write */ | ||
| 158 | }; | ||
| 159 | |||
| 160 | /* Macro versions of offsets for the Old Timers! */ | ||
| 161 | #define VIRTIO_PCI_CAP_VNDR 0 | ||
| 162 | #define VIRTIO_PCI_CAP_NEXT 1 | ||
| 163 | #define VIRTIO_PCI_CAP_LEN 2 | ||
| 164 | #define VIRTIO_PCI_CAP_CFG_TYPE 3 | ||
| 165 | #define VIRTIO_PCI_CAP_BAR 4 | ||
| 166 | #define VIRTIO_PCI_CAP_OFFSET 8 | ||
| 167 | #define VIRTIO_PCI_CAP_LENGTH 12 | ||
| 168 | |||
| 169 | #define VIRTIO_PCI_NOTIFY_CAP_MULT 16 | ||
| 170 | |||
| 171 | #define VIRTIO_PCI_COMMON_DFSELECT 0 | ||
| 172 | #define VIRTIO_PCI_COMMON_DF 4 | ||
| 173 | #define VIRTIO_PCI_COMMON_GFSELECT 8 | ||
| 174 | #define VIRTIO_PCI_COMMON_GF 12 | ||
| 175 | #define VIRTIO_PCI_COMMON_MSIX 16 | ||
| 176 | #define VIRTIO_PCI_COMMON_NUMQ 18 | ||
| 177 | #define VIRTIO_PCI_COMMON_STATUS 20 | ||
| 178 | #define VIRTIO_PCI_COMMON_CFGGENERATION 21 | ||
| 179 | #define VIRTIO_PCI_COMMON_Q_SELECT 22 | ||
| 180 | #define VIRTIO_PCI_COMMON_Q_SIZE 24 | ||
| 181 | #define VIRTIO_PCI_COMMON_Q_MSIX 26 | ||
| 182 | #define VIRTIO_PCI_COMMON_Q_ENABLE 28 | ||
| 183 | #define VIRTIO_PCI_COMMON_Q_NOFF 30 | ||
| 184 | #define VIRTIO_PCI_COMMON_Q_DESCLO 32 | ||
| 185 | #define VIRTIO_PCI_COMMON_Q_DESCHI 36 | ||
| 186 | #define VIRTIO_PCI_COMMON_Q_AVAILLO 40 | ||
| 187 | #define VIRTIO_PCI_COMMON_Q_AVAILHI 44 | ||
| 188 | #define VIRTIO_PCI_COMMON_Q_USEDLO 48 | ||
| 189 | #define VIRTIO_PCI_COMMON_Q_USEDHI 52 | ||
| 190 | |||
| 191 | #endif /* VIRTIO_PCI_NO_MODERN */ | ||
| 192 | |||
| 102 | #endif | 193 | #endif |
