Updated intel network driver

This commit is contained in:
Alex 2023-01-07 20:19:27 +02:00
parent 6dbd2a11a4
commit 95d75ed4ff
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
4 changed files with 76 additions and 12 deletions

View File

@ -14,14 +14,14 @@ HEAD(FexFormatType_Driver, FexOSType_Fennix, DriverEntry);
__attribute__((section(".extended"))) FexExtended ExtendedHeader = { __attribute__((section(".extended"))) FexExtended ExtendedHeader = {
.Driver = { .Driver = {
.Name = "E1000 Network Controller", .Name = "Intel Gigabit Ethernet Controller",
.Type = FexDriverType_Network, .Type = FexDriverType_Network,
.Callback = CallbackHandler, .Callback = CallbackHandler,
.Bind = { .Bind = {
.Type = BIND_PCI, .Type = BIND_PCI,
.PCI = { .PCI = {
.VendorID = {0x8086}, .VendorID = {0x8086},
.DeviceID = {0x100E}, .DeviceID = {0x100E, 0x100F, 0x10D3, 0x10EA, 0x153A},
.Class = 0x2, .Class = 0x2,
.SubClass = 0x0, .SubClass = 0x0,
.ProgIF = 0x0, .ProgIF = 0x0,
@ -344,7 +344,9 @@ int CallbackHandler(KernelCallback *Data)
{ {
print("Kernel received configuration data."); print("Kernel received configuration data.");
PCIBaseAddress = reinterpret_cast<PCIDeviceHeader *>(Data->RawPtr); PCIBaseAddress = reinterpret_cast<PCIDeviceHeader *>(Data->RawPtr);
if (PCIBaseAddress->VendorID == 0x8086 && PCIBaseAddress->DeviceID == 0x100E) switch (PCIBaseAddress->DeviceID)
{
case 0x100E:
{ {
print("Found Intel 82540EM Gigabit Ethernet Controller."); print("Found Intel 82540EM Gigabit Ethernet Controller.");
@ -384,24 +386,86 @@ int CallbackHandler(KernelCallback *Data)
InitializeRX(); InitializeRX();
InitializeTX(); InitializeTX();
return OK;
} }
else if (PCIBaseAddress->VendorID == 0x8086 && PCIBaseAddress->DeviceID == 0x153A) case 0x100F:
{ {
print("Found Intel I217 Gigabit Ethernet Controller."); print("Found Intel 82545EM Gigabit Ethernet Controller.");
PCIBaseAddress->Command |= PCI_COMMAND_MASTER | PCI_COMMAND_IO | PCI_COMMAND_MEMORY;
uint32_t PCIBAR0 = ((PCIHeader0 *)PCIBaseAddress)->BAR0;
uint32_t PCIBAR1 = ((PCIHeader0 *)PCIBaseAddress)->BAR1;
BAR.Type = PCIBAR0 & 1;
BAR.IOBase = PCIBAR1 & (~3);
BAR.MemoryBase = PCIBAR0 & (~15);
// Detect EEPROM
OutCMD(REG::EEPROM, 0x1);
for (int i = 0; i < 1000 && !EEPROMAvailable; i++)
if (InCMD(REG::EEPROM) & 0x10)
EEPROMAvailable = true;
else
EEPROMAvailable = false;
// Get MAC address
if (!GetMAC().Valid())
return NOT_AVAILABLE;
else
print("MAC address found.");
MAC = GetMAC();
return NOT_IMPLEMENTED; return NOT_IMPLEMENTED;
} }
else if (PCIBaseAddress->VendorID == 0x8086 && PCIBaseAddress->DeviceID == 0x10EA) case 0x10D3:
{
print("Found Intel 82574L Gigabit Ethernet Controller.");
PCIBaseAddress->Command |= PCI_COMMAND_MASTER | PCI_COMMAND_IO | PCI_COMMAND_MEMORY;
uint32_t PCIBAR0 = ((PCIHeader0 *)PCIBaseAddress)->BAR0;
uint32_t PCIBAR1 = ((PCIHeader0 *)PCIBaseAddress)->BAR1;
BAR.Type = PCIBAR0 & 1;
BAR.IOBase = PCIBAR1 & (~3);
BAR.MemoryBase = PCIBAR0 & (~15);
// Detect EEPROM
OutCMD(REG::EEPROM, 0x1);
for (int i = 0; i < 1000 && !EEPROMAvailable; i++)
if (InCMD(REG::EEPROM) & 0x10)
EEPROMAvailable = true;
else
EEPROMAvailable = false;
// Get MAC address
if (!GetMAC().Valid())
return NOT_AVAILABLE;
else
print("MAC address found.");
MAC = GetMAC();
return NOT_IMPLEMENTED;
}
case 0x10EA:
{
print("Found Intel I217-LM Gigabit Ethernet Controller.");
return NOT_IMPLEMENTED;
}
case 0x153A:
{ {
print("Found Intel 82577LM Gigabit Ethernet Controller."); print("Found Intel 82577LM Gigabit Ethernet Controller.");
return NOT_IMPLEMENTED; return NOT_IMPLEMENTED;
} }
else default:
{
print("Unsupported Intel Ethernet Controller.");
return DEVICE_NOT_SUPPORTED; return DEVICE_NOT_SUPPORTED;
break; }
}
return ERROR;
} }
case FetchReason: case FetchReason:
{ {
KAPI->Util.memcpy(Data->NetworkCallback.Fetch.Name, (void *)"Intel 82540EM Gigabit Ethernet Controller", 42); KAPI->Util.memcpy(Data->NetworkCallback.Fetch.Name, (void *)"Intel Gigabit Ethernet Controller", 42);
Data->NetworkCallback.Fetch.MAC = MAC.ToHex(); Data->NetworkCallback.Fetch.MAC = MAC.ToHex();
break; break;
} }

View File

@ -1,7 +1,7 @@
# Config file # Config file
include ../../../Makefile.conf include ../../../Makefile.conf
FILENAME = E1000.fex FILENAME = Intel-Gigabit.fex
CC = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc CC = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)gcc
CPP = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)g++ CPP = ../../../$(COMPILER_PATH)/$(COMPILER_ARCH)g++

View File

@ -1,6 +1,6 @@
build: build:
make --quiet -C AMDPCNET build make --quiet -C AMDPCNET build
make --quiet -C E1000 build make --quiet -C IntelGigabit build
make --quiet -C RTL8139 build make --quiet -C RTL8139 build
make --quiet -C RTL8169 build make --quiet -C RTL8169 build
@ -9,6 +9,6 @@ prepare:
clean: clean:
make --quiet -C AMDPCNET clean make --quiet -C AMDPCNET clean
make --quiet -C E1000 clean make --quiet -C IntelGigabit clean
make --quiet -C RTL8139 clean make --quiet -C RTL8139 clean
make --quiet -C RTL8169 clean make --quiet -C RTL8169 clean