mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 15:34:33 +00:00
Updated driver loading
This commit is contained in:
parent
7527a8033d
commit
3f3b636caf
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user