@@ -240,7 +240,7 @@ pub fn init() {
240240 flags,
241241 ) ;
242242
243- let ( mut io_start, mem32_start, mut mem64_start) = detect_pci_regions ( pci_node) ;
243+ let ( mut io_start, mut mem32_start, mut mem64_start) = detect_pci_regions ( pci_node) ;
244244
245245 debug ! ( "IO address space starts at{io_start:#X}" ) ;
246246 debug ! ( "Memory32 address space starts at {mem32_start:#X}" ) ;
@@ -267,7 +267,8 @@ pub fn init() {
267267
268268 // Initializes BARs
269269 let mut cmd = CommandRegister :: empty ( ) ;
270- for i in 0 ..MAX_BARS {
270+ let mut range_iter = 0 ..MAX_BARS ;
271+ while let Some ( i) = range_iter. next ( ) {
271272 if let Some ( bar) = dev. get_bar ( i. try_into ( ) . unwrap ( ) ) {
272273 match bar {
273274 Bar :: Io { .. } => {
@@ -281,11 +282,22 @@ pub fn init() {
281282 cmd |= CommandRegister :: IO_ENABLE
282283 | CommandRegister :: BUS_MASTER_ENABLE ;
283284 }
284- Bar :: Memory32 { .. } => {
285- // Currently, we ignore 32 bit memory bars
286- // dev.set_bar(i.try_into().unwrap(), Bar::Memory32 { address: mem32_start.try_into().unwrap(), size, prefetchable });
287- // mem32_start += u64::from(size);
288- // cmd |= CommandRegister::MEMORY_ENABLE | CommandRegister::BUS_MASTER_ENABLE;
285+ Bar :: Memory32 {
286+ address : _,
287+ size,
288+ prefetchable,
289+ } => {
290+ dev. set_bar (
291+ i. try_into ( ) . unwrap ( ) ,
292+ Bar :: Memory32 {
293+ address : mem32_start. try_into ( ) . unwrap ( ) ,
294+ size,
295+ prefetchable,
296+ } ,
297+ ) ;
298+ mem32_start += u64:: from ( size) ;
299+ cmd |= CommandRegister :: MEMORY_ENABLE
300+ | CommandRegister :: BUS_MASTER_ENABLE ;
289301 }
290302 Bar :: Memory64 {
291303 address : _,
@@ -303,6 +315,7 @@ pub fn init() {
303315 mem64_start += size;
304316 cmd |= CommandRegister :: MEMORY_ENABLE
305317 | CommandRegister :: BUS_MASTER_ENABLE ;
318+ range_iter. next ( ) ; // Skip 32-bit bar that is part of the 64-bit bar
306319 }
307320 }
308321 }
0 commit comments