brintos

brintos / linux-shallow public Read only

0
0
Text · 5.6 KiB · 63ce9be Raw
194 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (c) 2015, Linaro Limited4 */5#ifndef __LINUX_ARM_SMCCC_H6#define __LINUX_ARM_SMCCC_H7 8#include <linux/const.h>9 10/*11 * This file provides common defines for ARM SMC Calling Convention as12 * specified in13 * https://developer.arm.com/docs/den0028/latest14 *15 * This code is up-to-date with version DEN 0028 C16 */17 18#define ARM_SMCCC_STD_CALL	        _AC(0,U)19#define ARM_SMCCC_FAST_CALL	        _AC(1,U)20#define ARM_SMCCC_TYPE_SHIFT		3121 22#define ARM_SMCCC_SMC_32		023#define ARM_SMCCC_SMC_64		124#define ARM_SMCCC_CALL_CONV_SHIFT	3025 26#define ARM_SMCCC_OWNER_MASK		0x3F27#define ARM_SMCCC_OWNER_SHIFT		2428 29#define ARM_SMCCC_FUNC_MASK		0xFFFF30 31#define ARM_SMCCC_IS_FAST_CALL(smc_val)	\32	((smc_val) & (ARM_SMCCC_FAST_CALL << ARM_SMCCC_TYPE_SHIFT))33#define ARM_SMCCC_IS_64(smc_val) \34	((smc_val) & (ARM_SMCCC_SMC_64 << ARM_SMCCC_CALL_CONV_SHIFT))35#define ARM_SMCCC_FUNC_NUM(smc_val)	((smc_val) & ARM_SMCCC_FUNC_MASK)36#define ARM_SMCCC_OWNER_NUM(smc_val) \37	(((smc_val) >> ARM_SMCCC_OWNER_SHIFT) & ARM_SMCCC_OWNER_MASK)38 39#define ARM_SMCCC_CALL_VAL(type, calling_convention, owner, func_num) \40	(((type) << ARM_SMCCC_TYPE_SHIFT) | \41	((calling_convention) << ARM_SMCCC_CALL_CONV_SHIFT) | \42	(((owner) & ARM_SMCCC_OWNER_MASK) << ARM_SMCCC_OWNER_SHIFT) | \43	((func_num) & ARM_SMCCC_FUNC_MASK))44 45#define ARM_SMCCC_OWNER_ARCH		046#define ARM_SMCCC_OWNER_CPU		147#define ARM_SMCCC_OWNER_SIP		248#define ARM_SMCCC_OWNER_OEM		349#define ARM_SMCCC_OWNER_STANDARD	450#define ARM_SMCCC_OWNER_STANDARD_HYP	551#define ARM_SMCCC_OWNER_VENDOR_HYP	652#define ARM_SMCCC_OWNER_TRUSTED_APP	4853#define ARM_SMCCC_OWNER_TRUSTED_APP_END	4954#define ARM_SMCCC_OWNER_TRUSTED_OS	5055#define ARM_SMCCC_OWNER_TRUSTED_OS_END	6356 57#define ARM_SMCCC_FUNC_QUERY_CALL_UID  0xff0158 59#define ARM_SMCCC_QUIRK_NONE		060#define ARM_SMCCC_QUIRK_QCOM_A6		1 /* Save/restore register a6 */61 62#define ARM_SMCCC_VERSION_1_0		0x1000063#define ARM_SMCCC_VERSION_1_1		0x1000164#define ARM_SMCCC_VERSION_1_2		0x1000265#define ARM_SMCCC_VERSION_1_3		0x1000366 67#define ARM_SMCCC_1_3_SVE_HINT		0x1000068 69#define ARM_SMCCC_VERSION_FUNC_ID					\70	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\71			   ARM_SMCCC_SMC_32,				\72			   0, 0)73 74#define ARM_SMCCC_ARCH_FEATURES_FUNC_ID					\75	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\76			   ARM_SMCCC_SMC_32,				\77			   0, 1)78 79#define ARM_SMCCC_ARCH_SOC_ID						\80	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\81			   ARM_SMCCC_SMC_32,				\82			   0, 2)83 84#define ARM_SMCCC_ARCH_WORKAROUND_1					\85	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\86			   ARM_SMCCC_SMC_32,				\87			   0, 0x8000)88 89#define ARM_SMCCC_ARCH_WORKAROUND_2					\90	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\91			   ARM_SMCCC_SMC_32,				\92			   0, 0x7fff)93 94#define ARM_SMCCC_ARCH_WORKAROUND_3					\95	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\96			   ARM_SMCCC_SMC_32,				\97			   0, 0x3fff)98 99#define ARM_SMCCC_VENDOR_HYP_CALL_UID_FUNC_ID				\100	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\101			   ARM_SMCCC_SMC_32,				\102			   ARM_SMCCC_OWNER_VENDOR_HYP,			\103			   ARM_SMCCC_FUNC_QUERY_CALL_UID)104 105/* KVM UID value: 28b46fb6-2ec5-11e9-a9ca-4b564d003a74 */106#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_0	0xb66fb428U107#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_1	0xe911c52eU108#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_2	0x564bcaa9U109#define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_3	0x743a004dU110 111/* KVM "vendor specific" services */112#define ARM_SMCCC_KVM_FUNC_FEATURES		0113#define ARM_SMCCC_KVM_FUNC_PTP			1114#define ARM_SMCCC_KVM_FUNC_FEATURES_2		127115#define ARM_SMCCC_KVM_NUM_FUNCS			128116 117#define ARM_SMCCC_VENDOR_HYP_KVM_FEATURES_FUNC_ID			\118	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\119			   ARM_SMCCC_SMC_32,				\120			   ARM_SMCCC_OWNER_VENDOR_HYP,			\121			   ARM_SMCCC_KVM_FUNC_FEATURES)122 123#define SMCCC_ARCH_WORKAROUND_RET_UNAFFECTED	1124 125/*126 * ptp_kvm is a feature used for time sync between vm and host.127 * ptp_kvm module in guest kernel will get service from host using128 * this hypercall ID.129 */130#define ARM_SMCCC_VENDOR_HYP_KVM_PTP_FUNC_ID				\131	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\132			   ARM_SMCCC_SMC_32,				\133			   ARM_SMCCC_OWNER_VENDOR_HYP,			\134			   ARM_SMCCC_KVM_FUNC_PTP)135 136/* ptp_kvm counter type ID */137#define KVM_PTP_VIRT_COUNTER			0138#define KVM_PTP_PHYS_COUNTER			1139 140/* Paravirtualised time calls (defined by ARM DEN0057A) */141#define ARM_SMCCC_HV_PV_TIME_FEATURES				\142	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,			\143			   ARM_SMCCC_SMC_64,			\144			   ARM_SMCCC_OWNER_STANDARD_HYP,	\145			   0x20)146 147#define ARM_SMCCC_HV_PV_TIME_ST					\148	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,			\149			   ARM_SMCCC_SMC_64,			\150			   ARM_SMCCC_OWNER_STANDARD_HYP,	\151			   0x21)152 153/* TRNG entropy source calls (defined by ARM DEN0098) */154#define ARM_SMCCC_TRNG_VERSION					\155	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,			\156			   ARM_SMCCC_SMC_32,			\157			   ARM_SMCCC_OWNER_STANDARD,		\158			   0x50)159 160#define ARM_SMCCC_TRNG_FEATURES					\161	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,			\162			   ARM_SMCCC_SMC_32,			\163			   ARM_SMCCC_OWNER_STANDARD,		\164			   0x51)165 166#define ARM_SMCCC_TRNG_GET_UUID					\167	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,			\168			   ARM_SMCCC_SMC_32,			\169			   ARM_SMCCC_OWNER_STANDARD,		\170			   0x52)171 172#define ARM_SMCCC_TRNG_RND32					\173	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,			\174			   ARM_SMCCC_SMC_32,			\175			   ARM_SMCCC_OWNER_STANDARD,		\176			   0x53)177 178#define ARM_SMCCC_TRNG_RND64					\179	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,			\180			   ARM_SMCCC_SMC_64,			\181			   ARM_SMCCC_OWNER_STANDARD,		\182			   0x53)183 184/*185 * Return codes defined in ARM DEN 0070A186 * ARM DEN 0070A is now merged/consolidated into ARM DEN 0028 C187 */188#define SMCCC_RET_SUCCESS			0189#define SMCCC_RET_NOT_SUPPORTED			-1190#define SMCCC_RET_NOT_REQUIRED			-2191#define SMCCC_RET_INVALID_PARAMETER		-3192 193#endif /*__LINUX_ARM_SMCCC_H*/194