mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:18:11 +00:00
Kernel: Add interface to read link speed and duplex for NetworkAdapter
Read the appropriate registers for RTL8139, RTL8168 and E1000. For NE2000 just assume 10mbit full duplex as there is no indicator for it in the pure NE2000 spec. Mock values for loopback.
This commit is contained in:
parent
238ac8ac25
commit
59fdeec7f5
9 changed files with 98 additions and 0 deletions
|
@ -172,6 +172,11 @@ namespace Kernel {
|
|||
|
||||
#define MISC2_PFM_D3COLD_ENABLE 0x40
|
||||
|
||||
#define PHYSTATUS_FULLDUP 0x01
|
||||
#define PHYSTATUS_1000MF 0x10
|
||||
#define PHYSTATUS_100M 0x08
|
||||
#define PHYSTATUS_10M 0x04
|
||||
|
||||
#define TX_BUFFER_SIZE 0x1FF8
|
||||
#define RX_BUFFER_SIZE 0x1FF8 // FIXME: this should be increased (0x3FFF)
|
||||
|
||||
|
@ -1631,4 +1636,27 @@ String RTL8168NetworkAdapter::possible_device_name()
|
|||
}
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
bool RTL8168NetworkAdapter::link_full_duplex()
|
||||
{
|
||||
u8 phystatus = in8(REG_PHYSTATUS);
|
||||
return !!(phystatus & (PHYSTATUS_FULLDUP | PHYSTATUS_1000MF));
|
||||
}
|
||||
|
||||
i32 RTL8168NetworkAdapter::link_speed()
|
||||
{
|
||||
if (!link_up())
|
||||
return NetworkAdapter::LINKSPEED_INVALID;
|
||||
|
||||
u8 phystatus = in8(REG_PHYSTATUS);
|
||||
if (phystatus & PHYSTATUS_1000MF)
|
||||
return 1000;
|
||||
if (phystatus & PHYSTATUS_100M)
|
||||
return 100;
|
||||
if (phystatus & PHYSTATUS_10M)
|
||||
return 10;
|
||||
|
||||
return NetworkAdapter::LINKSPEED_INVALID;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue