mbed-os5 only for TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 31 06:02:27 2019 +0000
Revision:
1:9db0e321a9f4
Parent:
0:5b88d5760320
updated based on mbed-os5.15.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1 /*
kenjiArai 0:5b88d5760320 2 * Copyright (c) 2017-2019, Arm Limited. All rights reserved.
kenjiArai 0:5b88d5760320 3 *
kenjiArai 0:5b88d5760320 4 * SPDX-License-Identifier: BSD-3-Clause
kenjiArai 0:5b88d5760320 5 *
kenjiArai 0:5b88d5760320 6 */
kenjiArai 0:5b88d5760320 7 #include <stdint.h>
kenjiArai 0:5b88d5760320 8 #include <stdbool.h>
kenjiArai 0:5b88d5760320 9 #include "cmsis.h"
kenjiArai 0:5b88d5760320 10 #include "rtx_os.h"
kenjiArai 0:5b88d5760320 11 #include "cmsis_os2.h"
kenjiArai 0:5b88d5760320 12 #include "tfm_api.h"
kenjiArai 0:5b88d5760320 13 #include "tfm_ns_lock.h"
kenjiArai 0:5b88d5760320 14
kenjiArai 0:5b88d5760320 15 /**
kenjiArai 0:5b88d5760320 16 * \brief struct ns_lock_state type
kenjiArai 0:5b88d5760320 17 */
kenjiArai 0:5b88d5760320 18 struct ns_lock_state
kenjiArai 0:5b88d5760320 19 {
kenjiArai 0:5b88d5760320 20 bool init;
kenjiArai 0:5b88d5760320 21 osMutexId_t id;
kenjiArai 0:5b88d5760320 22 };
kenjiArai 0:5b88d5760320 23
kenjiArai 0:5b88d5760320 24 /**
kenjiArai 0:5b88d5760320 25 * \brief ns_lock status
kenjiArai 0:5b88d5760320 26 */
kenjiArai 0:5b88d5760320 27 static struct ns_lock_state ns_lock = {.init=false, .id=NULL};
kenjiArai 0:5b88d5760320 28
kenjiArai 0:5b88d5760320 29 /**
kenjiArai 0:5b88d5760320 30 * \brief Mutex properties, NS lock
kenjiArai 0:5b88d5760320 31 */
kenjiArai 0:5b88d5760320 32
kenjiArai 0:5b88d5760320 33 static osRtxMutex_t ns_lock_cb = { 0 };
kenjiArai 0:5b88d5760320 34
kenjiArai 0:5b88d5760320 35 static const osMutexAttr_t ns_lock_attrib = {
kenjiArai 0:5b88d5760320 36 .name = "ns_lock",
kenjiArai 0:5b88d5760320 37 .attr_bits = osMutexPrioInherit,
kenjiArai 0:5b88d5760320 38 .cb_mem = &ns_lock_cb,
kenjiArai 0:5b88d5760320 39 .cb_size = sizeof(ns_lock_cb)
kenjiArai 0:5b88d5760320 40 };
kenjiArai 0:5b88d5760320 41
kenjiArai 0:5b88d5760320 42 /**
kenjiArai 0:5b88d5760320 43 * \brief NS world, NS lock based dispatcher
kenjiArai 0:5b88d5760320 44 */
kenjiArai 0:5b88d5760320 45 uint32_t tfm_ns_lock_dispatch(veneer_fn fn,
kenjiArai 0:5b88d5760320 46 uint32_t arg0, uint32_t arg1,
kenjiArai 0:5b88d5760320 47 uint32_t arg2, uint32_t arg3)
kenjiArai 0:5b88d5760320 48 {
kenjiArai 0:5b88d5760320 49 uint32_t result;
kenjiArai 0:5b88d5760320 50
kenjiArai 0:5b88d5760320 51 /* Check the NS lock has been initialized */
kenjiArai 0:5b88d5760320 52 if (ns_lock.init == false) {
kenjiArai 0:5b88d5760320 53 return TFM_ERROR_GENERIC;
kenjiArai 0:5b88d5760320 54 }
kenjiArai 0:5b88d5760320 55
kenjiArai 0:5b88d5760320 56 /* TFM request protected by NS lock */
kenjiArai 0:5b88d5760320 57 if (osMutexAcquire(ns_lock.id,osWaitForever) != osOK) {
kenjiArai 0:5b88d5760320 58 return TFM_ERROR_GENERIC;
kenjiArai 0:5b88d5760320 59 }
kenjiArai 0:5b88d5760320 60
kenjiArai 0:5b88d5760320 61 result = fn(arg0, arg1, arg2, arg3);
kenjiArai 0:5b88d5760320 62
kenjiArai 0:5b88d5760320 63 if (osMutexRelease(ns_lock.id) != osOK) {
kenjiArai 0:5b88d5760320 64 return TFM_ERROR_GENERIC;
kenjiArai 0:5b88d5760320 65 }
kenjiArai 0:5b88d5760320 66
kenjiArai 0:5b88d5760320 67 return result;
kenjiArai 0:5b88d5760320 68 }
kenjiArai 0:5b88d5760320 69
kenjiArai 0:5b88d5760320 70 /**
kenjiArai 0:5b88d5760320 71 * \brief NS world, Init NS lock
kenjiArai 0:5b88d5760320 72 */
kenjiArai 0:5b88d5760320 73 enum tfm_status_e tfm_ns_lock_init()
kenjiArai 0:5b88d5760320 74 {
kenjiArai 0:5b88d5760320 75 if (ns_lock.init == false) {
kenjiArai 0:5b88d5760320 76 ns_lock.id = osMutexNew(&ns_lock_attrib);
kenjiArai 0:5b88d5760320 77 ns_lock.init = true;
kenjiArai 0:5b88d5760320 78 return TFM_SUCCESS;
kenjiArai 0:5b88d5760320 79 }
kenjiArai 0:5b88d5760320 80 else {
kenjiArai 0:5b88d5760320 81 return TFM_ERROR_GENERIC;
kenjiArai 0:5b88d5760320 82 }
kenjiArai 0:5b88d5760320 83 }
kenjiArai 0:5b88d5760320 84
kenjiArai 0:5b88d5760320 85 bool tfm_ns_lock_get_init_state()
kenjiArai 0:5b88d5760320 86 {
kenjiArai 0:5b88d5760320 87 return ns_lock.init;
kenjiArai 0:5b88d5760320 88 }
kenjiArai 0:5b88d5760320 89