diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-24 03:02:43 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-24 03:02:43 +0100 |
| commit | 83d870e58457a1d335a1d9b9966a6a1887cc297b (patch) | |
| tree | 72888f88c7728c82f3f6df1f4f70591de15eab36 /dev/kernel/src/ACPIFactoryInterface.cc | |
| parent | ab37adbacf0f33845804c788b39680cd754752a8 (diff) | |
feat! breaking changes on kernel sources.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/src/ACPIFactoryInterface.cc')
| -rw-r--r-- | dev/kernel/src/ACPIFactoryInterface.cc | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/dev/kernel/src/ACPIFactoryInterface.cc b/dev/kernel/src/ACPIFactoryInterface.cc deleted file mode 100644 index 42819b7e..00000000 --- a/dev/kernel/src/ACPIFactoryInterface.cc +++ /dev/null @@ -1,88 +0,0 @@ -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -#include <ArchKit/ArchKit.h> -#include <KernelKit/HeapMgr.h> -#include <NeKit/KString.h> -#include <modules/ACPI/ACPIFactoryInterface.h> - -namespace Kernel { -constexpr STATIC const auto kMinACPIVer = 1U; - -/// @brief Finds a descriptor table inside ACPI XSDT. -ErrorOr<voidPtr> ACPIFactoryInterface::Find(const Char* signature) { - if (this->fRsdp) return ErrorOr<voidPtr>{-kErrorInvalidData}; - if (!signature) return ErrorOr<voidPtr>{-kErrorInvalidData}; - if (*signature == 0) return ErrorOr<voidPtr>{-kErrorInvalidData}; - - RSDP* rsp_ptr = reinterpret_cast<RSDP*>(this->fRsdp); - - if (rsp_ptr->Revision < kMinACPIVer) return ErrorOr<voidPtr>{-kErrorInvalidData}; - - RSDT* xsdt = reinterpret_cast<RSDT*>(rsp_ptr->RsdtAddress); - - Int64 num = (xsdt->Length - sizeof(SDT)) / sizeof(Int64); - - /*** - crucial to avoid underflows. - */ - if (num < 1) { - /// stop here, we should have entries... - ke_panic(RUNTIME_CHECK_ACPI); - return ErrorOr<voidPtr>{-kErrorInvalidData}; - } - - this->fEntries = num; - - (Void)(kout << "ACPI: Number of entries: " << number(this->fEntries) << kendl); - (Void)(kout << "ACPI: Revision: " << number(xsdt->Revision) << kendl); - (Void)(kout << "ACPI: Signature: " << xsdt->Signature << kendl); - (Void)(kout << "ACPI: Address of XSDT: " << hex_number((UIntPtr) xsdt) << kendl); - - static constexpr const UInt16 cAcpiSignatureLength = 4U; - - for (Size index = 0; index < this->fEntries; ++index) { - SDT* sdt = reinterpret_cast<SDT*>(xsdt->AddressArr[index]); - - (Void)(kout << "ACPI: Checksum: " << number(sdt->Checksum) << kendl); - (Void)(kout << "ACPI: Revision: " << number(sdt->Revision) << kendl); - - for (UInt16 signature_index = 0; signature_index < cAcpiSignatureLength; ++signature_index) { - if (sdt->Signature[signature_index] != signature[signature_index]) break; - - if (signature_index == (cAcpiSignatureLength - 1)) { - (Void)(kout << "ACPI: SDT Signature: " << sdt->Signature << kendl); - (Void)(kout << "ACPI: SDT OEM ID: " << sdt->OemId << kendl); - return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(xsdt->AddressArr[index])); - } - } - } - - return ErrorOr<voidPtr>{-kErrorInvalidData}; -} - -/*** -@brief Checksum on SDT header. -@param checksum the header to checksum -@param len the length of it. -*/ -bool ACPIFactoryInterface::Checksum(const Char* checksum, SSizeT len) { - if (len == 0 || !checksum) return NO; - - Char chr = 0; - - for (SSizeT index = 0L; index < len; ++index) { - chr += checksum[index]; - } - - return chr == 0; -} - -ErrorOr<voidPtr> ACPIFactoryInterface::operator[](const Char* signature) { - if (!signature) return ErrorOr<voidPtr>{-kErrorInvalidData}; - return this->Find(signature); -} -} // namespace Kernel |
