浏览代码

Add method for getting FACS address from FADT

Isaac Woods 4 年之前
父节点
当前提交
53ded50326
共有 2 个文件被更改,包括 14 次插入1 次删除
  1. 13 1
      acpi/src/fadt.rs
  2. 1 0
      acpi/src/lib.rs

+ 13 - 1
acpi/src/fadt.rs

@@ -101,13 +101,25 @@ impl Fadt {
         self.header.validate(crate::sdt::Signature::FADT)
     }
 
+    pub fn facs_address(&self) -> Result<usize, AcpiError> {
+        unsafe {
+            self.x_firmware_ctrl
+                .access(self.header.revision)
+                .filter(|&p| p != 0)
+                .or(Some(self.firmware_ctrl as u64))
+                .filter(|&p| p != 0)
+                .map(|p| p as usize)
+                .ok_or(AcpiError::InvalidFacsAddress)
+        }
+    }
+
     pub fn dsdt_address(&self) -> Result<usize, AcpiError> {
         unsafe {
             self.x_dsdt_address
                 .access(self.header.revision)
                 .filter(|&p| p != 0)
                 .or(Some(self.dsdt_address as u64))
-                .filter(|p| *p != 0)
+                .filter(|&p| p != 0)
                 .map(|p| p as usize)
                 .ok_or(AcpiError::InvalidDsdtAddress)
         }

+ 1 - 0
acpi/src/lib.rs

@@ -81,6 +81,7 @@ pub enum AcpiError {
     SdtInvalidChecksum(Signature),
 
     TableMissing(Signature),
+    InvalidFacsAddress,
     InvalidDsdtAddress,
     InvalidMadt(MadtError),
     InvalidGenericAddress,