Skip to content

Commit 05ba0d5

Browse files
committed
Early return in block read was keeping the HDD light on.
1 parent 32f7f5e commit 05ba0d5

File tree

1 file changed

+34
-31
lines changed

1 file changed

+34
-31
lines changed

src/main.rs

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)