@@ -230,20 +230,21 @@ impl BootServices {
230
230
pub fn memory_map ( & self , mt : MemoryType ) -> Result < MemoryMap > {
231
231
let mut buffer = MemoryMapBackingMemory :: new ( mt) ?;
232
232
233
+ let meta = self . get_memory_map ( buffer. as_mut_slice ( ) ) ?;
233
234
let MemoryMapMeta {
234
235
map_size,
235
236
map_key,
236
237
desc_size,
237
238
desc_version,
238
- } = self . get_memory_map ( buffer . as_mut_slice ( ) ) ? ;
239
+ } = meta ;
239
240
240
241
let len = map_size / desc_size;
241
242
assert_eq ! ( map_size % desc_size, 0 ) ;
242
243
assert_eq ! ( desc_version, MemoryDescriptor :: VERSION ) ;
243
244
Ok ( MemoryMap {
244
245
key : map_key,
245
246
buf : buffer,
246
- desc_size ,
247
+ meta ,
247
248
len,
248
249
} )
249
250
}
@@ -1806,27 +1807,20 @@ pub struct MemoryMap {
1806
1807
/// Backing memory, properly initialized at this point.
1807
1808
buf : MemoryMapBackingMemory ,
1808
1809
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 ,
1812
1811
len : usize ,
1813
1812
}
1814
1813
1815
1814
impl MemoryMap {
1816
1815
/// Creates a [`MemoryMap`] from the give initialized memory map behind
1817
1816
/// the buffer and the reported `desc_size` from UEFI.
1818
1817
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 ( ) ;
1826
1820
MemoryMap {
1827
1821
key : MemoryMapKey ( 0 ) ,
1828
1822
buf,
1829
- desc_size ,
1823
+ meta ,
1830
1824
len,
1831
1825
}
1832
1826
}
@@ -1908,15 +1902,15 @@ impl MemoryMap {
1908
1902
1909
1903
unsafe {
1910
1904
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 ,
1914
1908
) ;
1915
1909
}
1916
1910
}
1917
1911
1918
1912
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 ( ) ;
1920
1914
let elem = unsafe { & * self . buf . as_ptr ( ) . add ( offset) . cast :: < MemoryDescriptor > ( ) } ;
1921
1915
elem. phys_start
1922
1916
}
@@ -1948,7 +1942,7 @@ impl MemoryMap {
1948
1942
& * self
1949
1943
. buf
1950
1944
. as_ptr ( )
1951
- . add ( self . desc_size * index)
1945
+ . add ( self . meta . desc_size * index)
1952
1946
. cast :: < MemoryDescriptor > ( )
1953
1947
} ;
1954
1948
@@ -1966,7 +1960,7 @@ impl MemoryMap {
1966
1960
& mut * self
1967
1961
. buf
1968
1962
. as_mut_ptr ( )
1969
- . add ( self . desc_size * index)
1963
+ . add ( self . meta . desc_size * index)
1970
1964
. cast :: < MemoryDescriptor > ( )
1971
1965
} ;
1972
1966
0 commit comments