diff options
Diffstat (limited to 'src/vnet/devices/virtio/pci.h')
-rw-r--r-- | src/vnet/devices/virtio/pci.h | 66 |
1 files changed, 48 insertions, 18 deletions
diff --git a/src/vnet/devices/virtio/pci.h b/src/vnet/devices/virtio/pci.h index 8ec1360bc59..dfc0711305a 100644 --- a/src/vnet/devices/virtio/pci.h +++ b/src/vnet/devices/virtio/pci.h @@ -20,23 +20,6 @@ #define VIRTIO_PCI_ABI_VERSION 0 /* - * VirtIO Header, located in BAR 0. - */ -#define VIRTIO_PCI_HOST_FEATURES 0 /* host's supported features (32bit, RO) */ -#define VIRTIO_PCI_GUEST_FEATURES 4 /* guest's supported features (32, RW) */ -#define VIRTIO_PCI_QUEUE_PFN 8 /* physical address of VQ (32, RW) */ -#define VIRTIO_PCI_QUEUE_NUM 12 /* number of ring entries (16, RO) */ -#define VIRTIO_PCI_QUEUE_SEL 14 /* current VQ selection (16, RW) */ -#define VIRTIO_PCI_QUEUE_NOTIFY 16 /* notify host regarding VQ (16, RW) */ -#define VIRTIO_PCI_STATUS 18 /* device status register (8, RW) */ -#define VIRTIO_PCI_ISR 19 /* interrupt status register, reading - * also clears the register (8, RO) */ -/* Only if MSIX is enabled: */ -#define VIRTIO_MSI_CONFIG_VECTOR 20 /* configuration change vector (16, RW) */ -#define VIRTIO_MSI_QUEUE_VECTOR 22 /* vector for selected VQ notifications - (16, RW) */ - -/* * Vector value used to disable MSI for queue. * define in include/linux/virtio_pci.h * #define VIRTIO_MSI_NO_VECTOR 0xFFFF @@ -187,6 +170,14 @@ typedef struct typedef struct { + u8 mac[6]; + u16 status; + u16 max_virtqueue_pairs; + u16 mtu; +} virtio_net_config_t; + +typedef struct +{ u64 addr; u32 len; u16 flags; @@ -215,6 +206,44 @@ typedef struct /* u16 avail_event; */ } vring_used_t; +typedef struct _virtio_pci_func +{ + void (*read_config) (vlib_main_t * vm, virtio_if_t * vif, void *dst, + int len, u32 addr); + void (*write_config) (vlib_main_t * vm, virtio_if_t * vif, void *src, + int len, u32 addr); + + u64 (*get_device_features) (vlib_main_t * vm, virtio_if_t * vif); + u64 (*get_driver_features) (vlib_main_t * vm, virtio_if_t * vif); + void (*set_driver_features) (vlib_main_t * vm, virtio_if_t * vif, + u64 features); + + u8 (*get_status) (vlib_main_t * vm, virtio_if_t * vif); + void (*set_status) (vlib_main_t * vm, virtio_if_t * vif, u8 status); + u8 (*device_reset) (vlib_main_t * vm, virtio_if_t * vif); + + u8 (*get_isr) (vlib_main_t * vm, virtio_if_t * vif); + + u16 (*get_queue_size) (vlib_main_t * vm, virtio_if_t * vif, u16 queue_id); + void (*set_queue_size) (vlib_main_t * vm, virtio_if_t * vif, u16 queue_id, + u16 queue_size); + u8 (*setup_queue) (vlib_main_t * vm, virtio_if_t * vif, u16 queue_id, + void *p); + void (*del_queue) (vlib_main_t * vm, virtio_if_t * vif, u16 queue_id); + void (*notify_queue) (vlib_main_t * vm, virtio_if_t * vif, u16 queue_id); + + u16 (*set_config_irq) (vlib_main_t * vm, virtio_if_t * vif, u16 vec); + u16 (*set_queue_irq) (vlib_main_t * vm, virtio_if_t * vif, u16 vec, + u16 queue_id); + + void (*get_mac) (vlib_main_t * vm, virtio_if_t * vif); + void (*set_mac) (vlib_main_t * vm, virtio_if_t * vif); + u16 (*get_device_status) (vlib_main_t * vm, virtio_if_t * vif); + u16 (*get_max_queue_pairs) (vlib_main_t * vm, virtio_if_t * vif); + u16 (*get_mtu) (vlib_main_t * vm, virtio_if_t * vif); + void (*device_debug_config_space) (vlib_main_t * vm, virtio_if_t * vif); +} virtio_pci_func_t; + typedef struct { u32 addr; @@ -229,7 +258,8 @@ typedef struct clib_error_t *error; } virtio_pci_create_if_args_t; -extern void debug_device_config_space (vlib_main_t * vm, virtio_if_t * vif); +extern const virtio_pci_func_t virtio_pci_legacy_func; + extern void device_status (vlib_main_t * vm, virtio_if_t * vif); void virtio_pci_create_if (vlib_main_t * vm, virtio_pci_create_if_args_t * args); |