Updated driver loading

This commit is contained in:
Alex 2023-01-07 20:14:44 +02:00
parent 7527a8033d
commit 3f3b636caf
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
5 changed files with 17 additions and 8 deletions

View File

@ -181,9 +181,11 @@ namespace Driver
uintptr_t ret = this->LoadDriver(driver->Address, driver->Length); uintptr_t ret = this->LoadDriver(driver->Address, driver->Length);
char RetString[128]; char RetString[128];
if (ret == DriverCode::OK) if (ret == DriverCode::OK)
strncpy(RetString, "\e058C19OK", 64); strncpy(RetString, "\e058C19OK", 10);
else if (ret == DriverCode::NOT_AVAILABLE)
strncpy(RetString, "\eFF7900NOT AVAILABLE", 21);
else else
sprintf_(RetString, "\eE85230FAILED (%#lx)", ret); sprintf(RetString, "\eE85230FAILED (%#lx)", ret);
KPrint("%s %s", driver->Name, RetString); KPrint("%s %s", driver->Name, RetString);
} }
} }

View File

@ -53,7 +53,7 @@ namespace Driver
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{ {
delete MemMgr; delete MemMgr;
error("Driver %s does not implement the configuration callback", fexExtended->Driver.Name); error("Driver %s is not implemented", fexExtended->Driver.Name);
break; break;
} }
else if (CallbackRet != DriverReturnCode::OK) else if (CallbackRet != DriverReturnCode::OK)

View File

@ -83,7 +83,7 @@ namespace Driver
int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback); int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback);
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{ {
error("Driver %s does not implement the configuration callback", fexExtended->Driver.Name); error("Driver %s is not implemented", fexExtended->Driver.Name);
delete MemMgr; delete MemMgr;
break; break;
} }
@ -130,7 +130,7 @@ namespace Driver
int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback); int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback);
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{ {
error("Driver %s does not implement the configuration callback", fexExtended->Driver.Name); error("Driver %s is not implemented", fexExtended->Driver.Name);
delete InterruptHook; delete InterruptHook;
delete MemMgr; delete MemMgr;
break; break;

View File

@ -17,6 +17,7 @@ namespace Driver
DriverCode Driver::DriverLoadBindPCI(void *DrvExtHdr, uintptr_t DriverAddress, size_t Size, bool IsElf) DriverCode Driver::DriverLoadBindPCI(void *DrvExtHdr, uintptr_t DriverAddress, size_t Size, bool IsElf)
{ {
UNUSED(IsElf); UNUSED(IsElf);
bool IsDriverLoaded = false;
for (unsigned long Vidx = 0; Vidx < sizeof(((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.VendorID) / sizeof(((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.VendorID[0]); Vidx++) for (unsigned long Vidx = 0; Vidx < sizeof(((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.VendorID) / sizeof(((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.VendorID[0]); Vidx++)
for (unsigned long Didx = 0; Didx < sizeof(((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.DeviceID) / sizeof(((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.DeviceID[0]); Didx++) for (unsigned long Didx = 0; Didx < sizeof(((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.DeviceID) / sizeof(((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.DeviceID[0]); Didx++)
{ {
@ -29,6 +30,7 @@ namespace Driver
Vector<PCI::PCIDeviceHeader *> devices = PCIManager->FindPCIDevice(((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.VendorID[Vidx], ((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.DeviceID[Didx]); Vector<PCI::PCIDeviceHeader *> devices = PCIManager->FindPCIDevice(((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.VendorID[Vidx], ((FexExtended *)DrvExtHdr)->Driver.Bind.PCI.DeviceID[Didx]);
if (devices.size() == 0) if (devices.size() == 0)
continue; continue;
foreach (auto PCIDevice in devices) foreach (auto PCIDevice in devices)
{ {
debug("[%ld] VendorID: %#x; DeviceID: %#x", devices.size(), PCIDevice->VendorID, PCIDevice->DeviceID); debug("[%ld] VendorID: %#x; DeviceID: %#x", devices.size(), PCIDevice->VendorID, PCIDevice->DeviceID);
@ -106,7 +108,7 @@ namespace Driver
int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback); int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback);
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{ {
error("Driver %s does not implement the configuration callback", fexExtended->Driver.Name); error("Driver %s is not implemented", fexExtended->Driver.Name);
delete MemMgr; delete MemMgr;
delete InterruptHook; delete InterruptHook;
continue; continue;
@ -138,7 +140,7 @@ namespace Driver
int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback); int CallbackRet = ((int (*)(KernelCallback *))((uintptr_t)fexExtended->Driver.Callback + (uintptr_t)fex))(KCallback);
if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED) if (CallbackRet == DriverReturnCode::NOT_IMPLEMENTED)
{ {
error("Driver %s does not implement the configuration callback", fexExtended->Driver.Name); error("Driver %s is not implemented", fexExtended->Driver.Name);
delete MemMgr; delete MemMgr;
continue; continue;
} }
@ -183,9 +185,13 @@ namespace Driver
break; break;
} }
} }
IsDriverLoaded = true;
} }
} }
return DriverCode::OK; if (IsDriverLoaded)
return DriverCode::OK;
else
return DriverCode::NOT_AVAILABLE;
} }
} }

View File

@ -15,6 +15,7 @@ namespace Driver
{ {
ERROR, ERROR,
OK, OK,
NOT_AVAILABLE,
INVALID_FEX_HEADER, INVALID_FEX_HEADER,
INVALID_DRIVER_DATA, INVALID_DRIVER_DATA,
NOT_DRIVER, NOT_DRIVER,