App, Test: Updates for thread mode NS-S transition

 - Remove the SVC call framework from the non-secure
 - Update the S and NS tests to work with the new concept
 - Update documentation to reflect changes

Change-Id: Iac4e1b7d11f264f1905e71a81a1d622421ea5d6d
Signed-off-by: Mate Toth-Pal <mate.toth-pal@arm.com>
diff --git a/interface/src/tfm_log_api.c b/interface/src/tfm_log_api.c
index ae918da..c6b27e7 100644
--- a/interface/src/tfm_log_api.c
+++ b/interface/src/tfm_log_api.c
@@ -5,6 +5,7 @@
  *
  */
 
+#include "tfm_log_veneers.h"
 #include "tfm_log_defs.h"
 #include "tfm_ns_lock.h"
 
@@ -13,28 +14,28 @@
                                   uint8_t *buffer,
                                   struct tfm_log_info *info)
 {
-    return tfm_ns_lock_svc_dispatch(SVC_TFM_LOG_RETRIEVE,
-                                    size,
-                                    (uint32_t)start,
-                                    (uint32_t)buffer,
-                                    (uint32_t)info);
+    return tfm_ns_lock_dispatch((veneer_fn)tfm_log_veneer_retrieve,
+                                size,
+                                (uint32_t)start,
+                                (uint32_t)buffer,
+                                (uint32_t)info);
 }
 
 enum tfm_log_err tfm_log_get_info(struct tfm_log_info *info)
 {
-    return tfm_ns_lock_svc_dispatch(SVC_TFM_LOG_GET_INFO,
-                                    (uint32_t)info,
-                                    0,
-                                    0,
-                                    0);
+    return tfm_ns_lock_dispatch((veneer_fn)tfm_log_veneer_get_info,
+                                (uint32_t)info,
+                                0,
+                                0,
+                                0);
 }
 
 enum tfm_log_err tfm_log_delete_items(uint32_t num_items,
                                       uint32_t *rem_items)
 {
-    return tfm_ns_lock_svc_dispatch(SVC_TFM_LOG_DELETE_ITEMS,
-                                    num_items,
-                                    (uint32_t)rem_items,
-                                    0,
-                                    0);
+    return tfm_ns_lock_dispatch((veneer_fn)tfm_log_veneer_delete_items,
+                                num_items,
+                                (uint32_t)rem_items,
+                                0,
+                                0);
 }
diff --git a/interface/src/tfm_log_svc_handler.c b/interface/src/tfm_log_svc_handler.c
deleted file mode 100644
index 325d6de..0000000
--- a/interface/src/tfm_log_svc_handler.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2018, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#include "tfm_ns_svc.h"
-#include "tfm_log_veneers.h"
-
-/* SVC function implementations */
-enum tfm_log_err tfm_log_svc_retrieve(uint32_t size,
-                                      int32_t start,
-                                      uint8_t* buffer,
-                                      struct tfm_log_info *info)
-{
-    return tfm_log_veneer_retrieve(size, start, buffer, info);
-}
-
-enum tfm_log_err tfm_log_svc_get_info(struct tfm_log_info *info)
-{
-    return tfm_log_veneer_get_info(info);
-}
-
-enum tfm_log_err tfm_log_svc_delete_items(uint32_t num_items,
-                                          uint32_t *rem_items)
-{
-    return tfm_log_veneer_delete_items(num_items, rem_items);
-}
diff --git a/interface/src/tfm_ns_lock_rtx.c b/interface/src/tfm_ns_lock_rtx.c
index 5ec6638..ef6cfe0 100644
--- a/interface/src/tfm_ns_lock_rtx.c
+++ b/interface/src/tfm_ns_lock_rtx.c
@@ -11,7 +11,7 @@
 #include "cmsis_os2.h"
 
 #include "tfm_api.h"
