diff --git a/KThread.cpp b/KThread.cpp index 0c8b8d1..333b8fb 100644 --- a/KThread.cpp +++ b/KThread.cpp @@ -1,8 +1,21 @@ #include "kernel.h" +#include + void KernelMainThread() { KPrint("Kernel main thread started!"); // asm("int $0x1"); CPU::Stop(); } + +void KernelShutdownThread(bool Reboot) +{ + KPrint("Kernel shutdown thread started!"); + if (Reboot) + PowerManager->Reboot(); + else + PowerManager->Shutdown(); + + CPU::Stop(); +} diff --git a/Tasking/Task.cpp b/Tasking/Task.cpp index e6183b1..5e81a5c 100644 --- a/Tasking/Task.cpp +++ b/Tasking/Task.cpp @@ -27,6 +27,8 @@ namespace Tasking { extern "C" void OneShot(int TimeSlice) { + if (TimeSlice == 0) + TimeSlice = 10; #if defined(__amd64__) ((APIC::Timer *)Interrupts::apicTimer[GetCurrentCPU()->ID])->OneShot(CPU::x64::IRQ16, TimeSlice); #elif defined(__i386__) diff --git a/kernel.h b/kernel.h index 4a8cde4..8a987d4 100644 --- a/kernel.h +++ b/kernel.h @@ -25,6 +25,8 @@ extern Tasking::Task *TaskManager; EXTERNC void KPrint(const char *format, ...); EXTERNC void Entry(struct BootInfo *Info); + EXTERNC void KernelMainThread(); +EXTERNC void KernelShutdownThread(bool Reboot); #endif // !__FENNIX_KERNEL_KERNEL_H__