* kvm-arm64/hcall-selection: : . : Introduce a new set of virtual sysregs for userspace to : select the hypercalls it wants to see exposed to the guest. : : Patches courtesy of Raghavendra and Oliver. : . KVM: arm64: Fix hypercall bitmap writeback when vcpus have already run KVM: arm64: Hide KVM_REG_ARM_*_BMAP_BIT_COUNT from userspace Documentation: Fix index.rst after psci.rst renaming selftests: KVM: aarch64: Add the bitmap firmware registers to get-reg-list selftests: KVM: aarch64: Introduce hypercall ABI test selftests: KVM: Create helper for making SMCCC calls selftests: KVM: Rename psci_cpu_on_test to psci_test tools: Import ARM SMCCC definitions Docs: KVM: Add doc for the bitmap firmware registers Docs: KVM: Rename psci.rst to hypercalls.rst KVM: arm64: Add vendor hypervisor firmware register KVM: arm64: Add standard hypervisor firmware register KVM: arm64: Setup a framework for hypercall bitmap firmware registers KVM: arm64: Factor out firmware register handling from psci.c
Showing the changes to tools/include/linux (1 of 21 files). Show all
Unified · Split
| @@ -0,0 +1,193 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0-only */ | ||
| 2 | /* | ||
| 3 | * Copyright (c) 2015, Linaro Limited | ||
| 4 | */ | ||
| 5 | #ifndef __LINUX_ARM_SMCCC_H | ||
| 6 | #define __LINUX_ARM_SMCCC_H | ||
| 7 | |||
| 8 | #include <linux/const.h> | ||
| 9 | |||
| 10 | /* | ||
| 11 | * This file provides common defines for ARM SMC Calling Convention as | ||
| 12 | * specified in | ||
| 13 | * https://developer.arm.com/docs/den0028/latest | ||
| 14 | * | ||
| 15 | * This code is up-to-date with version DEN 0028 C | ||
| 16 | */ | ||
| 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 31 | ||
| 21 | |||
| 22 | #define ARM_SMCCC_SMC_32 0 | ||
| 23 | #define ARM_SMCCC_SMC_64 1 | ||
| 24 | #define ARM_SMCCC_CALL_CONV_SHIFT 30 | ||
| 25 | |||
| 26 | #define ARM_SMCCC_OWNER_MASK 0x3F | ||
| 27 | #define ARM_SMCCC_OWNER_SHIFT 24 | ||
| 28 | |||
| 29 | #define ARM_SMCCC_FUNC_MASK 0xFFFF | ||
| 30 | |||
| 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 0 | ||
| 46 | #define ARM_SMCCC_OWNER_CPU 1 | ||
| 47 | #define ARM_SMCCC_OWNER_SIP 2 | ||
| 48 | #define ARM_SMCCC_OWNER_OEM 3 | ||
| 49 | #define ARM_SMCCC_OWNER_STANDARD 4 | ||
| 50 | #define ARM_SMCCC_OWNER_STANDARD_HYP 5 | ||
| 51 | #define ARM_SMCCC_OWNER_VENDOR_HYP 6 | ||
| 52 | #define ARM_SMCCC_OWNER_TRUSTED_APP 48 | ||
| 53 | #define ARM_SMCCC_OWNER_TRUSTED_APP_END 49 | ||
| 54 | #define ARM_SMCCC_OWNER_TRUSTED_OS 50 | ||
| 55 | #define ARM_SMCCC_OWNER_TRUSTED_OS_END 63 | ||
| 56 | |||
| 57 | #define ARM_SMCCC_FUNC_QUERY_CALL_UID 0xff01 | ||
| 58 | |||
| 59 | #define ARM_SMCCC_QUIRK_NONE 0 | ||
| 60 | #define ARM_SMCCC_QUIRK_QCOM_A6 1 /* Save/restore register a6 */ | ||
| 61 | |||
| 62 | #define ARM_SMCCC_VERSION_1_0 0x10000 | ||
| 63 | #define ARM_SMCCC_VERSION_1_1 0x10001 | ||
| 64 | #define ARM_SMCCC_VERSION_1_2 0x10002 | ||
| 65 | #define ARM_SMCCC_VERSION_1_3 0x10003 | ||
| 66 | |||
| 67 | #define ARM_SMCCC_1_3_SVE_HINT 0x10000 | ||
| 68 | |||
| 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 0xb66fb428U | ||
| 107 | #define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_1 0xe911c52eU | ||
| 108 | #define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_2 0x564bcaa9U | ||
| 109 | #define ARM_SMCCC_VENDOR_HYP_UID_KVM_REG_3 0x743a004dU | ||
| 110 | |||
| 111 | /* KVM "vendor specific" services */ | ||
| 112 | #define ARM_SMCCC_KVM_FUNC_FEATURES 0 | ||
| 113 | #define ARM_SMCCC_KVM_FUNC_PTP 1 | ||
| 114 | #define ARM_SMCCC_KVM_FUNC_FEATURES_2 127 | ||
| 115 | #define ARM_SMCCC_KVM_NUM_FUNCS 128 | ||
| 116 | |||
| 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 1 | ||
| 124 | |||
| 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 using | ||
| 128 | * 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 0 | ||
| 138 | #define KVM_PTP_PHYS_COUNTER 1 | ||
| 139 | |||
| 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 0070A | ||
| 186 | * ARM DEN 0070A is now merged/consolidated into ARM DEN 0028 C | ||
| 187 | */ | ||
| 188 | #define SMCCC_RET_SUCCESS 0 | ||
| 189 | #define SMCCC_RET_NOT_SUPPORTED -1 | ||
| 190 | #define SMCCC_RET_NOT_REQUIRED -2 | ||
| 191 | #define SMCCC_RET_INVALID_PARAMETER -3 | ||
| 192 | |||
| 193 | #endif /*__LINUX_ARM_SMCCC_H*/ | ||