net/enetc: add basic statistics
Enable basic statistics APIs enetc_stats_get and enetc_stats_reset. Signed-off-by: Gagandeep Singh <g.singh@nxp.com>
This commit is contained in:
parent
45e9be8b6c
commit
01128d3103
@ -46,6 +46,7 @@ ENETC Features
|
||||
|
||||
- Link Status
|
||||
- Packet type information
|
||||
- Basic stats
|
||||
|
||||
NIC Driver (PMD)
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
@ -6,6 +6,7 @@
|
||||
[Features]
|
||||
Packet type parsing = Y
|
||||
Link status = Y
|
||||
Basic stats = Y
|
||||
Linux VFIO = Y
|
||||
ARMv8 = Y
|
||||
Usage doc = Y
|
||||
|
@ -148,6 +148,7 @@ New Features
|
||||
|
||||
* Added physical addressing mode support
|
||||
* Added SXGMII interface support
|
||||
* Added basic statistics support
|
||||
|
||||
* **Updated the QuickAssist Technology PMD.**
|
||||
|
||||
|
@ -115,8 +115,33 @@ enum enetc_bdr_type {TX, RX};
|
||||
#define ENETC_G_EIPBRR0 0x00bf8
|
||||
#define ENETC_G_EIPBRR1 0x00bfc
|
||||
|
||||
|
||||
/* MAC Counters */
|
||||
/* Config register to reset counters*/
|
||||
#define ENETC_PM0_STAT_CONFIG 0x080E0
|
||||
/* Receive frames counter without error */
|
||||
#define ENETC_PM0_RFRM 0x08120
|
||||
/* Receive packets counter, good + bad */
|
||||
#define ENETC_PM0_RPKT 0x08160
|
||||
/* Received octets, good + bad */
|
||||
#define ENETC_PM0_REOCT 0x08120
|
||||
/* Transmit octets, good + bad */
|
||||
#define ENETC_PM0_TEOCT 0x08200
|
||||
/* Transmit frames counter without error */
|
||||
#define ENETC_PM0_TFRM 0x08220
|
||||
/* Transmit packets counter, good + bad */
|
||||
#define ENETC_PM0_TPKT 0x08260
|
||||
/* Dropped not Truncated packets counter */
|
||||
#define ENETC_PM0_RDRNTP 0x081C8
|
||||
/* Dropped + trucated packets counter */
|
||||
#define ENETC_PM0_RDRP 0x08158
|
||||
/* Receive packets error counter */
|
||||
#define ENETC_PM0_RERR 0x08138
|
||||
/* Transmit packets error counter */
|
||||
#define ENETC_PM0_TERR 0x08238
|
||||
|
||||
/* Stats Reset Bit*/
|
||||
#define ENETC_CLEAR_STATS BIT(2)
|
||||
|
||||
#define ENETC_G_EPFBLPR(n) (0xd00 + 4 * (n))
|
||||
#define ENETC_G_EPFBLPR1_XGMII 0x80000000
|
||||
|
||||
|
@ -29,6 +29,9 @@ static int enetc_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id,
|
||||
const struct rte_eth_txconf *tx_conf);
|
||||
static void enetc_tx_queue_release(void *txq);
|
||||
static const uint32_t *enetc_supported_ptypes_get(struct rte_eth_dev *dev);
|
||||
static int enetc_stats_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_stats *stats);
|
||||
static void enetc_stats_reset(struct rte_eth_dev *dev);
|
||||
|
||||
/*
|
||||
* The set of PCI devices this driver supports
|
||||
@ -46,6 +49,8 @@ static const struct eth_dev_ops enetc_ops = {
|
||||
.dev_stop = enetc_dev_stop,
|
||||
.dev_close = enetc_dev_close,
|
||||
.link_update = enetc_link_update,
|
||||
.stats_get = enetc_stats_get,
|
||||
.stats_reset = enetc_stats_reset,
|
||||
.dev_infos_get = enetc_dev_infos_get,
|
||||
.rx_queue_setup = enetc_rx_queue_setup,
|
||||
.rx_queue_release = enetc_rx_queue_release,
|
||||
@ -608,6 +613,42 @@ enetc_rx_queue_release(void *rxq)
|
||||
rte_free(rx_ring);
|
||||
}
|
||||
|
||||
static
|
||||
int enetc_stats_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_stats *stats)
|
||||
{
|
||||
struct enetc_eth_hw *hw =
|
||||
ENETC_DEV_PRIVATE_TO_HW(dev->data->dev_private);
|
||||
struct enetc_hw *enetc_hw = &hw->hw;
|
||||
|
||||
/* Total received packets, bad + good, if we want to get counters of
|
||||
* only good received packets then use ENETC_PM0_RFRM,
|
||||
* ENETC_PM0_TFRM registers.
|
||||
*/
|
||||
stats->ipackets = enetc_port_rd(enetc_hw, ENETC_PM0_RPKT);
|
||||
stats->opackets = enetc_port_rd(enetc_hw, ENETC_PM0_TPKT);
|
||||
stats->ibytes = enetc_port_rd(enetc_hw, ENETC_PM0_REOCT);
|
||||
stats->obytes = enetc_port_rd(enetc_hw, ENETC_PM0_TEOCT);
|
||||
/* Dropped + Truncated packets, use ENETC_PM0_RDRNTP for without
|
||||
* truncated packets
|
||||
*/
|
||||
stats->imissed = enetc_port_rd(enetc_hw, ENETC_PM0_RDRP);
|
||||
stats->ierrors = enetc_port_rd(enetc_hw, ENETC_PM0_RERR);
|
||||
stats->oerrors = enetc_port_rd(enetc_hw, ENETC_PM0_TERR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
enetc_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct enetc_eth_hw *hw =
|
||||
ENETC_DEV_PRIVATE_TO_HW(dev->data->dev_private);
|
||||
struct enetc_hw *enetc_hw = &hw->hw;
|
||||
|
||||
enetc_port_wr(enetc_hw, ENETC_PM0_STAT_CONFIG, ENETC_CLEAR_STATS);
|
||||
}
|
||||
|
||||
static int
|
||||
enetc_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
|
||||
struct rte_pci_device *pci_dev)
|
||||
|
Loading…
x
Reference in New Issue
Block a user