forked from Bananymous/banan-os
Kernel: Allow getting ACPI headers with same signature
This commit is contained in:
parent
72f3c378dd
commit
f842a9255f
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue