net/octeontx2: add Rx/Tx burst mode info
Retrieve burst mode information according to the selected Rx/Tx mode and offloads. Signed-off-by: Sunil Kumar Kori <skori@marvell.com> Acked-by: Jerin Jacob <jerinj@marvell.com>
This commit is contained in:
parent
1bcec6ee08
commit
53de676f8b
@ -13,6 +13,7 @@ Link status = Y
|
||||
Link status event = Y
|
||||
Runtime Rx queue setup = Y
|
||||
Runtime Tx queue setup = Y
|
||||
Burst mode info = Y
|
||||
Fast mbuf free = Y
|
||||
Free Tx mbuf on demand = Y
|
||||
Queue start/stop = Y
|
||||
|
@ -12,6 +12,7 @@ Link status = Y
|
||||
Link status event = Y
|
||||
Runtime Rx queue setup = Y
|
||||
Runtime Tx queue setup = Y
|
||||
Burst mode info = Y
|
||||
Fast mbuf free = Y
|
||||
Free Tx mbuf on demand = Y
|
||||
Queue start/stop = Y
|
||||
|
@ -12,6 +12,7 @@ Link status = Y
|
||||
Link status event = Y
|
||||
Runtime Rx queue setup = Y
|
||||
Runtime Tx queue setup = Y
|
||||
Burst mode info = Y
|
||||
Fast mbuf free = Y
|
||||
Free Tx mbuf on demand = Y
|
||||
Queue start/stop = Y
|
||||
|
@ -2009,6 +2009,8 @@ static const struct eth_dev_ops otx2_eth_dev_ops = {
|
||||
.xstats_get_names_by_id = otx2_nix_xstats_get_names_by_id,
|
||||
.rxq_info_get = otx2_nix_rxq_info_get,
|
||||
.txq_info_get = otx2_nix_txq_info_get,
|
||||
.rx_burst_mode_get = otx2_rx_burst_mode_get,
|
||||
.tx_burst_mode_get = otx2_tx_burst_mode_get,
|
||||
.rx_queue_count = otx2_nix_rx_queue_count,
|
||||
.rx_descriptor_done = otx2_nix_rx_descriptor_done,
|
||||
.rx_descriptor_status = otx2_nix_rx_descriptor_status,
|
||||
|
@ -390,6 +390,10 @@ void otx2_nix_rxq_info_get(struct rte_eth_dev *eth_dev, uint16_t queue_id,
|
||||
struct rte_eth_rxq_info *qinfo);
|
||||
void otx2_nix_txq_info_get(struct rte_eth_dev *eth_dev, uint16_t queue_id,
|
||||
struct rte_eth_txq_info *qinfo);
|
||||
int otx2_rx_burst_mode_get(struct rte_eth_dev *dev, uint16_t queue_id,
|
||||
struct rte_eth_burst_mode *mode);
|
||||
int otx2_tx_burst_mode_get(struct rte_eth_dev *dev, uint16_t queue_id,
|
||||
struct rte_eth_burst_mode *mode);
|
||||
uint32_t otx2_nix_rx_queue_count(struct rte_eth_dev *eth_dev, uint16_t qidx);
|
||||
int otx2_nix_tx_done_cleanup(void *txq, uint32_t free_cnt);
|
||||
int otx2_nix_rx_descriptor_done(void *rxq, uint16_t offset);
|
||||
|
@ -2,6 +2,7 @@
|
||||
* Copyright(C) 2019 Marvell International Ltd.
|
||||
*/
|
||||
|
||||
#include <rte_ethdev.h>
|
||||
#include <rte_mbuf_pool_ops.h>
|
||||
|
||||
#include "otx2_ethdev.h"
|
||||
@ -225,6 +226,104 @@ otx2_nix_txq_info_get(struct rte_eth_dev *eth_dev, uint16_t queue_id,
|
||||
qinfo->conf.tx_deferred_start = 0;
|
||||
}
|
||||
|
||||
int
|
||||
otx2_rx_burst_mode_get(struct rte_eth_dev *eth_dev,
|
||||
__rte_unused uint16_t queue_id,
|
||||
struct rte_eth_burst_mode *mode)
|
||||
{
|
||||
ssize_t bytes = 0, str_size = RTE_ETH_BURST_MODE_INFO_SIZE, rc;
|
||||
struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev);
|
||||
const struct burst_info {
|
||||
uint16_t flags;
|
||||
const char *output;
|
||||
} rx_offload_map[] = {
|
||||
{NIX_RX_OFFLOAD_RSS_F, "RSS,"},
|
||||
{NIX_RX_OFFLOAD_PTYPE_F, " Ptype,"},
|
||||
{NIX_RX_OFFLOAD_CHECKSUM_F, " Checksum,"},
|
||||
{NIX_RX_OFFLOAD_VLAN_STRIP_F, " VLAN Strip,"},
|
||||
{NIX_RX_OFFLOAD_MARK_UPDATE_F, " Mark Update,"},
|
||||
{NIX_RX_OFFLOAD_TSTAMP_F, " Timestamp,"},
|
||||
{NIX_RX_MULTI_SEG_F, " Scattered,"}
|
||||
};
|
||||
static const char *const burst_mode[] = {"Vector Neon, Rx Offloads:",
|
||||
"Scalar, Rx Offloads:"
|
||||
};
|
||||
uint32_t i;
|
||||
|
||||
/* Update burst mode info */
|
||||
rc = rte_strscpy(mode->info + bytes, burst_mode[dev->scalar_ena],
|
||||
str_size - bytes);
|
||||
if (rc < 0)
|
||||
goto done;
|
||||
|
||||
bytes += rc;
|
||||
|
||||
/* Update Rx offload info */
|
||||
for (i = 0; i < RTE_DIM(rx_offload_map); i++) {
|
||||
if (dev->rx_offload_flags & rx_offload_map[i].flags) {
|
||||
rc = rte_strscpy(mode->info + bytes,
|
||||
rx_offload_map[i].output,
|
||||
str_size - bytes);
|
||||
if (rc < 0)
|
||||
goto done;
|
||||
|
||||
bytes += rc;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
otx2_tx_burst_mode_get(struct rte_eth_dev *eth_dev,
|
||||
__rte_unused uint16_t queue_id,
|
||||
struct rte_eth_burst_mode *mode)
|
||||
{
|
||||
ssize_t bytes = 0, str_size = RTE_ETH_BURST_MODE_INFO_SIZE, rc;
|
||||
struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev);
|
||||
const struct burst_info {
|
||||
uint16_t flags;
|
||||
const char *output;
|
||||
} tx_offload_map[] = {
|
||||
{NIX_TX_OFFLOAD_L3_L4_CSUM_F, " Inner L3/L4 csum,"},
|
||||
{NIX_TX_OFFLOAD_OL3_OL4_CSUM_F, " Outer L3/L4 csum,"},
|
||||
{NIX_TX_OFFLOAD_VLAN_QINQ_F, " VLAN Insertion,"},
|
||||
{NIX_TX_OFFLOAD_MBUF_NOFF_F, " MBUF free disable,"},
|
||||
{NIX_TX_OFFLOAD_TSTAMP_F, " Timestamp,"},
|
||||
{NIX_TX_OFFLOAD_TSO_F, " TSO,"},
|
||||
{NIX_TX_MULTI_SEG_F, " Scattered,"}
|
||||
};
|
||||
static const char *const burst_mode[] = {"Vector Neon, Tx Offloads:",
|
||||
"Scalar, Tx Offloads:"
|
||||
};
|
||||
uint32_t i;
|
||||
|
||||
/* Update burst mode info */
|
||||
rc = rte_strscpy(mode->info + bytes, burst_mode[dev->scalar_ena],
|
||||
str_size - bytes);
|
||||
if (rc < 0)
|
||||
goto done;
|
||||
|
||||
bytes += rc;
|
||||
|
||||
/* Update Tx offload info */
|
||||
for (i = 0; i < RTE_DIM(tx_offload_map); i++) {
|
||||
if (dev->tx_offload_flags & tx_offload_map[i].flags) {
|
||||
rc = rte_strscpy(mode->info + bytes,
|
||||
tx_offload_map[i].output,
|
||||
str_size - bytes);
|
||||
if (rc < 0)
|
||||
goto done;
|
||||
|
||||
bytes += rc;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
nix_rx_head_tail_get(struct otx2_eth_dev *dev,
|
||||
uint32_t *head, uint32_t *tail, uint16_t queue_idx)
|
||||
|
Loading…
Reference in New Issue
Block a user