@@ -148,6 +148,65 @@ static int bnxt_set_coalesce(struct net_device *dev,
148148#define BNXT_RX_STATS_EXT_ENTRY (counter ) \
149149 { BNXT_RX_STATS_EXT_OFFSET(counter), __stringify(counter) }
150150
151+ #define BNXT_TX_STATS_EXT_ENTRY (counter ) \
152+ { BNXT_TX_STATS_EXT_OFFSET(counter), __stringify(counter) }
153+
154+ #define BNXT_RX_STATS_EXT_PFC_ENTRY (n ) \
155+ BNXT_RX_STATS_EXT_ENTRY(pfc_pri##n##_rx_duration_us), \
156+ BNXT_RX_STATS_EXT_ENTRY(pfc_pri##n##_rx_transitions)
157+
158+ #define BNXT_TX_STATS_EXT_PFC_ENTRY (n ) \
159+ BNXT_TX_STATS_EXT_ENTRY(pfc_pri##n##_tx_duration_us), \
160+ BNXT_TX_STATS_EXT_ENTRY(pfc_pri##n##_tx_transitions)
161+
162+ #define BNXT_RX_STATS_EXT_PFC_ENTRIES \
163+ BNXT_RX_STATS_EXT_PFC_ENTRY(0), \
164+ BNXT_RX_STATS_EXT_PFC_ENTRY(1), \
165+ BNXT_RX_STATS_EXT_PFC_ENTRY(2), \
166+ BNXT_RX_STATS_EXT_PFC_ENTRY(3), \
167+ BNXT_RX_STATS_EXT_PFC_ENTRY(4), \
168+ BNXT_RX_STATS_EXT_PFC_ENTRY(5), \
169+ BNXT_RX_STATS_EXT_PFC_ENTRY(6), \
170+ BNXT_RX_STATS_EXT_PFC_ENTRY(7)
171+
172+ #define BNXT_TX_STATS_EXT_PFC_ENTRIES \
173+ BNXT_TX_STATS_EXT_PFC_ENTRY(0), \
174+ BNXT_TX_STATS_EXT_PFC_ENTRY(1), \
175+ BNXT_TX_STATS_EXT_PFC_ENTRY(2), \
176+ BNXT_TX_STATS_EXT_PFC_ENTRY(3), \
177+ BNXT_TX_STATS_EXT_PFC_ENTRY(4), \
178+ BNXT_TX_STATS_EXT_PFC_ENTRY(5), \
179+ BNXT_TX_STATS_EXT_PFC_ENTRY(6), \
180+ BNXT_TX_STATS_EXT_PFC_ENTRY(7)
181+
182+ #define BNXT_RX_STATS_EXT_COS_ENTRY (n ) \
183+ BNXT_RX_STATS_EXT_ENTRY(rx_bytes_cos##n), \
184+ BNXT_RX_STATS_EXT_ENTRY(rx_packets_cos##n)
185+
186+ #define BNXT_TX_STATS_EXT_COS_ENTRY (n ) \
187+ BNXT_TX_STATS_EXT_ENTRY(tx_bytes_cos##n), \
188+ BNXT_TX_STATS_EXT_ENTRY(tx_packets_cos##n)
189+
190+ #define BNXT_RX_STATS_EXT_COS_ENTRIES \
191+ BNXT_RX_STATS_EXT_COS_ENTRY(0), \
192+ BNXT_RX_STATS_EXT_COS_ENTRY(1), \
193+ BNXT_RX_STATS_EXT_COS_ENTRY(2), \
194+ BNXT_RX_STATS_EXT_COS_ENTRY(3), \
195+ BNXT_RX_STATS_EXT_COS_ENTRY(4), \
196+ BNXT_RX_STATS_EXT_COS_ENTRY(5), \
197+ BNXT_RX_STATS_EXT_COS_ENTRY(6), \
198+ BNXT_RX_STATS_EXT_COS_ENTRY(7) \
199+
200+ #define BNXT_TX_STATS_EXT_COS_ENTRIES \
201+ BNXT_TX_STATS_EXT_COS_ENTRY(0), \
202+ BNXT_TX_STATS_EXT_COS_ENTRY(1), \
203+ BNXT_TX_STATS_EXT_COS_ENTRY(2), \
204+ BNXT_TX_STATS_EXT_COS_ENTRY(3), \
205+ BNXT_TX_STATS_EXT_COS_ENTRY(4), \
206+ BNXT_TX_STATS_EXT_COS_ENTRY(5), \
207+ BNXT_TX_STATS_EXT_COS_ENTRY(6), \
208+ BNXT_TX_STATS_EXT_COS_ENTRY(7) \
209+
151210enum {
152211 RX_TOTAL_DISCARDS ,
153212 TX_TOTAL_DISCARDS ,
@@ -256,11 +315,20 @@ static const struct {
256315 BNXT_RX_STATS_EXT_ENTRY (resume_pause_events ),
257316 BNXT_RX_STATS_EXT_ENTRY (continuous_roce_pause_events ),
258317 BNXT_RX_STATS_EXT_ENTRY (resume_roce_pause_events ),
318+ BNXT_RX_STATS_EXT_COS_ENTRIES ,
319+ BNXT_RX_STATS_EXT_PFC_ENTRIES ,
320+ };
321+
322+ static const struct {
323+ long offset ;
324+ char string [ETH_GSTRING_LEN ];
325+ } bnxt_tx_port_stats_ext_arr [] = {
326+ BNXT_TX_STATS_EXT_COS_ENTRIES ,
327+ BNXT_TX_STATS_EXT_PFC_ENTRIES ,
259328};
260329
261330#define BNXT_NUM_SW_FUNC_STATS ARRAY_SIZE(bnxt_sw_func_stats)
262331#define BNXT_NUM_PORT_STATS ARRAY_SIZE(bnxt_port_stats_arr)
263- #define BNXT_NUM_PORT_STATS_EXT ARRAY_SIZE(bnxt_port_stats_ext_arr)
264332
265333static int bnxt_get_num_stats (struct bnxt * bp )
266334{
@@ -272,7 +340,8 @@ static int bnxt_get_num_stats(struct bnxt *bp)
272340 num_stats += BNXT_NUM_PORT_STATS ;
273341
274342 if (bp -> flags & BNXT_FLAG_PORT_STATS_EXT )
275- num_stats += BNXT_NUM_PORT_STATS_EXT ;
343+ num_stats += bp -> fw_rx_stats_ext_size +
344+ bp -> fw_tx_stats_ext_size ;
276345
277346 return num_stats ;
278347}
@@ -334,12 +403,17 @@ static void bnxt_get_ethtool_stats(struct net_device *dev,
334403 }
335404 }
336405 if (bp -> flags & BNXT_FLAG_PORT_STATS_EXT ) {
337- __le64 * port_stats_ext = (__le64 * )bp -> hw_rx_port_stats_ext ;
406+ __le64 * rx_port_stats_ext = (__le64 * )bp -> hw_rx_port_stats_ext ;
407+ __le64 * tx_port_stats_ext = (__le64 * )bp -> hw_tx_port_stats_ext ;
338408
339- for (i = 0 ; i < BNXT_NUM_PORT_STATS_EXT ; i ++ , j ++ ) {
340- buf [j ] = le64_to_cpu (* (port_stats_ext +
409+ for (i = 0 ; i < bp -> fw_rx_stats_ext_size ; i ++ , j ++ ) {
410+ buf [j ] = le64_to_cpu (* (rx_port_stats_ext +
341411 bnxt_port_stats_ext_arr [i ].offset ));
342412 }
413+ for (i = 0 ; i < bp -> fw_tx_stats_ext_size ; i ++ , j ++ ) {
414+ buf [j ] = le64_to_cpu (* (tx_port_stats_ext +
415+ bnxt_tx_port_stats_ext_arr [i ].offset ));
416+ }
343417 }
344418}
345419
@@ -407,10 +481,15 @@ static void bnxt_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
407481 }
408482 }
409483 if (bp -> flags & BNXT_FLAG_PORT_STATS_EXT ) {
410- for (i = 0 ; i < BNXT_NUM_PORT_STATS_EXT ; i ++ ) {
484+ for (i = 0 ; i < bp -> fw_rx_stats_ext_size ; i ++ ) {
411485 strcpy (buf , bnxt_port_stats_ext_arr [i ].string );
412486 buf += ETH_GSTRING_LEN ;
413487 }
488+ for (i = 0 ; i < bp -> fw_tx_stats_ext_size ; i ++ ) {
489+ strcpy (buf ,
490+ bnxt_tx_port_stats_ext_arr [i ].string );
491+ buf += ETH_GSTRING_LEN ;
492+ }
414493 }
415494 break ;
416495 case ETH_SS_TEST :
0 commit comments