Skip to content

Commit ade1ddd

Browse files
authored
Merge pull request #150 from rust-osdev/dev2
multiboot2: memory-map: derive Eq + [email protected]
2 parents d48ba09 + c9d92b6 commit ade1ddd

File tree

8 files changed

+53
-48
lines changed

8 files changed

+53
-48
lines changed

Cargo.lock

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

multiboot2/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,5 @@ bitflags.workspace = true
4545
derive_more.workspace = true
4646
log.workspace = true
4747

48-
uefi-raw = { version = "0.2.0", default-features = false }
49-
ptr_meta = { version = "0.2.0", default-features = false }
48+
uefi-raw = { version = "0.3", default-features = false }
49+
ptr_meta = { version = "0.2", default-features = false }

multiboot2/Changelog.md

+6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@
1616
- MSRV is 1.68.0
1717
- **BREAKING** Removed `MemoryAreaIter` and `MemoryMapTag::available_memory_areas`
1818
- Added `MemoryMapTag::entry_size` and `MemoryMapTag::entry_version`
19+
- **BREAKING** Renamed `BootInformation::load_base_addr` to `BootInformation::load_base_addr_tag`
20+
- **BREAKING** Renamed `BootInformation::efi_32_ih` to `BootInformation::efi_32_ih_tag`
21+
- **BREAKING** Renamed `BootInformation::efi_32_ih` to `BootInformation::efi_32_ih_tag`
22+
- **BREAKING** Renamed `ImageLoadPhysAddr` to `ImageLoadPhysAddrTag`
23+
- **BREAKING** Renamed `EFIImageHandle32` to `EFIImageHandle32Tag`
24+
- **BREAKING** Renamed `EFIImageHandle64` to `EFIImageHandle64Tag`
1925

2026
## 0.15.1 (2023-03-18)
2127
- **BREAKING** `MemoryMapTag::all_memory_areas()` was renamed to `memory_areas`

multiboot2/src/builder/information.rs

+10-11
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
use crate::builder::traits::StructAsBytes;
33
use crate::{
44
BasicMemoryInfoTag, BootInformationInner, BootLoaderNameTag, CommandLineTag,
5-
EFIBootServicesNotExited, EFIImageHandle32, EFIImageHandle64, EFIMemoryMapTag, EFISdt32,
6-
EFISdt64, ElfSectionsTag, EndTag, FramebufferTag, ImageLoadPhysAddr, MemoryMapTag, ModuleTag,
7-
RsdpV1Tag, RsdpV2Tag, SmbiosTag,
5+
EFIBootServicesNotExited, EFIImageHandle32Tag, EFIImageHandle64Tag, EFIMemoryMapTag, EFISdt32,
6+
EFISdt64, ElfSectionsTag, EndTag, FramebufferTag, ImageLoadPhysAddrTag, MemoryMapTag,
7+
ModuleTag, RsdpV1Tag, RsdpV2Tag, SmbiosTag,
88
};
99

