summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Private/ArchKit/ArchKit.hpp1
-rw-r--r--Private/HALKit/AMD64/HalACPIFactoryInterface.cxx17
-rw-r--r--Private/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp16
-rw-r--r--Private/HALKit/AMD64/HalKernelMain.cxx1
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 = {