Cactus: Extend arguments in commands responses

In the test commands framework, added template to extend number of
values to include in a command response. This allows for a more
complete use of the available registers in direct message interfaces.

Signed-off-by: J-Alves <joao.alves@arm.com>
Change-Id: I34947f100c6322ca7319847cf44e844d63855c9d
diff --git a/spm/cactus/cactus_test_cmds.h b/spm/cactus/cactus_test_cmds.h
index c662d27..f814ba5 100644
--- a/spm/cactus/cactus_test_cmds.h
+++ b/spm/cactus/cactus_test_cmds.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020-2021, Arm Limited. All rights reserved.
+ * Copyright (c) 2021, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -36,6 +36,63 @@
 						val2, val3);
 }
 
+/**
+ * Template for responses to Cactus commands.
+ * 'cactus_send_response' is the template for custom responses, in case there is
+ * a need to propagate more than one value in the response of a command.
+ */
+static inline smc_ret_values cactus_send_response(
+	ffa_vm_id_t source, ffa_vm_id_t dest, uint32_t resp, uint32_t val0,
+	uint64_t val1, uint64_t val2, uint64_t val3)
+{
+	return ffa_msg_send_direct_resp64_5args(source, dest, resp, val0, val1,
+						val2, val3);
+}
+
+/**
+ * For responses of one value only.
+ */
+static inline smc_ret_values cactus_response(
+	ffa_vm_id_t source, ffa_vm_id_t dest, uint32_t response)
+{
+	return ffa_msg_send_direct_resp(source, dest, response);
+}
+
+static inline uint32_t cactus_get_response(smc_ret_values ret)
+{
+	return (uint32_t)ret.ret3;
+}
+
+/**
+ * In a successful test, in case the SP needs to propagate an extra value
+ * to conclude the test.
+ * If more arguments are needed, a custom response should be defined for the
+ * specific test.
+ */
+static inline smc_ret_values cactus_success_resp(
+		ffa_vm_id_t source, ffa_vm_id_t dest, uint64_t value)
+{
+	return cactus_send_response(source, dest, CACTUS_SUCCESS, value,
+				    0, 0, 0);
+}
+
+/**
+ * In case the test fails on the SP side, the 'error_code' should help specify
+ * the reason, which can be specific to the test, or general ones as defined
+ * in the error code list.
+ */
+static inline smc_ret_values cactus_error_resp(
+		ffa_vm_id_t source, ffa_vm_id_t dest, uint32_t error_code)
+{
+	return cactus_send_response(source, dest, CACTUS_ERROR, error_code,
+				    0, 0, 0);
+}
+
+static inline uint32_t cactus_error_code(smc_ret_values ret)
+{
+	return (uint32_t) ret.ret4;
+}
+
 #define PRINT_CMD(smc_ret)						\
 	VERBOSE("cmd %lx; args: %lx, %lx, %lx, %lx\n",	 		\
 		smc_ret.ret3, smc_ret.ret4, smc_ret.ret5, 		\
@@ -189,30 +246,4 @@
 	return cactus_send_cmd(source, dest, CACTUS_REQ_SIMD_FILL_CMD, 0, 0, 0, 0);
 }
 
-/**
- * Template for responses to CACTUS commands.
- */
-static inline smc_ret_values cactus_response(
-	ffa_vm_id_t source, ffa_vm_id_t dest, uint32_t response)
-{
-	return ffa_msg_send_direct_resp(source, dest, response);
-}
-
-static inline smc_ret_values cactus_success_resp(
-		ffa_vm_id_t source, ffa_vm_id_t dest)
-{
-	return cactus_response(source, dest, CACTUS_SUCCESS);
-}
-
-static inline smc_ret_values cactus_error_resp(
-		ffa_vm_id_t source, ffa_vm_id_t dest)
-{
-	return cactus_response(source, dest, CACTUS_ERROR);
-}
-
-static inline uint32_t cactus_get_response(smc_ret_values ret)
-{
-	return (uint32_t)ret.ret3;
-}
-
 #endif