summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA/HALKit/AMD64
diff options
context:
space:
mode:
authorAmlal <amlal@el-mahrouss-logic.com>2024-09-08 22:19:00 +0200
committerAmlal <amlal@el-mahrouss-logic.com>2024-09-08 22:19:00 +0200
commitef71b80d3df1969a2be85eadf2d83cd85745469d (patch)
tree218415d633ba1010f57f218a139c791e7a737e4f /dev/ZKA/HALKit/AMD64
parent11219de11b35cb4f1e1a27408244243b11b41e05 (diff)
A lot:
- Changed task banks are being switched in the kernel. - Changed user mode switch mode, improved it to push rflags. - User proc will start the scheduler when it's being jumped on. Signed-off-by: Amlal <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'dev/ZKA/HALKit/AMD64')
-rw-r--r--dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx2
-rw-r--r--dev/ZKA/HALKit/AMD64/HalMPContextSwitch.asm35
2 files changed, 24 insertions, 13 deletions
diff --git a/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx b/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx
index a5bf07ec..1a518c5d 100644
--- a/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalCoreMPScheduler.cxx
@@ -152,7 +152,7 @@ namespace Kernel::HAL
VoidPtr f_Image;
} fBlocks[kSchedProcessLimitPerTeam] = {0};
- EXTERN_C HAL::StackFramePtr _hal_leak_current_context(Void)
+ EXTERN_C HAL::StackFramePtr mp_get_current_context(Void)
{
return fBlocks[UserProcessScheduler::The().CurrentProcess().Leak().ProcessId % kSchedProcessLimitPerTeam].f_Frame;
}
diff --git a/dev/ZKA/HALKit/AMD64/HalMPContextSwitch.asm b/dev/ZKA/HALKit/AMD64/HalMPContextSwitch.asm
index 4403263a..c61db220 100644
--- a/dev/ZKA/HALKit/AMD64/HalMPContextSwitch.asm
+++ b/dev/ZKA/HALKit/AMD64/HalMPContextSwitch.asm
@@ -9,10 +9,7 @@
[bits 64]
-[global mp_get_current_context]
-[global mp_do_context_switch]
-[extern _hal_switch_context]
-[extern _hal_leak_current_context]
+[global mp_do_user_switch]
[global mp_do_context_switch_pre]
section .text
@@ -20,7 +17,7 @@ section .text
;; Does a user mode switch, and then loads the task to be run.
;; rcx: code ptr.
;; rdx: stack ptr.
-mp_do_context_switch:
+mp_do_user_switch:
mov ax, 0x18 | 3
mov ds, ax
mov es, ax
@@ -28,14 +25,28 @@ mp_do_context_switch:
mov fs, ax
push 0x18 | 3
- push rdx
- push 0x200
+
+ mov rax, mp_user_switch_proc_end
+ push rax
+
+ o64 pushf
+
push 0x20 | 3
- push rcx
+
+ mov rdx, mp_user_switch_proc
+ push rdx
+
+ mov rsp, mp_user_switch_proc_end
o64 iret
-;; @brief Gets the current stack frame.
-mp_get_current_context:
- call _hal_leak_current_context
- ret
+section .bss
+
+mp_user_switch_proc_begin:
+ resb 4*4096
+mp_user_switch_proc_end:
+
+section .text
+
+mp_user_switch_proc:
+ jmp $