*
* Note the sizeof(struct vring_desc) is 16 bytes.
*/
-#define VIRTIO_MAX_INDIRECT ((int)(PAGE_SIZE / 16))
+#define VIRTIO_MAX_INDIRECT ((int)(rte_mem_page_size() / 16))
/*
* Maximum number of virtqueues per device.
#define VIRTIO_CONFIG_STATUS_DEV_NEED_RESET 0x40
#define VIRTIO_CONFIG_STATUS_FAILED 0x80
+/* The bit of the ISR which indicates a device has an interrupt. */
+#define VIRTIO_ISR_INTR 0x1
+/* The bit of the ISR which indicates a device configuration change. */
+#define VIRTIO_ISR_CONFIG 0x2
+/* Vector value used to disable MSI for queue. */
+#define VIRTIO_MSI_NO_VECTOR 0xFFFF
+
+/* The alignment to use between consumer and producer parts of vring. */
+#define VIRTIO_VRING_ALIGN 4096
+
/*
* This structure is just a reference to read net device specific
* config space; it is just a shadow structure.
uint8_t started;
uint8_t weak_barriers;
uint8_t vlan_strip;
+ bool rx_ol_scatter;
uint8_t has_tx_offload;
uint8_t has_rx_offload;
uint8_t use_vec_rx;
uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
uint32_t speed; /* link speed in MB */
uint8_t duplex;
- uint8_t use_msix;
+ uint8_t intr_lsc;
uint16_t max_mtu;
+ size_t max_rx_pkt_len;
/*
* App management thread and virtio interrupt handler thread
* both can change device state, this lock is meant to avoid
uint16_t max_queue_pairs;
uint64_t req_guest_features;
struct virtnet_ctl *cvq;
+ bool use_va;
};
struct virtio_ops {
void virtio_read_dev_config(struct virtio_hw *hw, size_t offset, void *dst, int length);
void virtio_reset(struct virtio_hw *hw);
void virtio_reinit_complete(struct virtio_hw *hw);
-
+uint8_t virtio_get_isr(struct virtio_hw *hw);
#endif /* _VIRTIO_H_ */