summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal <amlal.elmahrouss@icloud.com>2025-01-26 12:19:50 +0100
committerAmlal <amlal.elmahrouss@icloud.com>2025-01-26 12:19:50 +0100
commit7821342e0fd790c0933f3e2579659b09aaa25098 (patch)
treea7c5acd8bfa93a6660ef869dfbdafafae0aeb50a
parentc0cd417753523f60d9ef414b345f791b068071ed (diff)
ADD: Starting code in 0x7c000 on AMD64 APs. (HalApplicationProcessor.cc)
ADD: Add a MUST_PASS (debug) for IPCMsg.cc Signed-off-by: Amlal <amlal.elmahrouss@icloud.com>
-rw-r--r--dev/Kernel/CFKit/Property.h10
-rw-r--r--dev/Kernel/FirmwareKit/EFI/API.h2
-rw-r--r--dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc10
-rw-r--r--dev/Kernel/HALKit/AMD64/Processor.h6
-rw-r--r--dev/Kernel/KernelKit/PE.h4
-rw-r--r--dev/Kernel/src/Network/IPCAddr.cc14
-rw-r--r--dev/Kernel/src/Network/IPCMsg.cc10
7 files changed, 35 insertions, 21 deletions
diff --git a/dev/Kernel/CFKit/Property.h b/dev/Kernel/CFKit/Property.h
index 162b757b..69ec13f2 100644
--- a/dev/Kernel/CFKit/Property.h
+++ b/dev/Kernel/CFKit/Property.h
@@ -11,8 +11,9 @@
#include <NewKit/Defines.h>
#include <NewKit/Function.h>
#include <NewKit/KString.h>
+#include <CFKit/GUIDWrapper.h>
-#define kMaxPropLen 255
+#define kMaxPropLen (255U)
namespace CFKit
{
@@ -22,7 +23,7 @@ namespace CFKit
using PropertyId = UIntPtr;
/// @brief Kernel property class.
- /// @example \Properties\SmpCores or \Properties\KernelVersion
+ /// @example /Properties/SmpCoreClass or /Properties/KernelVersionClass
class Property
{
public:
@@ -38,8 +39,9 @@ namespace CFKit
KString& GetKey();
private:
- KString fName{kMaxPropLen};
- PropertyId fValue{0UL};
+ KString fName{kMaxPropLen};
+ PropertyId fValue{0UL};
+ Ref<XRN::GUID> fGUID{};
};
template <SizeT N>
diff --git a/dev/Kernel/FirmwareKit/EFI/API.h b/dev/Kernel/FirmwareKit/EFI/API.h
index 58775ddd..34e4a48d 100644
--- a/dev/Kernel/FirmwareKit/EFI/API.h
+++ b/dev/Kernel/FirmwareKit/EFI/API.h
@@ -12,7 +12,7 @@
#include <KernelKit/MSDOS.h>
#include <KernelKit/PE.h>
-#define kZKASubsystem 17
+#define kZKASubsystem (17)
#ifdef __ZBAOSLDR__
// forward decl.
diff --git a/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc
index 4234f11e..c6074d72 100644
--- a/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc
+++ b/dev/Kernel/HALKit/AMD64/HalApplicationProcessor.cc
@@ -219,15 +219,9 @@ namespace Kernel::HAL
kcout << "SMP: Starting APs...\r";
+ UInt32 eax, edx;
kApicBaseAddress = kMADTBlock->Address;
- constexpr auto kMemoryAPStart = 0x7C000;
- Char* ptr_ap_code = reinterpret_cast<Char*>(kMemoryAPStart);
-
- 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 ||
@@ -252,7 +246,7 @@ namespace Kernel::HAL
/// TODO: HAL helper to create an address.
- hal_send_sipi(kApicBaseAddress, kAPICLocales[kSMPCount], (UInt8)(((UIntPtr)ptr_ap_code) >> 12));
+ hal_send_sipi(kApicBaseAddress, kAPICLocales[kSMPCount], (UInt8)(((UIntPtr)0x7c00) >> 12));
++kSMPCount;
break;
diff --git a/dev/Kernel/HALKit/AMD64/Processor.h b/dev/Kernel/HALKit/AMD64/Processor.h
index acdf7e42..623c8245 100644
--- a/dev/Kernel/HALKit/AMD64/Processor.h
+++ b/dev/Kernel/HALKit/AMD64/Processor.h
@@ -233,14 +233,16 @@ namespace Kernel::HAL
/// @param lo low byte
/// @param hi high byte
/***********************************************************************************/
- inline Void hal_get_msr(UInt32 msr, UInt32* lo, UInt32* hi) noexcept
+ inline UInt32 hal_get_msr(UInt32 msr, UInt32* lo, UInt32* hi) noexcept
{
if (!lo || !hi)
- return;
+ return 0;
asm volatile("rdmsr"
: "=a"(*lo), "=d"(*hi)
: "c"(msr));
+
+ return *lo + *hi;
}
/// @brief Set Model-specific register.
diff --git a/dev/Kernel/KernelKit/PE.h b/dev/Kernel/KernelKit/PE.h
index 90406a5d..f5174fc3 100644
--- a/dev/Kernel/KernelKit/PE.h
+++ b/dev/Kernel/KernelKit/PE.h
@@ -136,8 +136,8 @@ typedef struct LDR_IMAGE_HEADER
enum
{
- eUserSection = 0x00000020,
- cPEResourceId = 0xFFaadd00,
+ kUserSection = 0x00000020,
+ kPEResourceId = 0xFFaadd00,
};
#endif /* ifndef __KERNELKIT_INC_PE_H__ */
diff --git a/dev/Kernel/src/Network/IPCAddr.cc b/dev/Kernel/src/Network/IPCAddr.cc
index e69de29b..371e83d9 100644
--- a/dev/Kernel/src/Network/IPCAddr.cc
+++ b/dev/Kernel/src/Network/IPCAddr.cc
@@ -0,0 +1,14 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved.
+
+ ------------------------------------------- */
+
+#include <NetworkKit/IPC.h>
+#include <KernelKit/LPC.h>
+#include <KernelKit/UserProcessScheduler.h>
+
+namespace Kernel
+{
+
+}
diff --git a/dev/Kernel/src/Network/IPCMsg.cc b/dev/Kernel/src/Network/IPCMsg.cc
index 5e94b050..ef888ed6 100644
--- a/dev/Kernel/src/Network/IPCMsg.cc
+++ b/dev/Kernel/src/Network/IPCMsg.cc
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved.
+ Copyright (C) 2024-2025, Amlal EL Mahrouss, all rights reserved.
------------------------------------------- */
@@ -10,7 +10,7 @@
namespace Kernel
{
- /// @internal
+ /// @internal internal use for IPC system only.
/// @brief The internal sanitize function.
Bool ipc_int_sanitize_packet(IPC_MSG* pckt)
{
@@ -79,13 +79,15 @@ namespace Kernel
if (!*pckt_in)
*pckt_in = new IPC_MSG();
+ MUST_PASS(*pckt_in);
+
if (*pckt_in)
{
- auto endian = rtl_deduce_endianess((*pckt_in), ((Char*)(*pckt_in))[0]);
+ const auto endianess = rtl_deduce_endianess((*pckt_in), ((Char*)(*pckt_in))[0]);
(*pckt_in)->IpcHeaderMagic = kIPCHeaderMagic;
- (*pckt_in)->IpcEndianess = static_cast<UInt8>(endian);
+ (*pckt_in)->IpcEndianess = static_cast<UInt8>(endianess);
(*pckt_in)->IpcPacketSize = sizeof(IPC_MSG);
(*pckt_in)->IpcTo.UserProcessID = 0;