summaryrefslogtreecommitdiffhomepage
path: root/Private/HALKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-28 19:29:01 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-28 19:29:42 +0100
commitf06d0703a5813841f5a6dacd294c5cfbe9394037 (patch)
treeb6626ef96cd0fe290e889054c8a934e04d556eef /Private/HALKit
parent4a789fd64c44e38ed0c3d9fb597e62afd17a337d (diff)
Kernel: Update SPECIFICATION.TXT, Implement Shared objects primitives.
Kernel: Working on EFI reimplementation. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Private/HALKit')
-rw-r--r--Private/HALKit/AMD64/ACPIManagerAMD64.cpp107
-rw-r--r--Private/HALKit/AMD64/StartSequence.asm4
2 files changed, 59 insertions, 52 deletions
diff --git a/Private/HALKit/AMD64/ACPIManagerAMD64.cpp b/Private/HALKit/AMD64/ACPIManagerAMD64.cpp
index 2e5bf705..0f5e6f68 100644
--- a/Private/HALKit/AMD64/ACPIManagerAMD64.cpp
+++ b/Private/HALKit/AMD64/ACPIManagerAMD64.cpp
@@ -14,74 +14,79 @@
namespace hCore
{
- ACPIManager::ACPIManager(voidPtr rsdPtr)
- : m_Rsdp(rsdPtr), m_Entries(0)
- {
- RSDP* _rsdPtr = reinterpret_cast<RSDP*>(this->m_Rsdp);
-
- MUST_PASS(_rsdPtr);
- MUST_PASS(_rsdPtr->Revision >= 2);
- }
+ACPIManager::ACPIManager(voidPtr rsdPtr) : m_Rsdp(rsdPtr), m_Entries(0)
+{
+ RSDP *_rsdPtr = reinterpret_cast<RSDP *>(this->m_Rsdp);
- void ACPIManager::Shutdown() {}
- void ACPIManager::Reset() {}
+ MUST_PASS(_rsdPtr);
+ MUST_PASS(_rsdPtr->Revision >= 2);
+}
- ErrorOr <voidPtr> ACPIManager::Find(const char *signature)
- {
- MUST_PASS(m_Rsdp);
+void ACPIManager::Shutdown()
+{
+}
+void ACPIManager::Reset()
+{
+}
- if (!signature)
- return ErrorOr<voidPtr>{-2};
+ErrorOr<voidPtr> ACPIManager::Find(const char *signature)
+{
+ MUST_PASS(m_Rsdp);
- if (*signature == 0)
- return ErrorOr<voidPtr>{-3};
+ if (!signature)
+ return ErrorOr<voidPtr>{-2};
- RSDP *rsdPtr = reinterpret_cast<RSDP*>(this->m_Rsdp);
+ if (*signature == 0)
+ return ErrorOr<voidPtr>{-3};
- auto xsdt = rsdPtr->XsdtAddress;
- SizeT num = (rsdPtr->Length + sizeof(SDT)) / 8;
+ RSDP *rsdPtr = reinterpret_cast<RSDP *>(this->m_Rsdp);
- for (Size index = 0; index < num; ++index)
- {
- SDT *sdt = reinterpret_cast<SDT*>(xsdt + sizeof(SDT) + index * 8);
+ auto xsdt = rsdPtr->XsdtAddress;
+ SizeT num = (rsdPtr->Length + sizeof(SDT)) / 8;
- if (!Checksum(sdt->Signature, 4))
- panic(RUNTIME_CHECK_ACPI);
+ for (Size index = 0; index < num; ++index)
+ {
+ SDT *sdt = reinterpret_cast<SDT *>(xsdt + sizeof(SDT) + index * 8);
- if (StringBuilder::Equals(const_cast<const char*>(sdt->Signature), signature))
- return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(sdt));
- }
+ if (!Checksum(sdt->Signature, 4))
+ panic(RUNTIME_CHECK_ACPI);
- return ErrorOr<voidPtr>{-1};
+ if (StringBuilder::Equals(const_cast<const char *>(sdt->Signature), signature))
+ return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(sdt));
}
- bool ACPIManager::Checksum(const char *checksum, SSizeT len)
- {
- if (len == 0)
- return -1;
+ return ErrorOr<voidPtr>{-1};
+}
- char chr = 0;
+bool ACPIManager::Checksum(const char *checksum, SSizeT len)
+{
+ if (len == 0)
+ return -1;
- for (int index = 0; index < len; ++index)
- {
- chr += checksum[index];
- }
+ char chr = 0;
- return chr == 0;
- }
-
- void rt_shutdown_acpi_qemu_20(void)
+ for (int index = 0; index < len; ++index)
{
- HAL::out16(0xb004, 0x2000);
+ chr += checksum[index];
}
- void rt_shutdown_acpi_qemu_30_plus(void)
- {
- HAL::out16(0x604, 0x2000);
- }
+ return chr == 0;
+}
- void rt_shutdown_acpi_virtualbox(void)
- {
- HAL::out16(0x4004, 0x3400);
- }
+void rt_shutdown_acpi_qemu_20(void)
+{
+ HAL::out16(0xb004, 0x2000);
+}
+
+void rt_shutdown_acpi_qemu_30_plus(void)
+{
+ HAL::out16(0x604, 0x2000);
+}
+
+void rt_shutdown_acpi_virtualbox(void)
+{
+ HAL::out16(0x4004, 0x3400);
+}
+
+/// you'll have to parse the MADT otherwise!
} // namespace hCore
diff --git a/Private/HALKit/AMD64/StartSequence.asm b/Private/HALKit/AMD64/StartSequence.asm
index 533db858..45bd1656 100644
--- a/Private/HALKit/AMD64/StartSequence.asm
+++ b/Private/HALKit/AMD64/StartSequence.asm
@@ -10,6 +10,7 @@
[bits 64]
[global Main]
[extern RuntimeMain]
+[extern __SYSTEM_STACK_END]
section .text
@@ -30,5 +31,6 @@ L0:
jmp $
MainBIOS:
- cli hlt
+ cli
+ hlt
jmp $