mirror of
https://github.com/SerenityOS/serenity.git
synced 2026-11-07 04:29:30 -10:00
Kernel: Remove ACPI::StaticParsing find_table code
After the previous commit this went unused.
This commit is contained in:
1 parent
b854c700be
commit
a44aa4baee
2 files changed
-74
No files matched your search
@@ -30,74 +30,4 @@ Optional<PhysicalAddress> find_rsdp()
|
||||
return rsdp;
|
||||
}
|
||||
|
||||
static bool match_table_signature(PhysicalAddress table_header, StringView signature)
|
||||
{
|
||||
VERIFY(signature.length() == 4);
|
||||
|
||||
auto check_in_region = [&](size_t length, auto&& callback) -> bool {
|
||||
auto region = Memory::map_typed<u8 const>(table_header, length).release_value_but_fixme_should_propagate_errors();
|
||||
return callback(region.ptr());
|
||||
};
|
||||
|
||||
u32 length = 0;
|
||||
auto check_signature_and_get_length = [&](u8 const* base) -> bool {
|
||||
if (memcmp(reinterpret_cast<char const*>(base), signature.characters_without_null_termination(), 4) != 0)
|
||||
return false;
|
||||
length = ByteReader::load32(base + 4);
|
||||
return true;
|
||||
};
|
||||
|
||||
auto validate_checksum = [&](u8 const* base) -> bool {
|
||||
u8 checksum = 0;
|
||||
for (u32 i = 0; i < length; ++i)
|
||||
checksum += base[i];
|
||||
return checksum == 0;
|
||||
};
|
||||
|
||||
return check_in_region(8, check_signature_and_get_length) && check_in_region(length, validate_checksum);
|
||||
}
|
||||
|
||||
ErrorOr<Optional<PhysicalAddress>> search_table_in_xsdt(PhysicalAddress xsdt_address, StringView signature)
|
||||
{
|
||||
VERIFY(signature.length() == 4);
|
||||
|
||||
auto xsdt = TRY(Memory::map_typed<::ACPI::Structures::XSDT>(xsdt_address));
|
||||
|
||||
for (size_t i = 0; i < ((xsdt->h.length - sizeof(::ACPI::Structures::SDTHeader)) / sizeof(u64)); ++i) {
|
||||
if (match_table_signature(PhysicalAddress((PhysicalPtr)xsdt->table_ptrs[i]), signature))
|
||||
return PhysicalAddress((PhysicalPtr)xsdt->table_ptrs[i]);
|
||||
}
|
||||
return Optional<PhysicalAddress> {};
|
||||
}
|
||||
|
||||
ErrorOr<Optional<PhysicalAddress>> find_table(PhysicalAddress rsdp_address, StringView signature)
|
||||
{
|
||||
VERIFY(signature.length() == 4);
|
||||
|
||||
auto rsdp = TRY(Memory::map_typed<::ACPI::Structures::RSDPDescriptor20>(rsdp_address));
|
||||
|
||||
if (rsdp->base.revision == 0)
|
||||
return search_table_in_rsdt(PhysicalAddress(rsdp->base.rsdt_ptr), signature);
|
||||
|
||||
if (rsdp->base.revision >= 2) {
|
||||
if (rsdp->xsdt_ptr)
|
||||
return search_table_in_xsdt(PhysicalAddress(rsdp->xsdt_ptr), signature);
|
||||
return search_table_in_rsdt(PhysicalAddress(rsdp->base.rsdt_ptr), signature);
|
||||
}
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
ErrorOr<Optional<PhysicalAddress>> search_table_in_rsdt(PhysicalAddress rsdt_address, StringView signature)
|
||||
{
|
||||
VERIFY(signature.length() == 4);
|
||||
|
||||
auto rsdt = TRY(Memory::map_typed<::ACPI::Structures::RSDT>(rsdt_address));
|
||||
|
||||
for (u32 i = 0; i < ((rsdt->h.length - sizeof(::ACPI::Structures::SDTHeader)) / sizeof(u32)); i++) {
|
||||
if (match_table_signature(PhysicalAddress((PhysicalPtr)rsdt->table_ptrs[i]), signature))
|
||||
return PhysicalAddress((PhysicalPtr)rsdt->table_ptrs[i]);
|
||||
}
|
||||
return Optional<PhysicalAddress> {};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -14,8 +14,4 @@
|
||||
namespace Kernel::ACPI::StaticParsing {
|
||||
|
||||
Optional<PhysicalAddress> find_rsdp();
|
||||
ErrorOr<Optional<PhysicalAddress>> find_table(PhysicalAddress rsdp, StringView signature);
|
||||
ErrorOr<Optional<PhysicalAddress>> search_table_in_xsdt(PhysicalAddress xsdt, StringView signature);
|
||||
ErrorOr<Optional<PhysicalAddress>> search_table_in_rsdt(PhysicalAddress rsdt, StringView signature);
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user