11#ifndef __INCLUDE_DAO_VIRTIO_NET_H__
12#define __INCLUDE_DAO_VIRTIO_NET_H__
14#include <rte_prefetch.h>
19#include <spec/virtio_net.h>
47#define DAO_VIRTIO_NETDEV_EXTBUF DAO_BIT_ULL(0)
56 uint16_t dataroom_size;
72 uint8_t
mac[VIRTIO_NET_ETHER_ADDR_LEN];
92#define DAO_VIRTIO_NETDEV_MEM_SZ 8192
99 uint64_t desc_data[2];
101 struct virtio_net_hdr hdr;
154typedef int (*dao_virtio_netdev_extbuf_get)(uint16_t devid,
void *buffs[], uint16_t nb_buffs);
155typedef int (*dao_virtio_netdev_extbuf_put)(uint16_t devid,
void *buffs[], uint16_t nb_buffs);
292static __rte_always_inline
int
299 return (*mgmt_fn)(devid, qp_count);
302static __rte_always_inline
int
303dao_virtio_net_desc_manage_ops(uint16_t devid, uint16_t qp_count)
310 return (*mgmt_fn)(devid, qp_count);
327static __rte_always_inline uint16_t
333 void *q = netdev->qs[qid];
340 return (*deq_fn)(q, mbufs, nb_mbufs);
359static __rte_always_inline uint16_t
365 void *q = netdev->qs[qid];
371 rte_prefetch0(RTE_PTR_ADD(q, RTE_CACHE_LINE_SIZE * 2));
372 rte_prefetch0(RTE_PTR_ADD(q, RTE_CACHE_LINE_SIZE * 6));
376 return (*deq_fn)(q, mbufs, nb_mbufs);
393static __rte_always_inline uint16_t
399 void *q = netdev->qs[qid];
406 return (*enq_fn)(q, mbufs, nb_mbufs);
425static __rte_always_inline uint16_t
431 void *q = netdev->qs[qid];
437 rte_prefetch0(RTE_PTR_ADD(q, RTE_CACHE_LINE_SIZE * 2));
438 rte_prefetch0(RTE_PTR_ADD(q, RTE_CACHE_LINE_SIZE * 6));
442 return (*enq_fn)(q, mbufs, nb_mbufs);
459static __rte_always_inline uint16_t
464 void *q = netdev->qs[qid];
471 return (*deq_fn)(q, vbufs, nb_bufs);
488static __rte_always_inline uint16_t
493 void *q = netdev->qs[qid];
500 return (*enq_fn)(q, vbufs, nb_bufs);
#define DAO_VIRTIO_MAX_QUEUES
dao_net_desc_manage_fn_t dao_net_desc_manage_ops_fns[]
static __rte_always_inline uint16_t dao_virtio_net_enqueue_burst_ext(uint16_t devid, uint16_t qid, void **vbufs, uint16_t nb_bufs)
static __rte_always_inline uint16_t dao_virtio_net_enqueue_burst(uint16_t devid, uint16_t qid, struct rte_mbuf **mbufs, uint16_t nb_mbufs)
uint8_t dao_virtio_netdev_hdrlen_get(uint16_t devid)
int dao_virtio_netdev_init(uint16_t devid, struct dao_virtio_netdev_conf *conf)
int(* dao_virtio_netdev_allmulti_cb_t)(uint16_t devid, uint8_t enable)
void dao_virtio_netdev_cb_register(struct dao_virtio_netdev_cbs *cbs)
dao_virtio_net_enq_fn_t dao_virtio_net_enq_fns[]
uint16_t(* dao_virtio_net_enq_ext_fn_t)(void *q, void **vbufs, uint16_t nb_bufs)
int(* dao_virtio_netdev_mac_add_cb_t)(uint16_t devid, struct virtio_net_ctrl_mac *mac_tbl, uint8_t type)
dao_virtio_net_enq_ext_fn_t dao_virtio_net_enq_ext_fns[]
static __rte_always_inline int dao_virtio_net_desc_manage(uint16_t devid, uint16_t qp_count)
static __rte_always_inline uint16_t dao_virtio_net_enqueue_burst_ops(uint16_t devid, uint16_t qid, struct rte_mbuf **mbufs, uint16_t nb_mbufs)
static __rte_always_inline uint16_t dao_virtio_net_dequeue_burst(uint16_t devid, uint16_t qid, struct rte_mbuf **mbufs, uint16_t nb_mbufs)
uint16_t(* dao_virtio_net_deq_ext_fn_t)(void *q, void **vbufs, uint16_t nb_bufs)
int dao_virtio_netdev_link_sts_update(uint16_t devid, struct dao_virtio_netdev_link_info *info)
dao_virtio_net_deq_fn_t dao_virtio_net_deq_ops_fns[]
dao_virtio_net_deq_fn_t dao_virtio_net_deq_fns[]
int(* dao_virtio_netdev_mq_cfg_t)(uint16_t devid, bool qmap_set)
void dao_virtio_netdev_cb_unregister(void)
dao_net_desc_manage_fn_t dao_net_desc_manage_fns[]
struct dao_virtio_netdev dao_virtio_netdevs[]
int(* dao_virtio_netdev_vlan_t)(uint16_t devid, uint16_t vlan_tci)
uint16_t(* dao_virtio_net_enq_fn_t)(void *q, struct rte_mbuf **mbufs, uint16_t nb_mbufs)
int(* dao_virtio_netdev_status_cb_t)(uint16_t devid, uint8_t status)
static __rte_always_inline uint16_t dao_virtio_net_dequeue_burst_ext(uint16_t devid, uint16_t qid, void **vbufs, uint16_t nb_bufs)
dao_virtio_net_deq_ext_fn_t dao_virtio_net_deq_ext_fns[]
int dao_virtio_netdev_fini(uint16_t devid)
#define DAO_VIRTIO_NETDEV_MEM_SZ
int(* dao_virtio_netdev_promisc_cb_t)(uint16_t devid, uint8_t enable)
static __rte_always_inline uint16_t dao_virtio_net_dequeue_burst_ops(uint16_t devid, uint16_t qid, struct rte_mbuf **mbufs, uint16_t nb_mbufs)
uint16_t(* dao_virtio_net_deq_fn_t)(void *q, struct rte_mbuf **mbufs, uint16_t nb_mbufs)
int(* dao_virtio_netdev_mac_set_cb_t)(uint16_t devid, uint8_t *mac)
int(* dao_virtio_netdev_rss_cb_t)(uint16_t devid, struct virtio_net_ctrl_rss *rss)
dao_virtio_net_enq_fn_t dao_virtio_net_enq_ops_fns[]
int dao_virtio_netdev_queue_count_max(uint16_t pem_devid, uint16_t devid)
int dao_virtio_netdev_queue_count(uint16_t devid)
int(* dao_net_desc_manage_fn_t)(uint16_t devid, uint16_t qp_count)
uint64_t dao_virtio_netdev_feature_bits_get(uint16_t devid)
dao_virtio_netdev_rss_cb_t rss_cb
dao_virtio_netdev_status_cb_t status_cb
dao_virtio_netdev_promisc_cb_t promisc_cb
dao_virtio_netdev_mac_set_cb_t mac_set
dao_virtio_netdev_extbuf_get extbuf_get
dao_virtio_netdev_vlan_t vlan_add
dao_virtio_netdev_extbuf_put extbuf_put
dao_virtio_netdev_vlan_t vlan_del
dao_virtio_netdev_allmulti_cb_t allmulti_cb
dao_virtio_netdev_mac_add_cb_t mac_add
dao_virtio_netdev_mq_cfg_t mq_configure
uint8_t mac[VIRTIO_NET_ETHER_ADDR_LEN]
struct dao_virtio_netdev_link_info link_info
uint16_t max_virt_qps_limit
struct rte_mempool * pool
void *qs[DAO_VIRTIO_MAX_QUEUES] __rte_cache_aligned