AR8216: complement MIB counters with info in GiB / MiB / KiB
The decimal values especially for TxByte and RxGoodByte are hard to read once bigger amounts of data have been transferred. Therefore complement the decimal values with info in GiB / MiB / KiB. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> SVN-Revision: 48911
This commit is contained in:
parent
76e1efc042
commit
f03ec2baf7
1 changed files with 40 additions and 5 deletions
|
@ -1317,6 +1317,31 @@ unlock:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
ar8xxx_byte_to_str(char *buf, int len, u64 byte)
|
||||
{
|
||||
unsigned long b;
|
||||
const char *unit;
|
||||
|
||||
if (byte >= 0x40000000) { /* 1 GiB */
|
||||
b = byte * 10 / 0x40000000;
|
||||
unit = "GiB";
|
||||
} else if (byte >= 0x100000) { /* 1 MiB */
|
||||
b = byte * 10 / 0x100000;
|
||||
unit = "MiB";
|
||||
} else if (byte >= 0x400) { /* 1 KiB */
|
||||
b = byte * 10 / 0x400;
|
||||
unit = "KiB";
|
||||
} else {
|
||||
b = byte;
|
||||
unit = "Byte";
|
||||
}
|
||||
if (strcmp(unit, "Byte"))
|
||||
snprintf(buf, len, "%lu.%lu %s", b / 10, b % 10, unit);
|
||||
else
|
||||
snprintf(buf, len, "%lu %s", b, unit);
|
||||
}
|
||||
|
||||
int
|
||||
ar8xxx_sw_get_port_mib(struct switch_dev *dev,
|
||||
const struct switch_attr *attr,
|
||||
|
@ -1324,10 +1349,12 @@ ar8xxx_sw_get_port_mib(struct switch_dev *dev,
|
|||
{
|
||||
struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
|
||||
const struct ar8xxx_chip *chip = priv->chip;
|
||||
u64 *mib_stats;
|
||||
u64 *mib_stats, mib_data;
|
||||
int port;
|
||||
int ret;
|
||||
char *buf = priv->buf;
|
||||
char buf1[64];
|
||||
const char *mib_name;
|
||||
int i, len = 0;
|
||||
bool mib_stats_empty = true;
|
||||
|
||||
|
@ -1351,11 +1378,19 @@ ar8xxx_sw_get_port_mib(struct switch_dev *dev,
|
|||
|
||||
mib_stats = &priv->mib_stats[port * chip->num_mibs];
|
||||
for (i = 0; i < chip->num_mibs; i++) {
|
||||
mib_name = chip->mib_decs[i].name;
|
||||
mib_data = mib_stats[i];
|
||||
len += snprintf(buf + len, sizeof(priv->buf) - len,
|
||||
"%-12s: %llu\n",
|
||||
chip->mib_decs[i].name,
|
||||
mib_stats[i]);
|
||||
if (mib_stats_empty && mib_stats[i])
|
||||
"%-12s: %llu\n", mib_name, mib_data);
|
||||
if ((!strcmp(mib_name, "TxByte") ||
|
||||
!strcmp(mib_name, "RxGoodByte")) &&
|
||||
mib_data >= 1024) {
|
||||
ar8xxx_byte_to_str(buf1, sizeof(buf1), mib_data);
|
||||
--len; /* discard newline at the end of buf */
|
||||
len += snprintf(buf + len, sizeof(priv->buf) - len,
|
||||
" (%s)\n", buf1);
|
||||
}
|
||||
if (mib_stats_empty && mib_data)
|
||||
mib_stats_empty = false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue