mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-11 13:42:52 +00:00
Kerenl/Firmware: Add map_ebda and map_bios methods in the original place
In a previous commit I moved everything into the new subdirectories in FileSystem/SysFS directory without trying to actually make changes in the code itself too much. Now it's time to split the code to make it more readable and understandable, hence this change occurs now.
This commit is contained in:
parent
7310a9a641
commit
9c6834698f
Notes:
sideshowbarker
2024-07-17 10:07:45 +09:00
Author: https://github.com/supercomputer7
Commit: 9c6834698f
Pull-request: https://github.com/SerenityOS/serenity/pull/13772
8 changed files with 65 additions and 33 deletions
|
@ -8,6 +8,7 @@
|
|||
#include <AK/StringView.h>
|
||||
#include <Kernel/FileSystem/OpenFileDescription.h>
|
||||
#include <Kernel/FileSystem/SysFS/Subsystems/Firmware/BIOS.h>
|
||||
#include <Kernel/Firmware/BIOS.h>
|
||||
#include <Kernel/KBufferBuilder.h>
|
||||
#include <Kernel/Memory/MemoryManager.h>
|
||||
#include <Kernel/Memory/TypedMapping.h>
|
||||
|
@ -157,31 +158,4 @@ UNMAP_AFTER_INIT Optional<PhysicalAddress> BIOSSysFSDirectory::find_dmi_entry32b
|
|||
return bios_or_error.value().find_chunk_starting_with("_SM_", 16);
|
||||
}
|
||||
|
||||
ErrorOr<Memory::MappedROM> map_bios()
|
||||
{
|
||||
Memory::MappedROM mapping;
|
||||
mapping.size = 128 * KiB;
|
||||
mapping.paddr = PhysicalAddress(0xe0000);
|
||||
auto region_size = TRY(Memory::page_round_up(mapping.size));
|
||||
mapping.region = TRY(MM.allocate_kernel_region(mapping.paddr, region_size, {}, Memory::Region::Access::Read));
|
||||
return mapping;
|
||||
}
|
||||
|
||||
ErrorOr<Memory::MappedROM> map_ebda()
|
||||
{
|
||||
auto ebda_segment_ptr = TRY(Memory::map_typed<u16>(PhysicalAddress(0x40e)));
|
||||
PhysicalAddress ebda_paddr(PhysicalAddress(*ebda_segment_ptr).get() << 4);
|
||||
// The EBDA size is stored in the first byte of the EBDA in 1K units
|
||||
size_t ebda_size = *TRY(Memory::map_typed<u8>(ebda_paddr));
|
||||
ebda_size *= 1024;
|
||||
|
||||
Memory::MappedROM mapping;
|
||||
auto region_size = TRY(Memory::page_round_up(ebda_size));
|
||||
mapping.region = TRY(MM.allocate_kernel_region(ebda_paddr.page_base(), region_size, {}, Memory::Region::Access::Read));
|
||||
mapping.offset = ebda_paddr.offset_in_page();
|
||||
mapping.size = ebda_size;
|
||||
mapping.paddr = ebda_paddr;
|
||||
return mapping;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue