diff --git a/src/acpi/rsdt.rs b/src/acpi/rsdt.rs index c4031f7d1a..2fd63f192e 100644 --- a/src/acpi/rsdt.rs +++ b/src/acpi/rsdt.rs @@ -2,7 +2,7 @@ use alloc::boxed::Box; use core::convert::TryFrom; use rmm::PhysicalAddress; -use crate::acpi::rxsdt::RxsdtIter; +use crate::acpi::{RxsdtEnum, rxsdt::RxsdtIter}; use super::{rxsdt::Rxsdt, sdt::Sdt}; @@ -27,6 +27,6 @@ impl Rsdt { impl Rxsdt for Rsdt { fn iter(&self) -> RxsdtIter { - RxsdtIter { sdt: self.0, i: 0 } + RxsdtIter { sdt: self.0, i: 0 , rxsdt_enum: RxsdtEnum::Rsdt(Rsdt(self.0))} } } diff --git a/src/acpi/rxsdt.rs b/src/acpi/rxsdt.rs index 8969200579..457800f00e 100644 --- a/src/acpi/rxsdt.rs +++ b/src/acpi/rxsdt.rs @@ -1,7 +1,7 @@ use alloc::boxed::Box; use rmm::PhysicalAddress; -use crate::acpi::sdt::Sdt; +use crate::acpi::{RxsdtEnum, sdt::Sdt}; pub trait Rxsdt { fn iter(&self) -> RxsdtIter; @@ -10,6 +10,7 @@ pub trait Rxsdt { pub struct RxsdtIter { pub sdt: &'static Sdt, pub i: usize, + pub rxsdt_enum: RxsdtEnum, } impl Iterator for RxsdtIter { @@ -17,10 +18,13 @@ impl Iterator for RxsdtIter { fn next(&mut self) -> Option { if self.i < self.sdt.data_len() / size_of::() { let item = unsafe { - core::ptr::read_unaligned((self.sdt.data_address() as *const u64).add(self.i)) + match self.rxsdt_enum{ + RxsdtEnum::Rsdt(_) => PhysicalAddress::new(core::ptr::read_unaligned((self.sdt.data_address() as *const u32).add(self.i)) as usize), + RxsdtEnum::Xsdt(_) => PhysicalAddress::new(core::ptr::read_unaligned((self.sdt.data_address() as *const u64).add(self.i)) as usize), + } }; self.i += 1; - Some(PhysicalAddress::new(item as usize)) + Some(item) } else { None } diff --git a/src/acpi/xsdt.rs b/src/acpi/xsdt.rs index c9ac11d98e..c95addc1d3 100644 --- a/src/acpi/xsdt.rs +++ b/src/acpi/xsdt.rs @@ -2,7 +2,7 @@ use alloc::boxed::Box; use core::convert::TryFrom; use rmm::PhysicalAddress; -use crate::acpi::rxsdt::RxsdtIter; +use crate::acpi::{RxsdtEnum, rxsdt::RxsdtIter}; use super::{rxsdt::Rxsdt, sdt::Sdt}; @@ -27,6 +27,6 @@ impl Xsdt { impl Rxsdt for Xsdt { fn iter(&self) -> RxsdtIter { - RxsdtIter { sdt: self.0, i: 0 } + RxsdtIter { sdt: self.0, i: 0, rxsdt_enum: RxsdtEnum::Xsdt(Xsdt(self.0)) } } }