@@ -1975,41 +1975,44 @@ pub extern "C" fn block_read(
19751975 let mut lock = HARDWARE . lock ( ) ;
19761976 let hw = lock. as_mut ( ) . unwrap ( ) ;
19771977 hw. set_hdd_led ( true ) ;
1978- let result = match device {
1979- 0 => {
1980- hw. sdcard_poll ( ) ;
1981- let info = match & hw. card_state {
1982- CardState :: Online ( info) => info. clone ( ) ,
1983- _ => return common:: Result :: Err ( common:: Error :: NoMediaFound ) ,
1984- } ;
1985- // Run card at full speed
1986- let spi = sdcard:: FakeSpi ( hw, false ) ;
1987- let cs = sdcard:: FakeCs ( ) ;
1988- let delayer = sdcard:: FakeDelayer ( ) ;
1989- let sdcard = embedded_sdmmc:: SdCard :: new ( spi, cs, delayer) ;
1990- unsafe {
1991- sdcard. mark_card_as_init ( info. card_type ) ;
1992- }
1993- let blocks = unsafe {
1994- core:: slice:: from_raw_parts_mut (
1995- data. data as * mut embedded_sdmmc:: Block ,
1996- data. data_len / 512 ,
1997- )
1998- } ;
1999- let start_block_idx = embedded_sdmmc:: BlockIdx ( block. 0 as u32 ) ;
2000- match sdcard. read ( blocks, start_block_idx, "bios" ) {
2001- Ok ( _) => common:: Result :: Ok ( ( ) ) ,
2002- Err ( e) => {
2003- defmt:: warn!( "SD error reading {}: {:?}" , block. 0 , e) ;
2004- common:: Result :: Err ( common:: Error :: DeviceError ( 0 ) )
1978+ let mut inner = || {
1979+ match device {
1980+ 0 => {
1981+ hw. sdcard_poll ( ) ;
1982+ let info = match & hw. card_state {
1983+ CardState :: Online ( info) => info. clone ( ) ,
1984+ _ => return common:: Result :: Err ( common:: Error :: NoMediaFound ) ,
1985+ } ;
1986+ // Run card at full speed
1987+ let spi = sdcard:: FakeSpi ( hw, false ) ;
1988+ let cs = sdcard:: FakeCs ( ) ;
1989+ let delayer = sdcard:: FakeDelayer ( ) ;
1990+ let sdcard = embedded_sdmmc:: SdCard :: new ( spi, cs, delayer) ;
1991+ unsafe {
1992+ sdcard. mark_card_as_init ( info. card_type ) ;
1993+ }
1994+ let blocks = unsafe {
1995+ core:: slice:: from_raw_parts_mut (
1996+ data. data as * mut embedded_sdmmc:: Block ,
1997+ data. data_len / 512 ,
1998+ )
1999+ } ;
2000+ let start_block_idx = embedded_sdmmc:: BlockIdx ( block. 0 as u32 ) ;
2001+ match sdcard. read ( blocks, start_block_idx, "bios" ) {
2002+ Ok ( _) => common:: Result :: Ok ( ( ) ) ,
2003+ Err ( e) => {
2004+ defmt:: warn!( "SD error reading {}: {:?}" , block. 0 , e) ;
2005+ common:: Result :: Err ( common:: Error :: DeviceError ( 0 ) )
2006+ }
20052007 }
20062008 }
2007- }
2008- _ => {
2009- // Nothing else supported by this BIOS
2010- common :: Result :: Err ( common :: Error :: InvalidDevice )
2009+ _ => {
2010+ // Nothing else supported by this BIOS
2011+ common :: Result :: Err ( common :: Error :: InvalidDevice )
2012+ }
20112013 }
20122014 } ;
2015+ let result = inner ( ) ;
20132016 hw. set_hdd_led ( false ) ;
20142017 result
20152018}
0 commit comments