mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Correct handling of SFP ports in stat command
This fixes handling of the SFP ports in the stat command. The output of the command now is for physical ports, which however are not shown in sequence.
This commit is contained in:
+50
-43
@@ -382,54 +382,61 @@ void port_stats_print(void) __banked
|
|||||||
{
|
{
|
||||||
print_string("\n Port\tState\tLink\tTxGood\t\tTxBad\t\tRxGood\t\tRxBad\n");
|
print_string("\n Port\tState\tLink\tTxGood\t\tTxBad\t\tRxGood\t\tRxBad\n");
|
||||||
for (uint8_t i = minPort; i <= maxPort; i++) {
|
for (uint8_t i = minPort; i <= maxPort; i++) {
|
||||||
write_char('1' + i); write_char('\t');
|
if (!isRTL8373) {
|
||||||
phy_read(i, 0x1f, 0xa610); // p001f.a610:2058
|
write_char('0' + log_to_phys_port[i]); write_char('\t');
|
||||||
if (i <= maxPort - nSFPPorts) {
|
} else {
|
||||||
|
write_char('1' + i); write_char('\t');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IS_SFP(i)) {
|
||||||
|
phy_read(i, 0x1f, 0xa610);
|
||||||
if (SFR_DATA_8 == 0x20)
|
if (SFR_DATA_8 == 0x20)
|
||||||
print_string("On\t");
|
print_string("On\t");
|
||||||
else
|
else
|
||||||
print_string("Off\t");
|
print_string("Off\t");
|
||||||
|
} else { // An SFP Module
|
||||||
|
if (i != 3) {
|
||||||
|
reg_read_m(RTL837X_REG_GPIO_00_31_INPUT);
|
||||||
|
if (!(sfr_data[0] & 0x40)) {
|
||||||
|
print_string("SFP OK\t");
|
||||||
|
} else {
|
||||||
|
print_string("NO SFP\t");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
reg_read_m(RTL837X_REG_GPIO_32_63_INPUT);
|
||||||
|
if (!(sfr_data[1] & 0x04)) {
|
||||||
|
print_string("SFP OK\t");
|
||||||
|
} else {
|
||||||
|
print_string("NO SFP\t");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i < 8)
|
||||||
reg_read_m(RTL837X_REG_LINKS);
|
reg_read_m(RTL837X_REG_LINKS);
|
||||||
uint8_t b = sfr_data[3 - (i >> 1)];
|
else
|
||||||
b = (i & 1) ? b >> 4 : b & 0xf;
|
reg_read_m(RTL837X_REG_LINKS_89);
|
||||||
switch (b) {
|
uint8_t b = sfr_data[3 - ((i & 7) >> 1)];
|
||||||
case 0:
|
b = (i & 1) ? b >> 4 : b & 0xf;
|
||||||
print_string("Down\t");
|
switch (b) {
|
||||||
break;
|
case 0:
|
||||||
case 1:
|
print_string("Down\t");
|
||||||
print_string("100M\t");
|
break;
|
||||||
break;
|
case 1:
|
||||||
case 2:
|
print_string("100M\t");
|
||||||
print_string("1000M\t");
|
break;
|
||||||
break;
|
case 2:
|
||||||
case 5:
|
print_string("1000M\t");
|
||||||
print_string("2.5G\t");
|
break;
|
||||||
break;
|
case 4:
|
||||||
default:
|
print_string("10G\t");
|
||||||
print_string("Up\t");
|
break;
|
||||||
break;
|
case 5:
|
||||||
}
|
print_string("2.5G\t");
|
||||||
} else { // An SFP Module TODO: This is for 1 module devices
|
break;
|
||||||
reg_read_m(RTL837X_REG_GPIO_00_31_INPUT);
|
default:
|
||||||
if (!(sfr_data[0] & 0x40)) {
|
print_string("Up\t");
|
||||||
print_string("SFP OK\t");
|
break;
|
||||||
} else {
|
|
||||||
print_string("NO SFP\t");
|
|
||||||
}
|
|
||||||
reg_read_m(RTL837X_REG_GPIO_32_63_INPUT);
|
|
||||||
if (sfr_data[3] & 0x20) {
|
|
||||||
print_string("Down\t");
|
|
||||||
} else {
|
|
||||||
uint8_t rate = sfp_read_reg(0, 12);
|
|
||||||
if (rate == 0xd)
|
|
||||||
print_string("1000BX\t");
|
|
||||||
else if (rate == 0x1f)
|
|
||||||
print_string("2500G\t");
|
|
||||||
else if (rate > 0x65 && rate < 0x70)
|
|
||||||
print_string("10G\t");
|
|
||||||
else
|
|
||||||
print_string("Up\t");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
STAT_GET(0x2f, i);
|
STAT_GET(0x2f, i);
|
||||||
print_reg(RTL837X_STAT_V_LOW); write_char('\t');
|
print_reg(RTL837X_STAT_V_LOW); write_char('\t');
|
||||||
|
|||||||
+2
-1
@@ -31,7 +31,8 @@
|
|||||||
#define SDS_10GR 0x1a
|
#define SDS_10GR 0x1a
|
||||||
#define SDS_OFF 0x1f
|
#define SDS_OFF 0x1f
|
||||||
|
|
||||||
#define RTL837X_REG_LINKS 0x63f0
|
#define RTL837X_REG_LINKS 0x63f0
|
||||||
|
#define RTL837X_REG_LINKS_89 0x63f4
|
||||||
/* Each nibble encodes the link state of a port.
|
/* Each nibble encodes the link state of a port.
|
||||||
Port 0 appears to be the CPU port
|
Port 0 appears to be the CPU port
|
||||||
The RTL8372 serves ports 4-7, port 3 is the RTL8221
|
The RTL8372 serves ports 4-7, port 3 is the RTL8221
|
||||||
|
|||||||
Reference in New Issue
Block a user