summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-04-01 13:35:48 +0200
committerGitHub <noreply@github.com>2025-04-01 13:35:48 +0200
commit25dd194903b3ccfe4461fe189a04d902da93ac8f (patch)
tree1fac60e9955a3d8d380e17b5665d89703a32a3c3 /dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
parent48d0df78c872f7b843f2444a6bcfa41438dc736e (diff)
parente2b41947cde11c870d96970712dcfb3aa76eb0cf (diff)
Merge pull request #6 from amlel-el-mahrouss/dev
kernel/wip: SMP tweaks, and code cleanup.
Diffstat (limited to 'dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc')
-rw-r--r--dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
index 10361d8e..c7e639e4 100644
--- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
+++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
@@ -210,16 +210,25 @@ namespace Kernel::HAL
if (kMADTBlock)
{
- SizeT index = 0;
+ SizeT index = 1;
kSMPInterrupt = 0;
kSMPCount = 0;
+ UInt32 eax, edx;
kout << "SMP: Starting APs...\r";
- UInt32 eax, edx;
kApicBaseAddress = kMADTBlock->Address;
+ constexpr auto kMemoryAPStart = 0x7C000;
+ Char* ptr_ap_code = reinterpret_cast<Char*>(kMemoryAPStart);
+
+ mm_map_page(ptr_ap_code, ptr_ap_code, kMMFlagsWr);
+
+ SizeT hal_ap_blob_len = hal_ap_blob_end - hal_ap_blob_start;
+
+ rt_copy_memory((Char*)hal_ap_blob_start, ptr_ap_code, hal_ap_blob_len);
+
while (Yes)
{
if (kMADTBlock->List[index].Type > 9 ||
@@ -244,7 +253,7 @@ namespace Kernel::HAL
/// TODO: HAL helper to create an address.
- hal_send_sipi(kApicBaseAddress, kAPICLocales[kSMPCount], (UInt8)(((UIntPtr)hal_ap_blob_start) >> 12));
+ hal_send_sipi(kApicBaseAddress, kAPICLocales[kSMPCount], (UInt8)(((UIntPtr)ptr_ap_code) >> 12));
++kSMPCount;
break;