1 /* 2 * Marvell 88E6xxx Switch Global (1) Registers support 3 * 4 * Copyright (c) 2008 Marvell Semiconductor 5 * 6 * Copyright (c) 2016 Vivien Didelot <vivien.didelot@savoirfairelinux.com> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 */ 13 14 #include "mv88e6xxx.h" 15 #include "global1.h" 16 17 int mv88e6xxx_g1_read(struct mv88e6xxx_chip *chip, int reg, u16 *val) 18 { 19 int addr = chip->info->global1_addr; 20 21 return mv88e6xxx_read(chip, addr, reg, val); 22 } 23 24 int mv88e6xxx_g1_write(struct mv88e6xxx_chip *chip, int reg, u16 val) 25 { 26 int addr = chip->info->global1_addr; 27 28 return mv88e6xxx_write(chip, addr, reg, val); 29 } 30 31 int mv88e6xxx_g1_wait(struct mv88e6xxx_chip *chip, int reg, u16 mask) 32 { 33 return mv88e6xxx_wait(chip, chip->info->global1_addr, reg, mask); 34 } 35 36 static int mv88e6xxx_g1_stats_wait(struct mv88e6xxx_chip *chip) 37 { 38 return mv88e6xxx_g1_wait(chip, GLOBAL_STATS_OP, GLOBAL_STATS_OP_BUSY); 39 } 40 41 int mv88e6xxx_g1_stats_snapshot(struct mv88e6xxx_chip *chip, int port) 42 { 43 int err; 44 45 /* Snapshot the hardware statistics counters for this port. */ 46 err = mv88e6xxx_g1_write(chip, GLOBAL_STATS_OP, 47 GLOBAL_STATS_OP_CAPTURE_PORT | 48 GLOBAL_STATS_OP_HIST_RX_TX | port); 49 if (err) 50 return err; 51 52 /* Wait for the snapshotting to complete. */ 53 return mv88e6xxx_g1_stats_wait(chip); 54 } 55 56 int mv88e6320_g1_stats_snapshot(struct mv88e6xxx_chip *chip, int port) 57 { 58 port = (port + 1) << 5; 59 60 return mv88e6xxx_g1_stats_snapshot(chip, port); 61 } 62