/* * Copyright (C) 2015 Samsung Electronics, Inc. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef __TZDEV_SMC_H__ #define __TZDEV_SMC_H__ /* Fast SMC call mask. Bit 31 of SMC Function Identifier (SFI). * SFI[31] = 1: SMC handler must not be pre-empted * SFI[31] = 0: SMC handler can be preempted */ #define SMC_TYPE_STD 0 #define SMC_TYPE_FAST 1 /* SMC call MBZ mask. The bits must be zero just in case of * fastcall, bit 31 of SFI is 1. */ #define SMC_FAST_CALL_MBZ 0x00FF0000 /* AARCH64 SMC call mask. Bit 30 of SMC Function Identifier (SFI). * SFI[30] = 1: SMC calling convention SMC64 is used * SFI[30] = 0: SMC calling convention SMC32 is used */ #define SMC_AARCH_32 0 #define SMC_AARCH_64 1 /* SMC call types. * ------------------------------------------------------------- * | 0 | 0x00000000 | ARM Architecture Calls | * -------------------------------------------------------------- * | 1 | 0x01000000 | CPU Service Calls | * -------------------------------------------------------------- * | 2 | 0x02000000 | SIP Service Calls | * -------------------------------------------------------------- * | 3 | 0x03000000 | OEM Service Calls | * -------------------------------------------------------------- * | 4 | 0x04000000 | Standard Service Calls | * -------------------------------------------------------------- * | 5-47 | 0x05000000 – 0x2F000000 | Reserved for future use | * -------------------------------------------------------------- * | 48-49 | 0x30000000 – 0x31000000 | Trusted Application Calls| * -------------------------------------------------------------- * | 50-63 | 0x32000000 – 0x3F000000 | Trusted OS Calls | * -------------------------------------------------------------- */ #define SMC_CPU_SERVICE_MASK 0x01000000 #define SMC_SIP_SERVICE_MASK 0x02000000 #define SMC_OEM_SERVICE_MASK 0x03000000 #define SMC_STANDARD_MASK_CALL 0x04000000 #define SMC_RESERVED_RANGE_START 0x05000000 #define SMC_RESERVED_RANGE_END 0x2F000000 #define SMC_TAPP0_SERVICE_MASK 0x30000000 #define SMC_TAPP1_SERVICE_MASK 0x31000000 #define SMC_TOS0_SERVICE_MASK 0x32000000 #define SMC_TOS1_SERVICE_MASK 0x33000000 #define SMC_TOS2_SERVICE_MASK 0x34000000 #define SMC_TOS3_SERVICE_MASK 0x35000000 #define SMC_TOS4_SERVICE_MASK 0x36000000 #define SMC_TOS5_SERVICE_MASK 0x37000000 #define SMC_TOS6_SERVICE_MASK 0x38000000 #define SMC_TOS7_SERVICE_MASK 0x39000000 #define SMC_TOS8_SERVICE_MASK 0x3A000000 #define SMC_TOS9_SERVICE_MASK 0x3B000000 #define SMC_TOS10_SERVICE_MASK 0x3C000000 #define SMC_TOS11_SERVICE_MASK 0x3D000000 #define SMC_TOS12_SERVICE_MASK 0x3E000000 #define SMC_TOS13_SERVICE_MASK 0x3F000000 /* SMC call function ID mask. */ #define SMC_FUNC_ID 0x0000FFFF /* SMC helper to create SMC argument * compatible to ARM SMC calling convention. * usage: CREATE_SMC_CMD(SMC_STD_CALL, SMC_AARCH_64, SMC_TOS0_SECVICE_MASK, fid) */ #define CREATE_SMC_CMD(type, arch, range, fid) \ (((unsigned int)(type) << 31)|((arch) << 30) | (range)|(fid)) #endif /*__TZDEV_SMC_H__*/