summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-10-21 09:35:23 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-10-21 09:35:23 +0200
commit0bb0eb7952edbe2d14a071abe9eeff6e8b1b51ee (patch)
tree754cb3da25aa7a22c30beed40b417f3622c6866c
parent94bb3c0e7bdca4e5cd85a576a98b0b19847b597c (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.cxx6
-rw-r--r--dev/zba/BootKit/BootKit.hxx2
-rw-r--r--dev/zba/amd64-efi.make2
-rw-r--r--dev/zba/src/BootFileReader.cxx8
-rw-r--r--dev/zba/src/Thread.cxx11
-rw-r--r--dev/zka/FSKit/HPFS.hxx4
-rw-r--r--dev/zka/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cxx49
-rw-r--r--dev/zka/HALKit/AMD64/HalDescriptorLoader.cxx16
-rw-r--r--dev/zka/HALKit/AMD64/HalInterruptAPI.asm82
-rw-r--r--dev/zka/HALKit/AMD64/HalKernelMain.cxx13
-rw-r--r--dev/zka/KernelKit/Heap.hxx23
-rw-r--r--dev/zka/KernelKit/ThreadLocalStorage.inl2
-rw-r--r--dev/zka/KernelKit/User.hxx6
-rw-r--r--dev/zka/KernelKit/UserProcessScheduler.hxx6
-rw-r--r--dev/zka/NewKit/Array.hxx3
-rw-r--r--dev/zka/src/ACPIFactoryInterface.cxx2
-rw-r--r--dev/zka/src/BitMapMgr.cxx4
-rw-r--r--dev/zka/src/DriveMgr.cxx2
-rw-r--r--dev/zka/src/HardwareThreadScheduler.cxx6
-rw-r--r--dev/zka/src/Heap.cxx1
-rw-r--r--dev/zka/src/Stop.cxx2
-rw-r--r--dev/zka/src/UserProcessScheduler.cxx60
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();
}
/***********************************************************************************/