Core: Minimize the memory usage for service list
Split the rodata, data and bss of the service information.
Change-Id: I27b304dcde4220ebe106ba5ed8363da525ca351a
Signed-off-by: Summer Qin <summer.qin@arm.com>
diff --git a/secure_fw/core/ipc/tfm_svcalls.c b/secure_fw/core/ipc/tfm_svcalls.c
index cfa8f4d..b657e63 100644
--- a/secure_fw/core/ipc/tfm_svcalls.c
+++ b/secure_fw/core/ipc/tfm_svcalls.c
@@ -57,11 +57,11 @@
* It should return PSA_VERSION_NONE if the caller is not authorized
* to access the RoT Service.
*/
- if (ns_caller && !service->service_db.non_secure_client) {
+ if (ns_caller && !service->service_db->non_secure_client) {
return PSA_VERSION_NONE;
}
- return service->service_db.minor_version;
+ return service->service_db->minor_version;
}
psa_handle_t tfm_svcall_psa_connect(uint32_t *args, int32_t ns_caller)
@@ -95,7 +95,7 @@
* It is a fatal error if the caller is not authorized to access the RoT
* Service.
*/
- if (ns_caller && !service->service_db.non_secure_client) {
+ if (ns_caller && !service->service_db->non_secure_client) {
tfm_panic();
}
diff --git a/secure_fw/services/tfm_service_list.inc b/secure_fw/services/tfm_service_list.inc
index 08ffd7d..4f44d6d 100644
--- a/secure_fw/services/tfm_service_list.inc
+++ b/secure_fw/services/tfm_service_list.inc
@@ -22,6 +22,391 @@
#include "test/test_services/tfm_ipc_client/psa_manifest/tfm_ipc_client_partition.h"
#include "test/test_services/tfm_irq_test_service_1/psa_manifest/tfm_irq_test_service_1.h"
+const struct tfm_spm_service_db_t service_db[] =
+{
+ /******** TFM_SP_STORAGE ********/
+ {
+ .name = "TFM_SST_SET",
+ .partition_id = TFM_SP_STORAGE_ID,
+ .signal = TFM_SST_SET_SIG,
+ .sid = 0x00000060,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "TFM_SST_GET",
+ .partition_id = TFM_SP_STORAGE_ID,
+ .signal = TFM_SST_GET_SIG,
+ .sid = 0x00000061,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "TFM_SST_GET_INFO",
+ .partition_id = TFM_SP_STORAGE_ID,
+ .signal = TFM_SST_GET_INFO_SIG,
+ .sid = 0x00000062,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "TFM_SST_REMOVE",
+ .partition_id = TFM_SP_STORAGE_ID,
+ .signal = TFM_SST_REMOVE_SIG,
+ .sid = 0x00000063,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "TFM_SST_GET_SUPPORT",
+ .partition_id = TFM_SP_STORAGE_ID,
+ .signal = TFM_SST_GET_SUPPORT_SIG,
+ .sid = 0x00000064,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+
+ /******** TFM_SP_CRYPTO ********/
+ {
+ .name = "TFM_CRYPTO",
+ .partition_id = TFM_SP_CRYPTO_ID,
+ .signal = TFM_CRYPTO_SIG,
+ .sid = 0x00000080,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+
+ /******** TFM_SP_INITIAL_ATTESTATION ********/
+ {
+ .name = "TFM_ATTEST_GET_TOKEN",
+ .partition_id = TFM_SP_INITIAL_ATTESTATION_ID,
+ .signal = PSA_ATTEST_GET_TOKEN_SIG,
+ .sid = 0x00000020,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "TFM_ATTEST_GET_TOKEN_SIZE",
+ .partition_id = TFM_SP_INITIAL_ATTESTATION_ID,
+ .signal = PSA_ATTEST_GET_TOKEN_SIZE_SIG,
+ .sid = 0x00000021,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+
+#ifdef TFM_PARTITION_TEST_CORE
+ /******** TFM_SP_CORE_TEST ********/
+ {
+ .name = "SPM_CORE_TEST_INIT_SUCCESS",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_INIT_SUCCESS_SIGNAL,
+ .sid = 0x0000F020,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_DIRECT_RECURSION",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_DIRECT_RECURSION_SIGNAL,
+ .sid = 0x0000F021,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_MPU_ACCESS",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_MPU_ACCESS_SIGNAL,
+ .sid = 0x0000F022,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_MEMORY_PERMISSIONS",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_MEMORY_PERMISSIONS_SIGNAL,
+ .sid = 0x0000F023,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_SHARE_REDIRECTION",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_SHARE_REDIRECTION_SIGNAL,
+ .sid = 0x0000F024,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_SS_TO_SS",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_SS_TO_SS_SIGNAL,
+ .sid = 0x0000F025,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_SS_TO_SS_BUFFER",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_SS_TO_SS_BUFFER_SIGNAL,
+ .sid = 0x0000F026,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_OUTVEC_WRITE",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_OUTVEC_WRITE_SIGNAL,
+ .sid = 0x0000F027,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_PERIPHERAL_ACCESS",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_PERIPHERAL_ACCESS_SIGNAL,
+ .sid = 0x0000F028,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_GET_CALLER_CLIENT_ID",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_GET_CALLER_CLIENT_ID_SIGNAL,
+ .sid = 0x0000F029,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_SPM_REQUEST",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_SPM_REQUEST_SIGNAL,
+ .sid = 0x0000F02A,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_BLOCK",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_BLOCK_SIGNAL,
+ .sid = 0x0000F02B,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_NS_THREAD",
+ .partition_id = TFM_SP_CORE_TEST_ID,
+ .signal = SPM_CORE_TEST_NS_THREAD_SIGNAL,
+ .sid = 0x0000F02C,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_CORE
+ /******** TFM_SP_CORE_TEST_2 ********/
+ {
+ .name = "SPM_CORE_TEST_2_SLAVE_SERVICE",
+ .partition_id = TFM_SP_CORE_TEST_2_ID,
+ .signal = SPM_CORE_TEST_2_SLAVE_SERVICE_SIGNAL,
+ .sid = 0x0000F040,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_2_CHECK_CALLER_CLIENT_ID",
+ .partition_id = TFM_SP_CORE_TEST_2_ID,
+ .signal = SPM_CORE_TEST_2_CHECK_CALLER_CLIENT_ID_SIGNAL,
+ .sid = 0x0000F041,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_2_GET_EVERY_SECOND_BYTE",
+ .partition_id = TFM_SP_CORE_TEST_2_ID,
+ .signal = SPM_CORE_TEST_2_GET_EVERY_SECOND_BYTE_SIGNAL,
+ .sid = 0x0000F042,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_2_INVERT",
+ .partition_id = TFM_SP_CORE_TEST_2_ID,
+ .signal = SPM_CORE_TEST_2_INVERT_SIGNAL,
+ .sid = 0x0000F043,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_2_PREPARE_TEST_SCENARIO",
+ .partition_id = TFM_SP_CORE_TEST_2_ID,
+ .signal = SPM_CORE_TEST_2_PREPARE_TEST_SCENARIO_SIGNAL,
+ .sid = 0x0000F044,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_TEST_2_EXECUTE_TEST_SCENARIO",
+ .partition_id = TFM_SP_CORE_TEST_2_ID,
+ .signal = SPM_CORE_TEST_2_EXECUTE_TEST_SCENARIO_SIGNAL,
+ .sid = 0x0000F045,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+#endif /* TFM_PARTITION_TEST_CORE */
+
+#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
+ /******** TFM_SP_SECURE_TEST_PARTITION ********/
+ {
+ .name = "TFM_SECURE_CLIENT_SFN_RUN_TESTS",
+ .partition_id = TFM_SP_SECURE_TEST_PARTITION_ID,
+ .signal = TFM_SECURE_CLIENT_SFN_RUN_TESTS_SIG,
+ .sid = 0x0000F000,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+ /******** TFM_SP_IPC_SERVICE_TEST ********/
+ {
+ .name = "IPC_SERVICE_TEST_BASIC",
+ .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
+ .signal = IPC_SERVICE_TEST_BASIC_SIGNAL,
+ .sid = 0x0000F080,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "IPC_SERVICE_TEST_PSA_ACCESS_APP_MEM",
+ .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
+ .signal = IPC_SERVICE_TEST_PSA_ACCESS_APP_MEM_SIGNAL,
+ .sid = 0x0000F081,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "IPC_SERVICE_TEST_PSA_ACCESS_APP_READ_ONLY_MEM",
+ .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
+ .signal = IPC_SERVICE_TEST_PSA_ACCESS_APP_READ_ONLY_MEM_SIGNAL,
+ .sid = 0x0000F082,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "IPC_SERVICE_TEST_APP_ACCESS_PSA_MEM",
+ .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
+ .signal = IPC_SERVICE_TEST_APP_ACCESS_PSA_MEM_SIGNAL,
+ .sid = 0x0000F083,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE_IPC
+ /******** TFM_SP_IPC_CLIENT_TEST ********/
+ {
+ .name = "IPC_CLIENT_TEST_BASIC",
+ .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
+ .signal = IPC_CLIENT_TEST_BASIC_SIGNAL,
+ .sid = 0x0000F060,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "IPC_CLIENT_TEST_PSA_ACCESS_APP_MEM",
+ .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
+ .signal = IPC_CLIENT_TEST_PSA_ACCESS_APP_MEM_SIGNAL,
+ .sid = 0x0000F061,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "IPC_CLIENT_TEST_PSA_ACCESS_APP_READ_ONLY_MEM",
+ .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
+ .signal = IPC_CLIENT_TEST_PSA_ACCESS_APP_READ_ONLY_MEM_SIGNAL,
+ .sid = 0x0000F062,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "IPC_CLIENT_TEST_APP_ACCESS_PSA_MEM",
+ .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
+ .signal = IPC_CLIENT_TEST_APP_ACCESS_PSA_MEM_SIGNAL,
+ .sid = 0x0000F063,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "IPC_CLIENT_TEST_MEM_CHECK",
+ .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
+ .signal = IPC_CLIENT_TEST_MEM_CHECK_SIGNAL,
+ .sid = 0x0000F064,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+#endif /* TFM_PARTITION_TEST_CORE_IPC */
+
+#ifdef TFM_PARTITION_TEST_CORE
+ /******** TFM_IRQ_TEST_1 ********/
+ {
+ .name = "SPM_CORE_IRQ_TEST_1_PREPARE_TEST_SCENARIO",
+ .partition_id = TFM_IRQ_TEST_1_ID,
+ .signal = SPM_CORE_IRQ_TEST_1_PREPARE_TEST_SCENARIO_SIGNAL,
+ .sid = 0x0000F0A0,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+ {
+ .name = "SPM_CORE_IRQ_TEST_1_EXECUTE_TEST_SCENARIO",
+ .partition_id = TFM_IRQ_TEST_1_ID,
+ .signal = SPM_CORE_IRQ_TEST_1_EXECUTE_TEST_SCENARIO_SIGNAL,
+ .sid = 0x0000F0A1,
+ .non_secure_client = true,
+ .minor_version = 1,
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ },
+#endif /* TFM_PARTITION_TEST_CORE */
+
+};
+
/**************************************************************************/
/** The service list */
/**************************************************************************/
@@ -29,75 +414,35 @@
{
/******** TFM_SP_STORAGE ********/
{
- .service_db = {
- .name = "TFM_SST_SET",
- .partition_id = TFM_SP_STORAGE_ID,
- .signal = TFM_SST_SET_SIG,
- .sid = 0x00000060,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "TFM_SST_GET",
- .partition_id = TFM_SP_STORAGE_ID,
- .signal = TFM_SST_GET_SIG,
- .sid = 0x00000061,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "TFM_SST_GET_INFO",
- .partition_id = TFM_SP_STORAGE_ID,
- .signal = TFM_SST_GET_INFO_SIG,
- .sid = 0x00000062,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "TFM_SST_REMOVE",
- .partition_id = TFM_SP_STORAGE_ID,
- .signal = TFM_SST_REMOVE_SIG,
- .sid = 0x00000063,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "TFM_SST_GET_SUPPORT",
- .partition_id = TFM_SP_STORAGE_ID,
- .signal = TFM_SST_GET_SUPPORT_SIG,
- .sid = 0x00000064,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
@@ -106,15 +451,7 @@
/******** TFM_SP_CRYPTO ********/
{
- .service_db = {
- .name = "TFM_CRYPTO",
- .partition_id = TFM_SP_CRYPTO_ID,
- .signal = TFM_CRYPTO_SIG,
- .sid = 0x00000080,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
@@ -123,30 +460,14 @@
/******** TFM_SP_INITIAL_ATTESTATION ********/
{
- .service_db = {
- .name = "TFM_ATTEST_GET_TOKEN",
- .partition_id = TFM_SP_INITIAL_ATTESTATION_ID,
- .signal = PSA_ATTEST_GET_TOKEN_SIG,
- .sid = 0x00000020,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "TFM_ATTEST_GET_TOKEN_SIZE",
- .partition_id = TFM_SP_INITIAL_ATTESTATION_ID,
- .signal = PSA_ATTEST_GET_TOKEN_SIZE_SIG,
- .sid = 0x00000021,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
@@ -156,195 +477,91 @@
#ifdef TFM_PARTITION_TEST_CORE
/******** TFM_SP_CORE_TEST ********/
{
- .service_db = {
- .name = "SPM_CORE_TEST_INIT_SUCCESS",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_INIT_SUCCESS_SIGNAL,
- .sid = 0x0000F020,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_DIRECT_RECURSION",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_DIRECT_RECURSION_SIGNAL,
- .sid = 0x0000F021,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_MPU_ACCESS",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_MPU_ACCESS_SIGNAL,
- .sid = 0x0000F022,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_MEMORY_PERMISSIONS",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_MEMORY_PERMISSIONS_SIGNAL,
- .sid = 0x0000F023,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_SHARE_REDIRECTION",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_SHARE_REDIRECTION_SIGNAL,
- .sid = 0x0000F024,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_SS_TO_SS",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_SS_TO_SS_SIGNAL,
- .sid = 0x0000F025,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_SS_TO_SS_BUFFER",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_SS_TO_SS_BUFFER_SIGNAL,
- .sid = 0x0000F026,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_OUTVEC_WRITE",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_OUTVEC_WRITE_SIGNAL,
- .sid = 0x0000F027,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_PERIPHERAL_ACCESS",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_PERIPHERAL_ACCESS_SIGNAL,
- .sid = 0x0000F028,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_GET_CALLER_CLIENT_ID",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_GET_CALLER_CLIENT_ID_SIGNAL,
- .sid = 0x0000F029,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_SPM_REQUEST",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_SPM_REQUEST_SIGNAL,
- .sid = 0x0000F02A,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_BLOCK",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_BLOCK_SIGNAL,
- .sid = 0x0000F02B,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_NS_THREAD",
- .partition_id = TFM_SP_CORE_TEST_ID,
- .signal = SPM_CORE_TEST_NS_THREAD_SIGNAL,
- .sid = 0x0000F02C,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
@@ -355,90 +572,42 @@
#ifdef TFM_PARTITION_TEST_CORE
/******** TFM_SP_CORE_TEST_2 ********/
{
- .service_db = {
- .name = "SPM_CORE_TEST_2_SLAVE_SERVICE",
- .partition_id = TFM_SP_CORE_TEST_2_ID,
- .signal = SPM_CORE_TEST_2_SLAVE_SERVICE_SIGNAL,
- .sid = 0x0000F040,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_2_CHECK_CALLER_CLIENT_ID",
- .partition_id = TFM_SP_CORE_TEST_2_ID,
- .signal = SPM_CORE_TEST_2_CHECK_CALLER_CLIENT_ID_SIGNAL,
- .sid = 0x0000F041,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_2_GET_EVERY_SECOND_BYTE",
- .partition_id = TFM_SP_CORE_TEST_2_ID,
- .signal = SPM_CORE_TEST_2_GET_EVERY_SECOND_BYTE_SIGNAL,
- .sid = 0x0000F042,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_2_INVERT",
- .partition_id = TFM_SP_CORE_TEST_2_ID,
- .signal = SPM_CORE_TEST_2_INVERT_SIGNAL,
- .sid = 0x0000F043,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_2_PREPARE_TEST_SCENARIO",
- .partition_id = TFM_SP_CORE_TEST_2_ID,
- .signal = SPM_CORE_TEST_2_PREPARE_TEST_SCENARIO_SIGNAL,
- .sid = 0x0000F044,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_TEST_2_EXECUTE_TEST_SCENARIO",
- .partition_id = TFM_SP_CORE_TEST_2_ID,
- .signal = SPM_CORE_TEST_2_EXECUTE_TEST_SCENARIO_SIGNAL,
- .sid = 0x0000F045,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
@@ -449,15 +618,7 @@
#ifdef TFM_PARTITION_TEST_SECURE_SERVICES
/******** TFM_SP_SECURE_TEST_PARTITION ********/
{
- .service_db = {
- .name = "TFM_SECURE_CLIENT_SFN_RUN_TESTS",
- .partition_id = TFM_SP_SECURE_TEST_PARTITION_ID,
- .signal = TFM_SECURE_CLIENT_SFN_RUN_TESTS_SIG,
- .sid = 0x0000F000,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
@@ -468,60 +629,28 @@
#ifdef TFM_PARTITION_TEST_CORE_IPC
/******** TFM_SP_IPC_SERVICE_TEST ********/
{
- .service_db = {
- .name = "IPC_SERVICE_TEST_BASIC",
- .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
- .signal = IPC_SERVICE_TEST_BASIC_SIGNAL,
- .sid = 0x0000F080,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "IPC_SERVICE_TEST_PSA_ACCESS_APP_MEM",
- .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
- .signal = IPC_SERVICE_TEST_PSA_ACCESS_APP_MEM_SIGNAL,
- .sid = 0x0000F081,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "IPC_SERVICE_TEST_PSA_ACCESS_APP_READ_ONLY_MEM",
- .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
- .signal = IPC_SERVICE_TEST_PSA_ACCESS_APP_READ_ONLY_MEM_SIGNAL,
- .sid = 0x0000F082,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "IPC_SERVICE_TEST_APP_ACCESS_PSA_MEM",
- .partition_id = TFM_SP_IPC_SERVICE_TEST_ID,
- .signal = IPC_SERVICE_TEST_APP_ACCESS_PSA_MEM_SIGNAL,
- .sid = 0x0000F083,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
@@ -532,75 +661,35 @@
#ifdef TFM_PARTITION_TEST_CORE_IPC
/******** TFM_SP_IPC_CLIENT_TEST ********/
{
- .service_db = {
- .name = "IPC_CLIENT_TEST_BASIC",
- .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
- .signal = IPC_CLIENT_TEST_BASIC_SIGNAL,
- .sid = 0x0000F060,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "IPC_CLIENT_TEST_PSA_ACCESS_APP_MEM",
- .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
- .signal = IPC_CLIENT_TEST_PSA_ACCESS_APP_MEM_SIGNAL,
- .sid = 0x0000F061,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "IPC_CLIENT_TEST_PSA_ACCESS_APP_READ_ONLY_MEM",
- .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
- .signal = IPC_CLIENT_TEST_PSA_ACCESS_APP_READ_ONLY_MEM_SIGNAL,
- .sid = 0x0000F062,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "IPC_CLIENT_TEST_APP_ACCESS_PSA_MEM",
- .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
- .signal = IPC_CLIENT_TEST_APP_ACCESS_PSA_MEM_SIGNAL,
- .sid = 0x0000F063,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "IPC_CLIENT_TEST_MEM_CHECK",
- .partition_id = TFM_SP_IPC_CLIENT_TEST_ID,
- .signal = IPC_CLIENT_TEST_MEM_CHECK_SIGNAL,
- .sid = 0x0000F064,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
@@ -611,30 +700,14 @@
#ifdef TFM_ENABLE_IRQ_TEST
/******** TFM_IRQ_TEST_1 ********/
{
- .service_db = {
- .name = "SPM_CORE_IRQ_TEST_1_PREPARE_TEST_SCENARIO",
- .partition_id = TFM_IRQ_TEST_1_ID,
- .signal = SPM_CORE_IRQ_TEST_1_PREPARE_TEST_SCENARIO_SIGNAL,
- .sid = 0x0000F0A0,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
.list = {0},
},
{
- .service_db = {
- .name = "SPM_CORE_IRQ_TEST_1_EXECUTE_TEST_SCENARIO",
- .partition_id = TFM_IRQ_TEST_1_ID,
- .signal = SPM_CORE_IRQ_TEST_1_EXECUTE_TEST_SCENARIO_SIGNAL,
- .sid = 0x0000F0A1,
- .non_secure_client = true,
- .minor_version = 1,
- .minor_policy = TFM_VERSION_POLICY_STRICT
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
@@ -643,4 +716,5 @@
#endif /* TFM_ENABLE_IRQ_TEST */
};
+
#endif /* __TFM_SERVICE_LIST_INC__ */
diff --git a/secure_fw/services/tfm_service_list.inc.template b/secure_fw/services/tfm_service_list.inc.template
index 3cfb945..02c63d3 100644
--- a/secure_fw/services/tfm_service_list.inc.template
+++ b/secure_fw/services/tfm_service_list.inc.template
@@ -14,6 +14,47 @@
#include "{{header}}"
{% endfor %}
+const struct tfm_spm_service_db_t service_db[] =
+{
+{% for manifest in manifests %}
+ {% if manifest.attr.tfm_partition_ipc %}
+ {% if manifest.manifest.services %}
+ {% if manifest.attr.conditional %}
+#ifdef {{manifest.attr.conditional}}
+ {% endif %}
+ /******** {{manifest.manifest.name}} ********/
+ {% for service in manifest.manifest.services %}
+ {{'{'}}
+ .name = "{{service.name}}",
+ .partition_id = {{manifest.manifest.name}}_ID,
+ .signal = {{service.signal}},
+ .sid = {{service.sid}},
+ {% if service.non_secure_clients is sameas true %}
+ .non_secure_client = true,
+ {% else %}
+ .non_secure_client = false,
+ {% endif %}
+ {% if service.minor_version %}
+ .minor_version = {{service.minor_version}},
+ {% else %}
+ .minor_version = 1,
+ {% endif %}
+ {% if service.minor_policy %}
+ .minor_policy = TFM_VERSION_POLICY_{{service.minor_policy}}
+ {% else %}
+ .minor_policy = TFM_VERSION_POLICY_STRICT
+ {% endif %}
+ {{'}'}},
+ {% endfor %}
+ {% if manifest.attr.conditional %}
+#endif /* {{manifest.attr.conditional}} */
+ {% endif %}
+ {% endif %}
+
+ {% endif %}
+{% endfor %}
+};
+
/**************************************************************************/
/** The service list */
/**************************************************************************/
@@ -28,27 +69,7 @@
/******** {{manifest.manifest.name}} ********/
{% for service in manifest.manifest.services %}
{{'{'}}
- .service_db = {
- .name = "{{service.name}}",
- .partition_id = {{manifest.manifest.name}}_ID,
- .signal = {{service.signal}},
- .sid = {{service.sid}},
- {% if service.non_secure_clients is sameas true %}
- .non_secure_client = true,
- {% else %}
- .non_secure_client = false,
- {% endif %}
- {% if service.minor_version %}
- .minor_version = {{service.minor_version}},
- {% else %}
- .minor_version = 1,
- {% endif %}
- {% if service.minor_policy %}
- .minor_policy = TFM_VERSION_POLICY_{{service.minor_policy}}
- {% else %}
- .minor_policy = TFM_VERSION_POLICY_STRICT
- {% endif %}
- },
+ .service_db = NULL,
.partition = NULL,
.handle_list = {0},
.msg_queue = {0},
@@ -63,4 +84,5 @@
{% endif %}
{% endfor %}
};
+
#endif /* __TFM_SERVICE_LIST_INC__ */
diff --git a/secure_fw/spm/spm_api.h b/secure_fw/spm/spm_api.h
index 3edd8a8..99d35a2 100644
--- a/secure_fw/spm/spm_api.h
+++ b/secure_fw/spm/spm_api.h
@@ -136,7 +136,7 @@
/* RoT Service data */
struct tfm_spm_service_t {
- struct tfm_spm_service_db_t service_db; /* Service database pointer */
+ const struct tfm_spm_service_db_t *service_db;/* Service database pointer */
struct spm_partition_desc_t *partition; /*
* Point to secure partition
* data
diff --git a/secure_fw/spm/spm_api_ipc.c b/secure_fw/spm/spm_api_ipc.c
index 13a00bb..3db55b5 100644
--- a/secure_fw/spm/spm_api_ipc.c
+++ b/secure_fw/spm/spm_api_ipc.c
@@ -32,6 +32,7 @@
/* Extern service variable */
extern struct tfm_spm_service_t service[];
+extern const struct tfm_spm_service_db_t service_db[];
/* Extern SPM variable */
extern struct spm_partition_db_t g_spm_partition_db;
@@ -151,7 +152,7 @@
head = &partition->runtime_data.service_list;
TFM_LIST_FOR_EACH(node, head) {
service = TFM_GET_CONTAINER_PTR(node, struct tfm_spm_service_t, list);
- if (service->service_db.signal == signal) {
+ if (service->service_db->signal == signal) {
return service;
}
}
@@ -180,7 +181,7 @@
TFM_LIST_FOR_EACH(node, head) {
service = TFM_GET_CONTAINER_PTR(node, struct tfm_spm_service_t,
list);
- if (service->service_db.sid == sid) {
+ if (service->service_db->sid == sid) {
return service;
}
}
@@ -218,14 +219,14 @@
{
TFM_ASSERT(service);
- switch (service->service_db.minor_policy) {
+ switch (service->service_db->minor_policy) {
case TFM_VERSION_POLICY_RELAXED:
- if (minor_version > service->service_db.minor_version) {
+ if (minor_version > service->service_db->minor_version) {
return IPC_ERROR_VERSION;
}
break;
case TFM_VERSION_POLICY_STRICT:
- if (minor_version != service->service_db.minor_version) {
+ if (minor_version != service->service_db->minor_version) {
return IPC_ERROR_VERSION;
}
break;
@@ -350,7 +351,7 @@
}
/* Messages put. Update signals */
- p_runtime_data->signals |= service->service_db.signal;
+ p_runtime_data->signals |= service->service_db->signal;
tfm_event_wake(&p_runtime_data->signal_evnt, (p_runtime_data->signals &
p_runtime_data->signal_mask));
@@ -448,7 +449,6 @@
{
uint32_t i, num;
struct spm_partition_desc_t *partition;
- /*struct tfm_spm_service_t *service;*/
struct tfm_thrd_ctx *pth, this_thrd;
tfm_pool_init(conn_handle_pool,
@@ -490,8 +490,9 @@
/* Init Service */
num = sizeof(service) / sizeof(struct tfm_spm_service_t);
for (i = 0; i < num; i++) {
+ service[i].service_db = &service_db[i];
partition =
- tfm_spm_get_partition_by_id(service[i].service_db.partition_id);
+ tfm_spm_get_partition_by_id(service[i].service_db->partition_id);
if (!partition) {
tfm_panic();
}