Browse Source
Due to differences in the bitfields of the SMC IDs, it is not possible to support SMCCC 1.X and 2.0 at the same time. The behaviour of `SMCCC_MAJOR_VERSION` has changed. Now, it is a build option that specifies the major version of the SMCCC that the Trusted Firmware supports. The only two allowed values are 1 and 2, and it defaults to 1. The value of `SMCCC_MINOR_VERSION` is derived from it. Note: Support for SMCCC v2.0 is an experimental feature to enable prototyping of secure partition specifications. Support for this convention is disabled by default and could be removed without notice. Change-Id: I88abf9ccf08e9c66a13ce55c890edea54d9f16a7 Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>pull/1360/head
Antonio Nino Diaz
7 years ago
9 changed files with 376 additions and 111 deletions
@ -0,0 +1,78 @@ |
|||
/*
|
|||
* Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. |
|||
* |
|||
* SPDX-License-Identifier: BSD-3-Clause |
|||
*/ |
|||
|
|||
#ifndef SMCCC_V1_H |
|||
#define SMCCC_V1_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_OEN_SHIFT U(24) |
|||
#define FUNCID_OEN_MASK U(0x3f) |
|||
#define FUNCID_OEN_WIDTH U(6) |
|||
|
|||
#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_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_TAP_START U(48) /* Trusted Applications */ |
|||
#define OEN_TAP_END U(49) |
|||
#define OEN_TOS_START U(50) /* Trusted OS */ |
|||
#define OEN_TOS_END U(63) |
|||
#define OEN_LIMIT U(64) |
|||
|
|||
/* Flags and error codes */ |
|||
#define SMC_64 U(1) |
|||
#define SMC_32 U(0) |
|||
|
|||
#define SMC_TYPE_FAST ULL(1) |
|||
#if !ERROR_DEPRECATED |
|||
#define SMC_TYPE_STD ULL(0) |
|||
#endif |
|||
#define SMC_TYPE_YIELD ULL(0) |
|||
|
|||
#define SMC_OK ULL(0) |
|||
#define SMC_UNK -1 |
|||
#define SMC_PREEMPTED -2 /* Not defined by the SMCCC */ |
|||
|
|||
#endif /* SMCCC_V1_H */ |
@ -0,0 +1,85 @@ |
|||
/*
|
|||
* 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 */ |
Loading…
Reference in new issue