@@ -228,6 +228,12 @@ static const struct ocelot_stat_layout ocelot_stats_layout[OCELOT_NUM_STATS] = {
228
228
OCELOT_COMMON_STATS ,
229
229
};
230
230
231
+ static const struct ocelot_stat_layout *
232
+ ocelot_get_stats_layout (struct ocelot * ocelot )
233
+ {
234
+ return ocelot_stats_layout ;
235
+ }
236
+
231
237
/* Read the counters from hardware and keep them in region->buf.
232
238
* Caller must hold &ocelot->stat_view_lock.
233
239
*/
@@ -306,16 +312,19 @@ static void ocelot_check_stats_work(struct work_struct *work)
306
312
307
313
void ocelot_get_strings (struct ocelot * ocelot , int port , u32 sset , u8 * data )
308
314
{
315
+ const struct ocelot_stat_layout * layout ;
309
316
int i ;
310
317
311
318
if (sset != ETH_SS_STATS )
312
319
return ;
313
320
321
+ layout = ocelot_get_stats_layout (ocelot );
322
+
314
323
for (i = 0 ; i < OCELOT_NUM_STATS ; i ++ ) {
315
- if (ocelot_stats_layout [i ].name [0 ] == '\0' )
324
+ if (layout [i ].name [0 ] == '\0' )
316
325
continue ;
317
326
318
- memcpy (data , ocelot_stats_layout [i ].name , ETH_GSTRING_LEN );
327
+ memcpy (data , layout [i ].name , ETH_GSTRING_LEN );
319
328
data += ETH_GSTRING_LEN ;
320
329
}
321
330
}
@@ -350,13 +359,16 @@ static void ocelot_port_stats_run(struct ocelot *ocelot, int port, void *priv,
350
359
351
360
int ocelot_get_sset_count (struct ocelot * ocelot , int port , int sset )
352
361
{
362
+ const struct ocelot_stat_layout * layout ;
353
363
int i , num_stats = 0 ;
354
364
355
365
if (sset != ETH_SS_STATS )
356
366
return - EOPNOTSUPP ;
357
367
368
+ layout = ocelot_get_stats_layout (ocelot );
369
+
358
370
for (i = 0 ; i < OCELOT_NUM_STATS ; i ++ )
359
- if (ocelot_stats_layout [i ].name [0 ] != '\0' )
371
+ if (layout [i ].name [0 ] != '\0' )
360
372
num_stats ++ ;
361
373
362
374
return num_stats ;
@@ -366,14 +378,17 @@ EXPORT_SYMBOL(ocelot_get_sset_count);
366
378
static void ocelot_port_ethtool_stats_cb (struct ocelot * ocelot , int port ,
367
379
void * priv )
368
380
{
381
+ const struct ocelot_stat_layout * layout ;
369
382
u64 * data = priv ;
370
383
int i ;
371
384
385
+ layout = ocelot_get_stats_layout (ocelot );
386
+
372
387
/* Copy all supported counters */
373
388
for (i = 0 ; i < OCELOT_NUM_STATS ; i ++ ) {
374
389
int index = port * OCELOT_NUM_STATS + i ;
375
390
376
- if (ocelot_stats_layout [i ].name [0 ] == '\0' )
391
+ if (layout [i ].name [0 ] == '\0' )
377
392
continue ;
378
393
379
394
* data ++ = ocelot -> stats [index ];
@@ -602,16 +617,19 @@ EXPORT_SYMBOL(ocelot_port_get_stats64);
602
617
static int ocelot_prepare_stats_regions (struct ocelot * ocelot )
603
618
{
604
619
struct ocelot_stats_region * region = NULL ;
620
+ const struct ocelot_stat_layout * layout ;
605
621
unsigned int last = 0 ;
606
622
int i ;
607
623
608
624
INIT_LIST_HEAD (& ocelot -> stats_regions );
609
625
626
+ layout = ocelot_get_stats_layout (ocelot );
627
+
610
628
for (i = 0 ; i < OCELOT_NUM_STATS ; i ++ ) {
611
- if (!ocelot_stats_layout [i ].reg )
629
+ if (!layout [i ].reg )
612
630
continue ;
613
631
614
- if (region && ocelot_stats_layout [i ].reg == last + 4 ) {
632
+ if (region && layout [i ].reg == last + 4 ) {
615
633
region -> count ++ ;
616
634
} else {
617
635
region = devm_kzalloc (ocelot -> dev , sizeof (* region ),
@@ -620,17 +638,17 @@ static int ocelot_prepare_stats_regions(struct ocelot *ocelot)
620
638
return - ENOMEM ;
621
639
622
640
/* enum ocelot_stat must be kept sorted in the same
623
- * order as ocelot_stats_layout [i].reg in order to have
624
- * efficient bulking
641
+ * order as layout [i].reg in order to have efficient
642
+ * bulking
625
643
*/
626
- WARN_ON (last >= ocelot_stats_layout [i ].reg );
644
+ WARN_ON (last >= layout [i ].reg );
627
645
628
- region -> base = ocelot_stats_layout [i ].reg ;
646
+ region -> base = layout [i ].reg ;
629
647
region -> count = 1 ;
630
648
list_add_tail (& region -> node , & ocelot -> stats_regions );
631
649
}
632
650
633
- last = ocelot_stats_layout [i ].reg ;
651
+ last = layout [i ].reg ;
634
652
}
635
653
636
654
list_for_each_entry (region , & ocelot -> stats_regions , node ) {
0 commit comments