-#include "tfm_ns_svc.h"
+#include "tfm_ns_lock.h"
 
 /**
  * \brief struct ns_lock_state type
@@ -36,86 +36,27 @@
 };
 
 /**
- * \def TFM_SVC_DISPATCH_NAME
- *
- * \brief Macro to declare a SVC dispatch function name
- */
-#define TFM_SVC_DISPATCH_NAME(SVC_ENUM) tfm_svc_dispatch_##SVC_ENUM
-
-/**
- * \def TFM_SVC_DISPATCH_FUNCTION
- *
- * \brief Macro to declare a SVC dispatch naked function body (4 bytes each)
- */
-#define TFM_SVC_DISPATCH_FUNCTION(SVC_ENUM) \
-    __attribute__((naked)) \
-    static uint32_t TFM_SVC_DISPATCH_NAME(SVC_ENUM)(uint32_t arg0, \
-                                                    uint32_t arg1, \
-                                                    uint32_t arg2, \
-                                                    uint32_t arg3) \
-    { \
-        SVC(SVC_ENUM); \
-        __ASM("BX LR"); \
-    }
-
-/**
- * \brief Naked functions associated to each
- *        SVC in the list of X macros
- *        \ref LIST_SVC_DISPATCHERS
- */
-#define X(SVC_ENUM, SVC_HANDLER) TFM_SVC_DISPATCH_FUNCTION(SVC_ENUM);
-LIST_SVC_DISPATCHERS
-#undef X
-
-/**
- * \brief Array with function pointers to the
- *        naked functions. Entry 0 is treated
- *        as invalid. The other entries are
- *        taken automatically from the list of
- *        X macros \ref LIST_SVC_DISPATCHERS
- */
-static void *tfm_svc_dispatch_functions[] = {
-    (void *) NULL, /* SVC_INVALID */
-#define X(SVC_ENUM, SVC_HANDLER) (void *)TFM_SVC_DISPATCH_NAME(SVC_ENUM),
-    LIST_SVC_DISPATCHERS
-#undef X
-};
-
-/**
  * \brief NS world, NS lock based dispatcher
  */
-uint32_t tfm_ns_lock_svc_dispatch(enum tfm_svc_num svc_num,
-                                  uint32_t arg0,
-                                  uint32_t arg1,
-                                  uint32_t arg2,
-                                  uint32_t arg3)
+uint32_t tfm_ns_lock_dispatch(veneer_fn fn,
+                              uint32_t arg0, uint32_t arg1,
+                              uint32_t arg2, uint32_t arg3)
 {
     uint32_t result;
-    uint32_t (*tfm_svc_dispatch_function_p)(uint32_t, uint32_t,
-                                            uint32_t, uint32_t);
-
-    const uint32_t num_svc_dispatchers =
-      sizeof(tfm_svc_dispatch_functions)/sizeof(tfm_svc_dispatch_functions[0]);
 
     /* Check the NS lock has been initialized */
     if (ns_lock.init == false) {
         return TFM_ERROR_GENERIC;
     }
 
-    /* Validate the SVC number requested */
-    if ((svc_num > SVC_INVALID) && (svc_num < num_svc_dispatchers)) {
-        tfm_svc_dispatch_function_p = tfm_svc_dispatch_functions[svc_num];
+    /* TFM request protected by NS lock */
+    osMutexAcquire(ns_lock.id,osWaitForever);
 
-        /* TFM request protected by NS lock */
-        osMutexAcquire(ns_lock.id,osWaitForever);
-        result = (*tfm_svc_dispatch_function_p)(arg0, arg1, arg2, arg3);
-        osMutexRelease(ns_lock.id);
+    result = fn(arg0, arg1, arg2, arg3);
 
-        return result;
-    }
-    else {
-        return TFM_ERROR_GENERIC;
-    }
+    osMutexRelease(ns_lock.id);
+
+    return result;
 }
 
 /**
@@ -132,3 +73,9 @@
         return TFM_ERROR_GENERIC;
     }
 }
+
+bool tfm_ns_lock_get_init_state()
+{
+    return ns_lock.init;
+}
+
diff --git a/interface/src/tfm_sst_api.c b/interface/src/tfm_sst_api.c
index d9947b4..8a3fec8 100644
--- a/interface/src/tfm_sst_api.c
+++ b/interface/src/tfm_sst_api.c
@@ -5,23 +5,28 @@
  *
  */
 
+#include "tfm_sst_veneers.h"
 #include "tfm_sst_defs.h"
 #include "tfm_ns_lock.h"
