blob: 7b016950cdb4a72432aa4cf3fe55225a5632db0d [file] [log] [blame]
Kevin Pengc86dec02019-07-23 16:15:57 +08001/*
2 * Copyright (c) 2017-2019, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7#include <stdint.h>
8#include <stdbool.h>
9
Kevin Peng477fa942019-07-29 10:55:17 +080010#include "os_wrapper/mutex.h"
Kevin Pengc86dec02019-07-23 16:15:57 +080011
12#include "tfm_api.h"
13#include "tfm_ns_interface.h"
14
15/**
16 * \brief the ns_lock ID
17 */
Kevin Peng383e8402019-08-05 16:35:44 +080018static void *ns_lock_handle = NULL;
Kevin Pengc86dec02019-07-23 16:15:57 +080019
20__attribute__((weak))
21int32_t tfm_ns_interface_dispatch(veneer_fn fn,
22 uint32_t arg0, uint32_t arg1,
23 uint32_t arg2, uint32_t arg3)
24{
25 int32_t result;
26
27 /* TFM request protected by NS lock */
Kevin Peng383e8402019-08-05 16:35:44 +080028 if (os_wrapper_mutex_acquire(ns_lock_handle, OS_WRAPPER_WAIT_FOREVER)
Kevin Pengc86dec02019-07-23 16:15:57 +080029 != OS_WRAPPER_SUCCESS) {
30 return (int32_t)TFM_ERROR_GENERIC;
31 }
32
33 result = fn(arg0, arg1, arg2, arg3);
34
Kevin Peng383e8402019-08-05 16:35:44 +080035 if (os_wrapper_mutex_release(ns_lock_handle) != OS_WRAPPER_SUCCESS) {
Kevin Pengc86dec02019-07-23 16:15:57 +080036 return (int32_t)TFM_ERROR_GENERIC;
37 }
38
39 return result;
40}
41
42__attribute__((weak))
43enum tfm_status_e tfm_ns_interface_init(void)
44{
Kevin Peng383e8402019-08-05 16:35:44 +080045 void *handle;
Kevin Pengc86dec02019-07-23 16:15:57 +080046
Kevin Peng383e8402019-08-05 16:35:44 +080047 handle = os_wrapper_mutex_create();
48 if (!handle) {
Kevin Pengc86dec02019-07-23 16:15:57 +080049 return TFM_ERROR_GENERIC;
50 }
51
Kevin Peng383e8402019-08-05 16:35:44 +080052 ns_lock_handle = handle;
Kevin Pengc86dec02019-07-23 16:15:57 +080053 return TFM_SUCCESS;
54}