162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci/* 462306a36Sopenharmony_ci * Linux-specific definitions for managing interactions with Microsoft's 562306a36Sopenharmony_ci * Hyper-V hypervisor. The definitions in this file are specific to 662306a36Sopenharmony_ci * the ARM64 architecture. See include/asm-generic/mshyperv.h for 762306a36Sopenharmony_ci * definitions are that architecture independent. 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * Definitions that are specified in the Hyper-V Top Level Functional 1062306a36Sopenharmony_ci * Spec (TLFS) should not go in this file, but should instead go in 1162306a36Sopenharmony_ci * hyperv-tlfs.h. 1262306a36Sopenharmony_ci * 1362306a36Sopenharmony_ci * Copyright (C) 2021, Microsoft, Inc. 1462306a36Sopenharmony_ci * 1562306a36Sopenharmony_ci * Author : Michael Kelley <mikelley@microsoft.com> 1662306a36Sopenharmony_ci */ 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#ifndef _ASM_MSHYPERV_H 1962306a36Sopenharmony_ci#define _ASM_MSHYPERV_H 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#include <linux/types.h> 2262306a36Sopenharmony_ci#include <linux/arm-smccc.h> 2362306a36Sopenharmony_ci#include <asm/hyperv-tlfs.h> 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci/* 2662306a36Sopenharmony_ci * Declare calls to get and set Hyper-V VP register values on ARM64, which 2762306a36Sopenharmony_ci * requires a hypercall. 2862306a36Sopenharmony_ci */ 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_civoid hv_set_vpreg(u32 reg, u64 value); 3162306a36Sopenharmony_ciu64 hv_get_vpreg(u32 reg); 3262306a36Sopenharmony_civoid hv_get_vpreg_128(u32 reg, struct hv_get_vp_registers_output *result); 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistatic inline void hv_set_register(unsigned int reg, u64 value) 3562306a36Sopenharmony_ci{ 3662306a36Sopenharmony_ci hv_set_vpreg(reg, value); 3762306a36Sopenharmony_ci} 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cistatic inline u64 hv_get_register(unsigned int reg) 4062306a36Sopenharmony_ci{ 4162306a36Sopenharmony_ci return hv_get_vpreg(reg); 4262306a36Sopenharmony_ci} 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci/* SMCCC hypercall parameters */ 4562306a36Sopenharmony_ci#define HV_SMCCC_FUNC_NUMBER 1 4662306a36Sopenharmony_ci#define HV_FUNC_ID ARM_SMCCC_CALL_VAL( \ 4762306a36Sopenharmony_ci ARM_SMCCC_STD_CALL, \ 4862306a36Sopenharmony_ci ARM_SMCCC_SMC_64, \ 4962306a36Sopenharmony_ci ARM_SMCCC_OWNER_VENDOR_HYP, \ 5062306a36Sopenharmony_ci HV_SMCCC_FUNC_NUMBER) 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci#include <asm-generic/mshyperv.h> 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci#endif 55