|
@@ -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;
|
|
|
-}
|
|
|
-
|
|
|
}
|