1942cf26bSLoGin #[allow(dead_code)] 2fbe6becdSLoGin pub const ACPI_PM_OVERRUN: u64 = 1 << 24; 3fbe6becdSLoGin 4fbe6becdSLoGin /// Number of PMTMR ticks expected during calibration run 5fbe6becdSLoGin pub const PMTMR_TICKS_PER_SEC: u64 = 3579545; 6dd8e74efSMingtao Huang 7dd8e74efSMingtao Huang /// 用于掩码ACPI_PM_READ_ERALY返回值的前24位 8dd8e74efSMingtao Huang pub const ACPI_PM_MASK: u64 = 0xffffff; 9dd8e74efSMingtao Huang 10dd8e74efSMingtao Huang #[inline(always)] 11dd8e74efSMingtao Huang #[cfg(target_arch = "x86_64")] acpi_pm_read_early() -> u3212dd8e74efSMingtao Huangpub fn acpi_pm_read_early() -> u32 { 13942cf26bSLoGin use crate::driver::clocksource::acpi_pm::{acpi_pm_read_verified, PMTMR_IO_PORT}; 14942cf26bSLoGin use core::sync::atomic::Ordering; 15*92deae63SLoGin let port = PMTMR_IO_PORT.load(Ordering::SeqCst); 16dd8e74efSMingtao Huang 17dd8e74efSMingtao Huang // 如果端口为零直接返回 18dd8e74efSMingtao Huang if port == 0 { 19dd8e74efSMingtao Huang return 0; 20dd8e74efSMingtao Huang } 21dd8e74efSMingtao Huang 22dd8e74efSMingtao Huang // 对读取的pmtmr值进行验证并进行掩码处理 23dd8e74efSMingtao Huang return acpi_pm_read_verified() & ACPI_PM_MASK as u32; 24dd8e74efSMingtao Huang } 25dd8e74efSMingtao Huang 26dd8e74efSMingtao Huang #[inline(always)] 27dd8e74efSMingtao Huang #[cfg(not(target_arch = "x86_64"))] 28942cf26bSLoGin #[allow(dead_code)] acpi_pm_read_early() -> u3229dd8e74efSMingtao Huangpub fn acpi_pm_read_early() -> u32 { 30dd8e74efSMingtao Huang return 0; 31dd8e74efSMingtao Huang } 32