Skip to content

Commit 5780acb

Browse files
wkzdavem330
authored andcommitted
net: dsa: mv88e6xxx: Give each hw stat an ID
With the upcoming standard counter group support, we are no longer reading out the whole set of counters, but rather mapping a subset to the requested group. Therefore, create an enum with an ID for each stat, such that mv88e6xxx_hw_stats[] can be subscripted with a human-readable ID corresponding to the counter's name. Reviewed-by: Vladimir Oltean <[email protected]> Reviewed-by: Florian Fainelli <[email protected]> Signed-off-by: Tobias Waldekranz <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent fc82a08 commit 5780acb

File tree

1 file changed

+75
-63
lines changed
  • drivers/net/dsa/mv88e6xxx

1 file changed

+75
-63
lines changed

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 75 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -955,66 +955,78 @@ static int mv88e6xxx_stats_snapshot(struct mv88e6xxx_chip *chip, int port)
955955
return err;
956956
}
957957

958-
static struct mv88e6xxx_hw_stat mv88e6xxx_hw_stats[] = {
959-
{ "in_good_octets", 8, 0x00, STATS_TYPE_BANK0, },
960-
{ "in_bad_octets", 4, 0x02, STATS_TYPE_BANK0, },
961-
{ "in_unicast", 4, 0x04, STATS_TYPE_BANK0, },
962-
{ "in_broadcasts", 4, 0x06, STATS_TYPE_BANK0, },
963-
{ "in_multicasts", 4, 0x07, STATS_TYPE_BANK0, },
964-
{ "in_pause", 4, 0x16, STATS_TYPE_BANK0, },
965-
{ "in_undersize", 4, 0x18, STATS_TYPE_BANK0, },
966-
{ "in_fragments", 4, 0x19, STATS_TYPE_BANK0, },
967-
{ "in_oversize", 4, 0x1a, STATS_TYPE_BANK0, },
968-
{ "in_jabber", 4, 0x1b, STATS_TYPE_BANK0, },
969-
{ "in_rx_error", 4, 0x1c, STATS_TYPE_BANK0, },
970-
{ "in_fcs_error", 4, 0x1d, STATS_TYPE_BANK0, },
971-
{ "out_octets", 8, 0x0e, STATS_TYPE_BANK0, },
972-
{ "out_unicast", 4, 0x10, STATS_TYPE_BANK0, },
973-
{ "out_broadcasts", 4, 0x13, STATS_TYPE_BANK0, },
974-
{ "out_multicasts", 4, 0x12, STATS_TYPE_BANK0, },
975-
{ "out_pause", 4, 0x15, STATS_TYPE_BANK0, },
976-
{ "excessive", 4, 0x11, STATS_TYPE_BANK0, },
977-
{ "collisions", 4, 0x1e, STATS_TYPE_BANK0, },
978-
{ "deferred", 4, 0x05, STATS_TYPE_BANK0, },
979-
{ "single", 4, 0x14, STATS_TYPE_BANK0, },
980-
{ "multiple", 4, 0x17, STATS_TYPE_BANK0, },
981-
{ "out_fcs_error", 4, 0x03, STATS_TYPE_BANK0, },
982-
{ "late", 4, 0x1f, STATS_TYPE_BANK0, },
983-
{ "hist_64bytes", 4, 0x08, STATS_TYPE_BANK0, },
984-
{ "hist_65_127bytes", 4, 0x09, STATS_TYPE_BANK0, },
985-
{ "hist_128_255bytes", 4, 0x0a, STATS_TYPE_BANK0, },
986-
{ "hist_256_511bytes", 4, 0x0b, STATS_TYPE_BANK0, },
987-
{ "hist_512_1023bytes", 4, 0x0c, STATS_TYPE_BANK0, },
988-
{ "hist_1024_max_bytes", 4, 0x0d, STATS_TYPE_BANK0, },
989-
{ "sw_in_discards", 4, 0x10, STATS_TYPE_PORT, },
990-
{ "sw_in_filtered", 2, 0x12, STATS_TYPE_PORT, },
991-
{ "sw_out_filtered", 2, 0x13, STATS_TYPE_PORT, },
992-
{ "in_discards", 4, 0x00, STATS_TYPE_BANK1, },
993-
{ "in_filtered", 4, 0x01, STATS_TYPE_BANK1, },
994-
{ "in_accepted", 4, 0x02, STATS_TYPE_BANK1, },
995-
{ "in_bad_accepted", 4, 0x03, STATS_TYPE_BANK1, },
996-
{ "in_good_avb_class_a", 4, 0x04, STATS_TYPE_BANK1, },
997-
{ "in_good_avb_class_b", 4, 0x05, STATS_TYPE_BANK1, },
998-
{ "in_bad_avb_class_a", 4, 0x06, STATS_TYPE_BANK1, },
999-
{ "in_bad_avb_class_b", 4, 0x07, STATS_TYPE_BANK1, },
1000-
{ "tcam_counter_0", 4, 0x08, STATS_TYPE_BANK1, },
1001-
{ "tcam_counter_1", 4, 0x09, STATS_TYPE_BANK1, },
1002-
{ "tcam_counter_2", 4, 0x0a, STATS_TYPE_BANK1, },
1003-
{ "tcam_counter_3", 4, 0x0b, STATS_TYPE_BANK1, },
1004-
{ "in_da_unknown", 4, 0x0e, STATS_TYPE_BANK1, },
1005-
{ "in_management", 4, 0x0f, STATS_TYPE_BANK1, },
1006-
{ "out_queue_0", 4, 0x10, STATS_TYPE_BANK1, },
1007-
{ "out_queue_1", 4, 0x11, STATS_TYPE_BANK1, },
1008-
{ "out_queue_2", 4, 0x12, STATS_TYPE_BANK1, },
1009-
{ "out_queue_3", 4, 0x13, STATS_TYPE_BANK1, },
1010-
{ "out_queue_4", 4, 0x14, STATS_TYPE_BANK1, },
1011-
{ "out_queue_5", 4, 0x15, STATS_TYPE_BANK1, },
1012-
{ "out_queue_6", 4, 0x16, STATS_TYPE_BANK1, },
1013-
{ "out_queue_7", 4, 0x17, STATS_TYPE_BANK1, },
1014-
{ "out_cut_through", 4, 0x18, STATS_TYPE_BANK1, },
1015-
{ "out_octets_a", 4, 0x1a, STATS_TYPE_BANK1, },
1016-
{ "out_octets_b", 4, 0x1b, STATS_TYPE_BANK1, },
1017-
{ "out_management", 4, 0x1f, STATS_TYPE_BANK1, },
958+
#define MV88E6XXX_HW_STAT_MAPPER(_fn) \
959+
_fn(in_good_octets, 8, 0x00, STATS_TYPE_BANK0), \
960+
_fn(in_bad_octets, 4, 0x02, STATS_TYPE_BANK0), \
961+
_fn(in_unicast, 4, 0x04, STATS_TYPE_BANK0), \
962+
_fn(in_broadcasts, 4, 0x06, STATS_TYPE_BANK0), \
963+
_fn(in_multicasts, 4, 0x07, STATS_TYPE_BANK0), \
964+
_fn(in_pause, 4, 0x16, STATS_TYPE_BANK0), \
965+
_fn(in_undersize, 4, 0x18, STATS_TYPE_BANK0), \
966+
_fn(in_fragments, 4, 0x19, STATS_TYPE_BANK0), \
967+
_fn(in_oversize, 4, 0x1a, STATS_TYPE_BANK0), \
968+
_fn(in_jabber, 4, 0x1b, STATS_TYPE_BANK0), \
969+
_fn(in_rx_error, 4, 0x1c, STATS_TYPE_BANK0), \
970+
_fn(in_fcs_error, 4, 0x1d, STATS_TYPE_BANK0), \
971+
_fn(out_octets, 8, 0x0e, STATS_TYPE_BANK0), \
972+
_fn(out_unicast, 4, 0x10, STATS_TYPE_BANK0), \
973+
_fn(out_broadcasts, 4, 0x13, STATS_TYPE_BANK0), \
974+
_fn(out_multicasts, 4, 0x12, STATS_TYPE_BANK0), \
975+
_fn(out_pause, 4, 0x15, STATS_TYPE_BANK0), \
976+
_fn(excessive, 4, 0x11, STATS_TYPE_BANK0), \
977+
_fn(collisions, 4, 0x1e, STATS_TYPE_BANK0), \
978+
_fn(deferred, 4, 0x05, STATS_TYPE_BANK0), \
979+
_fn(single, 4, 0x14, STATS_TYPE_BANK0), \
980+
_fn(multiple, 4, 0x17, STATS_TYPE_BANK0), \
981+
_fn(out_fcs_error, 4, 0x03, STATS_TYPE_BANK0), \
982+
_fn(late, 4, 0x1f, STATS_TYPE_BANK0), \
983+
_fn(hist_64bytes, 4, 0x08, STATS_TYPE_BANK0), \
984+
_fn(hist_65_127bytes, 4, 0x09, STATS_TYPE_BANK0), \
985+
_fn(hist_128_255bytes, 4, 0x0a, STATS_TYPE_BANK0), \
986+
_fn(hist_256_511bytes, 4, 0x0b, STATS_TYPE_BANK0), \
987+
_fn(hist_512_1023bytes, 4, 0x0c, STATS_TYPE_BANK0), \
988+
_fn(hist_1024_max_bytes, 4, 0x0d, STATS_TYPE_BANK0), \
989+
_fn(sw_in_discards, 4, 0x10, STATS_TYPE_PORT), \
990+
_fn(sw_in_filtered, 2, 0x12, STATS_TYPE_PORT), \
991+
_fn(sw_out_filtered, 2, 0x13, STATS_TYPE_PORT), \
992+
_fn(in_discards, 4, 0x00, STATS_TYPE_BANK1), \
993+
_fn(in_filtered, 4, 0x01, STATS_TYPE_BANK1), \
994+
_fn(in_accepted, 4, 0x02, STATS_TYPE_BANK1), \
995+
_fn(in_bad_accepted, 4, 0x03, STATS_TYPE_BANK1), \
996+
_fn(in_good_avb_class_a, 4, 0x04, STATS_TYPE_BANK1), \
997+
_fn(in_good_avb_class_b, 4, 0x05, STATS_TYPE_BANK1), \
998+
_fn(in_bad_avb_class_a, 4, 0x06, STATS_TYPE_BANK1), \
999+
_fn(in_bad_avb_class_b, 4, 0x07, STATS_TYPE_BANK1), \
1000+
_fn(tcam_counter_0, 4, 0x08, STATS_TYPE_BANK1), \
1001+
_fn(tcam_counter_1, 4, 0x09, STATS_TYPE_BANK1), \
1002+
_fn(tcam_counter_2, 4, 0x0a, STATS_TYPE_BANK1), \
1003+
_fn(tcam_counter_3, 4, 0x0b, STATS_TYPE_BANK1), \
1004+
_fn(in_da_unknown, 4, 0x0e, STATS_TYPE_BANK1), \
1005+
_fn(in_management, 4, 0x0f, STATS_TYPE_BANK1), \
1006+
_fn(out_queue_0, 4, 0x10, STATS_TYPE_BANK1), \
1007+
_fn(out_queue_1, 4, 0x11, STATS_TYPE_BANK1), \
1008+
_fn(out_queue_2, 4, 0x12, STATS_TYPE_BANK1), \
1009+
_fn(out_queue_3, 4, 0x13, STATS_TYPE_BANK1), \
1010+
_fn(out_queue_4, 4, 0x14, STATS_TYPE_BANK1), \
1011+
_fn(out_queue_5, 4, 0x15, STATS_TYPE_BANK1), \
1012+
_fn(out_queue_6, 4, 0x16, STATS_TYPE_BANK1), \
1013+
_fn(out_queue_7, 4, 0x17, STATS_TYPE_BANK1), \
1014+
_fn(out_cut_through, 4, 0x18, STATS_TYPE_BANK1), \
1015+
_fn(out_octets_a, 4, 0x1a, STATS_TYPE_BANK1), \
1016+
_fn(out_octets_b, 4, 0x1b, STATS_TYPE_BANK1), \
1017+
_fn(out_management, 4, 0x1f, STATS_TYPE_BANK1), \
1018+
/* */
1019+
1020+
#define MV88E6XXX_HW_STAT_ENTRY(_string, _size, _reg, _type) \
1021+
{ #_string, _size, _reg, _type }
1022+
static const struct mv88e6xxx_hw_stat mv88e6xxx_hw_stats[] = {
1023+
MV88E6XXX_HW_STAT_MAPPER(MV88E6XXX_HW_STAT_ENTRY)
1024+
};
1025+
1026+
#define MV88E6XXX_HW_STAT_ENUM(_string, _size, _reg, _type) \
1027+
MV88E6XXX_HW_STAT_ID_ ## _string
1028+
enum mv88e6xxx_hw_stat_id {
1029+
MV88E6XXX_HW_STAT_MAPPER(MV88E6XXX_HW_STAT_ENUM)
10181030
};
10191031

10201032
static uint64_t _mv88e6xxx_get_ethtool_stat(struct mv88e6xxx_chip *chip,
@@ -1061,7 +1073,7 @@ static uint64_t _mv88e6xxx_get_ethtool_stat(struct mv88e6xxx_chip *chip,
10611073
static int mv88e6xxx_stats_get_strings(struct mv88e6xxx_chip *chip,
10621074
uint8_t *data, int types)
10631075
{
1064-
struct mv88e6xxx_hw_stat *stat;
1076+
const struct mv88e6xxx_hw_stat *stat;
10651077
int i, j;
10661078

10671079
for (i = 0, j = 0; i < ARRAY_SIZE(mv88e6xxx_hw_stats); i++) {
@@ -1142,7 +1154,7 @@ static void mv88e6xxx_get_strings(struct dsa_switch *ds, int port,
11421154
static int mv88e6xxx_stats_get_sset_count(struct mv88e6xxx_chip *chip,
11431155
int types)
11441156
{
1145-
struct mv88e6xxx_hw_stat *stat;
1157+
const struct mv88e6xxx_hw_stat *stat;
11461158
int i, j;
11471159

11481160
for (i = 0, j = 0; i < ARRAY_SIZE(mv88e6xxx_hw_stats); i++) {
@@ -1269,7 +1281,7 @@ static size_t mv88e6xxx_stats_get_stat(struct mv88e6xxx_chip *chip, int port,
12691281
static size_t mv88e6xxx_stats_get_stats(struct mv88e6xxx_chip *chip, int port,
12701282
uint64_t *data)
12711283
{
1272-
struct mv88e6xxx_hw_stat *stat;
1284+
const struct mv88e6xxx_hw_stat *stat;
12731285
size_t i, j;
12741286

12751287
for (i = 0, j = 0; i < ARRAY_SIZE(mv88e6xxx_hw_stats); i++) {

0 commit comments

Comments
 (0)