summaryrefslogtreecommitdiffhomepage
path: root/Kernel/Sources
diff options
context:
space:
mode:
authorAmlal EL Mahrouss <amlal@softwarelabs.com>2024-06-12 18:09:07 +0200
committerAmlal EL Mahrouss <amlal@softwarelabs.com>2024-06-12 18:09:07 +0200
commit4b58295fb04c2430817301352fadce33178f94d4 (patch)
treefb16edeb9d81ee475200bbbf9a5125822ea2a589 /Kernel/Sources
parent6a3b080067ff47f84c400987982cfa44927fe7e0 (diff)
MHR-30: initial commit.
Signed-off-by: Amlal EL Mahrouss <amlal@softwarelabs.com>
Diffstat (limited to 'Kernel/Sources')
-rw-r--r--Kernel/Sources/KeMain.cxx (renamed from Kernel/Sources/AppMain.cxx)29
-rw-r--r--Kernel/Sources/ProcessScheduler.cxx3
-rw-r--r--Kernel/Sources/SMPManager.cxx15
3 files changed, 31 insertions, 16 deletions
diff --git a/Kernel/Sources/AppMain.cxx b/Kernel/Sources/KeMain.cxx
index 55b7f403..f4f9f44c 100644
--- a/Kernel/Sources/AppMain.cxx
+++ b/Kernel/Sources/KeMain.cxx
@@ -2,7 +2,7 @@
Copyright Zeta Electronics Corporation
- File: AppMain.cxx
+ File: KeMain.cxx
Purpose: Kernel main loop.
------------------------------------------- */
@@ -182,29 +182,29 @@ namespace NewOS::Detail
/// @brief System loader entrypoint.
/// @param void no parameters.
/// @return void no return value.
- STATIC NewOS::Void AppSystem(NewOS::Void)
+ STATIC NewOS::Void SystemLauncher_Main(NewOS::Void)
{
- NewOS::PEFLoader wndServer("/System/WindowServer");
+ NewOS::PEFLoader lockScreen("/System/LockScreen");
- if (!wndServer.IsLoaded())
+ if (!lockScreen.IsLoaded())
{
NewOS::ke_stop(RUNTIME_CHECK_FAILED);
}
- NewOS::Utils::execute_from_image(wndServer,
+ NewOS::Utils::execute_from_image(lockScreen,
NewOS::ProcessHeader::kAppKind);
- NewOS::PEFLoader launchServer("/System/Launcher");
+ NewOS::PEFLoader stageBoard("/System/StageBoard");
- if (!launchServer.IsLoaded())
+ if (!stageBoard.IsLoaded())
{
NewOS::ke_stop(RUNTIME_CHECK_FAILED);
}
- NewOS::Utils::execute_from_image(launchServer,
+ NewOS::Utils::execute_from_image(stageBoard,
NewOS::ProcessHeader::kAppKind);
- NewOS::kcout << "System: done, sleeping...";
+ NewOS::kcout << "SystemLauncher: done, sleeping...";
while (true) {}
}
@@ -213,13 +213,16 @@ namespace NewOS::Detail
/// @brief Application entrypoint.
/// @param Void
/// @return Void
-EXTERN_C NewOS::Void AppMain(NewOS::Void)
+EXTERN_C NewOS::Void KeMain(NewOS::Void)
{
/// Now run kernel loop, until no process are running.
NewOS::Detail::FilesystemWizard wizard; // automatic.
- auto cLoaderName = "System";
- NewOS::execute_from_image(NewOS::Detail::AppSystem, cLoaderName);
+ auto cLoaderName = "SystemLauncher";
+ NewOS::execute_from_image(NewOS::Detail::SystemLauncher_Main, cLoaderName);
- while (NewOS::ProcessScheduler::The().Leak().Run() > 0) {}
+ while (true)
+ {
+ NewOS::ProcessScheduler::The().Leak().Run();
+ }
}
diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx
index 1a49af22..08a7971e 100644
--- a/Kernel/Sources/ProcessScheduler.cxx
+++ b/Kernel/Sources/ProcessScheduler.cxx
@@ -215,9 +215,6 @@ namespace NewOS
if (!mTeam.AsArray().Count() > kSchedProcessLimitPerTeam)
return -kErrorOutOfTeamSlot;
- if (process.Leak().Ring != (Int32)ProcessSelector::kRingKernel)
- return -1;
-
kcout << "ProcessScheduler::Add(Ref<ProcessHeader>& process)\r";
/// Create heap according to type of process.
diff --git a/Kernel/Sources/SMPManager.cxx b/Kernel/Sources/SMPManager.cxx
index b2c3f488..f0b680ce 100644
--- a/Kernel/Sources/SMPManager.cxx
+++ b/Kernel/Sources/SMPManager.cxx
@@ -99,6 +99,21 @@ namespace NewOS
fStack->Rsp = stack->Rsp;
fStack->Fs = stack->Fs;
fStack->Gs = stack->Gs;
+
+ // save global registers.
+
+ fStack->R15 = stack->R15;
+ fStack->R14 = stack->R14;
+
+ fStack->R13 = stack->R13;
+ fStack->R12 = stack->R12;
+ fStack->R11 = stack->R11;
+
+ fStack->R10 = stack->R10;
+ fStack->R9 = stack->R9;
+ fStack->R8 = stack->R8;
+
+ fStack->Exception = this->fID;
}
rt_do_context_switch(fStack);