Skip to content

Commit eceb41a

Browse files
committed
uefi: use MemoryMapMeta in MemoryMap
1 parent c0d3db4 commit eceb41a

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
}
@@ -1806,27 +1807,20 @@ pub struct MemoryMap {
18061807
/// Backing memory, properly initialized at this point.
18071808
buf: MemoryMapBackingMemory,
18081809
key: MemoryMapKey,
1809-
/// Usually bound to the size of a [`MemoryDescriptor`] but can indicate if
1810-
/// this field is ever extended by a new UEFI standard.
1811-
desc_size: usize,
1810+
meta: MemoryMapMeta,
18121811
len: usize,
18131812
}
18141813

18151814
impl MemoryMap {
18161815
/// Creates a [`MemoryMap`] from the give initialized memory map behind
18171816
/// the buffer and the reported `desc_size` from UEFI.
18181817
pub(crate) fn from_initialized_mem(buf: MemoryMapBackingMemory, meta: MemoryMapMeta) -> Self {
1819-
let MemoryMapMeta {
1820-
map_size,
1821-
desc_size,
1822-
..
1823-
} = meta;
1824-
assert!(desc_size >= mem::size_of::<MemoryDescriptor>());
1825-
let len = map_size / desc_size;
1818+
assert!(meta.desc_size >= mem::size_of::<MemoryDescriptor>());
1819+
let len = meta.entry_count();
18261820
MemoryMap {
18271821
key: MemoryMapKey(0),
18281822
buf,
1829-
desc_size,
1823+
meta,
18301824
len,
18311825
}
18321826
}
@@ -1908,15 +1902,15 @@ impl MemoryMap {
19081902

19091903
unsafe {
19101904
ptr::swap_nonoverlapping(
1911-
base.add(index1 * self.desc_size),
1912-
base.add(index2 * self.desc_size),
1913-
self.desc_size,
1905+
base.add(index1 * self.meta.desc_size),
1906+
base.add(index2 * self.meta.desc_size),
1907+
self.meta.desc_size,
19141908
);
19151909
}
19161910
}
19171911

19181912
fn get_element_phys_addr(&self, index: usize) -> PhysicalAddress {
1919-
let offset = index.checked_mul(self.desc_size).unwrap();
1913+
let offset = index.checked_mul(self.meta.desc_size).unwrap();
19201914
let elem = unsafe { &*self.buf.as_ptr().add(offset).cast::<MemoryDescriptor>() };
19211915
elem.phys_start
19221916
}
@@ -1948,7 +1942,7 @@ impl MemoryMap {
19481942
&*self
19491943
.buf
19501944
.as_ptr()
1951-
.add(self.desc_size * index)
1945+
.add(self.meta.desc_size * index)
19521946
.cast::<MemoryDescriptor>()
19531947
};
19541948

@@ -1966,7 +1960,7 @@ impl MemoryMap {
19661960
&mut *self
19671961
.buf
19681962
.as_mut_ptr()
1969-
.add(self.desc_size * index)
1963+
.add(self.meta.desc_size * index)
19701964
.cast::<MemoryDescriptor>()
19711965
};
19721966

0 commit comments

Comments
 (0)