blob: 7ec8c40339e47471300b55be956768b982e77d6d [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 */
18static uint32_t ns_lock_id = (uint32_t)NULL;
19
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 */
28 if (os_wrapper_mutex_acquire(ns_lock_id, OS_WRAPPER_WAIT_FOREVER)
29 != OS_WRAPPER_SUCCESS) {
30 return (int32_t)TFM_ERROR_GENERIC;
31 }
32
33 result = fn(arg0, arg1, arg2, arg3);
34
35 if (os_wrapper_mutex_release(ns_lock_id) != OS_WRAPPER_SUCCESS) {
36 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{
45 uint32_t id;
46
47 id = os_wrapper_mutex_create();
48 if (id == OS_WRAPPER_ERROR) {
49 return TFM_ERROR_GENERIC;
50 }
51
52 ns_lock_id = id;
53 return TFM_SUCCESS;
54}