diff options
| -rw-r--r-- | Private/ArchKit/ArchKit.hpp | 1 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/HalACPIFactoryInterface.cxx | 17 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp | 16 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/HalKernelMain.cxx | 1 |
4 files changed, 18 insertions, 17 deletions
diff --git a/Private/ArchKit/ArchKit.hpp b/Private/ArchKit/ArchKit.hpp index 93e39ee3..d7c52108 100644 --- a/Private/ArchKit/ArchKit.hpp +++ b/Private/ArchKit/ArchKit.hpp @@ -48,6 +48,5 @@ inline NewOS::VoidPtr kKernelVirtualStart; inline NewOS::UIntPtr kKernelVirtualSize; inline NewOS::VoidPtr kKernelPhysicalStart; -inline NewOS::UIntPtr kKernelPhysicalSize; #include <FirmwareKit/Handover.hxx> diff --git a/Private/HALKit/AMD64/HalACPIFactoryInterface.cxx b/Private/HALKit/AMD64/HalACPIFactoryInterface.cxx index 983c7219..d18d49cf 100644 --- a/Private/HALKit/AMD64/HalACPIFactoryInterface.cxx +++ b/Private/HALKit/AMD64/HalACPIFactoryInterface.cxx @@ -37,7 +37,7 @@ Void ACPIFactoryInterface::Shutdown() { } /// @brief Reboot (shutdowns on qemu.) -/// @return +/// @return Void ACPIFactoryInterface::Reboot() { #ifdef __DEBUG__ rt_shutdown_acpi_qemu_30_plus(); @@ -60,22 +60,23 @@ ErrorOr<voidPtr> ACPIFactoryInterface::Find(const char *signature) { return ErrorOr<voidPtr>{-4}; } - SDT* xsdt = (SDT*)(rsdPtr->XsdtAddress >> (rsdPtr->XsdtAddress & 0xfff)); - SizeT num = (xsdt->Length + sizeof(SDT)) / 8; + SDT* xsdt = (SDT*)(rsdPtr->RsdtAddress + rsdPtr->XsdtAddress); + SizeT num = xsdt->Length + sizeof(SDT) / 8; kcout << "ACPI: Number of entries: " << number(num) << endl; + kcout << "ACPI: Address of XSDT: " << number((UIntPtr)xsdt) << endl; constexpr short ACPI_SIGNATURE_LENGTH = 4; for (Size index = 0; index < num; ++index) { SDT *sdt = (SDT*)*((UInt64*)(UInt64)xsdt + sizeof(SDT) + (index * 8)); - for (int signature_index = 0; signature_index < 4; signature_index++){ - if (sdt->Signature[signature_index] != signature[signature_index]) - break; + for (int signature_index = 0; signature_index < 4; signature_index++){ + if (sdt->Signature[signature_index] != signature[signature_index]) + break; - if (signature_index == 3) return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>((SDT*)sdt));; - } + if (signature_index == 3) return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>((SDT*)sdt)); + } } return ErrorOr<voidPtr>{-1}; diff --git a/Private/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp b/Private/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp index 0761114d..37e8f0cc 100644 --- a/Private/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp +++ b/Private/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp @@ -6,6 +6,7 @@ #include <Builtins/ACPI/ACPIFactoryInterface.hxx> #include <HALKit/AMD64/Processor.hpp> +#include "NewKit/KernelCheck.hpp" /////////////////////////////////////////////////////////////////////////////////////// @@ -45,12 +46,12 @@ STATIC const char* kApicSignature = "APIC"; /// @brief Multiple APIC descriptor table. struct MadtType final : public SDT { struct MadtAddress final { - UInt32 fPhysicalAddress; UInt32 fFlags; // 1 = Dual Legacy PICs installed + UInt32 fPhysicalAddress; Char fType; Char fRecLen; // record length - }; + } Madt[]; }; struct MadtProcessorLocalApic final { @@ -97,11 +98,12 @@ void hal_system_get_cores(voidPtr rsdPtr) { auto acpi = ACPIFactoryInterface(rsdPtr); kApicMadt = acpi.Find(kApicSignature).Leak().Leak(); - MUST_PASS(kApicMadt); // MADT must exist. - - kcout << "New OS: Successfuly fetched the MADT!\r\n"; - - kApicInfoBlock = (MadtType*)kApicMadt; + if (kApicMadt) { + kcout << "New OS: Successfuly fetched the MADT!\r\n"; + kApicInfoBlock = (MadtType*)kApicMadt; + } else { + MUST_PASS(false); + } } } // namespace NewOS::HAL diff --git a/Private/HALKit/AMD64/HalKernelMain.cxx b/Private/HALKit/AMD64/HalKernelMain.cxx index 57c37778..d6b4ab76 100644 --- a/Private/HALKit/AMD64/HalKernelMain.cxx +++ b/Private/HALKit/AMD64/HalKernelMain.cxx @@ -34,7 +34,6 @@ EXTERN_C void hal_init_platform( reinterpret_cast<NewOS::UIntPtr>(HandoverHeader->f_VirtualStart) + kVirtualAddressStartOffset); - kKernelPhysicalSize = HandoverHeader->f_PhysicalSize; kKernelPhysicalStart = HandoverHeader->f_PhysicalStart; STATIC NewOS::HAL::Detail::NewOSGDT GDT = { |
