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:
		@@ -1317,6 +1317,31 @@ unlock:
 | 
				
			|||||||
	return ret;
 | 
						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
 | 
					int
 | 
				
			||||||
ar8xxx_sw_get_port_mib(struct switch_dev *dev,
 | 
					ar8xxx_sw_get_port_mib(struct switch_dev *dev,
 | 
				
			||||||
		       const struct switch_attr *attr,
 | 
							       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);
 | 
						struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
 | 
				
			||||||
	const struct ar8xxx_chip *chip = priv->chip;
 | 
						const struct ar8xxx_chip *chip = priv->chip;
 | 
				
			||||||
	u64 *mib_stats;
 | 
						u64 *mib_stats, mib_data;
 | 
				
			||||||
	int port;
 | 
						int port;
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
	char *buf = priv->buf;
 | 
						char *buf = priv->buf;
 | 
				
			||||||
 | 
						char buf1[64];
 | 
				
			||||||
 | 
						const char *mib_name;
 | 
				
			||||||
	int i, len = 0;
 | 
						int i, len = 0;
 | 
				
			||||||
	bool mib_stats_empty = true;
 | 
						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];
 | 
						mib_stats = &priv->mib_stats[port * chip->num_mibs];
 | 
				
			||||||
	for (i = 0; i < chip->num_mibs; i++) {
 | 
						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,
 | 
							len += snprintf(buf + len, sizeof(priv->buf) - len,
 | 
				
			||||||
				"%-12s: %llu\n",
 | 
									"%-12s: %llu\n", mib_name, mib_data);
 | 
				
			||||||
				chip->mib_decs[i].name,
 | 
							if ((!strcmp(mib_name, "TxByte") ||
 | 
				
			||||||
				mib_stats[i]);
 | 
							    !strcmp(mib_name, "RxGoodByte")) &&
 | 
				
			||||||
		if (mib_stats_empty && mib_stats[i])
 | 
							    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;
 | 
								mib_stats_empty = false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user