Browse Source

refactor: define `fetch_base` method

toku-sa-n 4 years ago
parent
commit
18d5859d14
1 changed files with 11 additions and 4 deletions
  1. 11 4
      acpi/src/fadt.rs

+ 11 - 4
acpi/src/fadt.rs

@@ -152,6 +152,16 @@ impl PmTimer {
                 .ok_or(AcpiError::TableMissing(crate::sdt::Signature::FADT))?
         };
 
+        let base = Self::fetch_base(&fadt)?;
+        let flags = fadt.flags;
+
+        match base {
+            Some(base) => Ok(Some(PmTimer { base, supports_32bit: flags.get_bit(8) })),
+            None => Ok(None),
+        }
+    }
+
+    fn fetch_base(fadt: &Fadt) -> Result<Option<GenericAddress>, AcpiError> {
         let raw = unsafe {
             fadt.x_pm_timer_block.access(fadt.header().revision).or_else(|| {
                 if fadt.pm_timer_block != 0 {
@@ -167,12 +177,9 @@ impl PmTimer {
                 }
             })
         };
-        let flags = fadt.flags;
 
         match raw {
-            Some(raw) => {
-                Ok(Some(PmTimer { base: GenericAddress::from_raw(raw)?, supports_32bit: flags.get_bit(8) }))
-            }
+            Some(raw) => Ok(Some(GenericAddress::from_raw(raw)?)),
             None => Ok(None),
         }
     }