SPM: Involve SPM backends
Compare to the existing IPC runtime model and the upcoming SFN
runtime model, they:
- Have different component runtime initialization methods:
thread vs thread-less.
- Have different messaging mechanisms: scheduling vs function call.
- Have different system kick-off mechanisms: scheduling vs calling
into partition initialization routines one by one.
Create backends for addressing these differentiate. And IPC backend
is the first instance. Also fine-tunes backend related items, move
them into backend sources, such as partition list, and change the
way for binding service signals with partitions.
Change-Id: I954af30d65514a13ac9f5f86e5e718cf1c9a697c
Signed-off-by: Ken Liu <ken.liu@arm.com>
Co-authored-by: Mingyang Sun <mingyang.sun@arm.com>
diff --git a/secure_fw/spm/ffm/psa_api.c b/secure_fw/spm/ffm/psa_api.c
index 6e35c57..b38f85c 100644
--- a/secure_fw/spm/ffm/psa_api.c
+++ b/secure_fw/spm/ffm/psa_api.c
@@ -17,6 +17,7 @@
#include "load/interrupt_defs.h"
#include "psa_api.h"
#include "utilities.h"
+#include "ffm/backend.h"
#include "ffm/spm_error_base.h"
#include "tfm_rpc.h"
#include "tfm_spm_hal.h"
@@ -27,7 +28,6 @@
#define GET_STATELESS_SERVICE(index) (stateless_services_ref_tbl[index])
extern struct service_t *stateless_services_ref_tbl[];
-
uint32_t tfm_spm_get_lifecycle_state(void)
{
/*
@@ -130,13 +130,8 @@
tfm_spm_fill_msg(msg, service, handle, PSA_IPC_CONNECT,
client_id, NULL, 0, NULL, 0, NULL);
- /*
- * Send message and wake up the SP who is waiting on message queue,
- * and scheduler triggered
- */
- tfm_spm_send_event(service, msg);
- return PSA_SUCCESS;
+ return backend_instance.messaging(service, msg);
}
psa_status_t tfm_spm_client_psa_call(psa_handle_t handle,
@@ -323,13 +318,7 @@
tfm_spm_fill_msg(msg, service, handle, type, client_id,
invecs, in_num, outvecs, out_num, outptr);
- /*
- * Send message and wake up the SP who is waiting on message queue,
- * and scheduler triggered
- */
- tfm_spm_send_event(service, msg);
-
- return PSA_SUCCESS;
+ return backend_instance.messaging(service, msg);
}
void tfm_spm_client_psa_close(psa_handle_t handle)
@@ -385,11 +374,7 @@
tfm_spm_fill_msg(msg, service, handle, PSA_IPC_DISCONNECT, client_id,
NULL, 0, NULL, 0, NULL);
- /*
- * Send message and wake up the SP who is waiting on message queue,
- * and scheduler triggered
- */
- tfm_spm_send_event(service, msg);
+ (void)backend_instance.messaging(service, msg);
}
/* PSA Partition API function body */