diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-21 09:35:23 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-10-21 09:35:23 +0200 |
| commit | 0bb0eb7952edbe2d14a071abe9eeff6e8b1b51ee (patch) | |
| tree | 754cb3da25aa7a22c30beed40b417f3622c6866c | |
| parent | 94bb3c0e7bdca4e5cd85a576a98b0b19847b597c (diff) | |
IMP: Improved many things, and looking at how to fix the interrupts
issue.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
| -rw-r--r-- | dev/base/EncryptFS/src/disk_crypt.cxx | 6 | ||||
| -rw-r--r-- | dev/zba/BootKit/BootKit.hxx | 2 | ||||
| -rw-r--r-- | dev/zba/amd64-efi.make | 2 | ||||
| -rw-r--r-- | dev/zba/src/BootFileReader.cxx | 8 | ||||
| -rw-r--r-- | dev/zba/src/Thread.cxx | 11 | ||||
| -rw-r--r-- | dev/zka/FSKit/HPFS.hxx | 4 | ||||
| -rw-r--r-- | dev/zka/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx | 49 | ||||
| -rw-r--r-- | dev/zka/HALKit/AMD64/HalDescriptorLoader.cxx | 16 | ||||
| -rw-r--r-- | dev/zka/HALKit/AMD64/HalInterruptAPI.asm | 82 | ||||
| -rw-r--r-- | dev/zka/HALKit/AMD64/HalKernelMain.cxx | 13 | ||||
| -rw-r--r-- | dev/zka/KernelKit/Heap.hxx | 23 | ||||
| -rw-r--r-- | dev/zka/KernelKit/ThreadLocalStorage.inl | 2 | ||||
| -rw-r--r-- | dev/zka/KernelKit/User.hxx | 6 | ||||
| -rw-r--r-- | dev/zka/KernelKit/UserProcessScheduler.hxx | 6 | ||||
| -rw-r--r-- | dev/zka/NewKit/Array.hxx | 3 | ||||
| -rw-r--r-- | dev/zka/src/ACPIFactoryInterface.cxx | 2 | ||||
| -rw-r--r-- | dev/zka/src/BitMapMgr.cxx | 4 | ||||
| -rw-r--r-- | dev/zka/src/DriveMgr.cxx | 2 | ||||
| -rw-r--r-- | dev/zka/src/HardwareThreadScheduler.cxx | 6 | ||||
| -rw-r--r-- | dev/zka/src/Heap.cxx | 1 | ||||
| -rw-r--r-- | dev/zka/src/Stop.cxx | 2 | ||||
| -rw-r--r-- | dev/zka/src/UserProcessScheduler.cxx | 60 |
22 files changed, 119 insertions, 191 deletions
diff --git a/dev/base/EncryptFS/src/disk_crypt.cxx b/dev/base/EncryptFS/src/disk_crypt.cxx index 0d9784de..031a2528 100644 --- a/dev/base/EncryptFS/src/disk_crypt.cxx +++ b/dev/base/EncryptFS/src/disk_crypt.cxx @@ -8,7 +8,7 @@ enum { - eEFSFlagEncryptedFree = 0x00, - eEFSFlagEncryptedUnlock = 0x3f, - eEFSFlagEncryptedLock = 0xf3, + kEFSFlagEncryptedFree = 0x00, + kEFSFlagEncryptedUnlocked = 0x3f, + kEFSFlagEncryptedLock = 0xf3, }; diff --git a/dev/zba/BootKit/BootKit.hxx b/dev/zba/BootKit/BootKit.hxx index 5c2805fc..f9a94c6e 100644 --- a/dev/zba/BootKit/BootKit.hxx +++ b/dev/zba/BootKit/BootKit.hxx @@ -102,7 +102,7 @@ namespace Boot ~BFileReader(); public: - Void ReadAll(SizeT until, SizeT chunk = kib_cast(4), UIntPtr outAddress = 0UL); + Void ReadAll(SizeT until, SizeT chunk = kib_cast(4), UIntPtr out_address = 0UL); enum { diff --git a/dev/zba/amd64-efi.make b/dev/zba/amd64-efi.make index 259c274c..d28c81f1 100644 --- a/dev/zba/amd64-efi.make +++ b/dev/zba/amd64-efi.make @@ -36,7 +36,7 @@ EMU_FLAGS=-net none -smp 4 -m 8G -M q35 \ file=fat:rw:src/Root/,index=2,format=raw \ -drive id=disk_2,file=$(IMG_2),if=none \ -device ahci,id=ahci \ - -device ide-hd,drive=disk_2,bus=ahci.0 -no-shutdown -no-reboot -serial stdio + -device ide-hd,drive=disk_2,bus=ahci.0 -d int LD_FLAGS=-e Main --subsystem=10 diff --git a/dev/zba/src/BootFileReader.cxx b/dev/zba/src/BootFileReader.cxx index 6ed1f58d..b1969761 100644 --- a/dev/zba/src/BootFileReader.cxx +++ b/dev/zba/src/BootFileReader.cxx @@ -126,7 +126,7 @@ Boot::BFileReader::~BFileReader() @param **readUntil** size of file @param **chunkToRead** chunk to read each time. */ -Void Boot::BFileReader::ReadAll(SizeT readUntil, SizeT chunkToRead, UIntPtr outAddress) +Void Boot::BFileReader::ReadAll(SizeT readUntil, SizeT chunkToRead, UIntPtr out_address) { if (mBlob == nullptr) { @@ -142,10 +142,10 @@ Void Boot::BFileReader::ReadAll(SizeT readUntil, SizeT chunkToRead, UIntPtr outA else if (readUntil < 1) readUntil = newPtrInfo.FileSize; - mWriter.Write(L"NEWOSLDR: SIZE: ").Write(readUntil).Write("\r"); + mWriter.Write(L"NEWOSLDR: FileSize: ").Write(readUntil).Write("\r"); } - if (!outAddress) + if (!out_address) { if (auto err = BS->AllocatePool(EfiLoaderCode, readUntil, (VoidPtr*)&mBlob) != kEfiOk) @@ -156,7 +156,7 @@ Void Boot::BFileReader::ReadAll(SizeT readUntil, SizeT chunkToRead, UIntPtr outA } else { - mBlob = (VoidPtr)outAddress; + mBlob = (VoidPtr)out_address; } } diff --git a/dev/zba/src/Thread.cxx b/dev/zba/src/Thread.cxx index 46b9030b..6d527fce 100644 --- a/dev/zba/src/Thread.cxx +++ b/dev/zba/src/Thread.cxx @@ -102,7 +102,7 @@ namespace Boot if (StrCmp(sectionForCode, sect->mName) == 0) { fStartAddress = (VoidPtr)((UIntPtr)loadStartAddress + opt_header_ptr->mAddressOfEntryPoint); - writer.Write("NEWOSLDR: ENTRY OF EXE: ").Write((UIntPtr)fStartAddress).Write("\r"); + writer.Write("NEWOSLDR: Executable entry address: ").Write((UIntPtr)fStartAddress).Write("\r"); } else if (StrCmp(sectionForNewLdr, sect->mName) == 0) { @@ -120,28 +120,25 @@ namespace Boot #ifdef __ZKA_AMD64__ if (handover_struc->HandoverArch != HEL::kArchAMD64) { - writer.Write("NEWOSLDR: ARCH OF EXE: ").Write(handover_struc->HandoverArch).Write("\r"); - writer.Write("NEWOSLDR: ENTRY OF EXE: ").Write((UIntPtr)fStartAddress).Write("\r"); CGDrawString("NEWOSLDR: NOT AN HANDOVER IMAGE, BAD ARCHITECTURE...", 40, 10, RGB(0xFF, 0xFF, 0xFF)); + ::EFI::Stop(); } #endif #ifdef __ZKA_ARM64__ if (handover_struc->HandoverArch != HEL::kArchARM64) { - writer.Write("NEWOSLDR: ARCH OF EXE: ").Write(handover_struc->HandoverArch).Write("\r"); - writer.Write("NEWOSLDR: ENTRY OF EXE: ").Write((UIntPtr)fStartAddress).Write("\r"); CGDrawString("NEWOSLDR: NOT AN HANDOVER IMAGE, BAD ARCHITECTURE...", 40, 10, RGB(0xFF, 0xFF, 0xFF)); + ::EFI::Stop(); } #endif - writer.Write("NEWOSLDR: ENTRY OF EXE: ").Write((UIntPtr)fStartAddress).Write("\r"); CGDrawString("NEWOSLDR: NOT AN HANDOVER IMAGE...", 40, 10, RGB(0xFF, 0xFF, 0xFF)); ::EFI::Stop(); } } - writer.Write("NEWOSLDR: OFFSET ").Write(sect->mPointerToRawData).Write(" of ").Write(sect->mName).Write("\r"); + writer.Write("NEWOSLDR: Raw offset: ").Write(sect->mPointerToRawData).Write(" of ").Write(sect->mName).Write("\r"); CopyMem((VoidPtr)(loadStartAddress + sect->mVirtualAddress), (VoidPtr)((UIntPtr)fBlob + sect->mPointerToRawData), sect->mSizeOfRawData); } diff --git a/dev/zka/FSKit/HPFS.hxx b/dev/zka/FSKit/HPFS.hxx index c709e48f..12a9d81f 100644 --- a/dev/zka/FSKit/HPFS.hxx +++ b/dev/zka/FSKit/HPFS.hxx @@ -18,3 +18,7 @@ #define kHPFSMinimumDiskSize (gib_cast(64))
struct HPFS_EXPLICIT_BOOT_SECTOR;
+
+struct HPFS_EXPLICIT_BOOT_SECTOR final
+{
+};
diff --git a/dev/zka/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx b/dev/zka/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx index a76fde89..b6edce6e 100644 --- a/dev/zka/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx +++ b/dev/zka/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx @@ -4,25 +4,19 @@ ------------------------------------------- */ -#include "NewKit/Stop.hxx" #include <ArchKit/ArchKit.hxx> #include <KernelKit/UserProcessScheduler.hxx> #include <NewKit/String.hxx> namespace Kernel { - EXTERN UserProcessScheduler* cProcessScheduler; + EXTERN UserProcessScheduler* kProcessScheduler; } /// @brief Handle GPF fault. /// @param rsp EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp) { - if (Kernel::cProcessScheduler == nullptr) - { - Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED); - } - Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash(); } @@ -30,16 +24,11 @@ EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp) /// @param rsp EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp) { - if (Kernel::cProcessScheduler == nullptr) - { - Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED); - } - Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash(); } /// @brief Handle scheduler interrupt. -EXTERN_C void idt_handle_scheduler() +EXTERN_C void idt_handle_scheduler(Kernel::UIntPtr rsp) { Kernel::UserProcessHelper::StartScheduling(); } @@ -48,43 +37,21 @@ EXTERN_C void idt_handle_scheduler() /// @param rsp EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp) { - if (Kernel::cProcessScheduler == nullptr) - { - Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED); - } - Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash(); - - Kernel::UserProcessHelper::StartScheduling(); - Kernel::ke_stop(RUNTIME_CHECK_PROCESS); } /// @brief Handle any generic fault. /// @param rsp EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp) { - if (Kernel::cProcessScheduler == nullptr) - { - Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED); - } - Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash(); - Kernel::ke_stop(RUNTIME_CHECK_PROCESS); } /// @brief Handle #UD fault. /// @param rsp EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp) { - if (Kernel::cProcessScheduler == nullptr) - { - Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED); - } - Kernel::UserProcessScheduler::The().CurrentProcess().Leak().Crash(); - - Kernel::UserProcessHelper::StartScheduling(); - Kernel::ke_stop(RUNTIME_CHECK_PROCESS); } /// @brief Enter syscall from assembly. @@ -92,16 +59,14 @@ EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp) /// @return nothing. EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr rdx) { - Kernel::HAL::Out8(0x20, 0x20); // Acknowledge interrupt to master PIC - if (rcx <= (kSyscalls.Count() - 1)) { - kcout << "syscall: Enter Fn.\r"; + kcout << "syscall: Enter Syscall.\r"; if (kSyscalls[rcx].fHooked) (kSyscalls[rcx].fProc)((Kernel::VoidPtr)rdx); - kcout << "syscall: Exit Fn.\r"; + kcout << "syscall: Exit Syscall.\r"; } } @@ -110,15 +75,13 @@ EXTERN_C Kernel::Void hal_system_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr /// @return nothing. EXTERN_C Kernel::Void hal_kernel_call_enter(Kernel::UIntPtr rcx, Kernel::UIntPtr rdx, Kernel::UIntPtr r8, Kernel::UIntPtr r9) { - Kernel::HAL::Out8(0x20, 0x20); // Acknowledge interrupt to master PIC - if (rcx <= (kSyscalls.Count() - 1)) { - kcout << "kerncall: Enter Fn.\r"; + kcout << "kerncall: Enter Kcall.\r"; if (kKerncalls[rcx].fHooked) (kKerncalls[rcx].fProc)((Kernel::VoidPtr)rdx); - kcout << "kerncall: Exit Fn.\r"; + kcout << "kerncall: Exit Kcall.\r"; } } diff --git a/dev/zka/HALKit/AMD64/HalDescriptorLoader.cxx b/dev/zka/HALKit/AMD64/HalDescriptorLoader.cxx index ba893515..822d7dac 100644 --- a/dev/zka/HALKit/AMD64/HalDescriptorLoader.cxx +++ b/dev/zka/HALKit/AMD64/HalDescriptorLoader.cxx @@ -14,8 +14,14 @@ namespace Kernel::HAL STATIC ::Kernel::Detail::AMD64::InterruptDescriptorAMD64 kInterruptVectorTable[kKernelIdtSize]; + STATIC void hal_set_irq_mask(UInt8 irql); + STATIC void hal_clear_irq_mask(UInt8 irql); + STATIC Void hal_enable_pit(UInt16 ticks) noexcept { + if (ticks == 0) + ticks = 1000; + // Configure PIT to receieve scheduler interrupts. UInt16 cCommonDivisor = kPITFrequency / ticks; // 100 Hz. @@ -23,6 +29,8 @@ namespace Kernel::HAL HAL::Out8(kPITControlPort, 0x36); // Command to PIT HAL::Out8(kPITChannel0Port, cCommonDivisor & 0xFF); // Send low byte HAL::Out8(kPITChannel0Port, (cCommonDivisor >> 8) & 0xFF); // Send high byte + + hal_clear_irq_mask(32); } STATIC void hal_set_irq_mask(UInt8 irql) @@ -74,9 +82,7 @@ namespace Kernel::HAL Void IDTLoader::Load(Register64& idt) { - rt_cli(); - - const auto cPITTickForScheduler = 1000; + const auto kPITTickForScheduler = 100; volatile ::Kernel::UIntPtr** ptr_ivt = (volatile ::Kernel::UIntPtr**)idt.Base; @@ -99,9 +105,7 @@ namespace Kernel::HAL hal_load_idt(idt); - Detail::hal_enable_pit(cPITTickForScheduler); - - rt_sti(); + Detail::hal_enable_pit(kPITTickForScheduler); } void GDTLoader::Load(Ref<RegisterGDT>& gdt) diff --git a/dev/zka/HALKit/AMD64/HalInterruptAPI.asm b/dev/zka/HALKit/AMD64/HalInterruptAPI.asm index 936f71c8..e611fdf1 100644 --- a/dev/zka/HALKit/AMD64/HalInterruptAPI.asm +++ b/dev/zka/HALKit/AMD64/HalInterruptAPI.asm @@ -16,16 +16,18 @@ %macro IntExp 1 global __ZKA_INT_%1 __ZKA_INT_%1: - cli - sti + mov al, 0x20 + out 0x21, al + o64 iret %endmacro %macro IntNormal 1 global __ZKA_INT_%1 __ZKA_INT_%1: - cli - sti + mov al, 0x20 + out 0x21, al + o64 iret %endmacro @@ -54,38 +56,24 @@ IntNormal 5 ;; Invalid opcode interrupt __ZKA_INT_6: - cli - mov al, 0x20 out 0x20, al - push rax - mov rcx, rsp call idt_handle_ud - pop rax - - sti o64 iret IntNormal 7 ;; Invalid opcode interrupt __ZKA_INT_8: - cli - mov al, 0x20 out 0x21, al - push rax - mov rcx, rsp call idt_handle_generic - pop rax - - sti o64 iret IntNormal 9 @@ -95,36 +83,21 @@ IntExp 11 IntExp 12 __ZKA_INT_13: - cli - mov al, 0x20 out 0x21, al - push rax - mov rcx, rsp call idt_handle_gpf - pop rax - - sti o64 iret __ZKA_INT_14: - cli - mov al, 0x20 out 0x21, al - push rax - mov rcx, rsp call idt_handle_pf - pop rax - - sti - o64 iret IntNormal 15 @@ -153,17 +126,8 @@ __ZKA_INT_32: mov al, 0x20 out 0x21, al - push rbp - push rsp - push rcx - push rdx - push r8 - jmp idt_handle_scheduler - pop rsp - pop rbp - pop rcx - pop rdx - pop r8 + mov rcx, rsp + call idt_handle_scheduler o64 iret @@ -192,40 +156,32 @@ IntNormal 49 [extern hal_kernel_call_enter] __ZKA_INT_50: + cli + mov al, 0x20 out 0x21, al - push r8 - push r9 - push r10 - push rsp + mov rcx, r8 + mov rdx, r9 jmp hal_system_call_enter - add rsp, 16 - pop rsp - pop r10 - pop r9 - pop r8 + sti o64 iret __ZKA_INT_51: + cli + mov al, 0x20 out 0x21, al - push r8 - push r9 - push r10 - push rsp + mov rcx, r8 + mov rdx, r9 call hal_kernel_call_enter - add rsp, 16 - pop rsp - pop r10 - pop r9 - pop r8 + sti o64 iret @@ -352,6 +308,8 @@ hal_load_idt: out 0x21, al out 0xA1, al + sti + ret section .data diff --git a/dev/zka/HALKit/AMD64/HalKernelMain.cxx b/dev/zka/HALKit/AMD64/HalKernelMain.cxx index 17bd99f3..1a4fc830 100644 --- a/dev/zka/HALKit/AMD64/HalKernelMain.cxx +++ b/dev/zka/HALKit/AMD64/HalKernelMain.cxx @@ -22,8 +22,8 @@ namespace Kernel::HAL namespace Kernel { - EXTERN UserProcessScheduler* cProcessScheduler; - EXTERN HardwareThreadScheduler* cHardwareThreadScheduler; + EXTERN UserProcessScheduler* kProcessScheduler; + EXTERN HardwareThreadScheduler* kHardwareThreadScheduler; } // namespace Kernel EXTERN_C Kernel::VoidPtr kInterruptVectorTable[]; @@ -36,8 +36,8 @@ EXTERN_C void hal_init_platform( { kHandoverHeader = HandoverHeader; - Kernel::cProcessScheduler = nullptr; - Kernel::cHardwareThreadScheduler = nullptr; + Kernel::kProcessScheduler = nullptr; + Kernel::kHardwareThreadScheduler = nullptr; if (kHandoverHeader->f_Magic != kHandoverMagic && kHandoverHeader->f_Version != kHandoverVersion) @@ -94,7 +94,7 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept if (kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled) Kernel::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); - /* Load System.exe here (TODO) */ + /* Load OSLdr.exe here (TODO) */ Kernel::HAL::Register64 idt_reg; idt_reg.Base = (Kernel::UIntPtr)kInterruptVectorTable; @@ -103,5 +103,6 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept Kernel::HAL::IDTLoader idt_loader; idt_loader.Load(idt_reg); - Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP); + while (Yes) + ; } diff --git a/dev/zka/KernelKit/Heap.hxx b/dev/zka/KernelKit/Heap.hxx index 554ba954..cfa3fc94 100644 --- a/dev/zka/KernelKit/Heap.hxx +++ b/dev/zka/KernelKit/Heap.hxx @@ -4,37 +4,38 @@ ------------------------------------------- */ -#ifndef _INC_KERNEL_HEAP_HXX_ -#define _INC_KERNEL_HEAP_HXX_ +#ifndef INC_KERNEL_HEAP_HXX +#define INC_KERNEL_HEAP_HXX // last-rev 30/01/24 -// file: KernelHeap.hxx +// file: Heap.hxx // description: heap allocation for the Kernel. #include <NewKit/Defines.hxx> +#include <NewKit/Stop.hxx> namespace Kernel { /// @brief Declare pointer as free. /// @param heap_ptr the pointer. - /// @return + /// @return a status code regarding the deallocation. Int32 mm_delete_heap(VoidPtr heap_ptr); /// @brief Declare a new size for heap_ptr. /// @param heap_ptr the pointer. - /// @return + /// @return unsupported always returns nullptr. VoidPtr mm_realloc_heap(VoidPtr heap_ptr, SizeT new_sz); /// @brief Check if pointer is a valid Kernel pointer. /// @param heap_ptr the pointer - /// @return if it exists. + /// @return if it exists it returns true. Boolean mm_is_valid_heap(VoidPtr heap_ptr); /// @brief Allocate chunk of memory. /// @param sz Size of pointer /// @param wr Read Write bit. /// @param user User enable bit. - /// @return The newly allocated pointer. + /// @return The newly allocated pointer, or nullptr. VoidPtr mm_new_heap(const SizeT sz, const Bool wr, const Bool user); /// @brief Protect the heap with a CRC value. @@ -52,6 +53,12 @@ namespace Kernel inline T* mm_new_class(Args&&... args) { T* cls = new T(move(args)...); + + if (cls == nullptr) + { + ke_stop(RUNTIME_CHECK_POINTER); + } + return cls; } @@ -64,4 +71,4 @@ namespace Kernel } } // namespace Kernel -#endif // !_INC_KERNEL_HEAP_HXX_ +#endif // !INC_KERNEL_HEAP_HXX diff --git a/dev/zka/KernelKit/ThreadLocalStorage.inl b/dev/zka/KernelKit/ThreadLocalStorage.inl index a800f329..2f0fe553 100644 --- a/dev/zka/KernelKit/ThreadLocalStorage.inl +++ b/dev/zka/KernelKit/ThreadLocalStorage.inl @@ -7,7 +7,7 @@ //! @file ThreadLocalStorage.inl //! @brief Allocate resources from the process's heap storage. -#ifndef _INC_PROCESS_SCHEDULER_HXX_ +#ifndef INC_PROCESS_SCHEDULER_HXX #include <KernelKit/UserProcessScheduler.hxx> #endif diff --git a/dev/zka/KernelKit/User.hxx b/dev/zka/KernelKit/User.hxx index 344ca5e5..d082bf93 100644 --- a/dev/zka/KernelKit/User.hxx +++ b/dev/zka/KernelKit/User.hxx @@ -4,8 +4,8 @@ ------------------------------------------- */ -#ifndef _INC_USER_HXX_ -#define _INC_USER_HXX_ +#ifndef INC_USER_HXX +#define INC_USER_HXX #include <CompilerKit/CompilerKit.hxx> #include <KernelKit/LPC.hxx> @@ -72,4 +72,4 @@ namespace Kernel }; } // namespace Kernel -#endif /* ifndef _INC_USER_HXX_ */ +#endif /* ifndef INC_USER_HXX */ diff --git a/dev/zka/KernelKit/UserProcessScheduler.hxx b/dev/zka/KernelKit/UserProcessScheduler.hxx index d383251c..bc246683 100644 --- a/dev/zka/KernelKit/UserProcessScheduler.hxx +++ b/dev/zka/KernelKit/UserProcessScheduler.hxx @@ -4,8 +4,8 @@ ------------------------------------------- */ -#ifndef _INC_PROCESS_SCHEDULER_HXX_ -#define _INC_PROCESS_SCHEDULER_HXX_ +#ifndef INC_PROCESS_SCHEDULER_HXX +#define INC_PROCESS_SCHEDULER_HXX #include <ArchKit/ArchKit.hxx> #include <KernelKit/LockDelegate.hxx> @@ -319,4 +319,4 @@ namespace Kernel //////////////////////////////////////////////////// -#endif /* ifndef _INC_PROCESS_SCHEDULER_HXX_ */ +#endif /* ifndef INC_PROCESS_SCHEDULER_HXX */ diff --git a/dev/zka/NewKit/Array.hxx b/dev/zka/NewKit/Array.hxx index 447e1dc7..31778e1b 100644 --- a/dev/zka/NewKit/Array.hxx +++ b/dev/zka/NewKit/Array.hxx @@ -3,6 +3,7 @@ Copyright ZKA Web Services Co. ------------------------------------------- */ + #pragma once #include <KernelKit/DebugOutput.hxx> @@ -11,7 +12,7 @@ namespace Kernel { - template <typename T, Size N> + template <typename T, SizeT N> class Array final { public: diff --git a/dev/zka/src/ACPIFactoryInterface.cxx b/dev/zka/src/ACPIFactoryInterface.cxx index 6d7d7c3c..4a04d7b9 100644 --- a/dev/zka/src/ACPIFactoryInterface.cxx +++ b/dev/zka/src/ACPIFactoryInterface.cxx @@ -64,7 +64,7 @@ namespace Kernel if (signature_index == (cAcpiSignatureLength - 1)) { - kcout << "ACPI: Found the SDT. " << endl; + kcout << "ACPI: Found the SDT" << endl; return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(xsdt->AddressArr[index])); } } diff --git a/dev/zka/src/BitMapMgr.cxx b/dev/zka/src/BitMapMgr.cxx index 270783f2..1f4b4860 100644 --- a/dev/zka/src/BitMapMgr.cxx +++ b/dev/zka/src/BitMapMgr.cxx @@ -143,8 +143,8 @@ namespace Kernel return; } - kcout << "Magic BitMap Number: " << hex_number(ptr_bit_set[cBitMapMagIdx]) << endl; - kcout << "Allocated: " << (ptr_bit_set[cBitMapUsedIdx] ? "Yes" : "No") << endl; + kcout << "Magic Number: " << hex_number(ptr_bit_set[cBitMapMagIdx]) << endl; + kcout << "Is Allocated: " << (ptr_bit_set[cBitMapUsedIdx] ? "Yes" : "No") << endl; kcout << "Size of BitMap (B): " << number(ptr_bit_set[cBitMapSizeIdx]) << endl; kcout << "Size of BitMap (KIB): " << number(KIB(ptr_bit_set[cBitMapSizeIdx])) << endl; kcout << "Size of BitMap (MIB): " << number(MIB(ptr_bit_set[cBitMapSizeIdx])) << endl; diff --git a/dev/zka/src/DriveMgr.cxx b/dev/zka/src/DriveMgr.cxx index ecec5cec..d9bf57f2 100644 --- a/dev/zka/src/DriveMgr.cxx +++ b/dev/zka/src/DriveMgr.cxx @@ -156,7 +156,7 @@ namespace Kernel trait.fInit = io_drv_init; trait.fDriveKind = io_drv_kind; - kcout << "Constructed drive successfully..\r"; + kcout << "Constructed drive successfully.\r"; return trait; } diff --git a/dev/zka/src/HardwareThreadScheduler.cxx b/dev/zka/src/HardwareThreadScheduler.cxx index e3bf5a73..50a153f1 100644 --- a/dev/zka/src/HardwareThreadScheduler.cxx +++ b/dev/zka/src/HardwareThreadScheduler.cxx @@ -17,7 +17,7 @@ namespace Kernel { - HardwareThreadScheduler* cHardwareThreadScheduler = nullptr; + HardwareThreadScheduler* kHardwareThreadScheduler = nullptr; ///! A HardwareThread class takes care of it's owned hardware thread. ///! It has a stack for it's core. @@ -133,8 +133,8 @@ namespace Kernel /// @brief Shared singleton function HardwareThreadScheduler& HardwareThreadScheduler::The() { - MUST_PASS(cHardwareThreadScheduler); - return *cHardwareThreadScheduler; + MUST_PASS(kHardwareThreadScheduler); + return *kHardwareThreadScheduler; } /// @brief Get Stack Frame of Core diff --git a/dev/zka/src/Heap.cxx b/dev/zka/src/Heap.cxx index 4311257e..63e9286a 100644 --- a/dev/zka/src/Heap.cxx +++ b/dev/zka/src/Heap.cxx @@ -15,6 +15,7 @@ Revision History: 10/8/24: FIX: Fix useless long name, alongside a new WR (WriteRead) field. + 20/10/24: Fix mm_new_ and mm_delete_ APIs inside Heap.hxx header. (amlal) ------------------------------------------- */ diff --git a/dev/zka/src/Stop.cxx b/dev/zka/src/Stop.cxx index afbc223b..39e57070 100644 --- a/dev/zka/src/Stop.cxx +++ b/dev/zka/src/Stop.cxx @@ -47,7 +47,7 @@ namespace Kernel switch (id) { case RUNTIME_CHECK_PROCESS: { - CGDrawString("0x00000008 Scheduler error.", start_y, x, panic_text); + CGDrawString("0x00000008 Multi-Task error.", start_y, x, panic_text); break; } case RUNTIME_CHECK_ACPI: { diff --git a/dev/zka/src/UserProcessScheduler.cxx b/dev/zka/src/UserProcessScheduler.cxx index 7b84f1fb..6802f59d 100644 --- a/dev/zka/src/UserProcessScheduler.cxx +++ b/dev/zka/src/UserProcessScheduler.cxx @@ -3,13 +3,13 @@ Copyright ZKA Web Services Co. FILE: UserProcessScheduler.cxx - PURPOSE: Low Exception Process scheduler. + PURPOSE: EL0/Ring-3 Process scheduler. ------------------------------------------- */ /***********************************************************************************/ /// @file UserProcessScheduler.cxx -/// @brief User Process scheduler. +/// @brief User process scheduler. /***********************************************************************************/ #include <ArchKit/ArchKit.hxx> @@ -38,8 +38,8 @@ namespace Kernel /// @brief User Process scheduler global and external reference of thread scheduler. /***********************************************************************************/ - UserProcessScheduler* cProcessScheduler = nullptr; - EXTERN HardwareThreadScheduler* cHardwareThreadScheduler; + UserProcessScheduler* kProcessScheduler = nullptr; + EXTERN HardwareThreadScheduler* kHardwareThreadScheduler; /// @brief Gets the last exit code. /// @note Not thread-safe. @@ -55,15 +55,13 @@ namespace Kernel Void UserProcess::Crash() { - if (*this->Name != 0 && - *this->Name > 'A') + if (this->Status != ProcessStatusKind::kRunning) + return; + + if (*this->Name != 0) { kcout << this->Name << ": crashed, error id: " << number(kErrorProcessFault) << endl; } - else - { - return; - } this->Exit(kErrorProcessFault); } @@ -373,8 +371,8 @@ namespace Kernel UserProcessScheduler& UserProcessScheduler::The() { - MUST_PASS(cProcessScheduler); - return *cProcessScheduler; + MUST_PASS(kProcessScheduler); + return *kProcessScheduler; } /***********************************************************************************/ @@ -427,20 +425,21 @@ namespace Kernel for (; process_index < mTeam.AsArray().Capacity(); ++process_index) { - kcout << "Grabbing available process in team...\r"; - auto& process = mTeam.AsArray()[process_index]; //! check if process needs to be scheduled. if (UserProcessHelper::CanBeScheduled(process)) { - kcout << process.Name << ": will be runned.\r"; - // Set current process header. this->CurrentProcess() = process; process.PTime = static_cast<Int32>(process.Affinity); + UserProcessScheduler::The().CurrentProcess().Leak().Status = ProcessStatusKind::kFrozen; + UserProcessScheduler::The().CurrentProcess() = process; + + kcout << "Switch to '" << process.Name << "'.\r"; + // tell helper to find a core to schedule on. if (!UserProcessHelper::Switch(process.Image, &process.StackReserve[process.StackSize - 1], process.StackFrame, process.ProcessId)) @@ -451,7 +450,8 @@ namespace Kernel } else { - --process.PTime; + if (process.Status == ProcessStatusKind::kRunning) + --process.PTime; } } @@ -481,7 +481,7 @@ namespace Kernel PID& UserProcessHelper::TheCurrentPID() { kcout << "UserProcessHelper::TheCurrentPID: Leaking ProcessId...\r"; - return cProcessScheduler->CurrentProcess().Leak().ProcessId; + return kProcessScheduler->CurrentProcess().Leak().ProcessId; } /// @brief Check if process can be schedulded. @@ -490,9 +490,7 @@ namespace Kernel /// @retval false cannot be schedulded. Bool UserProcessHelper::CanBeScheduled(const UserProcess& process) { - kcout << "Checking UserProcess status...\r"; - - if (process.Status == ProcessStatusKind::kFrozen || + if (process.Status == ProcessStatusKind::kKilled || process.Status == ProcessStatusKind::kDead) return No; @@ -511,14 +509,14 @@ namespace Kernel Bool UserProcessHelper::InitializeScheduler() { - if (!cProcessScheduler) + if (!kProcessScheduler) { - cProcessScheduler = new UserProcessScheduler(); + kProcessScheduler = new UserProcessScheduler(); } - if (!cHardwareThreadScheduler) + if (!kHardwareThreadScheduler) { - cHardwareThreadScheduler = new HardwareThreadScheduler(); + kHardwareThreadScheduler = new HardwareThreadScheduler(); } return Yes; @@ -526,21 +524,15 @@ namespace Kernel /***********************************************************************************/ /** - * @brief Start the scheduler. + * @brief Start scheduling current AP/Hart/Core. */ /***********************************************************************************/ - SizeT UserProcessHelper::StartScheduling() { - kcout << "UserProcessScheduler: Trying to schedule user processes...\r"; - - if (!cProcessScheduler) + if (!kProcessScheduler) return 0; - kcout << "UserProcessScheduler: Object is valid, scheduling user processes...\r"; - - SizeT ret = cProcessScheduler->Run(); - return ret; + return kProcessScheduler->Run(); } /***********************************************************************************/ |
