According to the Rx/Tx burst function that's selected currently, format the distinct burst description information for apps to query.
Signed-off-by: Haiyue Wang <haiyue.w...@intel.com> --- drivers/net/ice/ice_ethdev.c | 26 ++++++++++++++++++++++ drivers/net/ice/ice_rxtx.c | 52 ++++++++++++++++++++++++++++++++++++++++++++ drivers/net/ice/ice_rxtx.h | 4 ++++ 3 files changed, 82 insertions(+) diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index 44a14cb..bad5c23 100644 --- a/drivers/net/ice/ice_ethdev.c +++ b/drivers/net/ice/ice_ethdev.c @@ -99,6 +99,8 @@ static int ice_dev_udp_tunnel_port_add(struct rte_eth_dev *dev, struct rte_eth_udp_tunnel *udp_tunnel); static int ice_dev_udp_tunnel_port_del(struct rte_eth_dev *dev, struct rte_eth_udp_tunnel *udp_tunnel); +static int ice_trace_info_get(struct rte_eth_dev *dev, uint16_t queue_id, + enum rte_eth_trace type, char *buf, int sz); static const struct rte_pci_id pci_id_ice_map[] = { { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_E810C_BACKPLANE) }, @@ -147,6 +149,7 @@ static const struct eth_dev_ops ice_eth_dev_ops = { .vlan_pvid_set = ice_vlan_pvid_set, .rxq_info_get = ice_rxq_info_get, .txq_info_get = ice_txq_info_get, + .trace_info_get = ice_trace_info_get, .get_eeprom_length = ice_get_eeprom_length, .get_eeprom = ice_get_eeprom, .rx_queue_count = ice_rx_queue_count, @@ -3765,6 +3768,29 @@ ice_dev_udp_tunnel_port_del(struct rte_eth_dev *dev, } static int +ice_trace_info_get(struct rte_eth_dev *dev, uint16_t queue_id, + enum rte_eth_trace type, char *buf, int sz) +{ + int ret; + + switch (type) { + case ETH_TRACE_RX_BURST: + ret = ice_rx_burst_info_get(dev, queue_id, buf, sz); + break; + + case ETH_TRACE_TX_BURST: + ret = ice_tx_burst_info_get(dev, queue_id, buf, sz); + break; + + default: + ret = -ENOTSUP; + break; + } + + return ret; +} + +static int ice_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *pci_dev) { diff --git a/drivers/net/ice/ice_rxtx.c b/drivers/net/ice/ice_rxtx.c index 0282b53..43d52c2 100644 --- a/drivers/net/ice/ice_rxtx.c +++ b/drivers/net/ice/ice_rxtx.c @@ -2385,6 +2385,35 @@ ice_set_rx_function(struct rte_eth_dev *dev) } } +int +ice_rx_burst_info_get(struct rte_eth_dev *dev, __rte_unused uint16_t queue_id, + char *buf, int sz) +{ + int len = 0; + + if (dev->rx_pkt_burst == ice_recv_scattered_pkts) + len = snprintf(buf, sz, "Scattered Rx"); + else if (dev->rx_pkt_burst == ice_recv_pkts_bulk_alloc) + len = snprintf(buf, sz, "Bulk Rx"); + else if (dev->rx_pkt_burst == ice_recv_pkts) + len = snprintf(buf, sz, "Normal Rx"); +#ifdef RTE_ARCH_X86 + else if (dev->rx_pkt_burst == ice_recv_scattered_pkts_vec_avx2) + len = snprintf(buf, sz, "AVX2 Vector Scattered Rx"); + else if (dev->rx_pkt_burst == ice_recv_scattered_pkts_vec) + len = snprintf(buf, sz, "Vector Scattered Rx"); + else if (dev->rx_pkt_burst == ice_recv_pkts_vec_avx2) + len = snprintf(buf, sz, "AVX2 Vector Rx"); + else if (dev->rx_pkt_burst == ice_recv_pkts_vec) + len = snprintf(buf, sz, "Vector Rx"); +#endif + + if (len >= sz) + len = -ENOSPC; /* The output was truncated */ + + return len; +} + void __attribute__((cold)) ice_set_tx_function_flag(struct rte_eth_dev *dev, struct ice_tx_queue *txq) { @@ -2454,6 +2483,29 @@ ice_prep_pkts(__rte_unused void *tx_queue, struct rte_mbuf **tx_pkts, return i; } +int +ice_tx_burst_info_get(struct rte_eth_dev *dev, __rte_unused uint16_t queue_id, + char *buf, int sz) +{ + int len = 0; + + if (dev->tx_pkt_burst == ice_xmit_pkts_simple) + len = snprintf(buf, sz, "Simple Tx"); + else if (dev->tx_pkt_burst == ice_xmit_pkts) + len = snprintf(buf, sz, "Normal Tx"); +#ifdef RTE_ARCH_X86 + else if (dev->tx_pkt_burst == ice_xmit_pkts_vec_avx2) + len = snprintf(buf, sz, "AVX2 Vector Tx"); + else if (dev->tx_pkt_burst == ice_xmit_pkts_vec) + len = snprintf(buf, sz, "Vector Tx"); +#endif + + if (len >= sz) + len = -ENOSPC; /* The output was truncated */ + + return len; +} + void __attribute__((cold)) ice_set_tx_function(struct rte_eth_dev *dev) { diff --git a/drivers/net/ice/ice_rxtx.h b/drivers/net/ice/ice_rxtx.h index e921411..f951088 100644 --- a/drivers/net/ice/ice_rxtx.h +++ b/drivers/net/ice/ice_rxtx.h @@ -188,4 +188,8 @@ uint16_t ice_recv_scattered_pkts_vec_avx2(void *rx_queue, uint16_t nb_pkts); uint16_t ice_xmit_pkts_vec_avx2(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); +int ice_rx_burst_info_get(struct rte_eth_dev *dev, uint16_t queue_id, + char *buf, int sz); +int ice_tx_burst_info_get(struct rte_eth_dev *dev, uint16_t queue_id, + char *buf, int sz); #endif /* _ICE_RXTX_H_ */ -- 2.7.4