@@ -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
}
@@ -1810,27 +1811,20 @@ pub struct MemoryMap {
1810
1811
/// Backing memory, properly initialized at this point.
1811
1812
buf : MemoryMapBackingMemory ,
1812
1813
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 ,
1816
1815
len : usize ,
1817
1816
}
1818
1817
1819
1818
impl MemoryMap {
1820
1819
/// Creates a [`MemoryMap`] from the give initialized memory map behind
1821
1820
/// the buffer and the reported `desc_size` from UEFI.
1822
1821
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 ( ) ;
1830
1824
MemoryMap {
1831
1825
key : MemoryMapKey ( 0 ) ,
1832
1826
buf,
1833
- desc_size ,
1827
+ meta ,
1834
1828
len,
1835
1829
}
1836
1830
}
@@ -1912,15 +1906,15 @@ impl MemoryMap {
1912
1906
1913
1907
unsafe {
1914
1908
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 ,
1918
1912
) ;
1919
1913
}
1920
1914
}
1921
1915
1922
1916
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 ( ) ;
1924
1918
let elem = unsafe { & * self . buf . as_ptr ( ) . add ( offset) . cast :: < MemoryDescriptor > ( ) } ;
1925
1919
elem. phys_start
1926
1920
}
@@ -1952,7 +1946,7 @@ impl MemoryMap {
1952
1946
& * self
1953
1947
. buf
1954
1948
. as_ptr ( )
1955
- . add ( self . desc_size * index)
1949
+ . add ( self . meta . desc_size * index)
1956
1950
. cast :: < MemoryDescriptor > ( )
1957
1951
} ;
1958
1952
@@ -1970,7 +1964,7 @@ impl MemoryMap {
1970
1964
& mut * self
1971
1965
. buf
1972
1966
. as_mut_ptr ( )
1973
- . add ( self . desc_size * index)
1967
+ . add ( self . meta . desc_size * index)
1974
1968
. cast :: < MemoryDescriptor > ( )
1975
1969
} ;
1976
1970
0 commit comments