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 = {
.Driver = {
.Name = "E1000 Network Controller",
.Name = "Intel Gigabit Ethernet Controller",
.Type = FexDriverType_Network,
.Callback = CallbackHandler,
.Bind = {
.Type = BIND_PCI,
.PCI = {
.VendorID = {0x8086},
.DeviceID = {0x100E},
.DeviceID = {0x100E, 0x100F, 0x10D3, 0x10EA, 0x153A},
.Class = 0x2,
.SubClass = 0x0,
.ProgIF = 0x0,
@ -344,7 +344,9 @@ int CallbackHandler(KernelCallback *Data)
{
print("Kernel received configuration data.");
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.");
@ -384,24 +386,86 @@ int CallbackHandler(KernelCallback *Data)
InitializeRX();
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;
}
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.");
return NOT_IMPLEMENTED;
}
else
default:
{
print("Unsupported Intel Ethernet Controller.");
return DEVICE_NOT_SUPPORTED;
break;
}
}
return ERROR;
}
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();
break;
}

View File

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

View File

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