|
|
|
@ -115,6 +115,46 @@ struct ar8216_priv { |
|
|
|
|
.name = (_n), \
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static const struct ar8xxx_mib_desc ar8216_mibs[] = { |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RXBROAD, "RxBroad"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RXPAUSE, "RxPause"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RXMULTI, "RxMulti"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RXFCSERR, "RxFcsErr"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RXALIGNERR, "RxAlignErr"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RXRUNT, "RxRunt"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RXFRAGMENT, "RxFragment"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RX64BYTE, "Rx64Byte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RX128BYTE, "Rx128Byte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RX256BYTE, "Rx256Byte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RX512BYTE, "Rx512Byte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RX1024BYTE, "Rx1024Byte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RXMAXBYTE, "RxMaxByte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RXTOOLONG, "RxTooLong"), |
|
|
|
|
MIB_DESC(2, AR8216_STATS_RXGOODBYTE, "RxGoodByte"), |
|
|
|
|
MIB_DESC(2, AR8216_STATS_RXBADBYTE, "RxBadByte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_RXOVERFLOW, "RxOverFlow"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_FILTERED, "Filtered"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXBROAD, "TxBroad"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXPAUSE, "TxPause"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXMULTI, "TxMulti"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXUNDERRUN, "TxUnderRun"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TX64BYTE, "Tx64Byte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TX128BYTE, "Tx128Byte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TX256BYTE, "Tx256Byte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TX512BYTE, "Tx512Byte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TX1024BYTE, "Tx1024Byte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXMAXBYTE, "TxMaxByte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXOVERSIZE, "TxOverSize"), |
|
|
|
|
MIB_DESC(2, AR8216_STATS_TXBYTE, "TxByte"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXCOLLISION, "TxCollision"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXABORTCOL, "TxAbortCol"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXMULTICOL, "TxMultiCol"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXSINGLECOL, "TxSingleCol"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXEXCDEFER, "TxExcDefer"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXDEFER, "TxDefer"), |
|
|
|
|
MIB_DESC(1, AR8216_STATS_TXLATECOL, "TxLateCol"), |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const struct ar8xxx_mib_desc ar8236_mibs[] = { |
|
|
|
|
MIB_DESC(1, AR8236_STATS_RXBROAD, "RxBroad"), |
|
|
|
|
MIB_DESC(1, AR8236_STATS_RXPAUSE, "RxPause"), |
|
|
|
@ -387,8 +427,11 @@ ar8216_mib_fetch_port_stat(struct ar8216_priv *priv, int port, bool flush) |
|
|
|
|
|
|
|
|
|
if (chip_is_ar8327(priv)) |
|
|
|
|
base = AR8327_REG_PORT_STATS_BASE(port); |
|
|
|
|
else |
|
|
|
|
else if (chip_is_ar8236(priv) || |
|
|
|
|
chip_is_ar8316(priv)) |
|
|
|
|
base = AR8236_REG_PORT_STATS_BASE(port); |
|
|
|
|
else |
|
|
|
|
base = AR8216_REG_PORT_STATS_BASE(port); |
|
|
|
|
|
|
|
|
|
mib_stats = &priv->mib_stats[port * priv->chip->num_mibs]; |
|
|
|
|
for (i = 0; i < priv->chip->num_mibs; i++) { |
|
|
|
@ -659,6 +702,8 @@ ar8216_init_port(struct ar8216_priv *priv, int port) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static const struct ar8xxx_chip ar8216_chip = { |
|
|
|
|
.caps = AR8XXX_CAP_MIB_COUNTERS, |
|
|
|
|
|
|
|
|
|
.hw_init = ar8216_hw_init, |
|
|
|
|
.init_globals = ar8216_init_globals, |
|
|
|
|
.init_port = ar8216_init_port, |
|
|
|
@ -667,6 +712,9 @@ static const struct ar8xxx_chip ar8216_chip = { |
|
|
|
|
.atu_flush = ar8216_atu_flush, |
|
|
|
|
.vtu_flush = ar8216_vtu_flush, |
|
|
|
|
.vtu_load_vlan = ar8216_vtu_load_vlan, |
|
|
|
|
|
|
|
|
|
.num_mibs = ARRAY_SIZE(ar8216_mibs), |
|
|
|
|
.mib_decs = ar8216_mibs, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|