16 #ifndef __included_virtio_pci_h__ 17 #define __included_virtio_pci_h__ 20 #define VIRTIO_PCI_ABI_VERSION 0 25 #define VIRTIO_PCI_HOST_FEATURES 0 26 #define VIRTIO_PCI_GUEST_FEATURES 4 27 #define VIRTIO_PCI_QUEUE_PFN 8 28 #define VIRTIO_PCI_QUEUE_NUM 12 29 #define VIRTIO_PCI_QUEUE_SEL 14 30 #define VIRTIO_PCI_QUEUE_NOTIFY 16 31 #define VIRTIO_PCI_STATUS 18 32 #define VIRTIO_PCI_ISR 19 35 #define VIRTIO_MSI_CONFIG_VECTOR 20 36 #define VIRTIO_MSI_QUEUE_VECTOR 22 46 #define VIRTIO_PCI_ISR_INTR 0x1 48 #define VIRTIO_PCI_ISR_CONFIG 0x2 51 #define VIRTIO_ID_NETWORK 0x01 54 #define foreach_virtio_config_status_flags \ 55 _ (VIRTIO_CONFIG_STATUS_RESET, 0x00) \ 56 _ (VIRTIO_CONFIG_STATUS_ACK, 0x01) \ 57 _ (VIRTIO_CONFIG_STATUS_DRIVER, 0x02) \ 58 _ (VIRTIO_CONFIG_STATUS_DRIVER_OK, 0x04) \ 59 _ (VIRTIO_CONFIG_STATUS_FEATURES_OK, 0x08) \ 60 _ (VIRTIO_CONFIG_STATUS_DEVICE_NEEDS_RESET, 0x40) \ 61 _ (VIRTIO_CONFIG_STATUS_FAILED, 0x80) 65 #define _(a, b) a = b, 70 #define foreach_virtio_net_feature_flags \ 71 _ (VIRTIO_NET_F_CSUM, 0) \ 72 _ (VIRTIO_NET_F_GUEST_CSUM, 1) \ 73 _ (VIRTIO_NET_F_CTRL_GUEST_OFFLOADS, 2) \ 74 _ (VIRTIO_NET_F_MTU, 3) \ 75 _ (VIRTIO_NET_F_MAC, 5) \ 76 _ (VIRTIO_NET_F_GSO, 6) \ 77 _ (VIRTIO_NET_F_GUEST_TSO4, 7) \ 78 _ (VIRTIO_NET_F_GUEST_TSO6, 8) \ 79 _ (VIRTIO_NET_F_GUEST_ECN, 9) \ 80 _ (VIRTIO_NET_F_GUEST_UFO, 10) \ 81 _ (VIRTIO_NET_F_HOST_TSO4, 11) \ 82 _ (VIRTIO_NET_F_HOST_TSO6, 12) \ 83 _ (VIRTIO_NET_F_HOST_ECN, 13) \ 84 _ (VIRTIO_NET_F_HOST_UFO, 14) \ 85 _ (VIRTIO_NET_F_MRG_RXBUF, 15) \ 86 _ (VIRTIO_NET_F_STATUS, 16) \ 87 _ (VIRTIO_NET_F_CTRL_VQ, 17) \ 88 _ (VIRTIO_NET_F_CTRL_RX, 18) \ 89 _ (VIRTIO_NET_F_CTRL_VLAN, 19) \ 90 _ (VIRTIO_NET_F_CTRL_RX_EXTRA, 20) \ 91 _ (VIRTIO_NET_F_GUEST_ANNOUNCE, 21) \ 92 _ (VIRTIO_NET_F_MQ, 22) \ 93 _ (VIRTIO_NET_F_CTRL_MAC_ADDR, 23) \ 94 _ (VIRTIO_F_NOTIFY_ON_EMPTY, 24) \ 95 _ (VHOST_F_LOG_ALL, 26) \ 96 _ (VIRTIO_F_ANY_LAYOUT, 27) \ 97 _ (VIRTIO_RING_F_INDIRECT_DESC, 28) \ 98 _ (VIRTIO_RING_F_EVENT_IDX, 29) 102 _ (VHOST_USER_F_PROTOCOL_FEATURES, 30) 104 #define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2 105 #define VIRTIO_NET_F_MTU 3 106 #define VIRTIO_NET_S_LINK_UP 1 107 #define VIRTIO_NET_S_ANNOUNCE 2 117 #define VIRTIO_NET_CTRL_GUEST_OFFLOADS 5 118 #define VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET 0 121 #define VIRTIO_PCI_CAP_COMMON_CFG 1 123 #define VIRTIO_PCI_CAP_NOTIFY_CFG 2 125 #define VIRTIO_PCI_CAP_ISR_CFG 3 127 #define VIRTIO_PCI_CAP_DEVICE_CFG 4 129 #define VIRTIO_PCI_CAP_PCI_CFG 5 131 #define VIRTIO_PCI_QUEUE_ADDR_SHIFT 12 133 #define VIRTIO_PCI_VRING_ALIGN 4096 135 #define virtio_log_debug(vim, vif, f, ...) \ 137 vlib_log(VLIB_LOG_LEVEL_DEBUG, vim->log_default, "%U: " f, \ 138 format_vlib_pci_addr, &vif->pci_addr, \ 142 #define virtio_log_warning(vim, vif, f, ...) \ 144 vlib_log(VLIB_LOG_LEVEL_WARNING, vim->log_default, "%U: " f, \ 145 format_vlib_pci_addr, &vif->pci_addr, \ 149 #define virtio_log_error(vim, vif, f, ...) \ 151 vlib_log(VLIB_LOG_LEVEL_ERR, vim->log_default, "%U: " f, \ 152 format_vlib_pci_addr, &vif->pci_addr, \ 178 struct virtio_pci_cap cap;
int virtio_pci_delete_if(vlib_main_t *vm, virtio_if_t *ad)
void device_status(vlib_main_t *vm, virtio_if_t *vif)
u32 notify_off_multiplier
#define foreach_virtio_config_status_flags
virtio_config_status_flags_t
void debug_device_config_space(vlib_main_t *vm, virtio_if_t *vif)
u32 device_feature_select
void virtio_pci_create_if(vlib_main_t *vm, virtio_pci_create_if_args_t *args)