1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2d66bea57SThomas Gleixner #ifndef _ACPI_PMTMR_H_ 3d66bea57SThomas Gleixner #define _ACPI_PMTMR_H_ 4d66bea57SThomas Gleixner 5d66bea57SThomas Gleixner #include <linux/clocksource.h> 6d66bea57SThomas Gleixner 7d66bea57SThomas Gleixner /* Number of PMTMR ticks expected during calibration run */ 8d66bea57SThomas Gleixner #define PMTMR_TICKS_PER_SEC 3579545 9d66bea57SThomas Gleixner 10d66bea57SThomas Gleixner /* limit it to 24 bits */ 11d66bea57SThomas Gleixner #define ACPI_PM_MASK CLOCKSOURCE_MASK(24) 12d66bea57SThomas Gleixner 13d66bea57SThomas Gleixner /* Overrun value */ 14d66bea57SThomas Gleixner #define ACPI_PM_OVRRUN (1<<24) 15d66bea57SThomas Gleixner 16d66bea57SThomas Gleixner #ifdef CONFIG_X86_PM_TIMER 17d66bea57SThomas Gleixner 18d66bea57SThomas Gleixner extern u32 acpi_pm_read_verified(void); 19d66bea57SThomas Gleixner extern u32 pmtmr_ioport; 20d66bea57SThomas Gleixner acpi_pm_read_early(void)21d66bea57SThomas Gleixnerstatic inline u32 acpi_pm_read_early(void) 22d66bea57SThomas Gleixner { 23d66bea57SThomas Gleixner if (!pmtmr_ioport) 24d66bea57SThomas Gleixner return 0; 25d66bea57SThomas Gleixner /* mask the output to 24 bits */ 26d66bea57SThomas Gleixner return acpi_pm_read_verified() & ACPI_PM_MASK; 27d66bea57SThomas Gleixner } 28d66bea57SThomas Gleixner 29d66bea57SThomas Gleixner #else 30d66bea57SThomas Gleixner acpi_pm_read_early(void)31d66bea57SThomas Gleixnerstatic inline u32 acpi_pm_read_early(void) 32d66bea57SThomas Gleixner { 33d66bea57SThomas Gleixner return 0; 34d66bea57SThomas Gleixner } 35d66bea57SThomas Gleixner 36d66bea57SThomas Gleixner #endif 37d66bea57SThomas Gleixner 38d66bea57SThomas Gleixner #endif 39d66bea57SThomas Gleixner 40