sim: Prepare for largest possible image sizes
Instead of just passing in a numeric value for the image size, create an
enum that can use a given size, or supports a `Largest` size. Largest
is not implemented yet, but this gets the types in place for this.
Signed-off-by: David Brown <david.brown@linaro.org>
diff --git a/sim/src/image.rs b/sim/src/image.rs
index 99ef786..2897bb2 100644
--- a/sim/src/image.rs
+++ b/sim/src/image.rs
@@ -219,10 +219,12 @@
} else {
Box::new(BoringDep::new(image_num, deps))
};
- let primaries = install_image(&mut flash, &slots[0], 42784, &ram, &*dep, false);
+ let primaries = install_image(&mut flash, &slots[0],
+ ImageSize::Given(42784), &ram, &*dep, false);
let upgrades = match deps.depends[image_num] {
DepType::NoUpgrade => install_no_image(),
- _ => install_image(&mut flash, &slots[1], 46928, &ram, &*dep, false)
+ _ => install_image(&mut flash, &slots[1],
+ ImageSize::Given(46928), &ram, &*dep, false)
};
OneImage {
slots,
@@ -270,8 +272,10 @@
let ram = self.ram.clone(); // TODO: Avoid this clone.
let images = self.slots.into_iter().enumerate().map(|(image_num, slots)| {
let dep = BoringDep::new(image_num, &NO_DEPS);
- let primaries = install_image(&mut bad_flash, &slots[0], 32784, &ram, &dep, false);
- let upgrades = install_image(&mut bad_flash, &slots[1], 41928, &ram, &dep, true);
+ let primaries = install_image(&mut bad_flash, &slots[0],
+ ImageSize::Given(32784), &ram, &dep, false);
+ let upgrades = install_image(&mut bad_flash, &slots[1],
+ ImageSize::Given(41928), &ram, &dep, true);
OneImage {
slots,
primaries,
@@ -291,7 +295,8 @@
let ram = self.ram.clone(); // TODO: Avoid this clone.
let images = self.slots.into_iter().enumerate().map(|(image_num, slots)| {
let dep = BoringDep::new(image_num, &NO_DEPS);
- let primaries = install_image(&mut flash, &slots[0], 32784, &ram, &dep, false);
+ let primaries = install_image(&mut flash, &slots[0],
+ ImageSize::Given(32784), &ram, &dep, false);
let upgrades = install_no_image();
OneImage {
slots,
@@ -313,7 +318,8 @@
let images = self.slots.into_iter().enumerate().map(|(image_num, slots)| {
let dep = BoringDep::new(image_num, &NO_DEPS);
let primaries = install_no_image();
- let upgrades = install_image(&mut flash, &slots[1], 32784, &ram, &dep, false);
+ let upgrades = install_image(&mut flash, &slots[1],
+ ImageSize::Given(32784), &ram, &dep, false);
OneImage {
slots,
primaries,
@@ -1468,9 +1474,17 @@
println!();
}
+#[derive(Debug)]
+enum ImageSize {
+ /// Make the image the specified given size.
+ Given(usize),
+ /// Make the image as large as it can be for the partition/device.
+ Largest,
+}
+
/// Install a "program" into the given image. This fakes the image header, or at least all of the
/// fields used by the given code. Returns a copy of the image that was written.
-fn install_image(flash: &mut SimMultiFlash, slot: &SlotInfo, len: usize,
+fn install_image(flash: &mut SimMultiFlash, slot: &SlotInfo, len: ImageSize,
ram: &RamData,
deps: &dyn Depender, bad_sig: bool) -> ImageData {
let offset = slot.base_off;
@@ -1493,6 +1507,11 @@
0
};
+ let len = match len {
+ ImageSize::Given(size) => size,
+ ImageSize::Largest => unimplemented!(),
+ };
+
// Generate a boot header. Note that the size doesn't include the header.
let header = ImageHeader {
magic: tlv.get_magic(),