aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/dsa
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2014-10-29 13:45:05 -0400
committerDavid S. Miller <davem@davemloft.net>2014-10-30 14:54:11 -0400
commita1ab91f3deadc398675de3b9ff297c1f66b5b1f9 (patch)
treed85190c26ad4f89ef7887032231f4de1b3fa7fea /drivers/net/dsa
parent3d762a0f0ab9cb4a6b5993db3ce56c92f9f90ab2 (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.c2
-rw-r--r--drivers/net/dsa/mv88e6xxx.c24
-rw-r--r--drivers/net/dsa/mv88e6xxx.h3
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
475MODULE_ALIAS("platform:mv88e6123"); 477MODULE_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
502int mv88e6xxx_get_regs_len(struct dsa_switch *ds, int port)
503{
504 return 32 * sizeof(u16);
505}
506
507void 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
502static int __init mv88e6xxx_init(void) 526static 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,
78void mv88e6xxx_get_ethtool_stats(struct dsa_switch *ds, 78void 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);
81int mv88e6xxx_get_regs_len(struct dsa_switch *ds, int port);
82void mv88e6xxx_get_regs(struct dsa_switch *ds, int port,
83 struct ethtool_regs *regs, void *_p);
81 84
82extern struct dsa_switch_driver mv88e6131_switch_driver; 85extern struct dsa_switch_driver mv88e6131_switch_driver;
83extern struct dsa_switch_driver mv88e6123_61_65_switch_driver; 86extern struct dsa_switch_driver mv88e6123_61_65_switch_driver;