18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef _ASM_ARM64_PARAVIRT_H
38c2ecf20Sopenharmony_ci#define _ASM_ARM64_PARAVIRT_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#ifdef CONFIG_PARAVIRT
68c2ecf20Sopenharmony_cistruct static_key;
78c2ecf20Sopenharmony_ciextern struct static_key paravirt_steal_enabled;
88c2ecf20Sopenharmony_ciextern struct static_key paravirt_steal_rq_enabled;
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_cistruct pv_time_ops {
118c2ecf20Sopenharmony_ci	unsigned long long (*steal_clock)(int cpu);
128c2ecf20Sopenharmony_ci};
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cistruct paravirt_patch_template {
158c2ecf20Sopenharmony_ci	struct pv_time_ops time;
168c2ecf20Sopenharmony_ci};
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ciextern struct paravirt_patch_template pv_ops;
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_cistatic inline u64 paravirt_steal_clock(int cpu)
218c2ecf20Sopenharmony_ci{
228c2ecf20Sopenharmony_ci	return pv_ops.time.steal_clock(cpu);
238c2ecf20Sopenharmony_ci}
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ciint __init pv_time_init(void);
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci#else
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci#define pv_time_init() do {} while (0)
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci#endif // CONFIG_PARAVIRT
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci#endif
34