1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 13:48:12 +00:00

Kernel/Net: Enable usage of RTL8168E and RTL8168H in RTL8168 driver

I tested both (version 15 and 30 of the RTL8168 chipset) with PCI-
passthrough of these cards, and they seem to work just fine with the
driver.
This commit is contained in:
Liav A 2021-09-18 14:46:19 +03:00 committed by Idan Horowitz
parent 86fa5d71c0
commit 23ef46f4f7
2 changed files with 54 additions and 4 deletions

View file

@ -192,6 +192,51 @@ UNMAP_AFTER_INIT RefPtr<RTL8168NetworkAdapter> RTL8168NetworkAdapter::try_to_ini
return adopt_ref_if_nonnull(new (nothrow) RTL8168NetworkAdapter(address, irq));
}
bool RTL8168NetworkAdapter::determine_supported_version() const
{
switch (m_version) {
case ChipVersion::Version1:
case ChipVersion::Version2:
case ChipVersion::Version3:
return true;
case ChipVersion::Version4:
case ChipVersion::Version5:
case ChipVersion::Version6:
case ChipVersion::Version7:
case ChipVersion::Version8:
case ChipVersion::Version9:
case ChipVersion::Version10:
case ChipVersion::Version11:
case ChipVersion::Version12:
case ChipVersion::Version13:
case ChipVersion::Version14:
return false;
case ChipVersion::Version15:
return true;
case ChipVersion::Version16:
return false;
case ChipVersion::Version17:
return true;
case ChipVersion::Version18:
case ChipVersion::Version19:
case ChipVersion::Version20:
case ChipVersion::Version21:
case ChipVersion::Version22:
case ChipVersion::Version23:
case ChipVersion::Version24:
case ChipVersion::Version25:
case ChipVersion::Version26:
case ChipVersion::Version27:
case ChipVersion::Version28:
case ChipVersion::Version29:
return false;
case ChipVersion::Version30:
return true;
default:
return false;
}
}
UNMAP_AFTER_INIT RTL8168NetworkAdapter::RTL8168NetworkAdapter(PCI::Address address, u8 irq)
: PCI::Device(address)
, IRQHandler(irq)
@ -206,7 +251,8 @@ UNMAP_AFTER_INIT RTL8168NetworkAdapter::RTL8168NetworkAdapter(PCI::Address addre
identify_chip_version();
dmesgln("RTL8168: Version detected - {} ({}{})", possible_device_name(), (u8)m_version, m_version_uncertain ? "?" : "");
if (m_version == ChipVersion::Unknown || (m_version >= ChipVersion::Version4 && m_version <= ChipVersion::Version16) || m_version >= ChipVersion::Version18) {
if (!determine_supported_version()) {
dmesgln("RTL8168: Aborting initialization! Support for your chip version ({}) is not implemented yet, please open a GH issue and include this message.", (u8)m_version);
return; // Each ChipVersion requires a specific implementation of configure_phy and hardware_quirks
}
@ -389,8 +435,10 @@ void RTL8168NetworkAdapter::configure_phy()
TODO();
case ChipVersion::Version14:
TODO();
case ChipVersion::Version15:
TODO();
case ChipVersion::Version15: {
configure_phy_e_2();
return;
}
case ChipVersion::Version16:
TODO();
case ChipVersion::Version17: {
@ -822,7 +870,7 @@ void RTL8168NetworkAdapter::hardware_quirks()
case ChipVersion::Version14:
TODO();
case ChipVersion::Version15:
TODO();
return;
case ChipVersion::Version16:
TODO();
case ChipVersion::Version17: