@@ -234,20 +234,21 @@ impl BootServices {
234
234
pub fn memory_map ( & self , mt : MemoryType ) -> Result < MemoryMap > {
235
235
let mut buffer = MemoryMapBackingMemory :: new ( mt) ?;
236
236
237
+ let meta = self . get_memory_map ( buffer. as_mut_slice ( ) ) ?;
237
238
let MemoryMapMeta {
238
239
map_size,
239
240
map_key,
240
241
desc_size,
241
242
desc_version,
242
- } = self . get_memory_map ( buffer . as_mut_slice ( ) ) ? ;
243
+ } = meta ;
243
244
244
245
let len = map_size / desc_size;
245
246
assert_eq ! ( map_size % desc_size, 0 ) ;
246
247
assert_eq ! ( desc_version, MemoryDescriptor :: VERSION ) ;
247
248
Ok ( MemoryMap {
248
249
key : map_key,
249
250
buf : buffer,
250
- desc_size ,
251
+ meta ,
251
252
len,
252
253
} )
253
254
}
@@ -1812,27 +1813,20 @@ pub struct MemoryMap {
1812
1813
/// Backing memory, properly initialized at this point.
1813
1814
buf : MemoryMapBackingMemory ,
1814
1815
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 ,
1818
1817
len : usize ,
1819
1818
}
1820
1819
1821
1820
impl MemoryMap {
1822
1821
/// Creates a [`MemoryMap`] from the give initialized memory map behind
1823
1822
/// the buffer and the reported `desc_size` from UEFI.
1824
1823
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 ( ) ;
1832
1826
MemoryMap {
1833
1827
key : MemoryMapKey ( 0 ) ,
1834
1828
buf,
1835
- desc_size ,
1829
+ meta ,
1836
1830
len,
1837
1831
}
1838
1832
}
@@ -1914,15 +1908,15 @@ impl MemoryMap {
1914
1908
1915
1909
unsafe {
1916
1910
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 ,
1920
1914
) ;
1921
1915
}
1922
1916
}
1923
1917
1924
1918
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 ( ) ;
1926
1920
let elem = unsafe { & * self . buf . as_ptr ( ) . add ( offset) . cast :: < MemoryDescriptor > ( ) } ;
1927
1921
elem. phys_start
1928
1922
}
@@ -1954,7 +1948,7 @@ impl MemoryMap {
1954
1948
& * self
1955
1949
. buf
1956
1950
. as_ptr ( )
1957
- . add ( self . desc_size * index)
1951
+ . add ( self . meta . desc_size * index)
1958
1952
. cast :: < MemoryDescriptor > ( )
1959
1953
} ;
1960
1954
@@ -1972,7 +1966,7 @@ impl MemoryMap {
1972
1966
& mut * self
1973
1967
. buf
1974
1968
. as_mut_ptr ( )
1975
- . add ( self . desc_size * index)
1969
+ . add ( self . meta . desc_size * index)
1976
1970
. cast :: < MemoryDescriptor > ( )
1977
1971
} ;
1978
1972
0 commit comments