xref: /kernel/linux/linux-6.6/arch/x86/xen/xen-ops.h (revision 62306a36)
162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef XEN_OPS_H
362306a36Sopenharmony_ci#define XEN_OPS_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/init.h>
662306a36Sopenharmony_ci#include <linux/clocksource.h>
762306a36Sopenharmony_ci#include <linux/irqreturn.h>
862306a36Sopenharmony_ci#include <xen/xen-ops.h>
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci/* These are code, but not functions.  Defined in entry.S */
1162306a36Sopenharmony_ciextern const char xen_failsafe_callback[];
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_civoid xen_entry_SYSENTER_compat(void);
1462306a36Sopenharmony_ci#ifdef CONFIG_X86_64
1562306a36Sopenharmony_civoid xen_entry_SYSCALL_64(void);
1662306a36Sopenharmony_civoid xen_entry_SYSCALL_compat(void);
1762306a36Sopenharmony_ci#endif
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciextern void *xen_initial_gdt;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_cistruct trap_info;
2262306a36Sopenharmony_civoid xen_copy_trap_info(struct trap_info *traps);
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciDECLARE_PER_CPU_ALIGNED(struct vcpu_info, xen_vcpu_info);
2562306a36Sopenharmony_ciDECLARE_PER_CPU(unsigned long, xen_cr3);
2662306a36Sopenharmony_ciDECLARE_PER_CPU(unsigned long, xen_current_cr3);
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ciextern struct start_info *xen_start_info;
2962306a36Sopenharmony_ciextern struct shared_info xen_dummy_shared_info;
3062306a36Sopenharmony_ciextern struct shared_info *HYPERVISOR_shared_info;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciextern bool xen_fifo_events;
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_civoid xen_setup_mfn_list_list(void);
3562306a36Sopenharmony_civoid xen_build_mfn_list_list(void);
3662306a36Sopenharmony_civoid xen_setup_machphys_mapping(void);
3762306a36Sopenharmony_civoid xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn);
3862306a36Sopenharmony_civoid __init xen_reserve_special_pages(void);
3962306a36Sopenharmony_civoid __init xen_pt_check_e820(void);
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_civoid xen_mm_pin_all(void);
4262306a36Sopenharmony_civoid xen_mm_unpin_all(void);
4362306a36Sopenharmony_ci#ifdef CONFIG_X86_64
4462306a36Sopenharmony_civoid __init xen_relocate_p2m(void);
4562306a36Sopenharmony_ci#endif
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cibool __init xen_is_e820_reserved(phys_addr_t start, phys_addr_t size);
4862306a36Sopenharmony_ciunsigned long __ref xen_chk_extra_mem(unsigned long pfn);
4962306a36Sopenharmony_civoid __init xen_inv_extra_mem(void);
5062306a36Sopenharmony_civoid __init xen_remap_memory(void);
5162306a36Sopenharmony_ciphys_addr_t __init xen_find_free_area(phys_addr_t size);
5262306a36Sopenharmony_cichar * __init xen_memory_setup(void);
5362306a36Sopenharmony_civoid __init xen_arch_setup(void);
5462306a36Sopenharmony_civoid xen_banner(void);
5562306a36Sopenharmony_civoid xen_enable_sysenter(void);
5662306a36Sopenharmony_civoid xen_enable_syscall(void);
5762306a36Sopenharmony_civoid xen_vcpu_restore(void);
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_civoid xen_hvm_init_shared_info(void);
6062306a36Sopenharmony_civoid xen_unplug_emulated_devices(void);
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_civoid __init xen_build_dynamic_phys_to_machine(void);
6362306a36Sopenharmony_civoid __init xen_vmalloc_p2m_tree(void);
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_civoid xen_init_irq_ops(void);
6662306a36Sopenharmony_civoid xen_setup_timer(int cpu);
6762306a36Sopenharmony_civoid xen_setup_runstate_info(int cpu);
6862306a36Sopenharmony_civoid xen_teardown_timer(int cpu);
6962306a36Sopenharmony_civoid xen_setup_cpu_clockevents(void);
7062306a36Sopenharmony_civoid xen_save_time_memory_area(void);
7162306a36Sopenharmony_civoid xen_restore_time_memory_area(void);
7262306a36Sopenharmony_civoid xen_init_time_ops(void);
7362306a36Sopenharmony_civoid xen_hvm_init_time_ops(void);
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_cibool xen_vcpu_stolen(int vcpu);
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_civoid xen_vcpu_setup(int cpu);
7862306a36Sopenharmony_civoid xen_vcpu_info_reset(int cpu);
7962306a36Sopenharmony_civoid xen_setup_vcpu_info_placement(void);
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci#ifdef CONFIG_SMP
8262306a36Sopenharmony_civoid xen_smp_init(void);
8362306a36Sopenharmony_civoid __init xen_hvm_smp_init(void);
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ciextern cpumask_var_t xen_cpu_initialized_map;
8662306a36Sopenharmony_ci#else
8762306a36Sopenharmony_cistatic inline void xen_smp_init(void) {}
8862306a36Sopenharmony_cistatic inline void xen_hvm_smp_init(void) {}
8962306a36Sopenharmony_ci#endif
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci#ifdef CONFIG_PARAVIRT_SPINLOCKS
9262306a36Sopenharmony_civoid __init xen_init_spinlocks(void);
9362306a36Sopenharmony_civoid xen_init_lock_cpu(int cpu);
9462306a36Sopenharmony_civoid xen_uninit_lock_cpu(int cpu);
9562306a36Sopenharmony_ci#else
9662306a36Sopenharmony_cistatic inline void xen_init_spinlocks(void)
9762306a36Sopenharmony_ci{
9862306a36Sopenharmony_ci}
9962306a36Sopenharmony_cistatic inline void xen_init_lock_cpu(int cpu)
10062306a36Sopenharmony_ci{
10162306a36Sopenharmony_ci}
10262306a36Sopenharmony_cistatic inline void xen_uninit_lock_cpu(int cpu)
10362306a36Sopenharmony_ci{
10462306a36Sopenharmony_ci}
10562306a36Sopenharmony_ci#endif
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_cistruct dom0_vga_console_info;
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci#ifdef CONFIG_XEN_DOM0
11062306a36Sopenharmony_civoid __init xen_init_vga(const struct dom0_vga_console_info *, size_t size,
11162306a36Sopenharmony_ci			 struct screen_info *);
11262306a36Sopenharmony_ci#else
11362306a36Sopenharmony_cistatic inline void __init xen_init_vga(const struct dom0_vga_console_info *info,
11462306a36Sopenharmony_ci				       size_t size, struct screen_info *si)
11562306a36Sopenharmony_ci{
11662306a36Sopenharmony_ci}
11762306a36Sopenharmony_ci#endif
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_civoid xen_add_preferred_consoles(void);
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_civoid __init xen_init_apic(void);
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci#ifdef CONFIG_XEN_EFI
12462306a36Sopenharmony_ciextern void xen_efi_init(struct boot_params *boot_params);
12562306a36Sopenharmony_ci#else
12662306a36Sopenharmony_cistatic inline void __init xen_efi_init(struct boot_params *boot_params)
12762306a36Sopenharmony_ci{
12862306a36Sopenharmony_ci}
12962306a36Sopenharmony_ci#endif
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci__visible void xen_irq_enable_direct(void);
13262306a36Sopenharmony_ci__visible void xen_irq_disable_direct(void);
13362306a36Sopenharmony_ci__visible unsigned long xen_save_fl_direct(void);
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci__visible unsigned long xen_read_cr2(void);
13662306a36Sopenharmony_ci__visible unsigned long xen_read_cr2_direct(void);
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci/* These are not functions, and cannot be called normally */
13962306a36Sopenharmony_ci__visible void xen_iret(void);
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ciextern int xen_panic_handler_init(void);
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ciint xen_cpuhp_setup(int (*cpu_up_prepare_cb)(unsigned int),
14462306a36Sopenharmony_ci		    int (*cpu_dead_cb)(unsigned int));
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_civoid xen_pin_vcpu(int cpu);
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_civoid xen_emergency_restart(void);
14962306a36Sopenharmony_civoid xen_force_evtchn_callback(void);
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci#ifdef CONFIG_XEN_PV
15262306a36Sopenharmony_civoid xen_pv_pre_suspend(void);
15362306a36Sopenharmony_civoid xen_pv_post_suspend(int suspend_cancelled);
15462306a36Sopenharmony_civoid xen_start_kernel(struct start_info *si);
15562306a36Sopenharmony_ci#else
15662306a36Sopenharmony_cistatic inline void xen_pv_pre_suspend(void) {}
15762306a36Sopenharmony_cistatic inline void xen_pv_post_suspend(int suspend_cancelled) {}
15862306a36Sopenharmony_ci#endif
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci#ifdef CONFIG_XEN_PVHVM
16162306a36Sopenharmony_civoid xen_hvm_post_suspend(int suspend_cancelled);
16262306a36Sopenharmony_ci#else
16362306a36Sopenharmony_cistatic inline void xen_hvm_post_suspend(int suspend_cancelled) {}
16462306a36Sopenharmony_ci#endif
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci#endif /* XEN_OPS_H */
167