@@ -24,7 +24,7 @@ pub struct MemoryMapTag {
24
24
impl MemoryMapTag {
25
25
/// Return an iterator over all AVAILABLE marked memory areas.
26
26
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 ) )
28
28
}
29
29
30
30
/// Return an iterator over all marked memory areas.
@@ -46,8 +46,7 @@ impl MemoryMapTag {
46
46
pub struct MemoryArea {
47
47
base_addr : u64 ,
48
48
length : u64 ,
49
- // TODO see spec
50
- typ : u32 ,
49
+ typ : MemoryAreaType ,
51
50
_reserved : u32 ,
52
51
}
53
52
@@ -69,33 +68,32 @@ impl MemoryArea {
69
68
70
69
/// The type of the memory region.
71
70
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
79
72
}
80
73
}
81
74
82
75
/// 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 ) ]
84
80
pub enum MemoryAreaType {
85
- /// A reserved area that must not be used.
86
- Reserved ,
87
-
88
81
/// 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 ,
90
86
91
87
/// Usable memory holding ACPI information.
92
- AcpiAvailable ,
88
+ AcpiAvailable = 3 ,
93
89
94
90
/// 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 ,
96
94
97
95
/// Memory which is occupied by defective RAM modules.
98
- Defective ,
96
+ Defective = 5 ,
99
97
}
100
98
101
99
/// An iterator over all memory areas
0 commit comments