| 677 | } |
| 678 | |
| 679 | static int |
| 680 | sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) |
| 681 | { |
| 682 | const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev); |
| 683 | bool have_dp_rx_stats = sap->dp_rx->features & SFC_DP_RX_FEAT_STATS; |
| 684 | bool have_dp_tx_stats = sap->dp_tx->features & SFC_DP_TX_FEAT_STATS; |
| 685 | struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); |
| 686 | struct sfc_port *port = &sa->port; |
| 687 | uint64_t *mac_stats; |
| 688 | int ret; |
| 689 | |
| 690 | sfc_adapter_lock(sa); |
| 691 | |
| 692 | if (have_dp_rx_stats) { |
| 693 | sfc_stats_get_dp_rx(sa, &stats->ipackets, &stats->ibytes); |
| 694 | if (dev->data->dev_conf.rxmode.offloads & |
| 695 | RTE_ETH_RX_OFFLOAD_KEEP_CRC) { |
| 696 | stats->ibytes -= stats->ipackets * RTE_ETHER_CRC_LEN; |
| 697 | } |
| 698 | } |
| 699 | if (have_dp_tx_stats) |
| 700 | sfc_stats_get_dp_tx(sa, &stats->opackets, &stats->obytes); |
| 701 | |
| 702 | ret = sfc_port_update_mac_stats(sa, B_FALSE); |
| 703 | if (ret != 0) |
| 704 | goto unlock; |
| 705 | |
| 706 | mac_stats = port->mac_stats_buf; |
| 707 | |
| 708 | if (EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, |
| 709 | EFX_MAC_VADAPTER_RX_UNICAST_PACKETS)) { |
| 710 | if (!have_dp_rx_stats) { |
| 711 | stats->ipackets = |
| 712 | mac_stats[EFX_MAC_VADAPTER_RX_UNICAST_PACKETS] + |
| 713 | mac_stats[EFX_MAC_VADAPTER_RX_MULTICAST_PACKETS] + |
| 714 | mac_stats[EFX_MAC_VADAPTER_RX_BROADCAST_PACKETS]; |
| 715 | stats->ibytes = |
| 716 | mac_stats[EFX_MAC_VADAPTER_RX_UNICAST_BYTES] + |
| 717 | mac_stats[EFX_MAC_VADAPTER_RX_MULTICAST_BYTES] + |
| 718 | mac_stats[EFX_MAC_VADAPTER_RX_BROADCAST_BYTES]; |
| 719 | |
| 720 | /* CRC is included in these stats, but shouldn't be */ |
| 721 | stats->ibytes -= stats->ipackets * RTE_ETHER_CRC_LEN; |
| 722 | } |
| 723 | if (!have_dp_tx_stats) { |
| 724 | stats->opackets = |
| 725 | mac_stats[EFX_MAC_VADAPTER_TX_UNICAST_PACKETS] + |
| 726 | mac_stats[EFX_MAC_VADAPTER_TX_MULTICAST_PACKETS] + |
| 727 | mac_stats[EFX_MAC_VADAPTER_TX_BROADCAST_PACKETS]; |
| 728 | stats->obytes = |
| 729 | mac_stats[EFX_MAC_VADAPTER_TX_UNICAST_BYTES] + |
| 730 | mac_stats[EFX_MAC_VADAPTER_TX_MULTICAST_BYTES] + |
| 731 | mac_stats[EFX_MAC_VADAPTER_TX_BROADCAST_BYTES]; |
| 732 | |
| 733 | /* CRC is included in these stats, but shouldn't be */ |
| 734 | stats->obytes -= stats->opackets * RTE_ETHER_CRC_LEN; |
| 735 | } |
| 736 | stats->imissed = mac_stats[EFX_MAC_VADAPTER_RX_BAD_PACKETS]; |
nothing calls this directly
no test coverage detected