forked from Bananymous/banan-os
Kernel: Cleanup RSDP parsing code
This commit is contained in:
parent
06db890d49
commit
8a52c0f9d7
|
@ -157,7 +157,6 @@ static bool is_valid_std_header(const SDTHeader* header)
|
||||||
uintptr_t locate_madt(uintptr_t rsdp_addr)
|
uintptr_t locate_madt(uintptr_t rsdp_addr)
|
||||||
{
|
{
|
||||||
uintptr_t entry_address_base = 0;
|
uintptr_t entry_address_base = 0;
|
||||||
uintptr_t entry_address_mask = 0;
|
|
||||||
ptrdiff_t entry_pointer_size = 0;
|
ptrdiff_t entry_pointer_size = 0;
|
||||||
uint32_t entry_count = 0;
|
uint32_t entry_count = 0;
|
||||||
|
|
||||||
|
@ -167,7 +166,6 @@ uintptr_t locate_madt(uintptr_t rsdp_addr)
|
||||||
uintptr_t xsdt_addr = rsdp->v2_xsdt_address;
|
uintptr_t xsdt_addr = rsdp->v2_xsdt_address;
|
||||||
MMU::get().allocate_page(xsdt_addr, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
MMU::get().allocate_page(xsdt_addr, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||||
entry_address_base = xsdt_addr + sizeof(SDTHeader);
|
entry_address_base = xsdt_addr + sizeof(SDTHeader);
|
||||||
entry_address_mask = (uintptr_t)0xFFFFFFFFFFFFFFFF;
|
|
||||||
entry_count = (((const SDTHeader*)xsdt_addr)->length - sizeof(SDTHeader)) / 8;
|
entry_count = (((const SDTHeader*)xsdt_addr)->length - sizeof(SDTHeader)) / 8;
|
||||||
entry_pointer_size = 8;
|
entry_pointer_size = 8;
|
||||||
MMU::get().unallocate_page(xsdt_addr);
|
MMU::get().unallocate_page(xsdt_addr);
|
||||||
|
@ -177,7 +175,6 @@ uintptr_t locate_madt(uintptr_t rsdp_addr)
|
||||||
uintptr_t rsdt_addr = rsdp->rsdt_address;
|
uintptr_t rsdt_addr = rsdp->rsdt_address;
|
||||||
MMU::get().allocate_page(rsdt_addr, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
MMU::get().allocate_page(rsdt_addr, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||||
entry_address_base = rsdt_addr + sizeof(SDTHeader);
|
entry_address_base = rsdt_addr + sizeof(SDTHeader);
|
||||||
entry_address_mask = 0xFFFFFFFF;
|
|
||||||
entry_count = (((const SDTHeader*)rsdt_addr)->length - sizeof(SDTHeader)) / 4;
|
entry_count = (((const SDTHeader*)rsdt_addr)->length - sizeof(SDTHeader)) / 4;
|
||||||
entry_pointer_size = 4;
|
entry_pointer_size = 4;
|
||||||
MMU::get().unallocate_page(rsdt_addr);
|
MMU::get().unallocate_page(rsdt_addr);
|
||||||
|
@ -188,7 +185,12 @@ uintptr_t locate_madt(uintptr_t rsdp_addr)
|
||||||
uintptr_t entry_addr_ptr = entry_address_base + i * entry_pointer_size;
|
uintptr_t entry_addr_ptr = entry_address_base + i * entry_pointer_size;
|
||||||
MMU::get().allocate_page(entry_addr_ptr, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
MMU::get().allocate_page(entry_addr_ptr, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||||
|
|
||||||
uintptr_t entry_addr = *(uintptr_t*)entry_addr_ptr & entry_address_mask;
|
uintptr_t entry_addr;
|
||||||
|
if (entry_pointer_size == 4)
|
||||||
|
entry_addr = *(uint32_t*)entry_addr_ptr;
|
||||||
|
else
|
||||||
|
entry_addr = *(uint64_t*)entry_addr_ptr;
|
||||||
|
|
||||||
MMU::get().allocate_page(entry_addr, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
MMU::get().allocate_page(entry_addr, MMU::Flags::ReadWrite | MMU::Flags::Present);
|
||||||
|
|
||||||
BAN::ScopeGuard _([&]() {
|
BAN::ScopeGuard _([&]() {
|
||||||
|
|
Loading…
Reference in New Issue