mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-08 21:06:48 +00:00
Prettify bootloader code
This commit is contained in:
parent
4e6f281956
commit
7278589aa2
@ -111,9 +111,10 @@ impl From<E820Type> for MemoryRegionType {
|
||||
}
|
||||
|
||||
fn init_memory_regions(memory_regions: &'static Once<Vec<MemoryRegion>>) {
|
||||
let boot_params = &BOOT_PARAMS.get().unwrap();
|
||||
let num_entries = boot_params.e820_entries as usize;
|
||||
let mut regions = Vec::<MemoryRegion>::new();
|
||||
|
||||
let boot_params = BOOT_PARAMS.get().unwrap();
|
||||
let num_entries = boot_params.e820_entries as usize;
|
||||
for e820_entry in &boot_params.e820_table[0..num_entries] {
|
||||
regions.push(MemoryRegion::new(
|
||||
e820_entry.addr as usize,
|
||||
@ -121,6 +122,7 @@ fn init_memory_regions(memory_regions: &'static Once<Vec<MemoryRegion>>) {
|
||||
e820_entry.typ.into(),
|
||||
));
|
||||
}
|
||||
|
||||
memory_regions.call_once(|| regions);
|
||||
}
|
||||
|
||||
|
@ -103,12 +103,12 @@ fn init_framebuffer_info(framebuffer_arg: &'static Once<BootloaderFramebufferArg
|
||||
fn init_memory_regions(memory_regions: &'static Once<Vec<MemoryRegion>>) {
|
||||
let mut regions = Vec::<MemoryRegion>::new();
|
||||
|
||||
// Add the regions in the multiboot protocol.
|
||||
let info = MB1_INFO.get().unwrap();
|
||||
|
||||
// Add the regions in the multiboot protocol.
|
||||
let start = info.memory_map_addr as usize;
|
||||
let length = info.memory_map_len as usize;
|
||||
let mut current = start;
|
||||
|
||||
while current < start + length {
|
||||
let entry = unsafe { &*(paddr_to_vaddr(current) as *const MemoryEntry) };
|
||||
let start = entry.base_addr;
|
||||
@ -134,6 +134,7 @@ fn init_memory_regions(memory_regions: &'static Once<Vec<MemoryRegion>>) {
|
||||
(fb.width * fb.height * fb.bpp + 7) / 8, // round up when divide with 8 (bits/Byte)
|
||||
MemoryRegionType::Framebuffer,
|
||||
));
|
||||
|
||||
// Add the kernel region.
|
||||
// These are physical addresses provided by the linker script.
|
||||
extern "C" {
|
||||
|
@ -106,10 +106,10 @@ impl From<MemoryAreaType> for MemoryRegionType {
|
||||
fn init_memory_regions(memory_regions: &'static Once<Vec<MemoryRegion>>) {
|
||||
let mut regions = Vec::<MemoryRegion>::new();
|
||||
|
||||
let mb2_info = MB2_INFO.get().unwrap();
|
||||
|
||||
// Add the regions returned by Grub.
|
||||
let memory_regions_tag = MB2_INFO
|
||||
.get()
|
||||
.unwrap()
|
||||
let memory_regions_tag = mb2_info
|
||||
.memory_map_tag()
|
||||
.expect("Memory region not found from the Multiboot2 header!");
|
||||
let num_memory_regions = memory_regions_tag.memory_areas().len();
|
||||
@ -124,7 +124,8 @@ fn init_memory_regions(memory_regions: &'static Once<Vec<MemoryRegion>>) {
|
||||
);
|
||||
regions.push(region);
|
||||
}
|
||||
if let Some(Ok(fb_tag)) = MB2_INFO.get().unwrap().framebuffer_tag() {
|
||||
|
||||
if let Some(Ok(fb_tag)) = mb2_info.framebuffer_tag() {
|
||||
// Add the framebuffer region since Grub does not specify it.
|
||||
let fb = BootloaderFramebufferArg {
|
||||
address: fb_tag.address() as usize,
|
||||
@ -138,6 +139,7 @@ fn init_memory_regions(memory_regions: &'static Once<Vec<MemoryRegion>>) {
|
||||
MemoryRegionType::Framebuffer,
|
||||
));
|
||||
}
|
||||
|
||||
// Add the kernel region since Grub does not specify it.
|
||||
// These are physical addresses provided by the linker script.
|
||||
extern "C" {
|
||||
@ -149,12 +151,13 @@ fn init_memory_regions(memory_regions: &'static Once<Vec<MemoryRegion>>) {
|
||||
__kernel_end as usize - __kernel_start as usize,
|
||||
MemoryRegionType::Kernel,
|
||||
));
|
||||
|
||||
// Add the boot module region since Grub does not specify it.
|
||||
let mb2_module_tag = MB2_INFO.get().unwrap().module_tags();
|
||||
for m in mb2_module_tag {
|
||||
let mb2_module_tag = mb2_info.module_tags();
|
||||
for module in mb2_module_tag {
|
||||
regions.push(MemoryRegion::new(
|
||||
m.start_address() as usize,
|
||||
m.module_size() as usize,
|
||||
module.start_address() as usize,
|
||||
module.module_size() as usize,
|
||||
MemoryRegionType::Module,
|
||||
));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user