feat(ffa-svc): add `ffa_func_name` and `ffa_error_name`
Adds helper functions for getting string representations of function
identifiers and error codes. This makes debug logs more readable than
printing the integer value.
Change-Id: I9e74c197686dc08e0c71886f641c60829587bad6
Signed-off-by: Karl Meakin <karl.meakin@arm.com>
diff --git a/include/runtime_services/ffa_svc.h b/include/runtime_services/ffa_svc.h
index 226bbd1..0e6081e 100644
--- a/include/runtime_services/ffa_svc.h
+++ b/include/runtime_services/ffa_svc.h
@@ -11,7 +11,10 @@
#include <smccc.h>
#include <uuid.h>
-/* FFA error codes. */
+/**
+ * FFA error codes.
+ * Don't forget to update `ffa_error_name` if you add a new one.
+ */
#define FFA_ERROR_NOT_SUPPORTED -1
#define FFA_ERROR_INVALID_PARAMETER -2
#define FFA_ERROR_NO_MEMORY -3
@@ -22,6 +25,33 @@
#define FFA_ERROR_ABORTED -8
#define FFA_ERROR_NO_DATA -9
+/* Return the name of the error code. */
+static inline const char *ffa_error_name(int32_t error)
+{
+ switch (error) {
+ case FFA_ERROR_NOT_SUPPORTED:
+ return "FFA_ERROR_NOT_SUPPORTED";
+ case FFA_ERROR_INVALID_PARAMETER:
+ return "FFA_ERROR_INVALID_PARAMETER";
+ case FFA_ERROR_NO_MEMORY:
+ return "FFA_ERROR_NO_MEMORY";
+ case FFA_ERROR_BUSY:
+ return "FFA_ERROR_BUSY";
+ case FFA_ERROR_INTERRUPTED:
+ return "FFA_ERROR_INTERRUPTED";
+ case FFA_ERROR_DENIED:
+ return "FFA_ERROR_DENIED";
+ case FFA_ERROR_RETRY:
+ return "FFA_ERROR_RETRY";
+ case FFA_ERROR_ABORTED:
+ return "FFA_ERROR_ABORTED";
+ case FFA_ERROR_NO_DATA:
+ return "FFA_ERROR_NO_DATA";
+ default:
+ return "UNKNOWN";
+ }
+}
+
/* The macros below are used to identify FFA calls from the SMC function ID */
#define FFA_FNUM_MIN_VALUE U(0x60)
#define FFA_FNUM_MAX_VALUE U(0x8C)
@@ -61,7 +91,10 @@
(OEN_STD_START << FUNCID_OEN_SHIFT) | \
((func_num) << FUNCID_NUM_SHIFT))
-/* FFA function numbers */
+/**
+ * FFA function numbers.
+ * Don't forget to update `ffa_func_name` if you add a new one.
+ */
#define FFA_FNUM_ERROR U(0x60)
#define FFA_FNUM_SUCCESS U(0x61)
#define FFA_FNUM_INTERRUPT U(0x62)
@@ -176,6 +209,103 @@
/* Implementation defined SMC64 FIDs */
#define FFA_CONSOLE_LOG_SMC64 FFA_FID(SMC_64, FFA_FNUM_CONSOLE_LOG)
+
+static inline const char *ffa_func_name(uint32_t func)
+{
+ switch (func) {
+ case FFA_ERROR:
+ return "FFA_ERROR";
+ case FFA_SUCCESS_SMC32:
+ return "FFA_SUCCESS_SMC32";
+ case FFA_INTERRUPT:
+ return "FFA_INTERRUPT";
+ case FFA_VERSION:
+ return "FFA_VERSION";
+ case FFA_FEATURES:
+ return "FFA_FEATURES";
+ case FFA_RX_RELEASE:
+ return "FFA_RX_RELEASE";
+ case FFA_RXTX_MAP_SMC32:
+ return "FFA_RXTX_MAP_SMC32";
+ case FFA_RXTX_UNMAP:
+ return "FFA_RXTX_UNMAP";
+ case FFA_PARTITION_INFO_GET:
+ return "FFA_PARTITION_INFO_GET";
+ case FFA_ID_GET:
+ return "FFA_ID_GET";
+ case FFA_MSG_POLL:
+ return "FFA_MSG_POLL";
+ case FFA_MSG_WAIT:
+ return "FFA_MSG_WAIT";
+ case FFA_MSG_YIELD:
+ return "FFA_MSG_YIELD";
+ case FFA_RUN:
+ return "FFA_RUN";
+ case FFA_MSG_SEND:
+ return "FFA_MSG_SEND";
+ case FFA_MSG_SEND_DIRECT_RESP_SMC32:
+ return "FFA_MSG_SEND_DIRECT_RESP_SMC32";
+ case FFA_MEM_DONATE_SMC32:
+ return "FFA_MEM_DONATE_SMC32";
+ case FFA_MEM_LEND_SMC32:
+ return "FFA_MEM_LEND_SMC32";
+ case FFA_MEM_SHARE_SMC32:
+ return "FFA_MEM_SHARE_SMC32";
+ case FFA_MEM_RETRIEVE_REQ_SMC32:
+ return "FFA_MEM_RETRIEVE_REQ_SMC32";
+ case FFA_MEM_RETRIEVE_RESP:
+ return "FFA_MEM_RETRIEVE_RESP";
+ case FFA_MEM_RELINQUISH:
+ return "FFA_MEM_RELINQUISH";
+ case FFA_MEM_RECLAIM:
+ return "FFA_MEM_RECLAIM";
+ case FFA_NOTIFICATION_BITMAP_CREATE:
+ return "FFA_NOTIFICATION_BITMAP_CREATE";
+ case FFA_NOTIFICATION_BITMAP_DESTROY:
+ return "FFA_NOTIFICATION_BITMAP_DESTROY";
+ case FFA_NOTIFICATION_BIND:
+ return "FFA_NOTIFICATION_BIND";
+ case FFA_NOTIFICATION_UNBIND:
+ return "FFA_NOTIFICATION_UNBIND";
+ case FFA_NOTIFICATION_SET:
+ return "FFA_NOTIFICATION_SET";
+ case FFA_NOTIFICATION_GET:
+ return "FFA_NOTIFICATION_GET";
+ case FFA_NOTIFICATION_INFO_GET:
+ return "FFA_NOTIFICATION_INFO_GET";
+ case FFA_SPM_ID_GET:
+ return "FFA_SPM_ID_GET";
+ case FFA_SUCCESS_SMC64:
+ return "FFA_SUCCESS_SMC64";
+ case FFA_RXTX_MAP_SMC64:
+ return "FFA_RXTX_MAP_SMC64";
+ case FFA_MSG_SEND_DIRECT_REQ_SMC64:
+ return "FFA_MSG_SEND_DIRECT_REQ_SMC64";
+ case FFA_MSG_SEND_DIRECT_RESP_SMC64:
+ return "FFA_MSG_SEND_DIRECT_RESP_SMC64";
+ case FFA_MEM_DONATE_SMC64:
+ return "FFA_MEM_DONATE_SMC64";
+ case FFA_MEM_LEND_SMC64:
+ return "FFA_MEM_LEND_SMC64";
+ case FFA_MEM_SHARE_SMC64:
+ return "FFA_MEM_SHARE_SMC64";
+ case FFA_MEM_RETRIEVE_REQ_SMC64:
+ return "FFA_MEM_RETRIEVE_REQ_SMC64";
+ case FFA_SECONDARY_EP_REGISTER_SMC64:
+ return "FFA_SECONDARY_EP_REGISTER_SMC64";
+ case FFA_NOTIFICATION_INFO_GET_SMC64:
+ return "FFA_NOTIFICATION_INFO_GET_SMC64";
+ case FFA_FEATURES_MEM_RETRIEVE_REQ_NS_SUPPORT:
+ return "FFA_FEATURES_MEM_RETRIEVE_REQ_NS_SUPPORT";
+ case FFA_PARTITION_INFO_GET_REGS_SMC64:
+ return "FFA_PARTITION_INFO_GET_REGS_SMC64";
+ case FFA_CONSOLE_LOG_SMC64:
+ return "FFA_CONSOLE_LOG_SMC64";
+ default:
+ return "UNKNOWN";
+ }
+}
+
/*
* Reserve a special value for traffic targeted to the Hypervisor or SPM.
*/