diff options
author | Andrew Lunn <andrew@lunn.ch> | 2016-11-22 01:27:05 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-11-22 17:55:30 +0300 |
commit | 7f9ef3af397b2a10730e11fac8475f6509cbf603 (patch) | |
tree | b5733e0d5650b144544f620fd902280ef083fdd9 /drivers/net/dsa/mv88e6xxx/global1.c | |
parent | e0d8b61556b672e2b0f6f5f4e7517811b9905488 (diff) | |
download | linux-7f9ef3af397b2a10730e11fac8475f6509cbf603.tar.xz |
net: dsa: mv88e6xxx: Move g1 stats code in global1.[ch]
Move the stats functions which access global 1 registers into
global1.c.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/dsa/mv88e6xxx/global1.c')
-rw-r--r-- | drivers/net/dsa/mv88e6xxx/global1.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/drivers/net/dsa/mv88e6xxx/global1.c b/drivers/net/dsa/mv88e6xxx/global1.c index fda8b3c7adad..5fcf23dbf04b 100644 --- a/drivers/net/dsa/mv88e6xxx/global1.c +++ b/drivers/net/dsa/mv88e6xxx/global1.c @@ -53,7 +53,7 @@ int mv88e6390_g1_stats_set_histogram(struct mv88e6xxx_chip *chip) /* Offset 0x1d: Statistics Operation 2 */ -static int mv88e6xxx_g1_stats_wait(struct mv88e6xxx_chip *chip) +int mv88e6xxx_g1_stats_wait(struct mv88e6xxx_chip *chip) { return mv88e6xxx_g1_wait(chip, GLOBAL_STATS_OP, GLOBAL_STATS_OP_BUSY); } @@ -95,3 +95,33 @@ int mv88e6390_g1_stats_snapshot(struct mv88e6xxx_chip *chip, int port) /* Wait for the snapshotting to complete. */ return mv88e6xxx_g1_stats_wait(chip); } + +void mv88e6xxx_g1_stats_read(struct mv88e6xxx_chip *chip, int stat, u32 *val) +{ + u32 value; + u16 reg; + int err; + + *val = 0; + + err = mv88e6xxx_g1_write(chip, GLOBAL_STATS_OP, + GLOBAL_STATS_OP_READ_CAPTURED | stat); + if (err) + return; + + err = mv88e6xxx_g1_stats_wait(chip); + if (err) + return; + + err = mv88e6xxx_g1_read(chip, GLOBAL_STATS_COUNTER_32, ®); + if (err) + return; + + value = reg << 16; + + err = mv88e6xxx_g1_read(chip, GLOBAL_STATS_COUNTER_01, ®); + if (err) + return; + + *val = value | reg; +} |