mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Add 5G speed display support and 5/10G EEE display/settings
This commit is contained in:
@@ -661,6 +661,14 @@ void parse_port(void)
|
|||||||
else if (cmd_compare(3, "full"))
|
else if (cmd_compare(3, "full"))
|
||||||
phy_settings.duplex = PHY_DUPLEX_FULL;
|
phy_settings.duplex = PHY_DUPLEX_FULL;
|
||||||
phy_set_speed();
|
phy_set_speed();
|
||||||
|
} else if (cmd_compare(2, "10g")) {
|
||||||
|
print_string(" 10G\n");
|
||||||
|
phy_settings.speed = PHY_SPEED_10G;
|
||||||
|
phy_set_speed();
|
||||||
|
} else if (cmd_compare(2, "5g")) {
|
||||||
|
print_string(" 5G\n");
|
||||||
|
phy_settings.speed = PHY_SPEED_5G;
|
||||||
|
phy_set_speed();
|
||||||
} else if (cmd_compare(2, "2g5")) {
|
} else if (cmd_compare(2, "2g5")) {
|
||||||
print_string(" 2.5G\n");
|
print_string(" 2.5G\n");
|
||||||
phy_settings.speed = PHY_SPEED_2G5;
|
phy_settings.speed = PHY_SPEED_2G5;
|
||||||
@@ -1062,6 +1070,9 @@ void parse_eee(void)
|
|||||||
__xdata int8_t port = -1;
|
__xdata int8_t port = -1;
|
||||||
__xdata uint8_t speed = EEE_2G5;
|
__xdata uint8_t speed = EEE_2G5;
|
||||||
__xdata uint8_t speed_word = 0;
|
__xdata uint8_t speed_word = 0;
|
||||||
|
|
||||||
|
if (machine.n_10g)
|
||||||
|
speed = EEE_10G;
|
||||||
// Check if word 2 is a speed (contains 'g' or 'm') or a port number
|
// Check if word 2 is a speed (contains 'g' or 'm') or a port number
|
||||||
if (cmd_words_len >= 3) {
|
if (cmd_words_len >= 3) {
|
||||||
uint8_t idx = cmd_words_b[2];
|
uint8_t idx = cmd_words_b[2];
|
||||||
|
|||||||
+58
-7
@@ -440,6 +440,9 @@ void port_stats_print(void) __banked
|
|||||||
case 5:
|
case 5:
|
||||||
print_string("2.5G\t");
|
print_string("2.5G\t");
|
||||||
break;
|
break;
|
||||||
|
case 6:
|
||||||
|
print_string("5G\t");
|
||||||
|
break;
|
||||||
case 99:
|
case 99:
|
||||||
print_string("Down\t");
|
print_string("Down\t");
|
||||||
break;
|
break;
|
||||||
@@ -489,20 +492,19 @@ void port_eee_enable(__xdata uint8_t port,__xdata uint8_t speed) __banked
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
REG_SET(RTL837X_EEE_CTRL_BASE + (port << 8), EEE_RX_ENABLE | EEE_TX_ENABLE);
|
||||||
print_string("EEE on for "); print_byte(port); print_string(" speed ");
|
print_string("EEE on for "); print_byte(port); print_string(" speed ");
|
||||||
// Enable all speeds up to the specified speed
|
// Enable all speeds up to the specified speed
|
||||||
if ((speed & (EEE_100 | EEE_1000 | EEE_2G5)) == EEE_100) {
|
if ((speed & (EEE_100 | EEE_1000 | EEE_2G5 | EEE_5G | EEE_10G)) == EEE_100) {
|
||||||
print_string("100m\n");
|
print_string("100m\n");
|
||||||
REG_SET(RTL8373_EEE_CTRL_BASE + (port << 2), EEE_100);
|
|
||||||
// Enable EEE advertisement for 100BASE-T via EEE Advertisement Reg
|
// Enable EEE advertisement for 100BASE-T via EEE Advertisement Reg
|
||||||
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV, PHY_EEE_BIT_100M);
|
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV, PHY_EEE_BIT_100M);
|
||||||
if (!(speed & EEE_NORESET))
|
if (!(speed & EEE_NORESET))
|
||||||
phy_reset(port);
|
phy_reset(port);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((speed & (EEE_100 | EEE_1000 | EEE_2G5)) == EEE_1000) {
|
if ((speed & (EEE_100 | EEE_1000 | EEE_2G5 | EEE_5G | EEE_10G)) == EEE_1000) {
|
||||||
print_string("1g\n");
|
print_string("1g\n");
|
||||||
REG_SET(RTL8373_EEE_CTRL_BASE + (port << 2), EEE_100 | EEE_1000);
|
|
||||||
// Disable EEE advertisement for 2.5GBASE-T via EEE Advertisement Reg 2
|
// Disable EEE advertisement for 2.5GBASE-T via EEE Advertisement Reg 2
|
||||||
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV2, 0);
|
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV2, 0);
|
||||||
// Enable EEE advertisement for 100/1000BASE-T via EEE Advertisement Reg
|
// Enable EEE advertisement for 100/1000BASE-T via EEE Advertisement Reg
|
||||||
@@ -511,9 +513,8 @@ void port_eee_enable(__xdata uint8_t port,__xdata uint8_t speed) __banked
|
|||||||
phy_reset(port);
|
phy_reset(port);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((speed & (EEE_100 | EEE_1000 | EEE_2G5)) == EEE_2G5) {
|
if ((speed & (EEE_100 | EEE_1000 | EEE_2G5 | EEE_5G | EEE_10G)) == EEE_2G5) {
|
||||||
print_string("2g5\n");
|
print_string("2g5\n");
|
||||||
REG_SET(RTL8373_EEE_CTRL_BASE + (port << 2), EEE_100 | EEE_1000 | EEE_2G5);
|
|
||||||
// Enable EEE advertisement for 100/1000BASE-T via EEE Advertisement Reg
|
// Enable EEE advertisement for 100/1000BASE-T via EEE Advertisement Reg
|
||||||
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV, PHY_EEE_BIT_1G | PHY_EEE_BIT_100M);
|
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV, PHY_EEE_BIT_1G | PHY_EEE_BIT_100M);
|
||||||
// Enable EEE advertisement for 2.5GBASE-T via EEE Advertisement Reg 2
|
// Enable EEE advertisement for 2.5GBASE-T via EEE Advertisement Reg 2
|
||||||
@@ -522,6 +523,26 @@ void port_eee_enable(__xdata uint8_t port,__xdata uint8_t speed) __banked
|
|||||||
phy_reset(port);
|
phy_reset(port);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if ((speed & (EEE_100 | EEE_1000 | EEE_2G5 | EEE_5G | EEE_10G)) == EEE_5G) {
|
||||||
|
print_string("5g\n");
|
||||||
|
// Enable EEE advertisement for 100/1000BASE-T via EEE Advertisement Reg
|
||||||
|
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV, PHY_EEE_BIT_1G | PHY_EEE_BIT_100M);
|
||||||
|
// Enable EEE advertisement for 2.5GBASE-T via EEE Advertisement Reg 2
|
||||||
|
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV2, PHY_EEE_BIT_2G5 | PHY_EEE_BIT_5G);
|
||||||
|
if (!(speed & EEE_NORESET))
|
||||||
|
phy_reset(port);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((speed & (EEE_100 | EEE_1000 | EEE_2G5 | EEE_5G | EEE_10G)) == EEE_10G) {
|
||||||
|
print_string("10g\n");
|
||||||
|
// Enable EEE advertisement for 100/1000BASE-T via EEE Advertisement Reg
|
||||||
|
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV, PHY_EEE_BIT_10G | PHY_EEE_BIT_1G | PHY_EEE_BIT_100M);
|
||||||
|
// Enable EEE advertisement for 2.5GBASE-T via EEE Advertisement Reg 2
|
||||||
|
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV2, PHY_EEE_BIT_2G5 | PHY_EEE_BIT_5G);
|
||||||
|
if (!(speed & EEE_NORESET))
|
||||||
|
phy_reset(port);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -532,7 +553,7 @@ void port_eee_disable(uint8_t port) __banked
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
print_string("EEE off for "); print_byte(port); write_char('\n');
|
print_string("EEE off for "); print_byte(port); write_char('\n');
|
||||||
REG_SET(RTL8373_EEE_CTRL_BASE + (port << 2), 0);
|
REG_SET(RTL837X_EEE_CTRL_BASE + (port << 8), 0);
|
||||||
// Disable EEE advertisement for 100/1000BASE-T via EEE Advertisement Reg
|
// Disable EEE advertisement for 100/1000BASE-T via EEE Advertisement Reg
|
||||||
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV, 0);
|
phy_write(port, PHY_MMD_AN, PHY_EEE_ADV, 0);
|
||||||
// Disable EEE advertisement for 2.5GBASE-T via EEE Advertisement Reg 2
|
// Disable EEE advertisement for 2.5GBASE-T via EEE Advertisement Reg 2
|
||||||
@@ -552,8 +573,24 @@ void port_eee_status(uint8_t port) __banked
|
|||||||
|
|
||||||
uint16_t v;
|
uint16_t v;
|
||||||
print_string("Advertising: ");
|
print_string("Advertising: ");
|
||||||
|
|
||||||
|
if (machine.n_10g) {
|
||||||
|
phy_read(port, PHY_MMD_AN, PHY_EEE_ADV);
|
||||||
|
v = SFR_DATA_U16;
|
||||||
|
if (v & PHY_EEE_BIT_10G)
|
||||||
|
print_string(" 10G");
|
||||||
|
else
|
||||||
|
print_string(" ");
|
||||||
|
}
|
||||||
phy_read(port, PHY_MMD_AN, PHY_EEE_ADV2);
|
phy_read(port, PHY_MMD_AN, PHY_EEE_ADV2);
|
||||||
v = SFR_DATA_U16;
|
v = SFR_DATA_U16;
|
||||||
|
if (machine.n_10g) {
|
||||||
|
if (v & PHY_EEE_BIT_5G)
|
||||||
|
print_string(" 5G");
|
||||||
|
else
|
||||||
|
print_string(" ");
|
||||||
|
}
|
||||||
|
v = SFR_DATA_U16;
|
||||||
if (v & PHY_EEE_BIT_2G5)
|
if (v & PHY_EEE_BIT_2G5)
|
||||||
print_string(" 2.5G");
|
print_string(" 2.5G");
|
||||||
else
|
else
|
||||||
@@ -570,8 +607,22 @@ void port_eee_status(uint8_t port) __banked
|
|||||||
print_string(" ");
|
print_string(" ");
|
||||||
|
|
||||||
print_string(" Link Partner: ");
|
print_string(" Link Partner: ");
|
||||||
|
if (machine.n_10g) {
|
||||||
|
phy_read(port, PHY_MMD_AN, PHY_EEE_LP_ABILITY);
|
||||||
|
v = SFR_DATA_U16;
|
||||||
|
if (v & PHY_EEE_BIT_10G)
|
||||||
|
print_string(" 10G");
|
||||||
|
else
|
||||||
|
print_string(" ");
|
||||||
|
}
|
||||||
phy_read(port, PHY_MMD_AN, PHY_EEE_LP_ABILITY2);
|
phy_read(port, PHY_MMD_AN, PHY_EEE_LP_ABILITY2);
|
||||||
v = SFR_DATA_U16;
|
v = SFR_DATA_U16;
|
||||||
|
if (machine.n_10g) {
|
||||||
|
if (v & PHY_EEE_BIT_5G)
|
||||||
|
print_string(" 5G");
|
||||||
|
else
|
||||||
|
print_string(" ");
|
||||||
|
}
|
||||||
if (v & PHY_EEE_BIT_2G5)
|
if (v & PHY_EEE_BIT_2G5)
|
||||||
print_string(" 2.5G");
|
print_string(" 2.5G");
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user