diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-01-28 19:29:01 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-01-28 19:29:42 +0100 |
| commit | f06d0703a5813841f5a6dacd294c5cfbe9394037 (patch) | |
| tree | b6626ef96cd0fe290e889054c8a934e04d556eef /Private/HALKit | |
| parent | 4a789fd64c44e38ed0c3d9fb597e62afd17a337d (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.cpp | 107 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/StartSequence.asm | 4 |
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 $ |
