diff options
Diffstat (limited to 'target/linux/generic')
| -rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.c | 50 | ||||
| -rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.h | 40 | 
2 files changed, 89 insertions, 1 deletions
| diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index bf3d6de1e..a69d038ce 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -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 diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.h b/target/linux/generic/files/drivers/net/phy/ar8216.h index 5a4397269..d464101e8 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.h +++ b/target/linux/generic/files/drivers/net/phy/ar8216.h @@ -160,6 +160,46 @@  #define AR8216_REG_PORT_RATE(_i)	(AR8216_PORT_OFFSET(_i) + 0x000c)  #define AR8216_REG_PORT_PRIO(_i)	(AR8216_PORT_OFFSET(_i) + 0x0010) +#define AR8216_REG_PORT_STATS_BASE(_i)	(0x19000 + (_i) * 0xa0) + +#define AR8216_STATS_RXBROAD		0x00 +#define AR8216_STATS_RXPAUSE		0x04 +#define AR8216_STATS_RXMULTI		0x08 +#define AR8216_STATS_RXFCSERR		0x0c +#define AR8216_STATS_RXALIGNERR		0x10 +#define AR8216_STATS_RXRUNT		0x14 +#define AR8216_STATS_RXFRAGMENT		0x18 +#define AR8216_STATS_RX64BYTE		0x1c +#define AR8216_STATS_RX128BYTE		0x20 +#define AR8216_STATS_RX256BYTE		0x24 +#define AR8216_STATS_RX512BYTE		0x28 +#define AR8216_STATS_RX1024BYTE		0x2c +#define AR8216_STATS_RXMAXBYTE		0x30 +#define AR8216_STATS_RXTOOLONG		0x34 +#define AR8216_STATS_RXGOODBYTE		0x38 +#define AR8216_STATS_RXBADBYTE		0x40 +#define AR8216_STATS_RXOVERFLOW		0x48 +#define AR8216_STATS_FILTERED		0x4c +#define AR8216_STATS_TXBROAD		0x50 +#define AR8216_STATS_TXPAUSE		0x54 +#define AR8216_STATS_TXMULTI		0x58 +#define AR8216_STATS_TXUNDERRUN		0x5c +#define AR8216_STATS_TX64BYTE		0x60 +#define AR8216_STATS_TX128BYTE		0x64 +#define AR8216_STATS_TX256BYTE		0x68 +#define AR8216_STATS_TX512BYTE		0x6c +#define AR8216_STATS_TX1024BYTE		0x70 +#define AR8216_STATS_TXMAXBYTE		0x74 +#define AR8216_STATS_TXOVERSIZE		0x78 +#define AR8216_STATS_TXBYTE		0x7c +#define AR8216_STATS_TXCOLLISION	0x84 +#define AR8216_STATS_TXABORTCOL		0x88 +#define AR8216_STATS_TXMULTICOL		0x8c +#define AR8216_STATS_TXSINGLECOL	0x90 +#define AR8216_STATS_TXEXCDEFER		0x94 +#define AR8216_STATS_TXDEFER		0x98 +#define AR8216_STATS_TXLATECOL		0x9c +  #define AR8236_REG_PORT_VLAN(_i)	(AR8216_PORT_OFFSET((_i)) + 0x0008)  #define   AR8236_PORT_VLAN_DEFAULT_ID	BITS(16, 12)  #define   AR8236_PORT_VLAN_DEFAULT_ID_S	16 | 
