2 # define _VIRTIO_PCI_H_ 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);
static __always_inline void struct dma_mapping size_t size_t align
static u8 vpm_get_status(struct virtio_pci_modern_device *vdev)
static void vpm_set_features(struct virtio_pci_modern_device *vdev, u64 features)
static void vpm_get(struct virtio_pci_modern_device *vdev, unsigned offset, void *buf, unsigned len)
#define VIRTIO_PCI_HOST_FEATURES
struct virtio_pci_cap cap
#define outw(data, io_addr)
void virtio_pci_unmap_capability(struct virtio_pci_region *region)
static u32 vp_get_features(unsigned int ioaddr)
void vp_free_vq(struct vring_virtqueue *vq)
#define VIRTIO_PCI_QUEUE_NOTIFY
uint8_t size
Entry size (in 32-bit words)
u8 vpm_ioread8(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, size_t offset)
static void vp_set_features(unsigned int ioaddr, u32 features)
void vpm_iowrite32(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, u32 data, size_t offset)
static void vp_notify(unsigned int ioaddr, int queue_index)
__le32 device_feature_select
#define VIRTIO_PCI_STATUS
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)
uint32_t start
Starting offset.
static void vpm_reset(struct virtio_pci_modern_device *vdev)
#define VIRTIO_PCI_QUEUE_PFN
static unsigned long ioaddr
struct virtio_pci_region device
void vpm_notify(struct virtio_pci_modern_device *vdev, struct vring_virtqueue *vq)
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)
static u8 vp_get_isr(unsigned int ioaddr)
struct virtio_pci_cap cap
int vp_find_vq(unsigned int ioaddr, int queue_index, struct vring_virtqueue *vq, struct dma_device *dma_dev, size_t header_size)
#define VIRTIO_PCI_CONFIG
static void vp_set_status(unsigned int ioaddr, u8 status)
#define COMMON_OFFSET(field)
#define VIRTIO_PCI_QUEUE_SEL
#define outl(data, io_addr)
uint32_t features
Supported features.
struct virtio_pci_region common
struct virtio_pci_region isr
#define VIRTIO_PCI_GUEST_FEATURES
void vpm_iowrite8(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, u8 data, size_t offset)
uint8_t inb(volatile uint8_t *io_addr)
Read byte from I/O-mapped device.
static void vp_del_vq(unsigned int ioaddr, int queue_index)
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)
u32 vpm_ioread32(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, size_t offset)
__le32 guest_feature_select
static u8 vp_get_status(unsigned int ioaddr)
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
#define outb(data, io_addr)
static void vpm_add_status(struct virtio_pci_modern_device *vdev, u8 status)
uint32_t inl(volatile uint32_t *io_addr)
Read 32-bit dword from I/O-mapped device.
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)
uint8_t data[48]
Additional event data.
uint16_t offset
Offset to command line.
int virtio_pci_find_capability(struct pci_device *pci, uint8_t cfg_type)
static u8 vpm_get_isr(struct virtio_pci_modern_device *vdev)
static void vp_reset(unsigned int ioaddr)
static u64 vpm_get_features(struct virtio_pci_modern_device *vdev)
void vpm_iowrite16(struct virtio_pci_modern_device *vdev, struct virtio_pci_region *region, u16 data, size_t offset)
__le32 notify_off_multiplier