mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 15:34:33 +00:00
Updated driver shutdown
This commit is contained in:
parent
e1985cea90
commit
b4cb49e696
@ -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;
|
||||||
|
18
KThread.cpp
18
KThread.cpp
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user