+#include "tfm_id_mngr.h"
 
 enum psa_sst_err_t psa_sst_create(uint32_t asset_uuid, const uint8_t *token,
                                   uint32_t token_size)
 {
     struct tfm_sst_token_t s_token;
+    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
     s_token.token_size = token_size;
 
-    return tfm_ns_lock_svc_dispatch(SVC_TFM_SST_CREATE,
-                                    asset_uuid,
-                                    (uint32_t)&s_token,
-                                    0,
-                                    0);
+    client_id = tfm_sst_get_cur_id();
+
+    return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_create,
+                                client_id,
+                                asset_uuid,
+                                (uint32_t)&s_token,
+                                0);
 }
 
 enum psa_sst_err_t psa_sst_get_info(uint32_t asset_uuid,
@@ -30,16 +35,19 @@
                                     struct psa_sst_asset_info_t *info)
 {
     struct tfm_sst_token_t s_token;
+    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
     s_token.token_size = token_size;
 
-    return tfm_ns_lock_svc_dispatch(SVC_TFM_SST_GET_INFO,
-                                    asset_uuid,
-                                    (uint32_t)&s_token,
-                                    (uint32_t)info,
-                                    0);
+    client_id = tfm_sst_get_cur_id();
+
+    return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_get_info,
+                                client_id,
+                                asset_uuid,
+                                (uint32_t)&s_token,
+                                (uint32_t)info);
 }
 
 enum psa_sst_err_t psa_sst_get_attributes(uint32_t asset_uuid,
@@ -48,16 +56,19 @@
                                           struct psa_sst_asset_attrs_t *attrs)
 {
     struct tfm_sst_token_t s_token;
+    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
     s_token.token_size = token_size;
 
-    return tfm_ns_lock_svc_dispatch(SVC_TFM_SST_GET_ATTRIBUTES,
-                                    asset_uuid,
-                                    (uint32_t)&s_token,
-                                    (uint32_t)attrs,
-                                    0);
+    client_id = tfm_sst_get_cur_id();
+
+    return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_get_attributes,
+                                client_id,
+                                asset_uuid,
+                                (uint32_t)&s_token,
+                                (uint32_t)attrs);
 }
 
 enum psa_sst_err_t psa_sst_set_attributes(uint32_t asset_uuid,
@@ -66,16 +77,19 @@
                                       const struct psa_sst_asset_attrs_t *attrs)
 {
     struct tfm_sst_token_t s_token;
+    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
     s_token.token_size = token_size;
 
-    return tfm_ns_lock_svc_dispatch(SVC_TFM_SST_SET_ATTRIBUTES,
-                                    asset_uuid,
-                                    (uint32_t)&s_token,
-                                    (uint32_t)attrs,
-                                    0);
+    client_id = tfm_sst_get_cur_id();
+
+    return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_set_attributes,
+                                client_id,
+                                asset_uuid,
+                                (uint32_t)&s_token,
+                                (uint32_t)attrs);
 }
 
 enum psa_sst_err_t psa_sst_read(uint32_t asset_uuid,
@@ -87,6 +101,7 @@
 {
     struct tfm_sst_token_t s_token;
     struct tfm_sst_buf_t   s_data;
+    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
@@ -97,11 +112,13 @@
     s_data.offset = offset;
     s_data.data = data;
 
-    return tfm_ns_lock_svc_dispatch(SVC_TFM_SST_READ,
-                                    asset_uuid,
-                                    (uint32_t)&s_token,
-                                    (uint32_t)&s_data,
-                                    0);
+    client_id = tfm_sst_get_cur_id();
+
+    return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_read,
+                                client_id,
+                                asset_uuid,
+                                (uint32_t)&s_token,
+                                (uint32_t)&s_data);
 }
 
 enum psa_sst_err_t psa_sst_write(uint32_t asset_uuid,
@@ -113,6 +130,7 @@
 {
     struct tfm_sst_token_t s_token;
     struct tfm_sst_buf_t   s_data;
+    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
@@ -123,11 +141,13 @@
     s_data.offset = offset;
     s_data.data = (uint8_t *)data;
 
-    return tfm_ns_lock_svc_dispatch(SVC_TFM_SST_WRITE,
-                                    asset_uuid,
-                                    (uint32_t)&s_token,
-                                    (uint32_t)&s_data,
-                                    0);
+    client_id = tfm_sst_get_cur_id();
+
+    return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_write,
+                                client_id,
+                                asset_uuid,
+                                (uint32_t)&s_token,
+                                (uint32_t)&s_data);
 }
 
 enum psa_sst_err_t psa_sst_delete(uint32_t asset_uuid,
@@ -135,14 +155,17 @@
                                   uint32_t token_size)
 {
     struct tfm_sst_token_t s_token;
+    int32_t client_id;
 
     /* Pack the token information in the token structure */
     s_token.token = token;
     s_token.token_size = token_size;
 
-    return tfm_ns_lock_svc_dispatch(SVC_TFM_SST_DELETE,
-                                    asset_uuid,
-                                    (uint32_t)&s_token,
-                                    0,
-                                    0);
+    client_id = tfm_sst_get_cur_id();
+
+    return tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_delete,
+                                client_id,
+                                asset_uuid,
+                                (uint32_t)&s_token,
+                                0);
 }
