Skip to content

Commit fb92f56

Browse files
committed
Type improvement for MBI tag MemoryArea + bugfix
1 parent 4644bc3 commit fb92f56

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

src/memory_map.rs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub struct MemoryMapTag {
2424
impl MemoryMapTag {
2525
/// Return an iterator over all AVAILABLE marked memory areas.
2626
pub fn memory_areas(&self) -> impl Iterator<Item = &MemoryArea> {
27-
self.all_memory_areas().filter(|entry| entry.typ == 1)
27+
self.all_memory_areas().filter(|entry| matches!(entry.typ, MemoryAreaType::Available))
2828
}
2929

3030
/// Return an iterator over all marked memory areas.
@@ -46,8 +46,7 @@ impl MemoryMapTag {
4646
pub struct MemoryArea {
4747
base_addr: u64,
4848
length: u64,
49-
// TODO see spec
50-
typ: u32,
49+
typ: MemoryAreaType,
5150
_reserved: u32,
5251
}
5352

@@ -69,33 +68,32 @@ impl MemoryArea {
6968

7069
/// The type of the memory region.
7170
pub fn typ(&self) -> MemoryAreaType {
72-
match self.typ {
73-
1 => MemoryAreaType::Available,
74-
3 => MemoryAreaType::AcpiAvailable,
75-
4 => MemoryAreaType::ReservedHibernate,
76-
5 => MemoryAreaType::Defective,
77-
_ => MemoryAreaType::Reserved,
78-
}
71+
self.typ
7972
}
8073
}
8174

8275
/// An enum of possible reported region types.
83-
#[derive(Debug, PartialEq, Eq)]
76+
/// Inside the Multiboot2 spec this is kind of hidden
77+
/// inside the implementation of `struct multiboot_mmap_entry`.
78+
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
79+
#[repr(u32)]
8480
pub enum MemoryAreaType {
85-
/// A reserved area that must not be used.
86-
Reserved,
87-
8881
/// Available memory free to be used by the OS.
89-
Available,
82+
Available = 1,
83+
84+
/// A reserved area that must not be used.
85+
Reserved = 2,
9086

9187
/// Usable memory holding ACPI information.
92-
AcpiAvailable,
88+
AcpiAvailable = 3,
9389

9490
/// Reserved memory which needs to be preserved on hibernation.
95-
ReservedHibernate,
91+
/// Also called NVS in spec, which stands for "Non-Volatile Sleep/Storage",
92+
/// which is part of ACPI specification.
93+
ReservedHibernate = 4,
9694

9795
/// Memory which is occupied by defective RAM modules.
98-
Defective,
96+
Defective = 5,
9997
}
10098

10199
/// An iterator over all memory areas

0 commit comments

Comments
 (0)