From be6ca9bd3a279cdff3d474d5c5cb4a9bc1273a01 Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Mon, 10 Nov 2025 14:34:30 +0100 Subject: [PATCH] expose ranges instead of pair of usize for IFD regions Add helpers to get the IFD, BIOS and ME region, respectively. Signed-off-by: Daniel Maslowski --- src/ifd.rs | 21 ++++++++++++++++++--- src/lib.rs | 6 +++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/ifd.rs b/src/ifd.rs index eb94152..fc95996 100644 --- a/src/ifd.rs +++ b/src/ifd.rs @@ -44,7 +44,10 @@ // Lowercase helpers are provided through implementations. #![allow(non_snake_case)] -use std::fmt::{Debug, Display}; +use std::{ + fmt::{Debug, Display}, + ops::Range, +}; use bitfield_struct::bitfield; use serde::{Deserialize, Serialize}; @@ -307,8 +310,8 @@ impl FlashRegion { self.limit() as usize * 4096 + 4095 } - pub fn range(self) -> (usize, usize) { - (self.ba(), self.la() + 1) + pub fn range(self) -> Range { + self.ba()..self.la() + 1 } } @@ -336,6 +339,18 @@ pub struct Regions { pub flreg9: FlashRegion, } +impl Regions { + pub fn ifd_range(&self) -> Range { + self.flreg0.range() + } + pub fn bios_range(&self) -> Range { + self.flreg1.range() + } + pub fn me_range(&self) -> Range { + self.flreg2.range() + } +} + // NOTE: Regions have changed over processors generations. impl Display for Regions { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { diff --git a/src/lib.rs b/src/lib.rs index c76028b..48c1704 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -37,10 +37,10 @@ impl Firmware { let ifd = IFD::parse(&data); let me = match &ifd { Ok(ifd) => { - let me_region = ifd.regions.flreg2.range(); - let (b, l) = me_region; + let me_region = ifd.regions.me_range(); + let b = me_region.start; info!("ME region start @ {b:08x}"); - ME::parse(&data[b..l], b, debug) + ME::parse(&data[me_region], b, debug) } Err(e) => { warn!("Not a full image: {e:?}");