@@ -99,6 +99,86 @@ static const struct nfp_et_stat nfp_net_et_stats[] = {
99
99
{ "bpf_app3_bytes" , NFP_NET_CFG_STATS_APP3_BYTES },
100
100
};
101
101
102
+ static const struct nfp_et_stat nfp_mac_et_stats [] = {
103
+ { "rx_octets" , NFP_MAC_STATS_RX_IN_OCTETS , },
104
+ { "rx_frame_too_long_errors" ,
105
+ NFP_MAC_STATS_RX_FRAME_TOO_LONG_ERRORS , },
106
+ { "rx_range_length_errors" , NFP_MAC_STATS_RX_RANGE_LENGTH_ERRORS , },
107
+ { "rx_vlan_reveive_ok" , NFP_MAC_STATS_RX_VLAN_REVEIVE_OK , },
108
+ { "rx_errors" , NFP_MAC_STATS_RX_IN_ERRORS , },
109
+ { "rx_broadcast_pkts" , NFP_MAC_STATS_RX_IN_BROADCAST_PKTS , },
110
+ { "rx_drop_events" , NFP_MAC_STATS_RX_DROP_EVENTS , },
111
+ { "rx_alignment_errors" , NFP_MAC_STATS_RX_ALIGNMENT_ERRORS , },
112
+ { "rx_pause_mac_ctrl_frames" ,
113
+ NFP_MAC_STATS_RX_PAUSE_MAC_CTRL_FRAMES , },
114
+ { "rx_frames_received_ok" , NFP_MAC_STATS_RX_FRAMES_RECEIVED_OK , },
115
+ { "rx_frame_check_sequence_errors" ,
116
+ NFP_MAC_STATS_RX_FRAME_CHECK_SEQUENCE_ERRORS , },
117
+ { "rx_unicast_pkts" , NFP_MAC_STATS_RX_UNICAST_PKTS , },
118
+ { "rx_multicast_pkts" , NFP_MAC_STATS_RX_MULTICAST_PKTS , },
119
+ { "rx_pkts" , NFP_MAC_STATS_RX_PKTS , },
120
+ { "rx_undersize_pkts" , NFP_MAC_STATS_RX_UNDERSIZE_PKTS , },
121
+ { "rx_pkts_64_octets" , NFP_MAC_STATS_RX_PKTS_64_OCTETS , },
122
+ { "rx_pkts_65_to_127_octets" ,
123
+ NFP_MAC_STATS_RX_PKTS_65_TO_127_OCTETS , },
124
+ { "rx_pkts_128_to_255_octets" ,
125
+ NFP_MAC_STATS_RX_PKTS_128_TO_255_OCTETS , },
126
+ { "rx_pkts_256_to_511_octets" ,
127
+ NFP_MAC_STATS_RX_PKTS_256_TO_511_OCTETS , },
128
+ { "rx_pkts_512_to_1023_octets" ,
129
+ NFP_MAC_STATS_RX_PKTS_512_TO_1023_OCTETS , },
130
+ { "rx_pkts_1024_to_1518_octets" ,
131
+ NFP_MAC_STATS_RX_PKTS_1024_TO_1518_OCTETS , },
132
+ { "rx_pkts_1519_to_max_octets" ,
133
+ NFP_MAC_STATS_RX_PKTS_1519_TO_MAX_OCTETS , },
134
+ { "rx_jabbers" , NFP_MAC_STATS_RX_JABBERS , },
135
+ { "rx_fragments" , NFP_MAC_STATS_RX_FRAGMENTS , },
136
+ { "rx_oversize_pkts" , NFP_MAC_STATS_RX_OVERSIZE_PKTS , },
137
+ { "rx_pause_frames_class0" , NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS0 , },
138
+ { "rx_pause_frames_class1" , NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS1 , },
139
+ { "rx_pause_frames_class2" , NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS2 , },
140
+ { "rx_pause_frames_class3" , NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS3 , },
141
+ { "rx_pause_frames_class4" , NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS4 , },
142
+ { "rx_pause_frames_class5" , NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS5 , },
143
+ { "rx_pause_frames_class6" , NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS6 , },
144
+ { "rx_pause_frames_class7" , NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS7 , },
145
+ { "rx_mac_ctrl_frames_received" ,
146
+ NFP_MAC_STATS_RX_MAC_CTRL_FRAMES_RECEIVED , },
147
+ { "rx_mac_head_drop" , NFP_MAC_STATS_RX_MAC_HEAD_DROP , },
148
+ { "tx_queue_drop" , NFP_MAC_STATS_TX_QUEUE_DROP , },
149
+ { "tx_octets" , NFP_MAC_STATS_TX_OUT_OCTETS , },
150
+ { "tx_vlan_transmitted_ok" , NFP_MAC_STATS_TX_VLAN_TRANSMITTED_OK , },
151
+ { "tx_errors" , NFP_MAC_STATS_TX_OUT_ERRORS , },
152
+ { "tx_broadcast_pkts" , NFP_MAC_STATS_TX_BROADCAST_PKTS , },
153
+ { "tx_pause_mac_ctrl_frames" ,
154
+ NFP_MAC_STATS_TX_PAUSE_MAC_CTRL_FRAMES , },
155
+ { "tx_frames_transmitted_ok" ,
156
+ NFP_MAC_STATS_TX_FRAMES_TRANSMITTED_OK , },
157
+ { "tx_unicast_pkts" , NFP_MAC_STATS_TX_UNICAST_PKTS , },
158
+ { "tx_multicast_pkts" , NFP_MAC_STATS_TX_MULTICAST_PKTS , },
159
+ { "tx_pkts_64_octets" , NFP_MAC_STATS_TX_PKTS_64_OCTETS , },
160
+ { "tx_pkts_65_to_127_octets" ,
161
+ NFP_MAC_STATS_TX_PKTS_65_TO_127_OCTETS , },
162
+ { "tx_pkts_128_to_255_octets" ,
163
+ NFP_MAC_STATS_TX_PKTS_128_TO_255_OCTETS , },
164
+ { "tx_pkts_256_to_511_octets" ,
165
+ NFP_MAC_STATS_TX_PKTS_256_TO_511_OCTETS , },
166
+ { "tx_pkts_512_to_1023_octets" ,
167
+ NFP_MAC_STATS_TX_PKTS_512_TO_1023_OCTETS , },
168
+ { "tx_pkts_1024_to_1518_octets" ,
169
+ NFP_MAC_STATS_TX_PKTS_1024_TO_1518_OCTETS , },
170
+ { "tx_pkts_1519_to_max_octets" ,
171
+ NFP_MAC_STATS_TX_PKTS_1519_TO_MAX_OCTETS , },
172
+ { "tx_pause_frames_class0" , NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS0 , },
173
+ { "tx_pause_frames_class1" , NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS1 , },
174
+ { "tx_pause_frames_class2" , NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS2 , },
175
+ { "tx_pause_frames_class3" , NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS3 , },
176
+ { "tx_pause_frames_class4" , NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS4 , },
177
+ { "tx_pause_frames_class5" , NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS5 , },
178
+ { "tx_pause_frames_class6" , NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS6 , },
179
+ { "tx_pause_frames_class7" , NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS7 , },
180
+ };
181
+
102
182
#define NN_ET_GLOBAL_STATS_LEN ARRAY_SIZE(nfp_net_et_stats)
103
183
#define NN_ET_RVEC_GATHER_STATS 7
104
184
@@ -459,6 +539,47 @@ nfp_vnic_get_hw_stats(u64 *data, u8 __iomem *mem,
459
539
return data ;
460
540
}
461
541
542
+ static unsigned int nfp_mac_get_stats_count (struct net_device * netdev )
543
+ {
544
+ struct nfp_port * port ;
545
+
546
+ port = nfp_port_from_netdev (netdev );
547
+ if (!__nfp_port_get_eth_port (port ) || !port -> eth_stats )
548
+ return 0 ;
549
+
550
+ return ARRAY_SIZE (nfp_mac_et_stats );
551
+ }
552
+
553
+ static u8 * nfp_mac_get_stats_strings (struct net_device * netdev , u8 * data )
554
+ {
555
+ struct nfp_port * port ;
556
+ unsigned int i ;
557
+
558
+ port = nfp_port_from_netdev (netdev );
559
+ if (!__nfp_port_get_eth_port (port ) || !port -> eth_stats )
560
+ return data ;
561
+
562
+ for (i = 0 ; i < ARRAY_SIZE (nfp_mac_et_stats ); i ++ )
563
+ data = nfp_pr_et (data , "mac.%s" , nfp_mac_et_stats [i ].name );
564
+
565
+ return data ;
566
+ }
567
+
568
+ static u64 * nfp_mac_get_stats (struct net_device * netdev , u64 * data )
569
+ {
570
+ struct nfp_port * port ;
571
+ unsigned int i ;
572
+
573
+ port = nfp_port_from_netdev (netdev );
574
+ if (!__nfp_port_get_eth_port (port ) || !port -> eth_stats )
575
+ return data ;
576
+
577
+ for (i = 0 ; i < ARRAY_SIZE (nfp_mac_et_stats ); i ++ )
578
+ * data ++ = readq (port -> eth_stats + nfp_mac_et_stats [i ].off );
579
+
580
+ return data ;
581
+ }
582
+
462
583
static void nfp_net_get_strings (struct net_device * netdev ,
463
584
u32 stringset , u8 * data )
464
585
{
@@ -469,6 +590,7 @@ static void nfp_net_get_strings(struct net_device *netdev,
469
590
data = nfp_vnic_get_sw_stats_strings (netdev , data );
470
591
data = nfp_vnic_get_hw_stats_strings (data , nn -> dp .num_rx_rings ,
471
592
nn -> dp .num_tx_rings );
593
+ data = nfp_mac_get_stats_strings (netdev , data );
472
594
break ;
473
595
}
474
596
}
@@ -482,6 +604,7 @@ nfp_net_get_stats(struct net_device *netdev, struct ethtool_stats *stats,
482
604
data = nfp_vnic_get_sw_stats (netdev , data );
483
605
data = nfp_vnic_get_hw_stats (data , nn -> dp .ctrl_bar ,
484
606
nn -> dp .num_rx_rings , nn -> dp .num_tx_rings );
607
+ data = nfp_mac_get_stats (netdev , data );
485
608
}
486
609
487
610
static int nfp_net_get_sset_count (struct net_device * netdev , int sset )
@@ -492,7 +615,8 @@ static int nfp_net_get_sset_count(struct net_device *netdev, int sset)
492
615
case ETH_SS_STATS :
493
616
return nfp_vnic_get_sw_stats_count (netdev ) +
494
617
nfp_vnic_get_hw_stats_count (nn -> dp .num_rx_rings ,
495
- nn -> dp .num_tx_rings );
618
+ nn -> dp .num_tx_rings ) +
619
+ nfp_mac_get_stats_count (netdev );
496
620
default :
497
621
return - EOPNOTSUPP ;
498
622
}
0 commit comments