mbed-os5 only for TYBLE16
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
components/TARGET_PSA/TARGET_TFM/COMPONENT_NSPE/interface/src/tfm_ns_lock_rtx.c@1:9db0e321a9f4, 2019-12-31 (annotated)
- 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?
User | Revision | Line number | New 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 |