net/avp: add device statistics operations
Adds device functions to query and reset statistics. Signed-off-by: Allain Legacy <allain.legacy@windriver.com> Acked-by: Vincent Jardin <vincent.jardin@6wind.com>
This commit is contained in:
parent
295abce2d2
commit
5a5abe2de9
@ -9,5 +9,7 @@ Jumbo frame = Y
|
|||||||
Scattered Rx = Y
|
Scattered Rx = Y
|
||||||
Unicast MAC filter = Y
|
Unicast MAC filter = Y
|
||||||
VLAN offload = Y
|
VLAN offload = Y
|
||||||
|
Basic stats = Y
|
||||||
|
Stats per queue = Y
|
||||||
Linux UIO = Y
|
Linux UIO = Y
|
||||||
x86-64 = Y
|
x86-64 = Y
|
||||||
|
@ -98,6 +98,10 @@ static uint16_t avp_xmit_pkts(void *tx_queue,
|
|||||||
static void avp_dev_rx_queue_release(void *rxq);
|
static void avp_dev_rx_queue_release(void *rxq);
|
||||||
static void avp_dev_tx_queue_release(void *txq);
|
static void avp_dev_tx_queue_release(void *txq);
|
||||||
|
|
||||||
|
static void avp_dev_stats_get(struct rte_eth_dev *dev,
|
||||||
|
struct rte_eth_stats *stats);
|
||||||
|
static void avp_dev_stats_reset(struct rte_eth_dev *dev);
|
||||||
|
|
||||||
|
|
||||||
#define AVP_DEV_TO_PCI(eth_dev) RTE_DEV_TO_PCI((eth_dev)->device)
|
#define AVP_DEV_TO_PCI(eth_dev) RTE_DEV_TO_PCI((eth_dev)->device)
|
||||||
|
|
||||||
@ -145,6 +149,8 @@ static const struct eth_dev_ops avp_eth_dev_ops = {
|
|||||||
.dev_configure = avp_dev_configure,
|
.dev_configure = avp_dev_configure,
|
||||||
.dev_infos_get = avp_dev_info_get,
|
.dev_infos_get = avp_dev_info_get,
|
||||||
.vlan_offload_set = avp_vlan_offload_set,
|
.vlan_offload_set = avp_vlan_offload_set,
|
||||||
|
.stats_get = avp_dev_stats_get,
|
||||||
|
.stats_reset = avp_dev_stats_reset,
|
||||||
.link_update = avp_dev_link_update,
|
.link_update = avp_dev_link_update,
|
||||||
.rx_queue_setup = avp_dev_rx_queue_setup,
|
.rx_queue_setup = avp_dev_rx_queue_setup,
|
||||||
.rx_queue_release = avp_dev_rx_queue_release,
|
.rx_queue_release = avp_dev_rx_queue_release,
|
||||||
@ -1718,5 +1724,67 @@ avp_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
avp_dev_stats_get(struct rte_eth_dev *eth_dev, struct rte_eth_stats *stats)
|
||||||
|
{
|
||||||
|
struct avp_dev *avp = AVP_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < avp->num_rx_queues; i++) {
|
||||||
|
struct avp_queue *rxq = avp->dev_data->rx_queues[i];
|
||||||
|
|
||||||
|
if (rxq) {
|
||||||
|
stats->ipackets += rxq->packets;
|
||||||
|
stats->ibytes += rxq->bytes;
|
||||||
|
stats->ierrors += rxq->errors;
|
||||||
|
|
||||||
|
stats->q_ipackets[i] += rxq->packets;
|
||||||
|
stats->q_ibytes[i] += rxq->bytes;
|
||||||
|
stats->q_errors[i] += rxq->errors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < avp->num_tx_queues; i++) {
|
||||||
|
struct avp_queue *txq = avp->dev_data->tx_queues[i];
|
||||||
|
|
||||||
|
if (txq) {
|
||||||
|
stats->opackets += txq->packets;
|
||||||
|
stats->obytes += txq->bytes;
|
||||||
|
stats->oerrors += txq->errors;
|
||||||
|
|
||||||
|
stats->q_opackets[i] += txq->packets;
|
||||||
|
stats->q_obytes[i] += txq->bytes;
|
||||||
|
stats->q_errors[i] += txq->errors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
avp_dev_stats_reset(struct rte_eth_dev *eth_dev)
|
||||||
|
{
|
||||||
|
struct avp_dev *avp = AVP_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < avp->num_rx_queues; i++) {
|
||||||
|
struct avp_queue *rxq = avp->dev_data->rx_queues[i];
|
||||||
|
|
||||||
|
if (rxq) {
|
||||||
|
rxq->bytes = 0;
|
||||||
|
rxq->packets = 0;
|
||||||
|
rxq->errors = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < avp->num_tx_queues; i++) {
|
||||||
|
struct avp_queue *txq = avp->dev_data->tx_queues[i];
|
||||||
|
|
||||||
|
if (txq) {
|
||||||
|
txq->bytes = 0;
|
||||||
|
txq->packets = 0;
|
||||||
|
txq->errors = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RTE_PMD_REGISTER_PCI(net_avp, rte_avp_pmd.pci_drv);
|
RTE_PMD_REGISTER_PCI(net_avp, rte_avp_pmd.pci_drv);
|
||||||
RTE_PMD_REGISTER_PCI_TABLE(net_avp, pci_id_avp_map);
|
RTE_PMD_REGISTER_PCI_TABLE(net_avp, pci_id_avp_map);
|
||||||
|
Loading…
Reference in New Issue
Block a user