| /* SPDX-License-Identifier: GPL-2.0 */ | |
| /* | |
| * Linux-specific definitions for managing interactions with Microsoft's | |
| * Hyper-V hypervisor. The definitions in this file are specific to | |
| * the ARM64 architecture. See include/asm-generic/mshyperv.h for | |
| * definitions are that architecture independent. | |
| * | |
| * Definitions that are specified in the Hyper-V Top Level Functional | |
| * Spec (TLFS) should not go in this file, but should instead go in | |
| * hyperv-tlfs.h. | |
| * | |
| * Copyright (C) 2021, Microsoft, Inc. | |
| * | |
| * Author : Michael Kelley <mikelley@microsoft.com> | |
| */ | |
| #ifndef _ASM_MSHYPERV_H | |
| #define _ASM_MSHYPERV_H | |
| #include <linux/types.h> | |
| #include <linux/arm-smccc.h> | |
| #include <asm/hyperv-tlfs.h> | |
| /* | |
| * Declare calls to get and set Hyper-V VP register values on ARM64, which | |
| * requires a hypercall. | |
| */ | |
| void hv_set_vpreg(u32 reg, u64 value); | |
| u64 hv_get_vpreg(u32 reg); | |
| void hv_get_vpreg_128(u32 reg, struct hv_get_vp_registers_output *result); | |
| static inline void hv_set_register(unsigned int reg, u64 value) | |
| { | |
| hv_set_vpreg(reg, value); | |
| } | |
| static inline u64 hv_get_register(unsigned int reg) | |
| { | |
| return hv_get_vpreg(reg); | |
| } | |
| /* SMCCC hypercall parameters */ | |
| #define HV_SMCCC_FUNC_NUMBER 1 | |
| #define HV_FUNC_ID ARM_SMCCC_CALL_VAL( \ | |
| ARM_SMCCC_STD_CALL, \ | |
| ARM_SMCCC_SMC_64, \ | |
| ARM_SMCCC_OWNER_VENDOR_HYP, \ | |
| HV_SMCCC_FUNC_NUMBER) | |
| #include <asm-generic/mshyperv.h> | |
| #endif |