7#define VIRTIO_PCI_HOST_FEATURES 0
10#define VIRTIO_PCI_GUEST_FEATURES 4
13#define VIRTIO_PCI_QUEUE_PFN 8
16#define VIRTIO_PCI_QUEUE_NUM 12
19#define VIRTIO_PCI_QUEUE_SEL 14
22#define VIRTIO_PCI_QUEUE_NOTIFY 16
25#define VIRTIO_PCI_STATUS 18
30#define VIRTIO_PCI_ISR 19
33#define VIRTIO_PCI_ISR_CONFIG 0x2
37#define VIRTIO_PCI_CONFIG 20
40#define VIRTIO_PCI_ABI_VERSION 0
43#define VIRTIO_PCI_CAP_COMMON_CFG 1
44#define VIRTIO_PCI_CAP_NOTIFY_CFG 2
45#define VIRTIO_PCI_CAP_ISR_CFG 3
46#define VIRTIO_PCI_CAP_DEVICE_CFG 4
47#define VIRTIO_PCI_CAP_PCI_CFG 5
50#define __le16 uint16_t
51#define __le32 uint32_t
52#define __le64 uint64_t
110#define VIRTIO_PCI_REGION_TYPE_MASK 0x00000003
112#define VIRTIO_PCI_REGION_MEMORY 0x00000001
114#define VIRTIO_PCI_REGION_PORT 0x00000002
116#define VIRTIO_PCI_REGION_PCI_CONFIG 0x00000003
151 void *buf,
unsigned len)
156 for (i = 0; i <
len; i++)
222 u64 data,
size_t offset_lo,
size_t offset_hi)
239#define COMMON_OFFSET(field) offsetof(struct virtio_pci_common_cfg, field)
263 u32 features_lo, features_hi;
270 return ((
u64)features_hi << 32) | features_lo;
286 unsigned offset,
void *buf,
unsigned len)
291 for (i = 0; i <
len; i++)
305 struct dma_device *dma_dev,
size_t header_size);
uint16_t offset
Offset to command line.
static unsigned long ioaddr
uint32_t features
Supported features.
uint8_t data[48]
Additional event data.
uint32_t start
Starting offset.
uint16_t size
Buffer size.
#define outb(data, io_addr)
#define outw(data, io_addr)
#define outl(data, io_addr)
struct virtio_pci_cap cap
__le32 guest_feature_select
__le32 device_feature_select
struct virtio_pci_region isr
struct virtio_pci_region device
struct virtio_pci_region common
__le32 notify_off_multiplier
struct virtio_pci_cap cap
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
u8 vpm_ioread8(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, size_t offset)
static u8 vp_get_status(unsigned int ioaddr)
void vpm_iowrite32(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, u32 data, size_t offset)
void vp_free_vq(struct vring_virtqueue *vq)
static u32 vp_get_features(unsigned int ioaddr)
static void vpm_add_status(struct virtio_pci_modern_device *vdev, u8 status)
static void vp_set_features(unsigned int ioaddr, u32 features)
void vpm_iowrite16(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, u16 data, size_t offset)
static void vpm_reset(struct virtio_pci_modern_device *vdev)
#define VIRTIO_PCI_CONFIG
static void vp_notify(unsigned int ioaddr, int queue_index)
static void vp_reset(unsigned int ioaddr)
int virtio_pci_map_capability(struct pci_device *pci, int cap, size_t minlen, u32 align, u32 start, u32 size, struct virtio_pci_region *region)
#define VIRTIO_PCI_HOST_FEATURES
#define VIRTIO_PCI_QUEUE_SEL
int vp_find_vq(unsigned int ioaddr, int queue_index, struct vring_virtqueue *vq, struct dma_device *dma_dev, size_t header_size)
static void vp_set_status(unsigned int ioaddr, u8 status)
#define VIRTIO_PCI_STATUS
static void vpm_set_features(struct virtio_pci_modern_device *vdev, u64 features)
static u64 vpm_get_features(struct virtio_pci_modern_device *vdev)
#define COMMON_OFFSET(field)
static u8 vpm_get_status(struct virtio_pci_modern_device *vdev)
void vpm_notify(struct virtio_pci_modern_device *vdev, struct vring_virtqueue *vq)
static void vpm_get(struct virtio_pci_modern_device *vdev, unsigned offset, void *buf, unsigned len)
#define VIRTIO_PCI_QUEUE_NOTIFY
u32 vpm_ioread32(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, size_t offset)
static void vpm_iowrite64(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, u64 data, size_t offset_lo, size_t offset_hi)
#define VIRTIO_PCI_GUEST_FEATURES
void virtio_pci_unmap_capability(struct virtio_pci_region *region)
u16 vpm_ioread16(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, size_t offset)
static void vp_get(unsigned int ioaddr, unsigned offset, void *buf, unsigned len)
static void vp_del_vq(unsigned int ioaddr, int queue_index)
int virtio_pci_find_capability(struct pci_device *pci, uint8_t cfg_type)
int vpm_find_vqs(struct virtio_pci_modern_device *vdev, unsigned nvqs, struct vring_virtqueue *vqs, struct dma_device *dma_dev, size_t header_size)
#define VIRTIO_PCI_QUEUE_PFN
static u8 vp_get_isr(unsigned int ioaddr)
static u8 vpm_get_isr(struct virtio_pci_modern_device *vdev)
void vpm_iowrite8(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, u8 data, size_t offset)