Integrate routing extension into existing SPs

The RPC layer uses the SP messaging layer with the routing extension
enabled thus it makes SPs able to make or forward return channel calls.

Change-Id: Id359b0e570702404ef0151697436d454eb950e44
Signed-off-by: Imre Kis <imre.kis@arm.com>
diff --git a/deployments/crypto/opteesp/crypto_sp.c b/deployments/crypto/opteesp/crypto_sp.c
index b9c1fb2..f3679d1 100644
--- a/deployments/crypto/opteesp/crypto_sp.c
+++ b/deployments/crypto/opteesp/crypto_sp.c
@@ -14,6 +14,7 @@
 #include <config/loader/sp/sp_config_loader.h>
 #include <ffa_api.h>
 #include <sp_api.h>
+#include <sp_messaging.h>
 #include <sp_rxtx.h>
 #include <trace.h>
 
@@ -28,7 +29,8 @@
 	struct mbed_crypto_provider crypto_provider;
 	struct ffa_call_ep ffarpc_call_ep;
 	struct rpc_interface *crypto_iface;
-	struct ffa_direct_msg req_msg;
+	struct sp_msg req_msg = { 0 };
+	struct sp_msg resp_msg = { 0 };
 	struct storage_backend *storage_backend;
 
 	/* Boot phase */
@@ -53,20 +55,15 @@
 	ffa_call_ep_init(&ffarpc_call_ep, crypto_iface);
 
 	/* End of boot phase */
-	ffa_msg_wait(&req_msg);
+	sp_msg_wait(&req_msg);
 
 	while (1) {
-		if (req_msg.function_id == FFA_MSG_SEND_DIRECT_REQ_32) {
+		ffa_call_ep_receive(&ffarpc_call_ep, &req_msg, &resp_msg);
 
-			struct ffa_direct_msg resp_msg;
+		resp_msg.source_id = req_msg.destination_id;
+		resp_msg.destination_id = req_msg.source_id;
 
-			ffa_call_ep_receive(&ffarpc_call_ep, &req_msg, &resp_msg);
-
-			ffa_msg_send_direct_resp(req_msg.destination_id,
-					req_msg.source_id, resp_msg.args[0], resp_msg.args[1],
-					resp_msg.args[2], resp_msg.args[3], resp_msg.args[4],
-					&req_msg);
-		}
+		sp_msg_send_direct_resp(&resp_msg, &req_msg);
 	}
 
 fatal_error:
diff --git a/deployments/internal-trusted-storage/opteesp/sp.c b/deployments/internal-trusted-storage/opteesp/sp.c
index 626c2d4..a469905 100644
--- a/deployments/internal-trusted-storage/opteesp/sp.c
+++ b/deployments/internal-trusted-storage/opteesp/sp.c
@@ -11,6 +11,7 @@
 #include <components/service/secure_storage/factory/storage_factory.h>
 #include <components/service/secure_storage/frontend/secure_storage_provider/secure_storage_provider.h>
 #include <sp_api.h>
+#include <sp_messaging.h>
 #include <sp_rxtx.h>
 #include <trace.h>
 
@@ -24,8 +25,8 @@
 	sp_result sp_res;
 	struct rpc_interface *secure_storage_iface;
 	struct ffa_call_ep ffa_call_ep;
-	struct ffa_direct_msg req_msg;
-	struct ffa_direct_msg resp_msg;
+	struct sp_msg req_msg = { 0 };
+	struct sp_msg resp_msg = { 0 };
 	struct secure_storage_provider secure_storage_provider;
 	struct storage_backend *storage_backend;
 
@@ -47,17 +48,15 @@
 	ffa_call_ep_init(&ffa_call_ep, secure_storage_iface);
 
 	/* End of boot phase */
