@@ -18,6 +18,16 @@ pub struct UsedMemorySlice {
18
18
pub end : u64 ,
19
19
}
20
20
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
+
21
31
/// Abstraction trait for a memory region returned by the UEFI or BIOS firmware.
22
32
pub trait LegacyMemoryRegion : Copy + core:: fmt:: Debug {
23
33
/// Returns the physical start address of the region.
@@ -208,22 +218,18 @@ where
208
218
ramdisk_slice_len : u64 ,
209
219
used_slices : S ,
210
220
) -> impl Iterator < Item = UsedMemorySlice > + Clone {
211
- BootloaderUsedMemorySliceIter {
212
- bootloader : UsedMemorySlice {
221
+ [
222
+ UsedMemorySlice {
213
223
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 ( ) ,
216
225
} ,
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
+ )
227
233
. chain ( used_slices)
228
234
}
229
235
@@ -368,41 +374,3 @@ where
368
374
None
369
375
}
370
376
}
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