| /* |
| * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| #ifndef SMCCC_V2_H |
| #define SMCCC_V2_H |
| |
| #ifndef SMCCC_H |
| #error "This file must only be included from smccc.h" |
| #endif |
| |
| /******************************************************************************* |
| * Bit definitions inside the function id as per the SMC calling convention |
| ******************************************************************************/ |
| #define FUNCID_TYPE_SHIFT U(31) |
| #define FUNCID_TYPE_MASK U(0x1) |
| #define FUNCID_TYPE_WIDTH U(1) |
| |
| #define FUNCID_CC_SHIFT U(30) |
| #define FUNCID_CC_MASK U(0x1) |
| #define FUNCID_CC_WIDTH U(1) |
| |
| #define FUNCID_NAMESPACE_SHIFT U(28) |
| #define FUNCID_NAMESPACE_MASK U(0x3) |
| #define FUNCID_NAMESPACE_WIDTH U(2) |
| |
| #define FUNCID_OEN_SHIFT U(24) |
| #define FUNCID_OEN_MASK U(0xf) |
| #define FUNCID_OEN_WIDTH U(4) |
| |
| #define FUNCID_NUM_SHIFT U(0) |
| #define FUNCID_NUM_MASK U(0xffff) |
| #define FUNCID_NUM_WIDTH U(16) |
| |
| #define GET_SMC_TYPE(id) (((id) >> FUNCID_TYPE_SHIFT) & \ |
| FUNCID_TYPE_MASK) |
| #define GET_SMC_CC(id) (((id) >> FUNCID_CC_SHIFT) & \ |
| FUNCID_CC_MASK) |
| #define GET_SMC_NAMESPACE(id) (((id) >> FUNCID_NAMESPACE_SHIFT) & \ |
| FUNCID_NAMESPACE_MASK) |
| #define GET_SMC_OEN(id) (((id) >> FUNCID_OEN_SHIFT) & \ |
| FUNCID_OEN_MASK) |
| |
| /******************************************************************************* |
| * Owning entity number definitions inside the function id as per the SMC |
| * calling convention |
| ******************************************************************************/ |
| #define OEN_ARM_START U(0) |
| #define OEN_ARM_END U(0) |
| #define OEN_CPU_START U(1) |
| #define OEN_CPU_END U(1) |
| #define OEN_SIP_START U(2) |
| #define OEN_SIP_END U(2) |
| #define OEN_OEM_START U(3) |
| #define OEN_OEM_END U(3) |
| #define OEN_STD_START U(4) /* Standard Service Calls */ |
| #define OEN_STD_END U(4) |
| #define OEN_STD_HYP_START U(5) /* Standard Hypervisor Service calls */ |
| #define OEN_STD_HYP_END U(5) |
| #define OEN_VEN_HYP_START U(6) /* Vendor Hypervisor Service calls */ |
| #define OEN_VEN_HYP_END U(6) |
| #define OEN_LIMIT U(16) |
| |
| /******************************************************************************* |
| * Service namespaces as per the SMC Calling Convention v2.X |
| ******************************************************************************/ |
| #define FUNCID_NAMESPACE_START U(0) |
| #define FUNCID_NAMESPACE_COMPAT U(0) |
| #define FUNCID_NAMESPACE_VENDOR U(1) |
| #define FUNCID_NAMESPACE_SPRT U(2) |
| #define FUNCID_NAMESPACE_SPCI U(3) |
| #define FUNCID_NAMESPACE_LIMIT U(4) |
| |
| /* Flags and error codes */ |
| #define SMC_64 U(1) |
| #define SMC_32 U(0) |
| |
| #define SMC_TYPE_FAST ULL(1) |
| |
| #define SMC_OK ULL(0) |
| #define SMC_UNK -1 |
| |
| #endif /* SMCCC_V2_H */ |