xref: /DragonOS/kernel/src/driver/acpi/pmtmr.rs (revision 92deae638bf262ac51d8388d9fe7e547a8c17fdf)
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 Huang pub 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 Huang pub fn acpi_pm_read_early() -> u32 {
30dd8e74efSMingtao Huang     return 0;
31dd8e74efSMingtao Huang }
32