diff --git a/interface/src/tfm_sst_svc_handler.c b/interface/src/tfm_sst_svc_handler.c
deleted file mode 100644
index 3fbd3ad..0000000
--- a/interface/src/tfm_sst_svc_handler.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2017-2018, Arm Limited. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
-
-#include <string.h>
-#include "tfm_ns_svc.h"
-#include "tfm_sst_veneers.h"
-#include "tfm_id_mngr.h"
-
-/* SVC function implementations */
-enum psa_sst_err_t tfm_sst_svc_create(uint32_t asset_uuid,
-                                      const struct tfm_sst_token_t *s_token)
-{
-    int32_t client_id;
-
-    client_id = tfm_sst_get_cur_id();
-
-    return tfm_sst_veneer_create(client_id, asset_uuid, s_token);
-}
-
-enum psa_sst_err_t tfm_sst_svc_get_info(uint32_t asset_uuid,
-                                        const struct tfm_sst_token_t *s_token,
-                                        struct psa_sst_asset_info_t *info)
-{
-    int32_t client_id;
-
-    client_id = tfm_sst_get_cur_id();
-
-    return tfm_sst_veneer_get_info(client_id, asset_uuid, s_token, info);
-}
-
-enum psa_sst_err_t tfm_sst_svc_get_attributes(uint32_t asset_uuid,
-                                          const struct tfm_sst_token_t *s_token,
-                                          struct psa_sst_asset_attrs_t *attrs)
-{
-    int32_t client_id;
-
-    client_id = tfm_sst_get_cur_id();
-
-    return tfm_sst_veneer_get_attributes(client_id, asset_uuid,
-                                         s_token, attrs);
-}
-
-enum psa_sst_err_t tfm_sst_svc_set_attributes(uint32_t asset_uuid,
-                                      const struct tfm_sst_token_t *s_token,
-                                      const struct psa_sst_asset_attrs_t *attrs)
-{
-    int32_t client_id;
-
-    client_id = tfm_sst_get_cur_id();
-
-    return tfm_sst_veneer_set_attributes(client_id, asset_uuid,
-                                         s_token, attrs);
-}
-
-enum psa_sst_err_t tfm_sst_svc_read(uint32_t asset_uuid,
-                                    const struct tfm_sst_token_t *s_token,
-                                    struct tfm_sst_buf_t* data)
-{
-    int32_t client_id;
-
-    client_id = tfm_sst_get_cur_id();
-
-    return tfm_sst_veneer_read(client_id, asset_uuid, s_token, data);
-}
-
-enum psa_sst_err_t tfm_sst_svc_write(uint32_t asset_uuid,
-                                     const struct tfm_sst_token_t *s_token,
-                                     struct tfm_sst_buf_t* data)
-{
-    int32_t client_id;
-
-    client_id = tfm_sst_get_cur_id();
-
-    return tfm_sst_veneer_write(client_id, asset_uuid, s_token, data);
-}
-
-enum psa_sst_err_t tfm_sst_svc_delete(uint32_t asset_uuid,
-                                      const struct tfm_sst_token_t *s_token)
-{
-    int32_t client_id;
-
-    client_id = tfm_sst_get_cur_id();
-
-    return tfm_sst_veneer_delete(client_id, asset_uuid, s_token);
-}