-	ffa_msg_wait(&req_msg);
+	sp_msg_wait(&req_msg);
 
 	while (1) {
-		if (req_msg.function_id == FFA_MSG_SEND_DIRECT_REQ_32) {
-			ffa_call_ep_receive(&ffa_call_ep, &req_msg, &resp_msg);
+		ffa_call_ep_receive(&ffa_call_ep, &req_msg, &resp_msg);
 
-			ffa_msg_send_direct_resp(req_msg.destination_id,
-					req_msg.source_id, resp_msg.args[0], resp_msg.args[1],
-					resp_msg.args[2], resp_msg.args[3], resp_msg.args[4],
-					&req_msg);
-		}
+		resp_msg.source_id = req_msg.destination_id;
+		resp_msg.destination_id = req_msg.source_id;
+
+		sp_msg_send_direct_resp(&resp_msg, &req_msg);
 	}
 }
 
diff --git a/deployments/protected-storage/opteesp/sp.c b/deployments/protected-storage/opteesp/sp.c
index 3bf3f1d..af75d89 100644
--- a/deployments/protected-storage/opteesp/sp.c
+++ b/deployments/protected-storage/opteesp/sp.c
@@ -11,6 +11,7 @@
 #include <components/service/secure_storage/factory/storage_factory.h>
 #include <components/service/secure_storage/frontend/secure_storage_provider/secure_storage_provider.h>
 #include <sp_api.h>
+#include <sp_messaging.h>
 #include <sp_rxtx.h>
 #include <trace.h>
 
@@ -24,8 +25,8 @@
 	sp_result sp_res;
 	struct rpc_interface *secure_storage_iface;
 	struct ffa_call_ep ffa_call_ep;
-	struct ffa_direct_msg req_msg;
-	struct ffa_direct_msg resp_msg;
+	struct sp_msg req_msg = { 0 };
+	struct sp_msg resp_msg = { 0 };
 	struct secure_storage_provider secure_storage_provider;
 	struct storage_backend *storage_backend;
 
@@ -47,17 +48,15 @@
 	ffa_call_ep_init(&ffa_call_ep, secure_storage_iface);
 
 	/* End of boot phase */
-	ffa_msg_wait(&req_msg);
+	sp_msg_wait(&req_msg);
 
 	while (1) {
-		if (req_msg.function_id == FFA_MSG_SEND_DIRECT_REQ_32) {
-			ffa_call_ep_receive(&ffa_call_ep, &req_msg, &resp_msg);
+		ffa_call_ep_receive(&ffa_call_ep, &req_msg, &resp_msg);
 
-			ffa_msg_send_direct_resp(req_msg.destination_id,
-					req_msg.source_id, resp_msg.args[0], resp_msg.args[1],
-					resp_msg.args[2], resp_msg.args[3], resp_msg.args[4],
-					&req_msg);
-		}
+		resp_msg.source_id = req_msg.destination_id;
+		resp_msg.destination_id = req_msg.source_id;
+
+		sp_msg_send_direct_resp(&resp_msg, &req_msg);
 	}
 }
 
diff --git a/deployments/sfs-demo/opteesp/sp.c b/deployments/sfs-demo/opteesp/sp.c
index 1d8fe87..1f049ae 100644
--- a/deployments/sfs-demo/opteesp/sp.c
+++ b/deployments/sfs-demo/opteesp/sp.c
@@ -11,6 +11,7 @@
 #include <service/secure_storage/backend/secure_storage_client/secure_storage_client.h>
 #include <psa/internal_trusted_storage.h>
 #include <sp_api.h>
+#include "sp_messaging.h"
 #include <sp_rxtx.h>
 #include <trace.h>
 #include <string.h>
@@ -131,7 +132,7 @@
 
 	ffa_result ffa_res;
 	sp_result sp_res;
-	struct ffa_direct_msg req_msg;
+	struct sp_msg req_msg = { 0 };
 	struct rpc_caller *caller;
 	struct ffarpc_caller ffa_caller;
 	struct secure_storage_client secure_storage_client;
@@ -181,7 +182,7 @@
 	}
 
 	/* End of boot phase */
-	ffa_msg_wait(&req_msg);
+	sp_msg_wait(&req_msg);
 
 err:
 	EMSG("Test SP error");