diff options
author | Guenter Roeck <linux@roeck-us.net> | 2014-10-29 13:45:05 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-10-30 14:54:11 -0400 |
commit | a1ab91f3deadc398675de3b9ff297c1f66b5b1f9 (patch) | |
tree | d85190c26ad4f89ef7887032231f4de1b3fa7fea /drivers/net/dsa | |
parent | 3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2 (diff) |
net: dsa/mv88e6123_61_65: Add support for reading switch registers
The infrastructure can now report switch registers to ethtool.
Add support for it to the mv88e6123_61_65 driver.
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/dsa')
-rw-r--r-- | drivers/net/dsa/mv88e6123_61_65.c | 2 | ||||
-rw-r--r-- | drivers/net/dsa/mv88e6xxx.c | 24 | ||||
-rw-r--r-- | drivers/net/dsa/mv88e6xxx.h | 3 |
3 files changed, 29 insertions, 0 deletions
diff --git a/drivers/net/dsa/mv88e6123_61_65.c b/drivers/net/dsa/mv88e6123_61_65.c index 9f43c9b94150..e2d2e37e9497 100644 --- a/drivers/net/dsa/mv88e6123_61_65.c +++ b/drivers/net/dsa/mv88e6123_61_65.c | |||
@@ -470,6 +470,8 @@ struct dsa_switch_driver mv88e6123_61_65_switch_driver = { | |||
470 | #ifdef CONFIG_NET_DSA_HWMON | 470 | #ifdef CONFIG_NET_DSA_HWMON |
471 | .get_temp = mv88e6123_61_65_get_temp, | 471 | .get_temp = mv88e6123_61_65_get_temp, |
472 | #endif | 472 | #endif |
473 | .get_regs_len = mv88e6xxx_get_regs_len, | ||
474 | .get_regs = mv88e6xxx_get_regs, | ||
473 | }; | 475 | }; |
474 | 476 | ||
475 | MODULE_ALIAS("platform:mv88e6123"); | 477 | MODULE_ALIAS("platform:mv88e6123"); |
diff --git a/drivers/net/dsa/mv88e6xxx.c b/drivers/net/dsa/mv88e6xxx.c index 8e1090ba3df3..c071fde21f4a 100644 --- a/drivers/net/dsa/mv88e6xxx.c +++ b/drivers/net/dsa/mv88e6xxx.c | |||
@@ -499,6 +499,30 @@ void mv88e6xxx_get_ethtool_stats(struct dsa_switch *ds, | |||
499 | mutex_unlock(&ps->stats_mutex); | 499 | mutex_unlock(&ps->stats_mutex); |
500 | } | 500 | } |
501 | 501 | ||
502 | int mv88e6xxx_get_regs_len(struct dsa_switch *ds, int port) | ||
503 | { | ||
504 | return 32 * sizeof(u16); | ||
505 | } | ||
506 | |||
507 | void mv88e6xxx_get_regs(struct dsa_switch *ds, int port, | ||
508 | struct ethtool_regs *regs, void *_p) | ||
509 | { | ||
510 | u16 *p = _p; | ||
511 | int i; | ||
512 | |||
513 | regs->version = 0; | ||
514 | |||
515 | memset(p, 0xff, 32 * sizeof(u16)); | ||
516 | |||
517 | for (i = 0; i < 32; i++) { | ||
518 | int ret; | ||
519 | |||
520 | ret = mv88e6xxx_reg_read(ds, REG_PORT(port), i); | ||
521 | if (ret >= 0) | ||
522 | p[i] = ret; | ||
523 | } | ||
524 | } | ||
525 | |||
502 | static int __init mv88e6xxx_init(void) | 526 | static int __init mv88e6xxx_init(void) |
503 | { | 527 | { |
504 | #if IS_ENABLED(CONFIG_NET_DSA_MV88E6131) | 528 | #if IS_ENABLED(CONFIG_NET_DSA_MV88E6131) |
diff --git a/drivers/net/dsa/mv88e6xxx.h b/drivers/net/dsa/mv88e6xxx.h index 29feed02f484..a0780b08bb4c 100644 --- a/drivers/net/dsa/mv88e6xxx.h +++ b/drivers/net/dsa/mv88e6xxx.h | |||
@@ -78,6 +78,9 @@ void mv88e6xxx_get_strings(struct dsa_switch *ds, | |||
78 | void mv88e6xxx_get_ethtool_stats(struct dsa_switch *ds, | 78 | void mv88e6xxx_get_ethtool_stats(struct dsa_switch *ds, |
79 | int nr_stats, struct mv88e6xxx_hw_stat *stats, | 79 | int nr_stats, struct mv88e6xxx_hw_stat *stats, |
80 | int port, uint64_t *data); | 80 | int port, uint64_t *data); |
81 | int mv88e6xxx_get_regs_len(struct dsa_switch *ds, int port); | ||
82 | void mv88e6xxx_get_regs(struct dsa_switch *ds, int port, | ||
83 | struct ethtool_regs *regs, void *_p); | ||
81 | 84 | ||
82 | extern struct dsa_switch_driver mv88e6131_switch_driver; | 85 | extern struct dsa_switch_driver mv88e6131_switch_driver; |
83 | extern struct dsa_switch_driver mv88e6123_61_65_switch_driver; | 86 | extern struct dsa_switch_driver mv88e6123_61_65_switch_driver; |