|
8 | 8 | #![no_std]
|
9 | 9 | #![no_main]
|
10 | 10 |
|
11 |
| -use bootloader::bootinfo::BootInfo; |
| 11 | +use bootloader::bootinfo::{BootInfo, FrameRange}; |
12 | 12 | use core::panic::PanicInfo;
|
13 | 13 | use core::{mem, slice};
|
14 | 14 | use fixedvec::alloc_stack;
|
15 | 15 | use usize_conversions::usize_from;
|
16 | 16 | use x86_64::structures::paging::{Mapper, RecursivePageTable};
|
17 |
| -use x86_64::structures::paging::{Page, PageTableFlags, PhysFrame, Size2MiB}; |
| 17 | +use x86_64::structures::paging::{Page, PageTableFlags, PhysFrame, PhysFrameRange, Size2MiB}; |
18 | 18 | use x86_64::ux::u9;
|
19 | 19 | use x86_64::{PhysAddr, VirtAddr};
|
20 | 20 |
|
@@ -157,31 +157,31 @@ fn load_elf(
|
157 | 157 | {
|
158 | 158 | let zero_frame: PhysFrame = PhysFrame::from_start_address(PhysAddr::new(0)).unwrap();
|
159 | 159 | frame_allocator.mark_allocated_region(MemoryRegion {
|
160 |
| - range: PhysFrame::range(zero_frame, zero_frame + 1).into(), |
| 160 | + range: frame_range(PhysFrame::range(zero_frame, zero_frame + 1)), |
161 | 161 | region_type: MemoryRegionType::FrameZero,
|
162 | 162 | });
|
163 | 163 | let bootloader_start_frame = PhysFrame::containing_address(bootloader_start);
|
164 | 164 | let bootloader_end_frame = PhysFrame::containing_address(bootloader_end - 1u64);
|
165 | 165 | let bootloader_memory_area =
|
166 | 166 | PhysFrame::range(bootloader_start_frame, bootloader_end_frame + 1);
|
167 | 167 | frame_allocator.mark_allocated_region(MemoryRegion {
|
168 |
| - range: bootloader_memory_area.into(), |
| 168 | + range: frame_range(bootloader_memory_area), |
169 | 169 | region_type: MemoryRegionType::Bootloader,
|
170 | 170 | });
|
171 | 171 | let kernel_start_frame = PhysFrame::containing_address(kernel_start.phys());
|
172 | 172 | let kernel_end_frame =
|
173 | 173 | PhysFrame::containing_address(kernel_start.phys() + kernel_size - 1u64);
|
174 | 174 | let kernel_memory_area = PhysFrame::range(kernel_start_frame, kernel_end_frame + 1);
|
175 | 175 | frame_allocator.mark_allocated_region(MemoryRegion {
|
176 |
| - range: kernel_memory_area.into(), |
| 176 | + range: frame_range(kernel_memory_area), |
177 | 177 | region_type: MemoryRegionType::Kernel,
|
178 | 178 | });
|
179 | 179 | let page_table_start_frame = PhysFrame::containing_address(page_table_start);
|
180 | 180 | let page_table_end_frame = PhysFrame::containing_address(page_table_end - 1u64);
|
181 | 181 | let page_table_memory_area =
|
182 | 182 | PhysFrame::range(page_table_start_frame, page_table_end_frame + 1);
|
183 | 183 | frame_allocator.mark_allocated_region(MemoryRegion {
|
184 |
| - range: page_table_memory_area.into(), |
| 184 | + range: frame_range(page_table_memory_area), |
185 | 185 | region_type: MemoryRegionType::PageTable,
|
186 | 186 | });
|
187 | 187 | }
|
@@ -282,3 +282,17 @@ pub extern "C" fn eh_personality() {
|
282 | 282 | pub extern "C" fn _Unwind_Resume() {
|
283 | 283 | loop {}
|
284 | 284 | }
|
| 285 | + |
| 286 | +fn phys_frame_range(range: FrameRange) -> PhysFrameRange { |
| 287 | + PhysFrameRange { |
| 288 | + start: PhysFrame::from_start_address(PhysAddr::new(range.start_addr())).unwrap(), |
| 289 | + end: PhysFrame::from_start_address(PhysAddr::new(range.end_addr())).unwrap(), |
| 290 | + } |
| 291 | +} |
| 292 | + |
| 293 | +fn frame_range(range: PhysFrameRange) -> FrameRange { |
| 294 | + FrameRange::new( |
| 295 | + range.start.start_address().as_u64(), |
| 296 | + range.end.start_address().as_u64(), |
| 297 | + ) |
| 298 | +} |
0 commit comments