sim: Make various functions into methods

The functions `try_upgrade`, `try_revert`, `try_revert_with_fail_at`,
and `try_random_fails` make more sense as methods.  Move them into the
`Images` impl so they have access to `self` and some various fields.

Signed-off-by: David Brown <david.brown@linaro.org>
diff --git a/sim/src/image.rs b/sim/src/image.rs
index e563653..e7dc382 100644
--- a/sim/src/image.rs
+++ b/sim/src/image.rs
@@ -243,7 +243,7 @@
     /// Returns the number of flash operations which can later be used to
     /// inject failures at chosen steps.
     pub fn run_basic_upgrade(&self) -> Result<i32, ()> {
-        let (flash, total_count) = try_upgrade(&self.flash, &self, None);
+        let (flash, total_count) = self.try_upgrade(None);
         info!("Total flash operation count={}", total_count);
 
         if !verify_image(&flash, &self.slots, 0, &self.upgrades) {
@@ -265,7 +265,7 @@
         if Caps::SwapUpgrade.present() {
             for count in 2 .. 5 {
                 info!("Try revert: {}", count);
-                let flash = try_revert(&self.flash, &self.areadesc, count);
+                let flash = self.try_revert(count);
                 if !verify_image(&flash, &self.slots, 0, &self.primaries) {
                     error!("Revert failure on count {}", count);
                     fails += 1;
@@ -283,7 +283,7 @@
         // Let's try an image halfway through.
         for i in 1 .. total_flash_ops {
             info!("Try interruption at {}", i);
-            let (flash, count) = try_upgrade(&self.flash, &self, Some(i));
+            let (flash, count) = self.try_upgrade(Some(i));
             info!("Second boot, count={}", count);
             if !verify_image(&flash, &self.slots, 0, &self.upgrades) {
                 warn!("FAIL at step {} of {}", i, total_flash_ops);
@@ -326,8 +326,7 @@
     pub fn run_perm_with_random_fails(&self, total_fails: usize) -> bool {
         let mut fails = 0;
         let total_flash_ops = self.total_count.unwrap();
-        let (flash, total_counts) = try_random_fails(&self.flash, &self,
-                                                        total_flash_ops, total_fails);
+        let (flash, total_counts) = self.try_random_fails(total_flash_ops, total_fails);
         info!("Random interruptions at reset points={:?}", total_counts);
 
         let primary_slot_ok = verify_image(&flash, &self.slots,
@@ -372,7 +371,7 @@
         if Caps::SwapUpgrade.present() {
             for i in 1 .. (self.total_count.unwrap() - 1) {
                 info!("Try interruption at {}", i);
-                if try_revert_with_fail_at(&self.flash, &self, i) {
+                if self.try_revert_with_fail_at(i) {
                     error!("Revert failed at interruption {}", i);
                     fails += 1;
                 }
@@ -711,152 +710,148 @@
         dev.set_verify_writes(false);
     }
 
-}
+    /// Test a boot, optionally stopping after 'n' flash options.  Returns a count
+    /// of the number of flash operations done total.
+    fn try_upgrade(&self, stop: Option<i32>) -> (SimMultiFlash, i32) {
+        // Clone the flash to have a new copy.
+        let mut flash = self.flash.clone();
 
-/// Test a boot, optionally stopping after 'n' flash options.  Returns a count
-/// of the number of flash operations done total.
-fn try_upgrade(flash: &SimMultiFlash, images: &Images,
-               stop: Option<i32>) -> (SimMultiFlash, i32) {
-    // Clone the flash to have a new copy.
-    let mut flash = flash.clone();
+        mark_permanent_upgrade(&mut flash, &self.slots[1]);
 
-    mark_permanent_upgrade(&mut flash, &images.slots[1]);
+        let mut counter = stop.unwrap_or(0);
 
-    let mut counter = stop.unwrap_or(0);
+        let (first_interrupted, count) = match c::boot_go(&mut flash, &self.areadesc, Some(&mut counter), false) {
+            (-0x13579, _) => (true, stop.unwrap()),
+            (0, _) => (false, -counter),
+            (x, _) => panic!("Unknown return: {}", x),
+        };
 
-    let (first_interrupted, count) = match c::boot_go(&mut flash, &images.areadesc, Some(&mut counter), false) {
-        (-0x13579, _) => (true, stop.unwrap()),
-        (0, _) => (false, -counter),
-        (x, _) => panic!("Unknown return: {}", x),
-    };
+        counter = 0;
+        if first_interrupted {
+            // fl.dump();
+            match c::boot_go(&mut flash, &self.areadesc, Some(&mut counter), false) {
+                (-0x13579, _) => panic!("Shouldn't stop again"),
+                (0, _) => (),
+                (x, _) => panic!("Unknown return: {}", x),
+            }
+        }
 
-    counter = 0;
-    if first_interrupted {
-        // fl.dump();
-        match c::boot_go(&mut flash, &images.areadesc, Some(&mut counter), false) {
-            (-0x13579, _) => panic!("Shouldn't stop again"),
+        (flash, count - counter)
+    }
+
+    fn try_revert(&self, count: usize) -> SimMultiFlash {
+        let mut flash = self.flash.clone();
+
+        // fl.write_file("image0.bin").unwrap();
+        for i in 0 .. count {
+            info!("Running boot pass {}", i + 1);
+            assert_eq!(c::boot_go(&mut flash, &self.areadesc, None, false), (0, 0));
+        }
+        flash
+    }
+
+    fn try_revert_with_fail_at(&self, stop: i32) -> bool {
+        let mut flash = self.flash.clone();
+        let mut fails = 0;
+
+        let mut counter = stop;
+        let (x, _) = c::boot_go(&mut flash, &self.areadesc, Some(&mut counter), false);
+        if x != -0x13579 {
+            warn!("Should have stopped at interruption point");
+            fails += 1;
+        }
+
+        if !verify_trailer(&flash, &self.slots, 0, None, None, BOOT_FLAG_UNSET) {
+            warn!("copy_done should be unset");
+            fails += 1;
+        }
+
+        let (x, _) = c::boot_go(&mut flash, &self.areadesc, None, false);
+        if x != 0 {
+            warn!("Should have finished upgrade");
+            fails += 1;
+        }
+
+        if !verify_image(&flash, &self.slots, 0, &self.upgrades) {
+            warn!("Image in the primary slot before revert is invalid at stop={}",
+                  stop);
+            fails += 1;
+        }
+        if !verify_image(&flash, &self.slots, 1, &self.primaries) {
+            warn!("Image in the secondary slot before revert is invalid at stop={}",
+                  stop);
+            fails += 1;
+        }
+        if !verify_trailer(&flash, &self.slots, 0, BOOT_MAGIC_GOOD,
+                           BOOT_FLAG_UNSET, BOOT_FLAG_SET) {
+            warn!("Mismatched trailer for the primary slot before revert");
+            fails += 1;
+        }
+        if !verify_trailer(&flash, &self.slots, 1, BOOT_MAGIC_UNSET,
+                           BOOT_FLAG_UNSET, BOOT_FLAG_UNSET) {
+            warn!("Mismatched trailer for the secondary slot before revert");
+            fails += 1;
+        }
+
+        // Do Revert
+        let (x, _) = c::boot_go(&mut flash, &self.areadesc, None, false);
+        if x != 0 {
+            warn!("Should have finished a revert");
+            fails += 1;
+        }
+
+        if !verify_image(&flash, &self.slots, 0, &self.primaries) {
+            warn!("Image in the primary slot after revert is invalid at stop={}",
+                  stop);
+            fails += 1;
+        }
+        if !verify_image(&flash, &self.slots, 1, &self.upgrades) {
+            warn!("Image in the secondary slot after revert is invalid at stop={}",
+                  stop);
+            fails += 1;
+        }
+        if !verify_trailer(&flash, &self.slots, 0, BOOT_MAGIC_GOOD,
+                           BOOT_FLAG_SET, BOOT_FLAG_SET) {
+            warn!("Mismatched trailer for the secondary slot after revert");
+            fails += 1;
+        }
+        if !verify_trailer(&flash, &self.slots, 1, BOOT_MAGIC_UNSET,
+                           BOOT_FLAG_UNSET, BOOT_FLAG_UNSET) {
+            warn!("Mismatched trailer for the secondary slot after revert");
+            fails += 1;
+        }
+
+        fails > 0
+    }
+
+    fn try_random_fails(&self, total_ops: i32, count: usize) -> (SimMultiFlash, Vec<i32>) {
+        let mut flash = self.flash.clone();
+
+        mark_permanent_upgrade(&mut flash, &self.slots[1]);
+
+        let mut rng = rand::thread_rng();
+        let mut resets = vec![0i32; count];
+        let mut remaining_ops = total_ops;
+        for i in 0 .. count {
+            let ops = Range::new(1, remaining_ops / 2);
+            let reset_counter = ops.ind_sample(&mut rng);
+            let mut counter = reset_counter;
+            match c::boot_go(&mut flash, &self.areadesc, Some(&mut counter), false) {
+                (0, _) | (-0x13579, _) => (),
+                (x, _) => panic!("Unknown return: {}", x),
+            }
+            remaining_ops -= reset_counter;
+            resets[i] = reset_counter;
+        }
+
+        match c::boot_go(&mut flash, &self.areadesc, None, false) {
+            (-0x13579, _) => panic!("Should not be have been interrupted!"),
             (0, _) => (),
             (x, _) => panic!("Unknown return: {}", x),
         }
-    }
 
-    (flash, count - counter)
-}
-
-fn try_revert(flash: &SimMultiFlash, areadesc: &AreaDesc, count: usize) -> SimMultiFlash {
-    let mut flash = flash.clone();
-
-    // fl.write_file("image0.bin").unwrap();
-    for i in 0 .. count {
-        info!("Running boot pass {}", i + 1);
-        assert_eq!(c::boot_go(&mut flash, &areadesc, None, false), (0, 0));
+        (flash, resets)
     }
-    flash
-}
-
-fn try_revert_with_fail_at(flash: &SimMultiFlash, images: &Images,
-                           stop: i32) -> bool {
-    let mut flash = flash.clone();
-    let mut fails = 0;
-
-    let mut counter = stop;
-    let (x, _) = c::boot_go(&mut flash, &images.areadesc, Some(&mut counter), false);
-    if x != -0x13579 {
-        warn!("Should have stopped at interruption point");
-        fails += 1;
-    }
-
-    if !verify_trailer(&flash, &images.slots, 0, None, None, BOOT_FLAG_UNSET) {
-        warn!("copy_done should be unset");
-        fails += 1;
-    }
-
-    let (x, _) = c::boot_go(&mut flash, &images.areadesc, None, false);
-    if x != 0 {
-        warn!("Should have finished upgrade");
-        fails += 1;
-    }
-
-    if !verify_image(&flash, &images.slots, 0, &images.upgrades) {
-        warn!("Image in the primary slot before revert is invalid at stop={}",
-              stop);
-        fails += 1;
-    }
-    if !verify_image(&flash, &images.slots, 1, &images.primaries) {
-        warn!("Image in the secondary slot before revert is invalid at stop={}",
-              stop);
-        fails += 1;
-    }
-    if !verify_trailer(&flash, &images.slots, 0, BOOT_MAGIC_GOOD,
-                       BOOT_FLAG_UNSET, BOOT_FLAG_SET) {
-        warn!("Mismatched trailer for the primary slot before revert");
-        fails += 1;
-    }
-    if !verify_trailer(&flash, &images.slots, 1, BOOT_MAGIC_UNSET,
-                       BOOT_FLAG_UNSET, BOOT_FLAG_UNSET) {
-        warn!("Mismatched trailer for the secondary slot before revert");
-        fails += 1;
-    }
-
-    // Do Revert
-    let (x, _) = c::boot_go(&mut flash, &images.areadesc, None, false);
-    if x != 0 {
-        warn!("Should have finished a revert");
-        fails += 1;
-    }
-
-    if !verify_image(&flash, &images.slots, 0, &images.primaries) {
-        warn!("Image in the primary slot after revert is invalid at stop={}",
-              stop);
-        fails += 1;
-    }
-    if !verify_image(&flash, &images.slots, 1, &images.upgrades) {
-        warn!("Image in the secondary slot after revert is invalid at stop={}",
-              stop);
-        fails += 1;
-    }
-    if !verify_trailer(&flash, &images.slots, 0, BOOT_MAGIC_GOOD,
-                       BOOT_FLAG_SET, BOOT_FLAG_SET) {
-        warn!("Mismatched trailer for the secondary slot after revert");
-        fails += 1;
-    }
-    if !verify_trailer(&flash, &images.slots, 1, BOOT_MAGIC_UNSET,
-                       BOOT_FLAG_UNSET, BOOT_FLAG_UNSET) {
-        warn!("Mismatched trailer for the secondary slot after revert");
-        fails += 1;
-    }
-
-    fails > 0
-}
-
-fn try_random_fails(flash: &SimMultiFlash, images: &Images,
-                    total_ops: i32,  count: usize) -> (SimMultiFlash, Vec<i32>) {
-    let mut flash = flash.clone();
-
-    mark_permanent_upgrade(&mut flash, &images.slots[1]);
-
-    let mut rng = rand::thread_rng();
-    let mut resets = vec![0i32; count];
-    let mut remaining_ops = total_ops;
-    for i in 0 .. count {
-        let ops = Range::new(1, remaining_ops / 2);
-        let reset_counter = ops.ind_sample(&mut rng);
-        let mut counter = reset_counter;
-        match c::boot_go(&mut flash, &images.areadesc, Some(&mut counter), false) {
-            (0, _) | (-0x13579, _) => (),
-            (x, _) => panic!("Unknown return: {}", x),
-        }
-        remaining_ops -= reset_counter;
-        resets[i] = reset_counter;
-    }
-
-    match c::boot_go(&mut flash, &images.areadesc, None, false) {
-        (-0x13579, _) => panic!("Should not be have been interrupted!"),
-        (0, _) => (),
-        (x, _) => panic!("Unknown return: {}", x),
-    }
-
-    (flash, resets)
 }
 
 /// Show the flash layout.