@@ -14523,6 +14523,70 @@ static const struct net_device_ops bnxt_netdev_ops = {
14523
14523
.ndo_bridge_setlink = bnxt_bridge_setlink ,
14524
14524
};
14525
14525
14526
+ static void bnxt_get_queue_stats_rx (struct net_device * dev , int i ,
14527
+ struct netdev_queue_stats_rx * stats )
14528
+ {
14529
+ struct bnxt * bp = netdev_priv (dev );
14530
+ struct bnxt_cp_ring_info * cpr ;
14531
+ u64 * sw ;
14532
+
14533
+ cpr = & bp -> bnapi [i ]-> cp_ring ;
14534
+ sw = cpr -> stats .sw_stats ;
14535
+
14536
+ stats -> packets = 0 ;
14537
+ stats -> packets += BNXT_GET_RING_STATS64 (sw , rx_ucast_pkts );
14538
+ stats -> packets += BNXT_GET_RING_STATS64 (sw , rx_mcast_pkts );
14539
+ stats -> packets += BNXT_GET_RING_STATS64 (sw , rx_bcast_pkts );
14540
+
14541
+ stats -> bytes = 0 ;
14542
+ stats -> bytes += BNXT_GET_RING_STATS64 (sw , rx_ucast_bytes );
14543
+ stats -> bytes += BNXT_GET_RING_STATS64 (sw , rx_mcast_bytes );
14544
+ stats -> bytes += BNXT_GET_RING_STATS64 (sw , rx_bcast_bytes );
14545
+
14546
+ stats -> alloc_fail = cpr -> sw_stats .rx .rx_oom_discards ;
14547
+ }
14548
+
14549
+ static void bnxt_get_queue_stats_tx (struct net_device * dev , int i ,
14550
+ struct netdev_queue_stats_tx * stats )
14551
+ {
14552
+ struct bnxt * bp = netdev_priv (dev );
14553
+ struct bnxt_napi * bnapi ;
14554
+ u64 * sw ;
14555
+
14556
+ bnapi = bp -> tx_ring [bp -> tx_ring_map [i ]].bnapi ;
14557
+ sw = bnapi -> cp_ring .stats .sw_stats ;
14558
+
14559
+ stats -> packets = 0 ;
14560
+ stats -> packets += BNXT_GET_RING_STATS64 (sw , tx_ucast_pkts );
14561
+ stats -> packets += BNXT_GET_RING_STATS64 (sw , tx_mcast_pkts );
14562
+ stats -> packets += BNXT_GET_RING_STATS64 (sw , tx_bcast_pkts );
14563
+
14564
+ stats -> bytes = 0 ;
14565
+ stats -> bytes += BNXT_GET_RING_STATS64 (sw , tx_ucast_bytes );
14566
+ stats -> bytes += BNXT_GET_RING_STATS64 (sw , tx_mcast_bytes );
14567
+ stats -> bytes += BNXT_GET_RING_STATS64 (sw , tx_bcast_bytes );
14568
+ }
14569
+
14570
+ static void bnxt_get_base_stats (struct net_device * dev ,
14571
+ struct netdev_queue_stats_rx * rx ,
14572
+ struct netdev_queue_stats_tx * tx )
14573
+ {
14574
+ struct bnxt * bp = netdev_priv (dev );
14575
+
14576
+ rx -> packets = bp -> net_stats_prev .rx_packets ;
14577
+ rx -> bytes = bp -> net_stats_prev .rx_bytes ;
14578
+ rx -> alloc_fail = bp -> ring_err_stats_prev .rx_total_oom_discards ;
14579
+
14580
+ tx -> packets = bp -> net_stats_prev .tx_packets ;
14581
+ tx -> bytes = bp -> net_stats_prev .tx_bytes ;
14582
+ }
14583
+
14584
+ static const struct netdev_stat_ops bnxt_stat_ops = {
14585
+ .get_queue_stats_rx = bnxt_get_queue_stats_rx ,
14586
+ .get_queue_stats_tx = bnxt_get_queue_stats_tx ,
14587
+ .get_base_stats = bnxt_get_base_stats ,
14588
+ };
14589
+
14526
14590
static void bnxt_remove_one (struct pci_dev * pdev )
14527
14591
{
14528
14592
struct net_device * dev = pci_get_drvdata (pdev );
@@ -14970,6 +15034,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
14970
15034
goto init_err_free ;
14971
15035
14972
15036
dev -> netdev_ops = & bnxt_netdev_ops ;
15037
+ dev -> stat_ops = & bnxt_stat_ops ;
14973
15038
dev -> watchdog_timeo = BNXT_TX_TIMEOUT ;
14974
15039
dev -> ethtool_ops = & bnxt_ethtool_ops ;
14975
15040
pci_set_drvdata (pdev , dev );
0 commit comments