aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/common/runtime_svc.h65
-rw-r--r--include/lib/smccc.h74
-rw-r--r--include/lib/smccc_v1.h75
-rw-r--r--include/lib/smccc_v2.h85
-rw-r--r--include/services/spci_svc.h7
-rw-r--r--include/services/sprt_svc.h9
6 files changed, 76 insertions, 239 deletions
diff --git a/include/common/runtime_svc.h b/include/common/runtime_svc.h
index 59bf158b4..e5e36c71e 100644
--- a/include/common/runtime_svc.h
+++ b/include/common/runtime_svc.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -36,17 +36,8 @@
* In SMCCC 1.X, the function identifier has 6 bits for the owning entity number
* and a single bit for the type of smc call. When taken together, those values
* limit the maximum number of runtime services to 128.
- *
- * In SMCCC 2.X the type bit is always 1 and there are only 4 OEN bits in the
- * compatibility namespace, so the total number of services is 16. The LSB of
- * namespace is also added to these 4 bits to make space for the vendor service
- * handler and so the total number of runtime services is 32.
*/
-#if SMCCC_MAJOR_VERSION == 1
#define MAX_RT_SVCS U(128)
-#elif SMCCC_MAJOR_VERSION == 2
-#define MAX_RT_SVCS U(32)
-#endif
#ifndef __ASSEMBLY__
@@ -70,11 +61,7 @@ typedef uintptr_t (*rt_svc_handle_t)(uint32_t smc_fid,
typedef struct rt_svc_desc {
uint8_t start_oen;
uint8_t end_oen;
-#if SMCCC_MAJOR_VERSION == 1
uint8_t call_type;
-#elif SMCCC_MAJOR_VERSION == 2
- uint8_t is_vendor;
-#endif
const char *name;
rt_svc_init_t init;
rt_svc_handle_t handle;
@@ -83,8 +70,6 @@ typedef struct rt_svc_desc {
/*
* Convenience macros to declare a service descriptor
*/
-#if SMCCC_MAJOR_VERSION == 1
-
#define DECLARE_RT_SVC(_name, _start, _end, _type, _setup, _smch) \
static const rt_svc_desc_t __svc_desc_ ## _name \
__section("rt_svc_descs") __used = { \
@@ -96,37 +81,6 @@ typedef struct rt_svc_desc {
.handle = (_smch) \
}
-#elif SMCCC_MAJOR_VERSION == 2
-
-#define DECLARE_RT_SVC(_name, _start, _end, _type, _setup, _smch) \
- static const rt_svc_desc_t __svc_desc_ ## _name \
- __section("rt_svc_descs") __used = { \
- .start_oen = (_start), \
- .end_oen = (_end), \
- .is_vendor = 0, \
- .name = #_name, \
- .init = (_setup), \
- .handle = (_smch), \
- }; \
- CASSERT((_type) == SMC_TYPE_FAST, rt_svc_type_check_ ## _name)
-
-/*
- * The higher 16 entries of the runtime services are used for the vendor
- * specific descriptor.
- */
-#define DECLARE_RT_SVC_VENDOR(_setup, _smch) \
- static const rt_svc_desc_t __svc_desc_vendor \
- __section("rt_svc_descs") __used = { \
- .start_oen = 0, \
- .end_oen = 15, \
- .is_vendor = 1, \
- .name = "vendor_rt_svc", \
- .init = _setup, \
- .handle = _smch, \
- }
-
-#endif /* SMCCC_MAJOR_VERSION */
-
/*
* Compile time assertions related to the 'rt_svc_desc' structure to:
* 1. ensure that the assembler and the compiler view of the size
@@ -144,7 +98,6 @@ CASSERT(RT_SVC_DESC_HANDLE == __builtin_offsetof(rt_svc_desc_t, handle), \
assert_rt_svc_desc_handle_offset_mismatch);
-#if SMCCC_MAJOR_VERSION == 1
/*
* This function combines the call type and the owning entity number
* corresponding to a runtime service to generate a unique owning entity number.
@@ -169,22 +122,6 @@ static inline uint32_t get_unique_oen_from_smc_fid(uint32_t fid)
return get_unique_oen(GET_SMC_OEN(fid), GET_SMC_TYPE(fid));
}
-#elif SMCCC_MAJOR_VERSION == 2
-
-/*
- * This function combines the owning entity number corresponding to a runtime
- * service with one extra bit for the vendor namespace to generate an index into
- * the 'rt_svc_descs_indices' array. The entry contains the index of the service
- * descriptor in the 'rt_svc_descs' array.
- */
-static inline uint32_t get_rt_desc_idx(uint32_t oen, uint32_t is_vendor)
-{
- return ((is_vendor & 1U) << FUNCID_OEN_WIDTH) |
- (oen & FUNCID_OEN_MASK);
-}
-
-#endif
-
/*******************************************************************************
* Function & variable prototypes
******************************************************************************/
diff --git a/include/lib/smccc.h b/include/lib/smccc.h
index b10c52ce9..94c39d2a6 100644
--- a/include/lib/smccc.h
+++ b/include/lib/smccc.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -19,15 +19,69 @@
| (((uint32_t)(_minor) & SMCCC_VERSION_MINOR_MASK) << \
SMCCC_VERSION_MINOR_SHIFT))
-#if SMCCC_MAJOR_VERSION == 1
-# define SMCCC_MINOR_VERSION U(1)
-# include <lib/smccc_v1.h>
-#elif SMCCC_MAJOR_VERSION == 2
-# define SMCCC_MINOR_VERSION U(0)
-# include <lib/smccc_v2.h>
-#else
-# error "Unsupported version of SMCCC."
-#endif
+#define SMCCC_MAJOR_VERSION U(1)
+#define SMCCC_MINOR_VERSION U(1)
+
+/*******************************************************************************
+ * 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)
+#define SMC_TYPE_YIELD ULL(0)
+
+#define SMC_OK ULL(0)
+#define SMC_UNK -1
+#define SMC_PREEMPTED -2 /* Not defined by the SMCCC */
/* Various flags passed to SMC handlers */
#define SMC_FROM_SECURE (U(0) << 0)
diff --git a/include/lib/smccc_v1.h b/include/lib/smccc_v1.h
deleted file mode 100644
index 2b8bd8b3d..000000000
--- a/include/lib/smccc_v1.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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)
-#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 */
diff --git a/include/lib/smccc_v2.h b/include/lib/smccc_v2.h
deleted file mode 100644
index 22bf458dc..000000000
--- a/include/lib/smccc_v2.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * 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 */
diff --git a/include/services/spci_svc.h b/include/services/spci_svc.h
index b82cf1e30..1d02bfa9c 100644
--- a/include/services/spci_svc.h
+++ b/include/services/spci_svc.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -34,7 +34,10 @@
#define SPCI_FID_TUN_SHIFT U(24)
#define SPCI_FID_TUN_MASK U(0x7)
-#define SPCI_SMC(spci_fid) ((FUNCID_NAMESPACE_SPCI << FUNCID_NAMESPACE_SHIFT) | \
+#define OEN_SPCI_START U(0x30)
+#define OEN_SPCI_END U(0x3F)
+
+#define SPCI_SMC(spci_fid) ((OEN_SPCI_START << FUNCID_OEN_SHIFT) | \
(U(1) << 31) | (spci_fid))
#define SPCI_MISC_32(misc_fid) ((SMC_32 << FUNCID_CC_SHIFT) | \
SPCI_FID_MISC_FLAG | \
diff --git a/include/services/sprt_svc.h b/include/services/sprt_svc.h
index bd695e58a..2421ea251 100644
--- a/include/services/sprt_svc.h
+++ b/include/services/sprt_svc.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -37,10 +37,13 @@
/* Definitions to build the complete SMC ID */
-#define SPRT_SMC_64(sprt_fid) ((FUNCID_NAMESPACE_SPRT << FUNCID_NAMESPACE_SHIFT) | \
+#define OEN_SPRT_START U(0x20)
+#define OEN_SPRT_END U(0x2F)
+
+#define SPRT_SMC_64(sprt_fid) ((OEN_SPRT_START << FUNCID_OEN_SHIFT) | \
(U(1) << 31) | ((sprt_fid) & SPRT_FID_MASK) | \
(SMC_64 << FUNCID_CC_SHIFT))
-#define SPRT_SMC_32(sprt_fid) ((FUNCID_NAMESPACE_SPRT << FUNCID_NAMESPACE_SHIFT) | \
+#define SPRT_SMC_32(sprt_fid) ((OEN_SPRT_START << FUNCID_OEN_SHIFT) | \
(U(1) << 31) | ((sprt_fid) & SPRT_FID_MASK) | \
(SMC_32 << FUNCID_CC_SHIFT))