Skip to content

Commit 3326e7a

Browse files
committed
Remove BootloaderUsedMemorySliceIter
1 parent f3d383e commit 3326e7a

File tree

2 files changed

+21
-56
lines changed

2 files changed

+21
-56
lines changed

bios/stage-4/src/main.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,7 @@ fn used_memory_slices(info: &BiosInfo) -> impl Iterator<Item = UsedMemorySlice>
223223
// uefi/bios common code
224224
[info.stage_3, info.stage_4, info.config_file]
225225
.into_iter()
226-
.map(|region| UsedMemorySlice {
227-
start: region.start,
228-
end: region.start + region.len,
229-
})
226+
.map(|region| UsedMemorySlice::new_from_len(region.start, region.len))
230227
}
231228

232229
/// Creates page table abstraction types for both the bootloader and kernel page tables.

common/src/legacy_memory_region.rs

Lines changed: 20 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ pub struct UsedMemorySlice {
1818
pub end: u64,
1919
}
2020

21+
impl UsedMemorySlice {
22+
/// Creates a new slice
23+
pub fn new_from_len(start: u64, len: u64) -> Self {
24+
Self {
25+
start,
26+
end: start + len,
27+
}
28+
}
29+
}
30+
2131
/// Abstraction trait for a memory region returned by the UEFI or BIOS firmware.
2232
pub trait LegacyMemoryRegion: Copy + core::fmt::Debug {
2333
/// Returns the physical start address of the region.
@@ -208,22 +218,18 @@ where
208218
ramdisk_slice_len: u64,
209219
used_slices: S,
210220
) -> impl Iterator<Item = UsedMemorySlice> + Clone {
211-
BootloaderUsedMemorySliceIter {
212-
bootloader: UsedMemorySlice {
221+
[
222+
UsedMemorySlice {
213223
start: min_frame.start_address().as_u64(),
214-
// TODO: unit test that this is not an off by 1
215-
end: next_free.start_address() - min_frame.start_address(),
224+
end: next_free.start_address().as_u64(),
216225
},
217-
kernel: UsedMemorySlice {
218-
start: kernel_slice_start.as_u64(),
219-
end: kernel_slice_len,
220-
},
221-
ramdisk: ramdisk_slice_start.map(|start| UsedMemorySlice {
222-
start: start.as_u64(),
223-
end: ramdisk_slice_len,
224-
}),
225-
state: KernelRamIterState::Bootloader,
226-
}
226+
UsedMemorySlice::new_from_len(kernel_slice_start.as_u64(), kernel_slice_len),
227+
]
228+
.into_iter()
229+
.chain(
230+
ramdisk_slice_start
231+
.map(|start| UsedMemorySlice::new_from_len(start.as_u64(), ramdisk_slice_len)),
232+
)
227233
.chain(used_slices)
228234
}
229235

@@ -368,41 +374,3 @@ where
368374
None
369375
}
370376
}
371-
372-
#[derive(Clone)]
373-
struct BootloaderUsedMemorySliceIter {
374-
bootloader: UsedMemorySlice,
375-
kernel: UsedMemorySlice,
376-
ramdisk: Option<UsedMemorySlice>,
377-
state: KernelRamIterState,
378-
}
379-
380-
#[derive(Clone)]
381-
enum KernelRamIterState {
382-
Bootloader,
383-
Kernel,
384-
Ramdisk,
385-
Done,
386-
}
387-
388-
impl Iterator for BootloaderUsedMemorySliceIter {
389-
type Item = UsedMemorySlice;
390-
391-
fn next(&mut self) -> Option<Self::Item> {
392-
match self.state {
393-
KernelRamIterState::Bootloader => {
394-
self.state = KernelRamIterState::Kernel;
395-
Some(self.bootloader)
396-
}
397-
KernelRamIterState::Kernel => {
398-
self.state = KernelRamIterState::Ramdisk;
399-
Some(self.kernel)
400-
}
401-
KernelRamIterState::Ramdisk => {
402-
self.state = KernelRamIterState::Done;
403-
self.ramdisk
404-
}
405-
KernelRamIterState::Done => None,
406-
}
407-
}
408-
}

0 commit comments

Comments
 (0)