Fix naming
This commit is contained in:
parent
f1a7138568
commit
07d6fe388d
@ -6,20 +6,20 @@ namespace ACPI
|
||||
struct XSDT
|
||||
{
|
||||
SDTHeader header;
|
||||
uint64_t PointerToOtherSDT[1];
|
||||
uint64_t other_sdt[1];
|
||||
};
|
||||
|
||||
struct RSDT
|
||||
{
|
||||
SDTHeader header;
|
||||
uint32_t PointerToOtherSDT[1];
|
||||
uint32_t other_sdt[1];
|
||||
};
|
||||
|
||||
SDTHeader* GetRSDTOrXSDT();
|
||||
SDTHeader* get_rsdt_or_xsdt();
|
||||
|
||||
bool ValidateRSDTOrXSDT(SDTHeader* rootSDT);
|
||||
bool validate_rsdt_or_xsdt(SDTHeader* root_sdt);
|
||||
|
||||
bool IsXSDT();
|
||||
bool is_xsdt();
|
||||
|
||||
void* FindTable(SDTHeader* rootSDT, const char* signature);
|
||||
void* find_table(SDTHeader* root_sdt, const char* signature);
|
||||
}
|
@ -16,5 +16,5 @@ namespace ACPI
|
||||
uint32_t CreatorRevision;
|
||||
};
|
||||
|
||||
bool ValidateSDTHeader(SDTHeader* header);
|
||||
bool validate_sdt_header(SDTHeader* header);
|
||||
}
|
@ -9,7 +9,7 @@
|
||||
|
||||
extern BOOTBOOT bootboot;
|
||||
|
||||
ACPI::SDTHeader* ACPI::GetRSDTOrXSDT()
|
||||
ACPI::SDTHeader* ACPI::get_rsdt_or_xsdt()
|
||||
{
|
||||
static void* cache = nullptr;
|
||||
if (cache) return (SDTHeader*)cache;
|
||||
@ -28,42 +28,34 @@ ACPI::SDTHeader* ACPI::GetRSDTOrXSDT()
|
||||
}
|
||||
kdbgln("Mapped RSDT/XSDT to virtual address %lx, uses %ld pages", (uint64_t)cache, numPages);
|
||||
SDTHeader* result = (SDTHeader*)cache;
|
||||
char OEMID[7];
|
||||
memcpy(OEMID, result->OEMID, 6);
|
||||
OEMID[6] = 0;
|
||||
kdbgln("OEMID: %s", OEMID);
|
||||
char OEMTableID[9];
|
||||
memcpy(OEMTableID, result->OEMTableID, 8);
|
||||
OEMTableID[8] = 0;
|
||||
kdbgln("OEMTableID: %s", OEMTableID);
|
||||
return result;
|
||||
}
|
||||
|
||||
bool ACPI::ValidateRSDTOrXSDT(ACPI::SDTHeader* rootSDT)
|
||||
bool ACPI::validate_rsdt_or_xsdt(ACPI::SDTHeader* root_sdt)
|
||||
{
|
||||
if (!ValidateSDTHeader(rootSDT)) return false;
|
||||
if (strncmp(rootSDT->Signature, "XSDT", 4) == 0) return true;
|
||||
if (strncmp(rootSDT->Signature, "RSDT", 4) == 0) return true;
|
||||
if (!validate_sdt_header(root_sdt)) return false;
|
||||
if (strncmp(root_sdt->Signature, "XSDT", 4) == 0) return true;
|
||||
if (strncmp(root_sdt->Signature, "RSDT", 4) == 0) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ACPI::IsXSDT()
|
||||
bool ACPI::is_xsdt()
|
||||
{
|
||||
static bool cached = false;
|
||||
static bool cache = false;
|
||||
if (cached) return cache;
|
||||
SDTHeader* rootSDT = GetRSDTOrXSDT();
|
||||
SDTHeader* rootSDT = get_rsdt_or_xsdt();
|
||||
cache = (strncmp(rootSDT->Signature, "XSDT", 4) == 0);
|
||||
cached = true;
|
||||
return cache;
|
||||
}
|
||||
|
||||
void* ACPI::FindTable(ACPI::SDTHeader* rootSDT, const char* signature)
|
||||
void* ACPI::find_table(ACPI::SDTHeader* root_sdt, const char* signature)
|
||||
{
|
||||
bool isXSDT = IsXSDT();
|
||||
int entries = (rootSDT->Length - sizeof(SDTHeader)) / (isXSDT ? 8 : 4);
|
||||
bool isXSDT = is_xsdt();
|
||||
int entries = (root_sdt->Length - sizeof(SDTHeader)) / (isXSDT ? 8 : 4);
|
||||
kdbgln("Searching for table %s in the %s at %lx (table contains %d entries)", signature, isXSDT ? "XSDT" : "RSDT",
|
||||
(uint64_t)rootSDT, entries);
|
||||
(uint64_t)root_sdt, entries);
|
||||
|
||||
for (int i = 0; i < entries; i++)
|
||||
{
|
||||
@ -71,13 +63,13 @@ void* ACPI::FindTable(ACPI::SDTHeader* rootSDT, const char* signature)
|
||||
SDTHeader* h;
|
||||
if (isXSDT)
|
||||
{
|
||||
uint64_t reversedAddress = (uint64_t)((XSDT*)rootSDT)->PointerToOtherSDT[i];
|
||||
uint64_t reversedAddress = (uint64_t)((XSDT*)root_sdt)->other_sdt[i];
|
||||
uint64_t correctAddress = reversedAddress >> 32 | reversedAddress << 32;
|
||||
h = (SDTHeader*)correctAddress;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32_t entry = ((RSDT*)rootSDT)->PointerToOtherSDT[i];
|
||||
uint32_t entry = ((RSDT*)root_sdt)->other_sdt[i];
|
||||
h = (SDTHeader*)(uint64_t)entry;
|
||||
}
|
||||
if (!h)
|
||||
@ -88,7 +80,7 @@ void* ACPI::FindTable(ACPI::SDTHeader* rootSDT, const char* signature)
|
||||
kdbgln("Physical address of entry: %lx", (uint64_t)h);
|
||||
SDTHeader* realHeader = (SDTHeader*)MemoryManager::get_unaligned_mapping(h);
|
||||
kdbgln("Mapped entry to virtual address %lx", (uint64_t)realHeader);
|
||||
if (!ValidateSDTHeader(realHeader))
|
||||
if (!validate_sdt_header(realHeader))
|
||||
{
|
||||
kwarnln("Header of entry %d is not valid, skipping this entry", i);
|
||||
MemoryManager::release_unaligned_mapping(realHeader);
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "acpi/SDT.h"
|
||||
|
||||
bool ACPI::ValidateSDTHeader(ACPI::SDTHeader* header)
|
||||
bool ACPI::validate_sdt_header(ACPI::SDTHeader* header)
|
||||
{
|
||||
uint8_t sum = 0;
|
||||
|
||||
|
@ -132,9 +132,9 @@ extern "C" void _start()
|
||||
|
||||
kinfoln("Prepared scheduler tasks");
|
||||
|
||||
ACPI::SDTHeader* rootSDT = ACPI::GetRSDTOrXSDT();
|
||||
bool isXSDT = ACPI::IsXSDT();
|
||||
if (!ACPI::ValidateRSDTOrXSDT(rootSDT)) kerrorln("Invalid %s", isXSDT ? "XSDT" : "RSDT");
|
||||
ACPI::SDTHeader* rootSDT = ACPI::get_rsdt_or_xsdt();
|
||||
bool isXSDT = ACPI::is_xsdt();
|
||||
if (!ACPI::validate_rsdt_or_xsdt(rootSDT)) kerrorln("Invalid %s", isXSDT ? "XSDT" : "RSDT");
|
||||
|
||||
framebuffer0.clear(Color::Cyan);
|
||||
|
||||
|
@ -14,19 +14,19 @@
|
||||
static void try_acpi_reboot()
|
||||
{
|
||||
kdbgln("Fetching pointer to RSDT/XSDT");
|
||||
ACPI::SDTHeader* rootSDT = ACPI::GetRSDTOrXSDT();
|
||||
ACPI::SDTHeader* rootSDT = ACPI::get_rsdt_or_xsdt();
|
||||
if (!rootSDT)
|
||||
{
|
||||
kwarnln("The pointer to the RSDT/XSDT is null");
|
||||
return;
|
||||
}
|
||||
if (!ACPI::ValidateRSDTOrXSDT(rootSDT))
|
||||
if (!ACPI::validate_rsdt_or_xsdt(rootSDT))
|
||||
{
|
||||
kwarnln("The RSDT/XSDT is invalid");
|
||||
return;
|
||||
}
|
||||
kdbgln("Searching for the FADT");
|
||||
ACPI::FADT* fadt = (ACPI::FADT*)ACPI::FindTable(rootSDT, "FACP");
|
||||
ACPI::FADT* fadt = (ACPI::FADT*)ACPI::find_table(rootSDT, "FACP");
|
||||
if (!fadt)
|
||||
{
|
||||
kwarnln("Unable to find the FADT");
|
||||
|
Loading…
Reference in New Issue
Block a user