@@ -234,20 +234,21 @@ impl BootServices {
234234 pub fn memory_map ( & self , mt : MemoryType ) -> Result < MemoryMap > {
235235 let mut buffer = MemoryMapBackingMemory :: new ( mt) ?;
236236
237+ let meta = self . get_memory_map ( buffer. as_mut_slice ( ) ) ?;
237238 let MemoryMapMeta {
238239 map_size,
239240 map_key,
240241 desc_size,
241242 desc_version,
242- } = self . get_memory_map ( buffer . as_mut_slice ( ) ) ? ;
243+ } = meta ;
243244
244245 let len = map_size / desc_size;
245246 assert_eq ! ( map_size % desc_size, 0 ) ;
246247 assert_eq ! ( desc_version, MemoryDescriptor :: VERSION ) ;
247248 Ok ( MemoryMap {
248249 key : map_key,
249250 buf : buffer,
250- desc_size ,
251+ meta ,
251252 len,
252253 } )
253254 }
@@ -1812,27 +1813,20 @@ pub struct MemoryMap {
18121813 /// Backing memory, properly initialized at this point.
18131814 buf : MemoryMapBackingMemory ,
18141815 key : MemoryMapKey ,
1815- /// Usually bound to the size of a [`MemoryDescriptor`] but can indicate if
1816- /// this field is ever extended by a new UEFI standard.
1817- desc_size : usize ,
1816+ meta : MemoryMapMeta ,
18181817 len : usize ,
18191818}
18201819
18211820impl MemoryMap {
18221821 /// Creates a [`MemoryMap`] from the give initialized memory map behind
18231822 /// the buffer and the reported `desc_size` from UEFI.
18241823 pub ( crate ) fn from_initialized_mem ( buf : MemoryMapBackingMemory , meta : MemoryMapMeta ) -> Self {
1825- let MemoryMapMeta {
1826- map_size,
1827- desc_size,
1828- ..
1829- } = meta;
1830- assert ! ( desc_size >= mem:: size_of:: <MemoryDescriptor >( ) ) ;
1831- let len = map_size / desc_size;
1824+ assert ! ( meta. desc_size >= mem:: size_of:: <MemoryDescriptor >( ) ) ;
1825+ let len = meta. entry_count ( ) ;
18321826 MemoryMap {
18331827 key : MemoryMapKey ( 0 ) ,
18341828 buf,
1835- desc_size ,
1829+ meta ,
18361830 len,
18371831 }
18381832 }
@@ -1914,15 +1908,15 @@ impl MemoryMap {
19141908
19151909 unsafe {
19161910 ptr:: swap_nonoverlapping (
1917- base. add ( index1 * self . desc_size ) ,
1918- base. add ( index2 * self . desc_size ) ,
1919- self . desc_size ,
1911+ base. add ( index1 * self . meta . desc_size ) ,
1912+ base. add ( index2 * self . meta . desc_size ) ,
1913+ self . meta . desc_size ,
19201914 ) ;
19211915 }
19221916 }
19231917
19241918 fn get_element_phys_addr ( & self , index : usize ) -> PhysicalAddress {
1925- let offset = index. checked_mul ( self . desc_size ) . unwrap ( ) ;
1919+ let offset = index. checked_mul ( self . meta . desc_size ) . unwrap ( ) ;
19261920 let elem = unsafe { & * self . buf . as_ptr ( ) . add ( offset) . cast :: < MemoryDescriptor > ( ) } ;
19271921 elem. phys_start
19281922 }
@@ -1954,7 +1948,7 @@ impl MemoryMap {
19541948 & * self
19551949 . buf
19561950 . as_ptr ( )
1957- . add ( self . desc_size * index)
1951+ . add ( self . meta . desc_size * index)
19581952 . cast :: < MemoryDescriptor > ( )
19591953 } ;
19601954
@@ -1972,7 +1966,7 @@ impl MemoryMap {
19721966 & mut * self
19731967 . buf
19741968 . as_mut_ptr ( )
1975- . add ( self . desc_size * index)
1969+ . add ( self . meta . desc_size * index)
19761970 . cast :: < MemoryDescriptor > ( )
19771971 } ;
19781972
0 commit comments