1010
use alloc::boxed::Box;
@@ -14,19 +14,18 @@ use core::mem::size_of;
1414
/// Builder to construct a valid Multiboot2 information dynamically at runtime.
1515
/// The tags will appear in the order of their corresponding enumeration,
1616
/// except for the END tag.
17-
#[derive(Debug)]
18-
// #[derive(Debug, PartialEq, Eq)] // wait for uefi-raw 0.3.0
17+
#[derive(Debug, PartialEq, Eq)]
1918
pub struct InformationBuilder {
2019
basic_memory_info_tag: Option<BasicMemoryInfoTag>,
2120
boot_loader_name_tag: Option<Box<BootLoaderNameTag>>,
2221
command_line_tag: Option<Box<CommandLineTag>>,
2322
efi_boot_services_not_exited: Option<EFIBootServicesNotExited>,
24-
efi_image_handle32: Option<EFIImageHandle32>,
25-
efi_image_handle64: Option<EFIImageHandle64>,
23+
efi_image_handle32: Option<EFIImageHandle32Tag>,
24+
efi_image_handle64: Option<EFIImageHandle64Tag>,
2625
efi_memory_map_tag: Option<Box<EFIMemoryMapTag>>,
2726
elf_sections_tag: Option<Box<ElfSectionsTag>>,
2827
framebuffer_tag: Option<Box<FramebufferTag>>,
29-
image_load_addr: Option<ImageLoadPhysAddr>,
28+
image_load_addr: Option<ImageLoadPhysAddrTag>,
3029
memory_map_tag: Option<Box<MemoryMapTag>>,
3130
module_tags: Vec<Box<ModuleTag>>,
3231
efisdt32: Option<EFISdt32>,
@@ -242,11 +241,11 @@ impl InformationBuilder {
242241
self.efi_boot_services_not_exited = Some(EFIBootServicesNotExited::new());
243242
}
244243

245-
pub fn efi_image_handle32(&mut self, efi_image_handle32: EFIImageHandle32) {
244+
pub fn efi_image_handle32(&mut self, efi_image_handle32: EFIImageHandle32Tag) {
246245
self.efi_image_handle32 = Some(efi_image_handle32);
247246
}
248247

249-
pub fn efi_image_handle64(&mut self, efi_image_handle64: EFIImageHandle64) {
248+
pub fn efi_image_handle64(&mut self, efi_image_handle64: EFIImageHandle64Tag) {
250249
self.efi_image_handle64 = Some(efi_image_handle64);
251250
}
252251

@@ -262,7 +261,7 @@ impl InformationBuilder {
262261
self.framebuffer_tag = Some(framebuffer_tag);
263262
}
264263

265-
pub fn image_load_addr(&mut self, image_load_addr: ImageLoadPhysAddr) {
264+
pub fn image_load_addr(&mut self, image_load_addr: ImageLoadPhysAddrTag) {
266265
self.image_load_addr = Some(image_load_addr);
267266
}
268267

multiboot2/src/efi.rs

+13-11
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,17 @@ impl StructAsBytes for EFISdt64 {
7272
}
7373
}
7474

75-
/// Contains pointer to boot loader image handle.
75+
/// Tag that contains the pointer to the boot loader's UEFI image handle
76+
/// (32-bit).
7677
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
7778
#[repr(C)]
78-
pub struct EFIImageHandle32 {
79+
pub struct EFIImageHandle32Tag {
7980
typ: TagTypeId,
8081
size: u32,
8182
pointer: u32,
8283
}
8384

84-
impl EFIImageHandle32 {
85+
impl EFIImageHandle32Tag {
8586
#[cfg(feature = "builder")]
8687
pub fn new(pointer: u32) -> Self {
8788
Self {
@@ -98,22 +99,23 @@ impl EFIImageHandle32 {
9899
}
99100

100101
#[cfg(feature = "builder")]
101-
impl StructAsBytes for EFIImageHandle32 {
102+
impl StructAsBytes for EFIImageHandle32Tag {
102103
fn byte_size(&self) -> usize {
103104
size_of::<Self>()
104105
}
105106
}
106107

107-
/// Contains pointer to boot loader image handle.
108+
/// Tag that contains the pointer to the boot loader's UEFI image handle
109+
/// (64-bit).
108110
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
109111
#[repr(C)]
110-
pub struct EFIImageHandle64 {
112+
pub struct EFIImageHandle64Tag {
111113
typ: TagTypeId,
112114
size: u32,
113115
pointer: u64,
114116
}
115117

116-
impl EFIImageHandle64 {
118+
impl EFIImageHandle64Tag {
117119
#[cfg(feature = "builder")]
118120
pub fn new(pointer: u64) -> Self {
119121
Self {
@@ -130,15 +132,15 @@ impl EFIImageHandle64 {
130132
}
131133

132134
#[cfg(feature = "builder")]
133-
impl StructAsBytes for EFIImageHandle64 {
135+
impl StructAsBytes for EFIImageHandle64Tag {
134136
fn byte_size(&self) -> usize {
135137
size_of::<Self>()
136138
}
137139
}
138140

139141
#[cfg(all(test, feature = "builder"))]
140142
mod tests {
141-
use super::{EFIImageHandle32, EFIImageHandle64, EFISdt32, EFISdt64};
143+
use super::{EFIImageHandle32Tag, EFIImageHandle64Tag, EFISdt32, EFISdt64};
142144

143145
const ADDR: usize = 0xABCDEF;
144146

@@ -156,13 +158,13 @@ mod tests {
156158

157159
#[test]
158160
fn test_build_eftih32() {
159-
let tag = EFIImageHandle32::new(ADDR.try_into().unwrap());
161+
let tag = EFIImageHandle32Tag::new(ADDR.try_into().unwrap());
160162
assert_eq!(tag.image_handle(), ADDR);
161163
}
162164

163165
#[test]
164166
fn test_build_eftih64() {
165-
let tag = EFIImageHandle64::new(ADDR.try_into().unwrap());
167+
let tag = EFIImageHandle64Tag::new(ADDR.try_into().unwrap());
166168
assert_eq!(tag.image_handle(), ADDR);
167169
}
168170
}

multiboot2/src/image_load_addr.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ use {
99
/// base physical address.
1010
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
1111
#[repr(C)]
12-
pub struct ImageLoadPhysAddr {
12+
pub struct ImageLoadPhysAddrTag {
1313
typ: TagTypeId,
1414
size: u32,
1515
load_base_addr: u32,
1616
}
1717

18-
impl ImageLoadPhysAddr {
18+
impl ImageLoadPhysAddrTag {
1919
#[cfg(feature = "builder")]
2020
pub fn new(load_base_addr: u32) -> Self {
2121
Self {
@@ -32,21 +32,21 @@ impl ImageLoadPhysAddr {
3232
}
3333

3434
#[cfg(feature = "builder")]
35-
impl StructAsBytes for ImageLoadPhysAddr {
35+
impl StructAsBytes for ImageLoadPhysAddrTag {
3636
fn byte_size(&self) -> usize {
3737
size_of::<Self>()
3838
}
3939
}
4040

4141
#[cfg(all(test, feature = "builder"))]
4242
mod tests {
43-
use super::ImageLoadPhysAddr;
43+
use super::ImageLoadPhysAddrTag;
4444

4545
const ADDR: u32 = 0xABCDEF;
4646

4747
#[test]
4848
fn test_build_load_addr() {
49-
let tag = ImageLoadPhysAddr::new(ADDR);
49+
let tag = ImageLoadPhysAddrTag::new(ADDR);
5050
assert_eq!(tag.load_base_addr(), ADDR);
5151
}
5252
}

multiboot2/src/lib.rs

+14-14
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,12 @@ pub use boot_loader_name::BootLoaderNameTag;
5050
#[cfg(feature = "builder")]
5151
use builder::traits::StructAsBytes;
5252
pub use command_line::CommandLineTag;
53-
pub use efi::{EFIImageHandle32, EFIImageHandle64, EFISdt32, EFISdt64};
53+
pub use efi::{EFIImageHandle32Tag, EFIImageHandle64Tag, EFISdt32, EFISdt64};
5454
pub use elf_sections::{
5555
ElfSection, ElfSectionFlags, ElfSectionIter, ElfSectionType, ElfSectionsTag,
5656
};
5757
pub use framebuffer::{FramebufferColor, FramebufferField, FramebufferTag, FramebufferType};
58-
pub use image_load_addr::ImageLoadPhysAddr;
58+
pub use image_load_addr::ImageLoadPhysAddrTag;
5959
pub use memory_map::{
6060
BasicMemoryInfoTag, EFIBootServicesNotExited, EFIMemoryAreaType, EFIMemoryDesc,
6161
EFIMemoryMapTag, MemoryArea, MemoryAreaType, MemoryMapTag,
@@ -335,19 +335,19 @@ impl BootInformation {
335335
}
336336
}
337337

338-
/// Search for the EFI 32-bit image handle pointer.
339-
pub fn efi_32_ih(&self) -> Option<&EFIImageHandle32> {
340-
self.get_tag::<EFIImageHandle32, _>(TagType::Efi32Ih)
338+
/// Search for the EFI 32-bit image handle pointer tag.
339+
pub fn efi_32_ih_tag(&self) -> Option<&EFIImageHandle32Tag> {
340+
self.get_tag::<EFIImageHandle32Tag, _>(TagType::Efi32Ih)
341341
}
342342

343-
/// Search for the EFI 64-bit image handle pointer.
344-
pub fn efi_64_ih(&self) -> Option<&EFIImageHandle64> {
345-
self.get_tag::<EFIImageHandle64, _>(TagType::Efi64Ih)
343+
/// Search for the EFI 64-bit image handle pointer tag.
344+
pub fn efi_64_ih_tag(&self) -> Option<&EFIImageHandle64Tag> {
345+
self.get_tag::<EFIImageHandle64Tag, _>(TagType::Efi64Ih)
346346
}
347347

348-
/// Search for the Image Load Base Physical Address.
349-
pub fn load_base_addr(&self) -> Option<&ImageLoadPhysAddr> {
350-
self.get_tag::<ImageLoadPhysAddr, _>(TagType::LoadBaseAddr)
348+
/// Search for the Image Load Base Physical Address tag.
349+
pub fn load_base_addr_tag(&self) -> Option<&ImageLoadPhysAddrTag> {
350+
self.get_tag::<ImageLoadPhysAddrTag, _>(TagType::LoadBaseAddr)
351351
}
352352

353353
/// Search for the VBE information tag.
@@ -374,7 +374,7 @@ impl BootInformation {
374374
/// However, it doesn't forbid to use custom tags. Because of this, there
375375
/// exists the [`TagType`] abstraction. It is recommended to use this
376376
/// getter only for custom tags. For specified tags, use getters, such as
377-
/// [`Self::efi_64_ih`].
377+
/// [`Self::efi_64_ih_tag`].
378378
///
379379
/// ## Use Custom Tags
380380
/// The following example shows how you may use this interface to parse
@@ -493,8 +493,8 @@ impl fmt::Debug for BootInformation {
493493
}
494494

495495
debug
496-
.field("efi_32_ih", &self.efi_32_ih())
497-
.field("efi_64_ih", &self.efi_64_ih())
496+
.field("efi_32_ih", &self.efi_32_ih_tag())
497+
.field("efi_64_ih", &self.efi_64_ih_tag())
498498
.field("efi_sdt_32_tag", &self.efi_sdt_32_tag())
499499
.field("efi_sdt_64_tag", &self.efi_sdt_64_tag())
500500
.field("efi_memory_map_tag", &self.efi_memory_map_tag())

multiboot2/src/memory_map.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,7 @@ impl StructAsBytes for BasicMemoryInfoTag {
205205
const EFI_METADATA_SIZE: usize = mem::size_of::<TagTypeId>() + 3 * mem::size_of::<u32>();
206206

207207
/// EFI memory map as per EFI specification.
208-
#[derive(ptr_meta::Pointee)]
209-
// #[derive(Debug, PartialEq, Eq)] // wait for uefi-raw 0.3.0
210-
#[derive(Debug)]
208+
#[derive(ptr_meta::Pointee, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
211209
#[repr(C)]
212210
pub struct EFIMemoryMapTag {
213211
typ: TagTypeId,

0 commit comments

Comments
 (0)