11use core:: marker:: PhantomData ;
2+ use crate :: TagType ;
23
34/// This Tag provides an initial host memory map.
45///
@@ -13,7 +14,7 @@ use core::marker::PhantomData;
1314#[ derive( Debug ) ]
1415#[ repr( C ) ]
1516pub struct MemoryMapTag {
16- typ : u32 ,
17+ typ : TagType ,
1718 size : u32 ,
1819 entry_size : u32 ,
1920 entry_version : u32 ,
@@ -23,7 +24,7 @@ pub struct MemoryMapTag {
2324impl MemoryMapTag {
2425 /// Return an iterator over all AVAILABLE marked memory areas.
2526 pub fn memory_areas ( & self ) -> impl Iterator < Item = & MemoryArea > {
26- self . all_memory_areas ( ) . filter ( |entry| entry. typ == 1 )
27+ self . all_memory_areas ( ) . filter ( |entry| matches ! ( entry. typ, MemoryAreaType :: Available ) )
2728 }
2829
2930 /// Return an iterator over all marked memory areas.
@@ -45,7 +46,7 @@ impl MemoryMapTag {
4546pub struct MemoryArea {
4647 base_addr : u64 ,
4748 length : u64 ,
48- typ : u32 ,
49+ typ : MemoryAreaType ,
4950 _reserved : u32 ,
5051}
5152
@@ -67,33 +68,32 @@ impl MemoryArea {
6768
6869 /// The type of the memory region.
6970 pub fn typ ( & self ) -> MemoryAreaType {
70- match self . typ {
71- 1 => MemoryAreaType :: Available ,
72- 3 => MemoryAreaType :: AcpiAvailable ,
73- 4 => MemoryAreaType :: ReservedHibernate ,
74- 5 => MemoryAreaType :: Defective ,
75- _ => MemoryAreaType :: Reserved ,
76- }
71+ self . typ
7772 }
7873}
7974
8075/// An enum of possible reported region types.
81- #[ 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 ) ]
8280pub enum MemoryAreaType {
83- /// A reserved area that must not be used.
84- Reserved ,
85-
8681 /// Available memory free to be used by the OS.
87- Available ,
82+ Available = 1 ,
83+
84+ /// A reserved area that must not be used.
85+ Reserved = 2 ,
8886
8987 /// Usable memory holding ACPI information.
90- AcpiAvailable ,
88+ AcpiAvailable = 3 ,
9189
9290 /// Reserved memory which needs to be preserved on hibernation.
93- ReservedHibernate ,
91+ /// Also called NVS in spec, which stands for "Non-Volatile Sleep/Storage",
92+ /// which is part of ACPI specification.
93+ ReservedHibernate = 4 ,
9494
9595 /// Memory which is occupied by defective RAM modules.
96- Defective ,
96+ Defective = 5 ,
9797}
9898
9999/// An iterator over all memory areas
@@ -122,7 +122,7 @@ impl<'a> Iterator for MemoryAreaIter<'a> {
122122#[ derive( Debug ) ]
123123#[ repr( C ) ]
124124pub struct EFIMemoryMapTag {
125- typ : u32 ,
125+ typ : TagType ,
126126 size : u32 ,
127127 desc_size : u32 ,
128128 desc_version : u32 ,
0 commit comments