#include <linux/types.h>
#include <linux/time.h>
#include <linux/clocksource.h>
#include <linux/init.h>
#include <linux/export.h>
#include <linux/hardirq.h>
#include <linux/efi.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/kexec.h>
#include <linux/random.h>
#include <asm/processor.h>
#include <asm/hypervisor.h>
#include <asm/hyperv-tlfs.h>
#include <asm/mshyperv.h>
#include <asm/desc.h>
#include <asm/idtentry.h>
#include <asm/irq_regs.h>
#include <asm/i8259.h>
#include <asm/apic.h>
#include <asm/timer.h>
#include <asm/reboot.h>
#include <asm/nmi.h>
#include <clocksource/hyperv_timer.h>
#include <asm/numa.h>
#include <asm/svm.h>
bool hv_root_partition;
bool hv_nested;
struct ms_hyperv_info ms_hyperv;
bool hyperv_paravisor_present __ro_after_init;
EXPORT_SYMBOL_GPL(…);
#if IS_ENABLED(CONFIG_HYPERV)
static inline unsigned int hv_get_nested_msr(unsigned int reg)
{ … }
u64 hv_get_non_nested_msr(unsigned int reg)
{ … }
EXPORT_SYMBOL_GPL(…);
void hv_set_non_nested_msr(unsigned int reg, u64 value)
{ … }
EXPORT_SYMBOL_GPL(…);
u64 hv_get_msr(unsigned int reg)
{ … }
EXPORT_SYMBOL_GPL(…);
void hv_set_msr(unsigned int reg, u64 value)
{ … }
EXPORT_SYMBOL_GPL(…);
static void (*vmbus_handler)(void);
static void (*hv_stimer0_handler)(void);
static void (*hv_kexec_handler)(void);
static void (*hv_crash_handler)(struct pt_regs *regs);
DEFINE_IDTENTRY_SYSVEC(sysvec_hyperv_callback)
{ … }
void hv_setup_vmbus_handler(void (*handler)(void))
{ … }
void hv_remove_vmbus_handler(void)
{ … }
DEFINE_IDTENTRY_SYSVEC(sysvec_hyperv_stimer0)
{ … }
void hv_setup_stimer0_handler(void (*handler)(void))
{ … }
void hv_remove_stimer0_handler(void)
{ … }
void hv_setup_kexec_handler(void (*handler)(void))
{ … }
void hv_remove_kexec_handler(void)
{ … }
void hv_setup_crash_handler(void (*handler)(struct pt_regs *regs))
{ … }
void hv_remove_crash_handler(void)
{ … }
#ifdef CONFIG_KEXEC_CORE
static void hv_machine_shutdown(void)
{ … }
#endif
#ifdef CONFIG_CRASH_DUMP
static void hv_machine_crash_shutdown(struct pt_regs *regs)
{ … }
#endif
#endif
static uint32_t __init ms_hyperv_platform(void)
{ … }
#ifdef CONFIG_X86_LOCAL_APIC
static int hv_nmi_unknown(unsigned int val, struct pt_regs *regs)
{ … }
#endif
static unsigned long hv_get_tsc_khz(void)
{ … }
#if defined(CONFIG_SMP) && IS_ENABLED(CONFIG_HYPERV)
static void __init hv_smp_prepare_boot_cpu(void)
{ … }
static void __init hv_smp_prepare_cpus(unsigned int max_cpus)
{ … }
#endif
static void __init reduced_hw_init(void)
{ … }
int hv_get_hypervisor_version(union hv_hypervisor_version_info *info)
{ … }
static void __init ms_hyperv_init_platform(void)
{ … }
static bool __init ms_hyperv_x2apic_available(void)
{ … }
static bool __init ms_hyperv_msi_ext_dest_id(void)
{ … }
#ifdef CONFIG_AMD_MEM_ENCRYPT
static void hv_sev_es_hcall_prepare(struct ghcb *ghcb, struct pt_regs *regs)
{ … }
static bool hv_sev_es_hcall_finish(struct ghcb *ghcb, struct pt_regs *regs)
{ … }
#endif
const __initconst struct hypervisor_x86 x86_hyper_ms_hyperv = …;