17 #include <sys/ioctl.h> 33 u64 features_lo, features_hi;
42 u64 features = ((features_hi << 32) | features_lo);
49 u64 features_lo, features_hi;
59 vif->
features = ((features_hi << 32) | features_lo);
67 u32 features_lo = (
u32) features, features_hi = (
u32) (features >> 32);
120 if (status != VIRTIO_CONFIG_STATUS_RESET)
135 u8 config_generation = 0;
138 return config_generation;
160 u16 queue_id,
u16 queue_size)
175 u16 queue_msix_vector = 0;
178 return queue_msix_vector;
183 u16 queue_msix_vector,
u16 queue_id)
194 u16 queue_enable = 0;
214 u16 queue_notify_off = 0;
218 return queue_notify_off;
238 u64 queue_driver = 0;
254 u64 queue_device = 0;
269 u16 queue_id,
void *p)
271 u64 desc, avail, used;
355 u16 max_virtqueue_pairs = 0;
356 max_virtqueue_pairs =
360 max_virtqueue_pairs, supported_queues);
361 return max_virtqueue_pairs;
382 u16 max_queue_pairs =
386 max_queue_pairs, mtu);
406 u16 queue_id,
u16 queue_notify_off)
408 virtio_pci_reg_write_u16 (vif,
410 queue_notify_off, queue_id);
#define VIRTIO_ISR_OFFSET(v)
static u16 virtio_pci_modern_get_max_virtqueue_pairs(vlib_main_t *vm, virtio_if_t *vif)
const virtio_pci_func_t virtio_pci_modern_func
vring_desc_event_t * device_event
static void virtio_pci_modern_read_config(vlib_main_t *vm, virtio_if_t *vif, void *dst, int len, u32 addr)
#define VIRTIO_MAX_VIRTQUEUE_PAIRS_OFFSET(v)
static void virtio_pci_modern_set_queue_enable(virtio_if_t *vif, u16 queue_id, u16 queue_enable)
static u64 virtio_pci_modern_get_queue_desc(virtio_if_t *vif)
void virtio_pci_modern_notify_queue(vlib_main_t *vm, virtio_if_t *vif, u16 queue_id, u16 queue_notify_off)
#define VIRTIO_QUEUE_DRIVER_OFFSET(v)
#define VIRTIO_QUEUE_DEVICE_OFFSET(v)
#define VIRTIO_NUM_QUEUES_OFFSET(v)
#define VIRTIO_QUEUE_MSIX_VECTOR_OFFSET(v)
static u8 virtio_pci_modern_reset(vlib_main_t *vm, virtio_if_t *vif)
static void virtio_pci_modern_set_driver_features(vlib_main_t *vm, virtio_if_t *vif, u64 features)
static u16 virtio_pci_modern_get_num_queues(virtio_if_t *vif)
#define VIRTIO_DEVICE_STATUS_OFFSET(v)
#define VIRTIO_QUEUE_NOTIFY_OFF_OFFSET(v)
static u8 virtio_pci_modern_get_status(vlib_main_t *vm, virtio_if_t *vif)
#define VIRTIO_DRIVER_FEATURE_OFFSET(v)
#define VIRTIO_STATUS_OFFSET(v)
#define VIRTIO_FEATURE_SELECT_LO
static u16 virtio_pci_modern_get_queue_enable(virtio_if_t *vif, u16 queue_id)
static u16 virtio_pci_modern_get_queue_size(vlib_main_t *vm, virtio_if_t *vif, u16 queue_id)
vring_desc_event_t * driver_event
#define VIRTIO_CONFIG_GENERATION_OFFSET(v)
#define VIRTIO_QUEUE_SELECT_OFFSET(v)
static u16 virtio_pci_modern_set_queue_msix_vector(vlib_main_t *vm, virtio_if_t *vif, u16 queue_msix_vector, u16 queue_id)
static void virtio_pci_modern_set_status(vlib_main_t *vm, virtio_if_t *vif, u8 status)
static u16 virtio_pci_modern_get_device_mtu(vlib_main_t *vm, virtio_if_t *vif)
#define virtio_log_debug(vif, f,...)
static u8 virtio_pci_modern_setup_queue(vlib_main_t *vm, virtio_if_t *vif, u16 queue_id, void *p)
#define VIRTIO_PCI_VRING_ALIGN
static u64 virtio_pci_modern_get_queue_driver(virtio_if_t *vif)
static void virtio_pci_modern_set_queue_device(virtio_if_t *vif, u64 queue_device)
#define clib_warning(format, args...)
static_always_inline void vring_init(vring_t *vr, u32 num, void *p, u32 align)
static void virtio_pci_modern_set_queue_driver(virtio_if_t *vif, u64 queue_driver)
static u8 virtio_pci_modern_get_config_generation(virtio_if_t *vif)
static u64 virtio_pci_modern_get_device_features(vlib_main_t *vm, virtio_if_t *vif)
static void virtio_pci_modern_set_queue_size(vlib_main_t *vm, virtio_if_t *vif, u16 queue_id, u16 queue_size)
static u16 virtio_pci_modern_get_msix_config(virtio_if_t *vif)
static u64 virtio_pci_modern_get_driver_features(vlib_main_t *vm, virtio_if_t *vif)
static u8 virtio_pci_modern_get_isr(vlib_main_t *vm, virtio_if_t *vif)
#define VIRTIO_QUEUE_SIZE_OFFSET(v)
vring_packed_desc_t * packed_desc
#define VIRTIO_FEATURE_SELECT_HI
static void virtio_pci_modern_device_debug_config_space(vlib_main_t *vm, virtio_if_t *vif)
static u16 virtio_pci_modern_get_device_status(vlib_main_t *vm, virtio_if_t *vif)
#define VIRTIO_QUEUE_DESC_OFFSET(v)
#define VIRTIO_MTU_OFFSET(v)
static uword is_pow2(uword x)
static void virtio_pci_modern_del_queue(vlib_main_t *vm, virtio_if_t *vif, u16 queue_id)
#define VIRTIO_DEVICE_FEATURE_OFFSET(v)
static u64 vlib_physmem_get_pa(vlib_main_t *vm, void *mem)
static void virtio_pci_modern_write_config(vlib_main_t *vm, virtio_if_t *vif, void *src, int len, u32 addr)
#define VIRTIO_MSIX_CONFIG_VECTOR_OFFSET(v)
struct _virtio_pci_func virtio_pci_func_t
static void virtio_pci_modern_set_queue_select(virtio_if_t *vif, u16 queue_select)
#define VIRTIO_QUEUE_ENABLE_OFFSET(v)
#define VIRTIO_MAC_OFFSET(v)
static u16 virtio_pci_modern_set_msix_config(vlib_main_t *vm, virtio_if_t *vif, u16 msix_config)
static void virtio_pci_modern_get_device_mac(vlib_main_t *vm, virtio_if_t *vif)
#define VIRTIO_NOTIFICATION_OFFSET(v)
static u64 virtio_pci_modern_get_queue_device(virtio_if_t *vif)
static void virtio_pci_modern_set_queue_desc(virtio_if_t *vif, u64 queue_desc)
static void virtio_pci_modern_set_device_mac(vlib_main_t *vm, virtio_if_t *vif)
static u16 virtio_pci_modern_get_queue_msix_vector(virtio_if_t *vif)
#define VIRTIO_DRIVER_FEATURE_SELECT_OFFSET(v)
#define VIRTIO_DEVICE_FEATURE_SELECT_OFFSET(v)
static u16 virtio_pci_modern_get_queue_notify_off(vlib_main_t *vm, virtio_if_t *vif, u16 queue_id)