Skip to content

Commit b333311

Browse files
committed
uefi: use MemoryMapMeta in MemoryMap
1 parent 9e427ce commit b333311

File tree

1 file changed

+13
-19
lines changed

1 file changed

+13
-19
lines changed

uefi/src/table/boot.rs

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -230,20 +230,21 @@ impl BootServices {
230230
pub fn memory_map(&self, mt: MemoryType) -> Result<MemoryMap> {
231231
let mut buffer = MemoryMapBackingMemory::new(mt)?;
232232

233+
let meta = self.get_memory_map(buffer.as_mut_slice())?;
233234
let MemoryMapMeta {
234235
map_size,
235236
map_key,
236237
desc_size,
237238
desc_version,
238-
} = self.get_memory_map(buffer.as_mut_slice())?;
239+
} = meta;
239240

240241
let len = map_size / desc_size;
241242
assert_eq!(map_size % desc_size, 0);
242243
assert_eq!(desc_version, MemoryDescriptor::VERSION);
243244
Ok(MemoryMap {
244245
key: map_key,
245246
buf: buffer,
246-
desc_size,
247+
meta,
247248
len,
248249
})
249250
}
@@ -1810,27 +1811,20 @@ pub struct MemoryMap {
18101811
/// Backing memory, properly initialized at this point.
18111812
buf: MemoryMapBackingMemory,
18121813
key: MemoryMapKey,
1813-
/// Usually bound to the size of a [`MemoryDescriptor`] but can indicate if
1814-
/// this field is ever extended by a new UEFI standard.
1815-
desc_size: usize,
1814+
meta: MemoryMapMeta,
18161815
len: usize,
18171816
}
18181817

18191818
impl MemoryMap {
18201819
/// Creates a [`MemoryMap`] from the give initialized memory map behind
18211820
/// the buffer and the reported `desc_size` from UEFI.
18221821
pub(crate) fn from_initialized_mem(buf: MemoryMapBackingMemory, meta: MemoryMapMeta) -> Self {
1823-
let MemoryMapMeta {
1824-
map_size,
1825-
desc_size,
1826-
..
1827-
} = meta;
1828-
assert!(desc_size >= mem::size_of::<MemoryDescriptor>());
1829-
let len = map_size / desc_size;
1822+
assert!(meta.desc_size >= mem::size_of::<MemoryDescriptor>());
1823+
let len = meta.entry_count();
18301824
MemoryMap {
18311825
key: MemoryMapKey(0),
18321826
buf,
1833-
desc_size,
1827+
meta,
18341828
len,
18351829
}
18361830
}
@@ -1912,15 +1906,15 @@ impl MemoryMap {
19121906

19131907
unsafe {
19141908
ptr::swap_nonoverlapping(
1915-
base.add(index1 * self.desc_size),
1916-
base.add(index2 * self.desc_size),
1917-
self.desc_size,
1909+
base.add(index1 * self.meta.desc_size),
1910+
base.add(index2 * self.meta.desc_size),
1911+
self.meta.desc_size,
19181912
);
19191913
}
19201914
}
19211915

19221916
fn get_element_phys_addr(&self, index: usize) -> PhysicalAddress {
1923-
let offset = index.checked_mul(self.desc_size).unwrap();
1917+
let offset = index.checked_mul(self.meta.desc_size).unwrap();
19241918
let elem = unsafe { &*self.buf.as_ptr().add(offset).cast::<MemoryDescriptor>() };
19251919
elem.phys_start
19261920
}
@@ -1952,7 +1946,7 @@ impl MemoryMap {
19521946
&*self
19531947
.buf
19541948
.as_ptr()
1955-
.add(self.desc_size * index)
1949+
.add(self.meta.desc_size * index)
19561950
.cast::<MemoryDescriptor>()
19571951
};
19581952

@@ -1970,7 +1964,7 @@ impl MemoryMap {
19701964
&mut *self
19711965
.buf
19721966
.as_mut_ptr()
1973-
.add(self.desc_size * index)
1967+
.add(self.meta.desc_size * index)
19741968
.cast::<MemoryDescriptor>()
19751969
};
19761970

0 commit comments

Comments
 (0)