sim: Move 'Flash' into a trait
Make 'Flash' a trait, and move the current functionality into a type
called 'SimFlash'. The code that runs the simulation only uses the
trait.
Signed-off-by: David Brown <david.brown@linaro.org>
diff --git a/sim/src/main.rs b/sim/src/main.rs
index 16400a3..af3a2d6 100644
--- a/sim/src/main.rs
+++ b/sim/src/main.rs
@@ -24,7 +24,7 @@
mod pdump;
mod caps;
-use flash::Flash;
+use flash::{Flash, SimFlash};
use area::{AreaDesc, FlashId};
use caps::Caps;
@@ -155,10 +155,10 @@
let (mut flash, areadesc) = match device {
DeviceName::Stm32f4 => {
// STM style flash. Large sectors, with a large scratch area.
- let flash = Flash::new(vec![16 * 1024, 16 * 1024, 16 * 1024, 16 * 1024,
- 64 * 1024,
- 128 * 1024, 128 * 1024, 128 * 1024],
- align as usize);
+ let flash = SimFlash::new(vec![16 * 1024, 16 * 1024, 16 * 1024, 16 * 1024,
+ 64 * 1024,
+ 128 * 1024, 128 * 1024, 128 * 1024],
+ align as usize);
let mut areadesc = AreaDesc::new(&flash);
areadesc.add_image(0x020000, 0x020000, FlashId::Image0);
areadesc.add_image(0x040000, 0x020000, FlashId::Image1);
@@ -167,7 +167,7 @@
}
DeviceName::K64f => {
// NXP style flash. Small sectors, one small sector for scratch.
- let flash = Flash::new(vec![4096; 128], align as usize);
+ let flash = SimFlash::new(vec![4096; 128], align as usize);
let mut areadesc = AreaDesc::new(&flash);
areadesc.add_image(0x020000, 0x020000, FlashId::Image0);
@@ -178,7 +178,7 @@
DeviceName::K64fBig => {
// Simulating an STM style flash on top of an NXP style flash. Underlying flash device
// uses small sectors, but we tell the bootloader they are large.
- let flash = Flash::new(vec![4096; 128], align as usize);
+ let flash = SimFlash::new(vec![4096; 128], align as usize);
let mut areadesc = AreaDesc::new(&flash);
areadesc.add_simple_image(0x020000, 0x020000, FlashId::Image0);
@@ -189,7 +189,7 @@
DeviceName::Nrf52840 => {
// Simulating the flash on the nrf52840 with partitions set up so that the scratch size
// does not divide into the image size.
- let flash = Flash::new(vec![4096; 128], align as usize);
+ let flash = SimFlash::new(vec![4096; 128], align as usize);
let mut areadesc = AreaDesc::new(&flash);
areadesc.add_image(0x008000, 0x034000, FlashId::Image0);
@@ -270,7 +270,7 @@
///
/// Returns the number of flash operations which can later be used to
/// inject failures at chosen steps.
-fn run_basic_upgrade(flash: &Flash, areadesc: &AreaDesc, images: &Images)
+fn run_basic_upgrade(flash: &SimFlash, areadesc: &AreaDesc, images: &Images)
-> Result<i32, ()> {
let (fl, total_count) = try_upgrade(&flash, &areadesc, &images, None);
info!("Total flash operation count={}", total_count);
@@ -283,7 +283,7 @@
}
}
-fn run_basic_revert(flash: &Flash, areadesc: &AreaDesc, images: &Images) -> bool {
+fn run_basic_revert(flash: &SimFlash, areadesc: &AreaDesc, images: &Images) -> bool {
let mut fails = 0;
if Caps::SwapUpgrade.present() {
@@ -300,7 +300,7 @@
fails > 0
}
-fn run_perm_with_fails(flash: &Flash, areadesc: &AreaDesc, images: &Images,
+fn run_perm_with_fails(flash: &SimFlash, areadesc: &AreaDesc, images: &Images,
total_flash_ops: i32) -> bool {
let mut fails = 0;
@@ -340,7 +340,7 @@
fails > 0
}
-fn run_perm_with_random_fails(flash: &Flash, areadesc: &AreaDesc,
+fn run_perm_with_random_fails(flash: &SimFlash, areadesc: &AreaDesc,
images: &Images, total_flash_ops: i32,
total_fails: usize) -> bool {
let mut fails = 0;
@@ -374,7 +374,7 @@
fails > 0
}
-fn run_revert_with_fails(flash: &Flash, areadesc: &AreaDesc, images: &Images,
+fn run_revert_with_fails(flash: &SimFlash, areadesc: &AreaDesc, images: &Images,
total_count: i32) -> bool {
let mut fails = 0;
@@ -390,7 +390,7 @@
fails > 0
}
-fn run_norevert(flash: &Flash, areadesc: &AreaDesc, images: &Images) -> bool {
+fn run_norevert(flash: &SimFlash, areadesc: &AreaDesc, images: &Images) -> bool {
let mut fl = flash.clone();
let mut fails = 0;
@@ -441,8 +441,8 @@
/// Test a boot, optionally stopping after 'n' flash options. Returns a count
/// of the number of flash operations done total.
-fn try_upgrade(flash: &Flash, areadesc: &AreaDesc, images: &Images,
- stop: Option<i32>) -> (Flash, i32) {
+fn try_upgrade(flash: &SimFlash, areadesc: &AreaDesc, images: &Images,
+ stop: Option<i32>) -> (SimFlash, i32) {
// Clone the flash to have a new copy.
let mut fl = flash.clone();
@@ -468,7 +468,7 @@
(fl, count - c::get_flash_counter())
}
-fn try_revert(flash: &Flash, areadesc: &AreaDesc, count: usize) -> Flash {
+fn try_revert(flash: &SimFlash, areadesc: &AreaDesc, count: usize) -> SimFlash {
let mut fl = flash.clone();
c::set_flash_counter(0);
@@ -480,7 +480,7 @@
fl
}
-fn try_revert_with_fail_at(flash: &Flash, areadesc: &AreaDesc, images: &Images,
+fn try_revert_with_fail_at(flash: &SimFlash, areadesc: &AreaDesc, images: &Images,
stop: i32) -> bool {
let mut fl = flash.clone();
let mut x: i32;
@@ -554,8 +554,8 @@
fails > 0
}
-fn try_random_fails(flash: &Flash, areadesc: &AreaDesc, images: &Images,
- total_ops: i32, count: usize) -> (Flash, Vec<i32>) {
+fn try_random_fails(flash: &SimFlash, areadesc: &AreaDesc, images: &Images,
+ total_ops: i32, count: usize) -> (SimFlash, Vec<i32>) {
let mut fl = flash.clone();
mark_permanent_upgrade(&mut fl, &images.slot1);