162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef _ACPI_PMTMR_H_
362306a36Sopenharmony_ci#define _ACPI_PMTMR_H_
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/clocksource.h>
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci/* Number of PMTMR ticks expected during calibration run */
862306a36Sopenharmony_ci#define PMTMR_TICKS_PER_SEC 3579545
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci/* limit it to 24 bits */
1162306a36Sopenharmony_ci#define ACPI_PM_MASK CLOCKSOURCE_MASK(24)
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/* Overrun value */
1462306a36Sopenharmony_ci#define ACPI_PM_OVRRUN	(1<<24)
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#ifdef CONFIG_X86_PM_TIMER
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciextern u32 acpi_pm_read_verified(void);
1962306a36Sopenharmony_ciextern u32 pmtmr_ioport;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_cistatic inline u32 acpi_pm_read_early(void)
2262306a36Sopenharmony_ci{
2362306a36Sopenharmony_ci	if (!pmtmr_ioport)
2462306a36Sopenharmony_ci		return 0;
2562306a36Sopenharmony_ci	/* mask the output to 24 bits */
2662306a36Sopenharmony_ci	return acpi_pm_read_verified() & ACPI_PM_MASK;
2762306a36Sopenharmony_ci}
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#else
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistatic inline u32 acpi_pm_read_early(void)
3262306a36Sopenharmony_ci{
3362306a36Sopenharmony_ci	return 0;
3462306a36Sopenharmony_ci}
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci#endif
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#endif
3962306a36Sopenharmony_ci
40