summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
Diffstat (limited to 'dev')
-rw-r--r--dev/ZKAKit/HALKit/AMD64/HalDescriptorLoader.cc6
-rw-r--r--dev/ZKAKit/HALKit/AMD64/HalInterruptAPI.asm2
-rw-r--r--dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc29
-rw-r--r--dev/ZKAKit/HALKit/AMD64/Storage/AHCI.cc2
-rw-r--r--dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc12
-rw-r--r--dev/ZKAKit/KernelKit/CodeMgr.h2
-rw-r--r--dev/ZKAKit/KernelKit/Heap.h6
-rw-r--r--dev/ZKAKit/KernelKit/PEFCodeMgr.h2
-rw-r--r--dev/ZKAKit/KernelKit/UserProcessScheduler.h4
-rw-r--r--dev/ZKAKit/NewKit/CxxAbi.h2
-rw-r--r--dev/ZKAKit/NewKit/Pair.h2
-rw-r--r--dev/ZKAKit/src/BitMapMgr.cc5
-rw-r--r--dev/ZKAKit/src/CodeMgr.cc2
-rw-r--r--dev/ZKAKit/src/CxxAbi-AMD64.cc4
-rw-r--r--dev/ZKAKit/src/CxxAbi-ARM64.cc4
-rw-r--r--dev/ZKAKit/src/HardwareThreadScheduler.cc5
-rw-r--r--dev/ZKAKit/src/PEFCodeMgr.cc58
-rw-r--r--dev/ZKAKit/src/UserProcessScheduler.cc50
18 files changed, 65 insertions, 132 deletions
diff --git a/dev/ZKAKit/HALKit/AMD64/HalDescriptorLoader.cc b/dev/ZKAKit/HALKit/AMD64/HalDescriptorLoader.cc
index 5f7bde36..20177eba 100644
--- a/dev/ZKAKit/HALKit/AMD64/HalDescriptorLoader.cc
+++ b/dev/ZKAKit/HALKit/AMD64/HalDescriptorLoader.cc
@@ -7,6 +7,8 @@
#include <ArchKit/ArchKit.h>
#include <HALKit/AMD64/Processor.h>
+#define kPITDefaultTicks (1000U)
+
namespace Kernel::HAL
{
namespace Detail
@@ -20,7 +22,7 @@ namespace Kernel::HAL
STATIC Void hal_enable_pit(UInt16 ticks) noexcept
{
if (ticks == 0)
- ticks = 1000;
+ ticks = kPITDefaultTicks;
// Configure PIT to receieve scheduler interrupts.
@@ -82,7 +84,7 @@ namespace Kernel::HAL
Void IDTLoader::Load(Register64& idt)
{
- const Int16 kPITTickForScheduler = 100;
+ const Int16 kPITTickForScheduler = kPITDefaultTicks;
volatile ::Kernel::UIntPtr** ptr_ivt = (volatile ::Kernel::UIntPtr**)idt.Base;
diff --git a/dev/ZKAKit/HALKit/AMD64/HalInterruptAPI.asm b/dev/ZKAKit/HALKit/AMD64/HalInterruptAPI.asm
index 06066f41..49eb2bd8 100644
--- a/dev/ZKAKit/HALKit/AMD64/HalInterruptAPI.asm
+++ b/dev/ZKAKit/HALKit/AMD64/HalInterruptAPI.asm
@@ -340,6 +340,8 @@ mp_system_call_handler:
o64 sysret
hal_load_idt:
+ cli
+
lidt [rcx]
; Master PIC initialization
diff --git a/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc b/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc
index 507ce217..a50eab32 100644
--- a/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc
+++ b/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc
@@ -13,19 +13,6 @@
#include <CFKit/Property.h>
#include <Modules/FB/Text.h>
-namespace Kernel::HAL
-{
- /// @brief Gets the system cores using the MADT.
- /// @param rsp_ptr The 'RSD PTR' data structure.
- EXTERN void mp_get_cores(Kernel::voidPtr rsp_ptr) noexcept;
-} // namespace Kernel::HAL
-
-namespace Kernel
-{
- EXTERN UserProcessScheduler* kProcessScheduler;
- EXTERN HardwareThreadScheduler* kHardwareThreadScheduler;
-} // namespace Kernel
-
EXTERN_C Kernel::VoidPtr kInterruptVectorTable[];
EXTERN_C Kernel::VoidPtr mp_user_switch_proc;
EXTERN_C Kernel::Char mp_user_switch_proc_stack_begin[];
@@ -36,9 +23,6 @@ EXTERN_C void hal_init_platform(
{
kHandoverHeader = HandoverHeader;
- Kernel::kProcessScheduler = nullptr;
- Kernel::kHardwareThreadScheduler = nullptr;
-
if (kHandoverHeader->f_Magic != kHandoverMagic &&
kHandoverHeader->f_Version != kHandoverVersion)
{
@@ -81,24 +65,11 @@ EXTERN_C void hal_init_platform(
Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP);
}
-EXTERN_C Kernel::Void hal_kernel_server(Kernel::Void) noexcept
-{
- while (Yes)
- ;
-}
-
EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept
{
/* Initialize filesystem. */
Kernel::NeFileSystemMgr::Mount(new Kernel::NeFileSystemMgr());
- /* Initialize scheduler. */
- Kernel::UserProcessHelper::InitializeScheduler();
-
- const Kernel::Char kKernelServerName[255] = "KernelServer";
-
- Kernel::rtl_create_process(&hal_kernel_server, kKernelServerName);
-
/* Start any cores. */
if (kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled)
Kernel::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
diff --git a/dev/ZKAKit/HALKit/AMD64/Storage/AHCI.cc b/dev/ZKAKit/HALKit/AMD64/Storage/AHCI.cc
index caf7cd7e..b329b705 100644
--- a/dev/ZKAKit/HALKit/AMD64/Storage/AHCI.cc
+++ b/dev/ZKAKit/HALKit/AMD64/Storage/AHCI.cc
@@ -20,7 +20,7 @@
#include <NewKit/Utils.h>
#include <KernelKit/LockDelegate.h>
-#define kMaxAhciPoll 100000
+#define kMaxAhciPoll (100000U)
#ifdef __AHCI__
enum
diff --git a/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc b/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc
index 95b3a9b0..913853d2 100644
--- a/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc
+++ b/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc
@@ -40,7 +40,13 @@ EXTERN_C void hal_init_platform(
/* INITIALIZE BIT MAP. */
/************************************** */
- while (Yes)
- {
- }
+ kKernelBitMpSize = kHandoverHeader->f_BitMapSize;
+ kKernelBitMpStart = reinterpret_cast<Kernel::VoidPtr>(
+ reinterpret_cast<Kernel::UIntPtr>(kHandoverHeader->f_BitMapStart));
+
+ Kernel::NeFileSystemMgr::Mount(new Kernel::NeFileSystemMgr());
+
+
+
+ while (Yes);
}
diff --git a/dev/ZKAKit/KernelKit/CodeMgr.h b/dev/ZKAKit/KernelKit/CodeMgr.h
index b8fa4c37..4faa1235 100644
--- a/dev/ZKAKit/KernelKit/CodeMgr.h
+++ b/dev/ZKAKit/KernelKit/CodeMgr.h
@@ -27,5 +27,5 @@ namespace Kernel
/// @note This sets up a new stack, anything on the main function that calls the Kernel will not be accessible.
/// @param main the start of the process.
/// @return The team's process id.
- SizeT rtl_create_process(MainKind main, const Char* process_name) noexcept;
+ ProcessID rtl_create_process(MainKind main, const Char* process_name) noexcept;
} // namespace Kernel
diff --git a/dev/ZKAKit/KernelKit/Heap.h b/dev/ZKAKit/KernelKit/Heap.h
index 3b098397..4746eb47 100644
--- a/dev/ZKAKit/KernelKit/Heap.h
+++ b/dev/ZKAKit/KernelKit/Heap.h
@@ -53,12 +53,6 @@ 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;
}
diff --git a/dev/ZKAKit/KernelKit/PEFCodeMgr.h b/dev/ZKAKit/KernelKit/PEFCodeMgr.h
index 00afa2d8..ed9b6d1f 100644
--- a/dev/ZKAKit/KernelKit/PEFCodeMgr.h
+++ b/dev/ZKAKit/KernelKit/PEFCodeMgr.h
@@ -60,7 +60,7 @@ namespace Kernel
namespace Utils
{
- SizeT execute_from_image(PEFLoader& exec, const Int32& procKind) noexcept;
+ ProcessID execute_from_image(PEFLoader& exec, const Int32& procKind) noexcept;
} // namespace Utils
} // namespace Kernel
diff --git a/dev/ZKAKit/KernelKit/UserProcessScheduler.h b/dev/ZKAKit/KernelKit/UserProcessScheduler.h
index c093bfb1..df366e07 100644
--- a/dev/ZKAKit/KernelKit/UserProcessScheduler.h
+++ b/dev/ZKAKit/KernelKit/UserProcessScheduler.h
@@ -14,7 +14,7 @@
#define kSchedMinMicroTime (AffinityKind::kStandard)
#define kSchedInvalidPID (-1)
-#define kSchedProcessLimitPerTeam (16U)
+#define kSchedProcessLimitPerTeam (32U)
#define kSchedMaxMemoryLimit gib_cast(128)
#define kSchedMaxStackSz mib_cast(8)
@@ -278,7 +278,6 @@ namespace Kernel
const SizeT Run() noexcept;
public:
- STATIC ErrorOr<UserProcessScheduler> TheSafe();
STATIC UserProcessScheduler& The();
private:
@@ -296,7 +295,6 @@ namespace Kernel
STATIC bool CanBeScheduled(const UserProcess& process);
STATIC PID& TheCurrentPID();
STATIC SizeT StartScheduling();
- STATIC Bool InitializeScheduler();
};
const UInt32& sched_get_exit_code(void) noexcept;
diff --git a/dev/ZKAKit/NewKit/CxxAbi.h b/dev/ZKAKit/NewKit/CxxAbi.h
index c6408af1..56c127e1 100644
--- a/dev/ZKAKit/NewKit/CxxAbi.h
+++ b/dev/ZKAKit/NewKit/CxxAbi.h
@@ -9,7 +9,7 @@
#ifndef __TOOLCHAINKIT__
-#define kDSOMaxObjects (128)
+#define kAtExitMacDestructors (128)
struct atexit_func_entry_t
{
diff --git a/dev/ZKAKit/NewKit/Pair.h b/dev/ZKAKit/NewKit/Pair.h
index aabc66ff..98e3a806 100644
--- a/dev/ZKAKit/NewKit/Pair.h
+++ b/dev/ZKAKit/NewKit/Pair.h
@@ -10,5 +10,5 @@
namespace Kernel
{
-
+ class Pair;
} // namespace Kernel
diff --git a/dev/ZKAKit/src/BitMapMgr.cc b/dev/ZKAKit/src/BitMapMgr.cc
index 27158a12..1477dea0 100644
--- a/dev/ZKAKit/src/BitMapMgr.cc
+++ b/dev/ZKAKit/src/BitMapMgr.cc
@@ -162,11 +162,6 @@ namespace Kernel
ptr_new = traits.FindBitMap(kKernelBitMpStart, size, wr, user);
- if (!ptr_new)
- {
- return nullptr;
- }
-
return (UIntPtr*)ptr_new;
}
diff --git a/dev/ZKAKit/src/CodeMgr.cc b/dev/ZKAKit/src/CodeMgr.cc
index c855347b..429858d6 100644
--- a/dev/ZKAKit/src/CodeMgr.cc
+++ b/dev/ZKAKit/src/CodeMgr.cc
@@ -14,7 +14,7 @@ namespace Kernel
/// @note This sets up a new stack, anything on the main function that calls the Kernel will not be accessible.
/// @param main the start of the process.
/// @return if the process was started or not.
- SizeT rtl_create_process(MainKind main, const Char* process_name) noexcept
+ ProcessID rtl_create_process(MainKind main, const Char* process_name) noexcept
{
if (!main)
return No;
diff --git a/dev/ZKAKit/src/CxxAbi-AMD64.cc b/dev/ZKAKit/src/CxxAbi-AMD64.cc
index 1aac28e6..0ebebee9 100644
--- a/dev/ZKAKit/src/CxxAbi-AMD64.cc
+++ b/dev/ZKAKit/src/CxxAbi-AMD64.cc
@@ -10,7 +10,7 @@
#include <NewKit/CxxAbi.h>
#include <KernelKit/LPC.h>
-atexit_func_entry_t __atexit_funcs[kDSOMaxObjects];
+atexit_func_entry_t __atexit_funcs[kAtExitMacDestructors];
uarch_t __atexit_func_count;
@@ -29,7 +29,7 @@ EXTERN_C void ___chkstk_ms(void)
EXTERN_C int atexit(void (*f)(void*), void* arg, void* dso)
{
- if (__atexit_func_count >= kDSOMaxObjects)
+ if (__atexit_func_count >= kAtExitMacDestructors)
return -1;
__atexit_funcs[__atexit_func_count].destructor_func = f;
diff --git a/dev/ZKAKit/src/CxxAbi-ARM64.cc b/dev/ZKAKit/src/CxxAbi-ARM64.cc
index 6b5c1a0e..a222e4bb 100644
--- a/dev/ZKAKit/src/CxxAbi-ARM64.cc
+++ b/dev/ZKAKit/src/CxxAbi-ARM64.cc
@@ -10,7 +10,7 @@
#include <NewKit/CxxAbi.h>
#include <KernelKit/LPC.h>
-atexit_func_entry_t __atexit_funcs[kDSOMaxObjects];
+atexit_func_entry_t __atexit_funcs[kAtExitMacDestructors];
uarch_t __atexit_func_count;
@@ -23,7 +23,7 @@ EXTERN_C void __chkstk(void)
EXTERN_C int atexit(void (*f)(void*), void* arg, void* dso)
{
- if (__atexit_func_count >= kDSOMaxObjects)
+ if (__atexit_func_count >= kAtExitMacDestructors)
return -1;
__atexit_funcs[__atexit_func_count].destructor_func = f;
diff --git a/dev/ZKAKit/src/HardwareThreadScheduler.cc b/dev/ZKAKit/src/HardwareThreadScheduler.cc
index ddfd0ee7..f0605ff6 100644
--- a/dev/ZKAKit/src/HardwareThreadScheduler.cc
+++ b/dev/ZKAKit/src/HardwareThreadScheduler.cc
@@ -17,7 +17,7 @@
namespace Kernel
{
- HardwareThreadScheduler* kHardwareThreadScheduler = nullptr;
+ HardwareThreadScheduler kHardwareThreadScheduler;
///! A HardwareThread class takes care of it's owned hardware thread.
///! It has a stack for it's core.
@@ -136,8 +136,7 @@ namespace Kernel
/// @brief Shared singleton function
HardwareThreadScheduler& HardwareThreadScheduler::The()
{
- MUST_PASS(kHardwareThreadScheduler);
- return *kHardwareThreadScheduler;
+ return kHardwareThreadScheduler;
}
/// @brief Get Stack Frame of Core
diff --git a/dev/ZKAKit/src/PEFCodeMgr.cc b/dev/ZKAKit/src/PEFCodeMgr.cc
index 45a5e46c..8c18dfe3 100644
--- a/dev/ZKAKit/src/PEFCodeMgr.cc
+++ b/dev/ZKAKit/src/PEFCodeMgr.cc
@@ -199,16 +199,43 @@ namespace Kernel
return !fBad && fCachedBlob;
}
+ const Char* PEFLoader::Path()
+ {
+ return fPath.Leak().CData();
+ }
+
+ const Char* PEFLoader::AsString()
+ {
+#ifdef __32x0__
+ return "32x0 PEF executable.";
+#elif defined(__64x0__)
+ return "64x0 PEF executable.";
+#elif defined(__x86_64__)
+ return "x86_64 PEF executable.";
+#elif defined(__aarch64__)
+ return "aarch64 PEF executable.";
+#elif defined(__powerpc64__)
+ return "POWER64 PEF executable.";
+#else
+ return "???? PEF executable.";
+#endif // __32x0__ || __64x0__ || __x86_64__ || __powerpc64__
+ }
+
+ const Char* PEFLoader::MIME()
+ {
+ return kPefApplicationMime;
+ }
+
namespace Utils
{
- SizeT execute_from_image(PEFLoader& exec, const Int32& procKind) noexcept
+ ProcessID execute_from_image(PEFLoader& exec, const Int32& procKind) noexcept
{
auto errOrStart = exec.FindStart();
if (errOrStart.Error() != kErrorSuccess)
return No;
- UserProcess proc;
+ UserProcess proc{};
proc.Image = errOrStart.Leak().Leak();
proc.Kind = procKind;
@@ -229,31 +256,4 @@ namespace Kernel
return UserProcessScheduler::The().Add(proc);
}
} // namespace Utils
-
- const Char* PEFLoader::Path()
- {
- return fPath.Leak().CData();
- }
-
- const Char* PEFLoader::AsString()
- {
-#ifdef __32x0__
- return "32x0 PEF executable.";
-#elif defined(__64x0__)
- return "64x0 PEF executable.";
-#elif defined(__x86_64__)
- return "x86_64 PEF executable.";
-#elif defined(__aarch64__)
- return "aarch64 PEF executable.";
-#elif defined(__powerpc64__)
- return "POWER64 PEF executable.";
-#else
- return "???? PEF executable.";
-#endif // __32x0__ || __64x0__ || __x86_64__ || __powerpc64__
- }
-
- const Char* PEFLoader::MIME()
- {
- return kPefApplicationMime;
- }
} // namespace Kernel
diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc
index 249033a2..280a006b 100644
--- a/dev/ZKAKit/src/UserProcessScheduler.cc
+++ b/dev/ZKAKit/src/UserProcessScheduler.cc
@@ -12,10 +12,10 @@
/// @brief User process scheduler.
/***********************************************************************************/
-#include <ArchKit/ArchKit.h>
#include <KernelKit/UserProcessScheduler.h>
-#include <KernelKit/IPEFDLLObject.h>
#include <KernelKit/HardwareThreadScheduler.h>
+#include <KernelKit/IPEFDLLObject.h>
+#include <ArchKit/ArchKit.h>
#include <KernelKit/Heap.h>
#include <NewKit/KString.h>
#include <KernelKit/LPC.h>
@@ -38,8 +38,7 @@ namespace Kernel
/// @brief User Process scheduler global and external reference of thread scheduler.
/***********************************************************************************/
- UserProcessScheduler* kProcessScheduler = nullptr;
- EXTERN HardwareThreadScheduler* kHardwareThreadScheduler;
+ UserProcessScheduler kProcessScheduler;
UserProcess::UserProcess(VoidPtr start_image) : Image(start_image) {}
@@ -373,16 +372,7 @@ namespace Kernel
UserProcessScheduler& UserProcessScheduler::The()
{
- MUST_PASS(kProcessScheduler);
- return *kProcessScheduler;
- }
-
- ErrorOr<UserProcessScheduler> UserProcessScheduler::TheSafe()
- {
- if (!kProcessScheduler)
- return ErrorOr<UserProcessScheduler>(nullptr);
-
- return ErrorOr<UserProcessScheduler>(kProcessScheduler);
+ return kProcessScheduler;
}
/***********************************************************************************/
@@ -397,7 +387,7 @@ namespace Kernel
const Bool UserProcessScheduler::Remove(ProcessID process_id)
{
// check if process is within range.
- if (process_id > mTeam.AsArray().Count())
+ if (process_id > mTeam.mProcessAmount)
return No;
mTeam.AsArray()[process_id].Status = ProcessStatusKind::kDead;
@@ -458,7 +448,7 @@ namespace Kernel
this->GetCurrentProcess() = process;
// tell helper to find a core to schedule on.
- if (!UserProcessHelper::Switch(process.Image, &process.StackReserve[process.StackSize], process.StackFrame,
+ if (!UserProcessHelper::Switch(process.Image, &process.StackReserve[process.StackSize - 1], process.StackFrame,
process.ProcessId))
{
process.Crash();
@@ -497,7 +487,7 @@ namespace Kernel
PID& UserProcessHelper::TheCurrentPID()
{
kcout << "UserProcessHelper::TheCurrentPID: Leaking ProcessId...\r";
- return kProcessScheduler->GetCurrentProcess().Leak().ProcessId;
+ return kProcessScheduler.GetCurrentProcess().Leak().ProcessId;
}
/// @brief Check if process can be schedulded.
@@ -523,36 +513,12 @@ namespace Kernel
/***********************************************************************************/
/**
- * @brief Allocate a scheduler.
- */
- /***********************************************************************************/
-
- Bool UserProcessHelper::InitializeScheduler()
- {
- if (!kProcessScheduler)
- {
- kProcessScheduler = new UserProcessScheduler();
- }
-
- if (!kHardwareThreadScheduler)
- {
- kHardwareThreadScheduler = new HardwareThreadScheduler();
- }
-
- return Yes;
- }
-
- /***********************************************************************************/
- /**
* @brief Start scheduling current AP/Hart/Core.
*/
/***********************************************************************************/
SizeT UserProcessHelper::StartScheduling()
{
- if (!kProcessScheduler)
- return 0;
-
- return kProcessScheduler->Run();
+ return kProcessScheduler.Run();
}
/***********************************************************************************/