use crate::{
local_log_ln,
memory::{self, BootInfoFrameAllocator},
println,
};
use bootloader::BootInfo;
use x86_64::{structures::paging::Translate, VirtAddr};
#[inline]
pub fn show_map_of_tables(boot_info: &'static BootInfo) {
local_log_ln!("Generated |> map_of_tables");
let phys_mem_offset = VirtAddr::new(boot_info.physical_memory_offset);
let mapper = unsafe { memory::init(phys_mem_offset) };
let addresses = [
0xb8000,
0x201008,
0x0100_0020_1a10,
boot_info.physical_memory_offset,
];
for &address in &addresses {
let virt = VirtAddr::new(address);
let phys = mapper.translate_addr(virt);
println!("{:?} -> {:?}", virt, phys);
}
println!();
}
#[inline]
pub fn create_new_map_of_tables(boot_info: &'static BootInfo) {
use x86_64::structures::paging::Page;
let phys_mem_offset = VirtAddr::new(boot_info.physical_memory_offset);
let mut mapper = unsafe { memory::init(phys_mem_offset) };
let mut frame_allocator = unsafe { BootInfoFrameAllocator::init(&boot_info.memory_map) };
let page = Page::containing_address(VirtAddr::new(0));
memory::create_example_mapping(page, &mut mapper, &mut frame_allocator);
let page_ptr: *mut u64 = page.start_address().as_mut_ptr();
unsafe { page_ptr.offset(400).write_volatile(0x_f021_f077_f065_f04e) };
}