Kernel: Allow getting ACPI headers with same signature

This commit is contained in:
Bananymous 2023-10-13 11:24:21 +03:00
parent b3b8376cca
commit 888e44ce0b
5 changed files with 14 additions and 8 deletions

View File

@ -108,7 +108,7 @@ namespace Kernel
static BAN::ErrorOr<void> initialize();
static ACPI& get();
const SDTHeader* get_header(const char[4]);
const SDTHeader* get_header(BAN::StringView signature, uint32_t index);
private:
ACPI() = default;

View File

@ -222,13 +222,20 @@ namespace Kernel
return {};
}
const ACPI::SDTHeader* ACPI::get_header(const char signature[4])
const ACPI::SDTHeader* ACPI::get_header(BAN::StringView signature, uint32_t index)
{
if (signature.size() != 4)
{
dprintln("Trying to get ACPI header with {} byte signature ??", signature.size());
return nullptr;
}
uint32_t cnt = 0;
for (auto& mapped_header : m_mapped_headers)
{
auto* header = mapped_header.as_header();
if (memcmp(header->signature, signature, 4) == 0)
return header;
if (memcmp(header->signature, signature.data(), 4) == 0)
if (cnt++ == index)
return header;
}
return nullptr;
}

View File

@ -95,7 +95,7 @@ namespace Kernel
return nullptr;
}
const MADT* madt = (const MADT*)Kernel::ACPI::get().get_header("APIC");
const MADT* madt = (const MADT*)Kernel::ACPI::get().get_header("APIC"sv, 0);
if (madt == nullptr)
{
dprintln("Could not find MADT header");

View File

@ -46,7 +46,7 @@ namespace Kernel
BAN::ErrorOr<void> HPET::initialize(bool force_pic)
{
auto* header = (ACPI::HPET*)ACPI::get().get_header("HPET");
auto* header = (ACPI::HPET*)ACPI::get().get_header("HPET"sv, 0);
if (header == nullptr)
return BAN::Error::from_errno(ENODEV);

View File

@ -51,8 +51,7 @@ void laihost_panic(const char* msg)
void* laihost_scan(const char* sig, size_t index)
{
ASSERT(index == 0);
return (void*)ACPI::get().get_header(sig);
return (void*)ACPI::get().get_header(sig, index);
}
void* laihost_map(size_t address, size_t count)