1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-10-06 12:20:43 +03:00

rtl8366s: simplify mib counters handling

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19326 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
juhosg 2010-01-25 14:24:53 +00:00
parent f32ec31b3b
commit 57a1f64fd7

View File

@ -183,41 +183,46 @@ struct rtl8366s_vlan4kentry {
u16 g_dbg_reg;
#endif
static const char *MIBCOUNTERS[] = {
"IfInOctets ",
"EtherStatsOctets ",
"EtherStatsUnderSizePkts ",
"EtherFregament ",
"EtherStatsPkts64Octets ",
"EtherStatsPkts65to127Octets ",
"EtherStatsPkts128to255Octets ",
"EtherStatsPkts256to511Octets ",
"EtherStatsPkts512to1023Octets ",
"EtherStatsPkts1024to1518Octets ",
"EtherOversizeStats ",
"EtherStatsJabbers ",
"IfInUcastPkts ",
"EtherStatsMulticastPkts ",
"EtherStatsBroadcastPkts ",
"EtherStatsDropEvents ",
"Dot3StatsFCSErrors ",
"Dot3StatsSymbolErrors ",
"Dot3InPauseFrames ",
"Dot3ControlInUnknownOpcodes ",
"IfOutOctets ",
"Dot3StatsSingleCollisionFrames ",
"Dot3StatMultipleCollisionFrames ",
"Dot3sDeferredTransmissions ",
"Dot3StatsLateCollisions ",
"EtherStatsCollisions ",
"Dot3StatsExcessiveCollisions ",
"Dot3OutPauseFrames ",
"Dot1dBasePortDelayExceededDiscards",
"Dot1dTpPortInDiscards ",
"IfOutUcastPkts ",
"IfOutMulticastPkts ",
"IfOutBroadcastPkts ",
NULL,
struct mib_counter {
unsigned offset;
unsigned length;
const char *name;
};
static struct mib_counter rtl8366s_mib_counters[RTL8366S_MIB_COUNT] = {
{ 0, 4, "IfInOctets " },
{ 4, 4, "EtherStatsOctets " },
{ 8, 2, "EtherStatsUnderSizePkts " },
{ 10, 2, "EtherFregament " },
{ 12, 2, "EtherStatsPkts64Octets " },
{ 14, 2, "EtherStatsPkts65to127Octets " },
{ 16, 2, "EtherStatsPkts128to255Octets " },
{ 18, 2, "EtherStatsPkts256to511Octets " },
{ 20, 2, "EtherStatsPkts512to1023Octets " },
{ 22, 2, "EtherStatsPkts1024to1518Octets " },
{ 24, 2, "EtherOversizeStats " },
{ 26, 2, "EtherStatsJabbers " },
{ 28, 2, "IfInUcastPkts " },
{ 30, 2, "EtherStatsMulticastPkts " },
{ 32, 2, "EtherStatsBroadcastPkts " },
{ 34, 2, "EtherStatsDropEvents " },
{ 36, 2, "Dot3StatsFCSErrors " },
{ 38, 2, "Dot3StatsSymbolErrors " },
{ 40, 2, "Dot3InPauseFrames " },
{ 42, 2, "Dot3ControlInUnknownOpcodes " },
{ 44, 2, "IfOutOctets " },
{ 46, 2, "Dot3StatsSingleCollisionFrames " },
{ 48, 2, "Dot3StatMultipleCollisionFrames " },
{ 50, 2, "Dot3sDeferredTransmissions " },
{ 52, 2, "Dot3StatsLateCollisions " },
{ 54, 2, "EtherStatsCollisions " },
{ 56, 2, "Dot3StatsExcessiveCollisions " },
{ 58, 2, "Dot3OutPauseFrames " },
{ 60, 2, "Dot1dBasePortDelayExceededDiscards" },
{ 62, 2, "Dot1dTpPortInDiscards " },
{ 64, 2, "IfOutUcastPkts " },
{ 66, 2, "IfOutMulticastPkts " },
{ 68, 2, "IfOutBroadcastPkts " },
};
static inline struct rtl8366s *sw_to_rtl8366s(struct switch_dev *sw)
@ -299,24 +304,15 @@ static int rtl8366_get_mib_counter(struct rtl8366s *rtl, int counter,
struct rtl8366_smi *smi = &rtl->smi;
int i;
int err;
u32 addr, data, regoffset;
u32 addr, data;
u64 mibvalue;
/* address offset to MIBs counter */
const u16 mibLength[RTL8366S_MIB_COUNT] = {4, 4, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 4, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2};
if (port > RTL8366_NUM_PORTS || counter >= RTL8366S_MIB_COUNT)
return -EINVAL;
regoffset = RTL8366S_MIB_COUNTER_PORT_OFFSET * (port);
for (i = 0; i < counter; i++)
regoffset += mibLength[i];
addr = RTL8366S_MIB_COUNTER_BASE + regoffset;
addr = RTL8366S_MIB_COUNTER_BASE +
RTL8366S_MIB_COUNTER_PORT_OFFSET * (port) +
rtl8366s_mib_counters[counter].offset;
/*
* Writing access counter address first
@ -339,18 +335,12 @@ static int rtl8366_get_mib_counter(struct rtl8366s *rtl, int counter,
return -EIO;
mibvalue = 0;
addr = addr + mibLength[counter] - 1;
i = mibLength[counter];
while (i) {
err = rtl8366_smi_read_reg(smi, addr, &data);
for (i = rtl8366s_mib_counters[counter].length; i > 0; i--) {
err = rtl8366_smi_read_reg(smi, addr + (i - 1), &data);
if (err)
return err;
mibvalue = (mibvalue << 16) | (data & 0xFFFF);
addr--;
i--;
}
*val = mibvalue;
@ -739,7 +729,7 @@ static ssize_t rtl8366s_read_debugfs_mibs(struct file *file,
for (i = 0; i < 33; ++i) {
len += snprintf(buf + len, sizeof(rtl->buf) - len, "%d:%s ",
i, MIBCOUNTERS[i]);
i, rtl8366s_mib_counters[i].name);
for (j = 0; j < RTL8366_NUM_PORTS; ++j) {
unsigned long long counter = 0;
@ -1220,7 +1210,7 @@ static int rtl8366s_sw_get_port_mib(struct switch_dev *dev,
for (i = 0; i < RTL8366S_MIB_COUNT; ++i) {
len += snprintf(buf + len, sizeof(rtl->buf) - len,
"%d:%s\t", i, MIBCOUNTERS[i]);
"%d:%s\t", i, rtl8366s_mib_counters[i].name);
if (!rtl8366_get_mib_counter(rtl, i, val->port_vlan, &counter))
len += snprintf(buf + len, sizeof(rtl->buf) - len,
"[%llu]\n", counter);