2020use core:: marker:: PhantomData ;
2121
2222use super :: sdt:: Sdt ;
23- use crate :: mem:: paging:: VirtAddr ;
23+ use crate :: mem:: paging:: { PhysAddr , VirtAddr } ;
2424
2525pub ( super ) fn validate_rsdt_checksum < T : RsdtHeader > ( header : & ' static T ) -> bool {
2626 if header. signature ( ) == b"RSD PTR " {
@@ -124,9 +124,10 @@ impl Rsdt<u32> {
124124 let header_data_address = self . header . data_address ( ) as * const u32 ;
125125
126126 for i in 0 ..self . entries_count ( ) {
127- let item_addr_phys = unsafe { * ( header_data_address. add ( i) ) } as u64 ;
128- let item_addr_virt = unsafe { crate :: PHYSICAL_MEMORY_OFFSET + item_addr_phys } ;
129-
127+ let item_addr_virt = unsafe {
128+ let ptr = header_data_address. add ( i) ;
129+ PhysAddr :: new ( * ptr as u64 ) . as_hhdm_virt ( )
130+ } ;
130131 let item = unsafe { Sdt :: from_address ( item_addr_virt) } ;
131132
132133 if item. signature == signature. as_bytes ( ) {
@@ -159,8 +160,10 @@ impl Rsdt<u64> {
159160 let header_data_address = self . header . data_address ( ) as * const u64 ;
160161
161162 for i in 0 ..self . entries_count ( ) {
162- let item_addr_phys = unsafe { * ( header_data_address. add ( i) ) } ;
163- let item_addr_virt = unsafe { crate :: PHYSICAL_MEMORY_OFFSET + item_addr_phys } ;
163+ let item_addr_virt = unsafe {
164+ let ptr = header_data_address. add ( i) ;
165+ PhysAddr :: new ( * ptr) . as_hhdm_virt ( )
166+ } ;
164167
165168 let item = unsafe { Sdt :: from_address ( item_addr_virt) } ;
166169
@@ -187,15 +190,15 @@ pub(super) fn find_rsdt_address(rsdp_address: VirtAddr) -> RsdtAddress {
187190 let valid = validate_rsdt_checksum ( v20) ;
188191 assert ! ( valid, "rsdp: failed to validate RSDP v20 checksum" ) ;
189192
190- let xsdt_address = unsafe { crate :: PHYSICAL_MEMORY_OFFSET + v20. xsdt_address } ;
193+ let xsdt_address = PhysAddr :: new ( v20. xsdt_address ) . as_hhdm_virt ( ) ;
191194 return RsdtAddress :: Xsdt ( xsdt_address) ;
192195 } else {
193196 let v10 = unsafe { & * ( rsdp_address. as_ptr ( ) as * const Rsdp10 ) } ;
194197 let valid = validate_rsdt_checksum ( v10) ;
195198
196199 assert ! ( valid, "rsdp: failed to validate RSDP v10 checksum" ) ;
197200
198- let rsdt_address = unsafe { crate :: PHYSICAL_MEMORY_OFFSET + v10. rsdt_address as u64 } ;
201+ let rsdt_address = PhysAddr :: new ( v10. rsdt_address as u64 ) . as_hhdm_virt ( ) ;
199202 return RsdtAddress :: Rsdt ( rsdt_address) ;
200203 }
201204}
0 commit comments