Updated driver shutdown

This commit is contained in:
Alex 2022-12-16 03:07:29 +02:00
parent e1985cea90
commit b4cb49e696
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
2 changed files with 16 additions and 9 deletions

View File

@ -670,13 +670,13 @@ namespace CrashHandler
ExceptionOccurred = true; ExceptionOccurred = true;
if (DriverManager) if (DriverManager)
{
KernelCallback callback;
foreach (Driver::DriverFile *drv in DriverManager->GetDrivers()) foreach (Driver::DriverFile *drv in DriverManager->GetDrivers())
{ {
if (!drv)
continue;
KernelCallback callback;
memset(&callback, 0, sizeof(KernelCallback)); memset(&callback, 0, sizeof(KernelCallback));
callback.Reason = StopReason; callback.Reason = StopReason;
debug("Stopping driver %ld...", drv->DriverUID);
DriverManager->IOCB(drv->DriverUID, (void *)&callback); DriverManager->IOCB(drv->DriverUID, (void *)&callback);
for (size_t i = 0; i < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); i++) for (size_t i = 0; i < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); i++)
@ -686,6 +686,7 @@ namespace CrashHandler
delete drv->InterruptHook[i]; delete drv->InterruptHook[i];
} }
} }
}
debug("Reading control registers..."); debug("Reading control registers...");
crashdata.Frame = Frame; crashdata.Frame = Frame;

View File

@ -33,9 +33,14 @@ void KernelMainThread()
DriverManager = new Driver::Driver; DriverManager = new Driver::Driver;
KPrint("Fetching Disks..."); KPrint("Fetching Disks...");
foreach (auto Driver in DriverManager->GetDrivers()) if (DriverManager->GetDrivers().size() > 0)
if (((FexExtended *)((uint64_t)Driver->Address + EXTENDED_SECTION_ADDRESS))->Driver.Type == FexDriverType::FexDriverType_Storage) {
DiskManager->FetchDisks(Driver->DriverUID); foreach (auto Driver in DriverManager->GetDrivers())
if (((FexExtended *)((uint64_t)Driver->Address + EXTENDED_SECTION_ADDRESS))->Driver.Type == FexDriverType::FexDriverType_Storage)
DiskManager->FetchDisks(Driver->DriverUID);
}
else
KPrint("\eE85230No disk drivers found! Cannot fetch disks!");
KPrint("Setting up userspace..."); KPrint("Setting up userspace...");
@ -78,13 +83,13 @@ Exit:
void KernelShutdownThread(bool Reboot) void KernelShutdownThread(bool Reboot)
{ {
if (DriverManager) if (DriverManager)
{
KernelCallback callback;
foreach (Driver::DriverFile *drv in DriverManager->GetDrivers()) foreach (Driver::DriverFile *drv in DriverManager->GetDrivers())
{ {
if (!drv)
continue;
KernelCallback callback;
memset(&callback, 0, sizeof(KernelCallback)); memset(&callback, 0, sizeof(KernelCallback));
callback.Reason = StopReason; callback.Reason = StopReason;
debug("Stopping driver %ld...", drv->DriverUID);
DriverManager->IOCB(drv->DriverUID, (void *)&callback); DriverManager->IOCB(drv->DriverUID, (void *)&callback);
for (size_t i = 0; i < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); i++) for (size_t i = 0; i < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); i++)
@ -94,6 +99,7 @@ void KernelShutdownThread(bool Reboot)
delete drv->InterruptHook[i]; delete drv->InterruptHook[i];
} }
} }
}
trace("Shutting Down/Rebooting..."); trace("Shutting Down/Rebooting...");
if (Reboot) if (Reboot)
PowerManager->Reboot(); PowerManager->Reboot();