@@ -306,9 +306,13 @@ static void *hw_stats_from_cmd(struct be_adapter *adapter)
306
306
struct be_cmd_resp_get_stats_v0 * cmd = adapter -> stats_cmd .va ;
307
307
308
308
return & cmd -> hw_stats ;
309
- } else {
309
+ } else if ( BE3_chip ( adapter )) {
310
310
struct be_cmd_resp_get_stats_v1 * cmd = adapter -> stats_cmd .va ;
311
311
312
+ return & cmd -> hw_stats ;
313
+ } else {
314
+ struct be_cmd_resp_get_stats_v2 * cmd = adapter -> stats_cmd .va ;
315
+
312
316
return & cmd -> hw_stats ;
313
317
}
314
318
}
@@ -320,9 +324,13 @@ static void *be_erx_stats_from_cmd(struct be_adapter *adapter)
320
324
struct be_hw_stats_v0 * hw_stats = hw_stats_from_cmd (adapter );
321
325
322
326
return & hw_stats -> erx ;
323
- } else {
327
+ } else if ( BE3_chip ( adapter )) {
324
328
struct be_hw_stats_v1 * hw_stats = hw_stats_from_cmd (adapter );
325
329
330
+ return & hw_stats -> erx ;
331
+ } else {
332
+ struct be_hw_stats_v2 * hw_stats = hw_stats_from_cmd (adapter );
333
+
326
334
return & hw_stats -> erx ;
327
335
}
328
336
}
@@ -422,6 +430,52 @@ static void populate_be_v1_stats(struct be_adapter *adapter)
422
430
adapter -> drv_stats .eth_red_drops = pmem_sts -> eth_red_drops ;
423
431
}
424
432
433
+ static void populate_be_v2_stats (struct be_adapter * adapter )
434
+ {
435
+ struct be_hw_stats_v2 * hw_stats = hw_stats_from_cmd (adapter );
436
+ struct be_pmem_stats * pmem_sts = & hw_stats -> pmem ;
437
+ struct be_rxf_stats_v2 * rxf_stats = & hw_stats -> rxf ;
438
+ struct be_port_rxf_stats_v2 * port_stats =
439
+ & rxf_stats -> port [adapter -> port_num ];
440
+ struct be_drv_stats * drvs = & adapter -> drv_stats ;
441
+
442
+ be_dws_le_to_cpu (hw_stats , sizeof (* hw_stats ));
443
+ drvs -> pmem_fifo_overflow_drop = port_stats -> pmem_fifo_overflow_drop ;
444
+ drvs -> rx_priority_pause_frames = port_stats -> rx_priority_pause_frames ;
445
+ drvs -> rx_pause_frames = port_stats -> rx_pause_frames ;
446
+ drvs -> rx_crc_errors = port_stats -> rx_crc_errors ;
447
+ drvs -> rx_control_frames = port_stats -> rx_control_frames ;
448
+ drvs -> rx_in_range_errors = port_stats -> rx_in_range_errors ;
449
+ drvs -> rx_frame_too_long = port_stats -> rx_frame_too_long ;
450
+ drvs -> rx_dropped_runt = port_stats -> rx_dropped_runt ;
451
+ drvs -> rx_ip_checksum_errs = port_stats -> rx_ip_checksum_errs ;
452
+ drvs -> rx_tcp_checksum_errs = port_stats -> rx_tcp_checksum_errs ;
453
+ drvs -> rx_udp_checksum_errs = port_stats -> rx_udp_checksum_errs ;
454
+ drvs -> rx_dropped_tcp_length = port_stats -> rx_dropped_tcp_length ;
455
+ drvs -> rx_dropped_too_small = port_stats -> rx_dropped_too_small ;
456
+ drvs -> rx_dropped_too_short = port_stats -> rx_dropped_too_short ;
457
+ drvs -> rx_out_range_errors = port_stats -> rx_out_range_errors ;
458
+ drvs -> rx_dropped_header_too_small =
459
+ port_stats -> rx_dropped_header_too_small ;
460
+ drvs -> rx_input_fifo_overflow_drop =
461
+ port_stats -> rx_input_fifo_overflow_drop ;
462
+ drvs -> rx_address_filtered = port_stats -> rx_address_filtered ;
463
+ drvs -> rx_alignment_symbol_errors =
464
+ port_stats -> rx_alignment_symbol_errors ;
465
+ drvs -> rxpp_fifo_overflow_drop = port_stats -> rxpp_fifo_overflow_drop ;
466
+ drvs -> tx_pauseframes = port_stats -> tx_pauseframes ;
467
+ drvs -> tx_controlframes = port_stats -> tx_controlframes ;
468
+ drvs -> tx_priority_pauseframes = port_stats -> tx_priority_pauseframes ;
469
+ drvs -> jabber_events = port_stats -> jabber_events ;
470
+ drvs -> rx_drops_no_pbuf = rxf_stats -> rx_drops_no_pbuf ;
471
+ drvs -> rx_drops_no_erx_descr = rxf_stats -> rx_drops_no_erx_descr ;
472
+ drvs -> forwarded_packets = rxf_stats -> forwarded_packets ;
473
+ drvs -> rx_drops_mtu = rxf_stats -> rx_drops_mtu ;
474
+ drvs -> rx_drops_no_tpre_descr = rxf_stats -> rx_drops_no_tpre_descr ;
475
+ drvs -> rx_drops_too_many_frags = rxf_stats -> rx_drops_too_many_frags ;
476
+ adapter -> drv_stats .eth_red_drops = pmem_sts -> eth_red_drops ;
477
+ }
478
+
425
479
static void populate_lancer_stats (struct be_adapter * adapter )
426
480
{
427
481
@@ -489,7 +543,7 @@ static void populate_erx_stats(struct be_adapter *adapter,
489
543
490
544
void be_parse_stats (struct be_adapter * adapter )
491
545
{
492
- struct be_erx_stats_v1 * erx = be_erx_stats_from_cmd (adapter );
546
+ struct be_erx_stats_v2 * erx = be_erx_stats_from_cmd (adapter );
493
547
struct be_rx_obj * rxo ;
494
548
int i ;
495
549
u32 erx_stat ;
@@ -499,11 +553,13 @@ void be_parse_stats(struct be_adapter *adapter)
499
553
} else {
500
554
if (BE2_chip (adapter ))
501
555
populate_be_v0_stats (adapter );
502
- else
503
- /* for BE3 and Skyhawk */
556
+ else if ( BE3_chip ( adapter ))
557
+ /* for BE3 */
504
558
populate_be_v1_stats (adapter );
559
+ else
560
+ populate_be_v2_stats (adapter );
505
561
506
- /* as erx_v1 is longer than v0, ok to use v1 for v0 access */
562
+ /* erx_v2 is longer than v0, v1. use v2 for v0, v1 access */
507
563
for_all_rx_queues (adapter , rxo , i ) {
508
564
erx_stat = erx -> rx_drops_no_fragments [rxo -> q .id ];
509
565
populate_erx_stats (adapter , rxo , erx_stat );
@@ -4102,9 +4158,11 @@ static int be_stats_init(struct be_adapter *adapter)
4102
4158
cmd -> size = sizeof (struct lancer_cmd_req_pport_stats );
4103
4159
else if (BE2_chip (adapter ))
4104
4160
cmd -> size = sizeof (struct be_cmd_req_get_stats_v0 );
4105
- else
4106
- /* BE3 and Skyhawk */
4161
+ else if (BE3_chip (adapter ))
4107
4162
cmd -> size = sizeof (struct be_cmd_req_get_stats_v1 );
4163
+ else
4164
+ /* ALL non-BE ASICs */
4165
+ cmd -> size = sizeof (struct be_cmd_req_get_stats_v2 );
4108
4166
4109
4167
cmd -> va = dma_zalloc_coherent (& adapter -> pdev -> dev , cmd -> size , & cmd -> dma ,
4110
4168
GFP_KERNEL );
0 commit comments