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) 2018-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
kenjiArai 0:5b88d5760320 8 #include "secure_utilities.h"
kenjiArai 0:5b88d5760320 9
kenjiArai 0:5b88d5760320 10 #ifndef __TFM_INTERNAL_H__
kenjiArai 0:5b88d5760320 11 #define __TFM_INTERNAL_H__
kenjiArai 0:5b88d5760320 12
kenjiArai 0:5b88d5760320 13 /*
kenjiArai 0:5b88d5760320 14 * This function pointer is meant to only hold non secure function pointers.
kenjiArai 0:5b88d5760320 15 * It will be turned into a non-secure one (LSB cleared) before being called
kenjiArai 0:5b88d5760320 16 * whatever happens anyway (unless cast to another function pointer type).
kenjiArai 0:5b88d5760320 17 * Registers will be cleared before branching so that no information leaks
kenjiArai 0:5b88d5760320 18 * from secure to non-secure world.
kenjiArai 0:5b88d5760320 19 */
kenjiArai 0:5b88d5760320 20 typedef void __attribute__((cmse_nonsecure_call)) (*nsfptr_t) (void);
kenjiArai 0:5b88d5760320 21
kenjiArai 0:5b88d5760320 22 extern nsfptr_t ns_entry;
kenjiArai 0:5b88d5760320 23
kenjiArai 0:5b88d5760320 24 /**
kenjiArai 0:5b88d5760320 25 * \brief Signal that secure partition initialisation is finished
kenjiArai 0:5b88d5760320 26 */
kenjiArai 0:5b88d5760320 27 void tfm_secure_api_init_done(void);
kenjiArai 0:5b88d5760320 28
kenjiArai 0:5b88d5760320 29 /**
kenjiArai 0:5b88d5760320 30 * \brief Jumps to non-secure code.
kenjiArai 0:5b88d5760320 31 */
kenjiArai 0:5b88d5760320 32 void jump_to_ns_code(void);
kenjiArai 0:5b88d5760320 33
kenjiArai 0:5b88d5760320 34 /**
kenjiArai 0:5b88d5760320 35 * \brief Called if veneer is running in thread mode
kenjiArai 0:5b88d5760320 36 */
kenjiArai 0:5b88d5760320 37 uint32_t tfm_core_partition_request_svc_handler(
kenjiArai 0:5b88d5760320 38 const uint32_t *svc_args, uint32_t lr);
kenjiArai 0:5b88d5760320 39
kenjiArai 0:5b88d5760320 40 /**
kenjiArai 0:5b88d5760320 41 * \brief Called when secure service returns
kenjiArai 0:5b88d5760320 42 */
kenjiArai 0:5b88d5760320 43 uint32_t tfm_core_partition_return_handler(uint32_t lr);
kenjiArai 0:5b88d5760320 44
kenjiArai 0:5b88d5760320 45 /**
kenjiArai 0:5b88d5760320 46 * \brief Called by secure service to check if client is secure
kenjiArai 0:5b88d5760320 47 */
kenjiArai 0:5b88d5760320 48 void tfm_core_validate_secure_caller_handler(const uint32_t svc_args[]);
kenjiArai 0:5b88d5760320 49
kenjiArai 0:5b88d5760320 50 /**
kenjiArai 0:5b88d5760320 51 * \brief Stores caller's client id in state context
kenjiArai 0:5b88d5760320 52 */
kenjiArai 0:5b88d5760320 53 void tfm_core_get_caller_client_id_handler(const uint32_t svc_args[]);
kenjiArai 0:5b88d5760320 54
kenjiArai 0:5b88d5760320 55 /**
kenjiArai 0:5b88d5760320 56 * \brief Checks if a secure service's access to a memory location is permitted
kenjiArai 0:5b88d5760320 57 */
kenjiArai 0:5b88d5760320 58 void tfm_core_memory_permission_check_handler(const uint32_t svc_args[]);
kenjiArai 0:5b88d5760320 59
kenjiArai 0:5b88d5760320 60 /**
kenjiArai 0:5b88d5760320 61 * \brief Handle an SPM request by a secure service
kenjiArai 0:5b88d5760320 62 */
kenjiArai 0:5b88d5760320 63 void tfm_core_spm_request_handler(const struct tfm_exc_stack_t *svc_ctx);
kenjiArai 0:5b88d5760320 64
kenjiArai 0:5b88d5760320 65 /**
kenjiArai 0:5b88d5760320 66 * \brief Check whether a buffer is ok for writing to by the privileged API
kenjiArai 0:5b88d5760320 67 * function.
kenjiArai 0:5b88d5760320 68 *
kenjiArai 0:5b88d5760320 69 * This function checks whether the caller partition owns the buffer, can write
kenjiArai 0:5b88d5760320 70 * to it, and the buffer has proper alignment.
kenjiArai 0:5b88d5760320 71 *
kenjiArai 0:5b88d5760320 72 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 73 * \param[in] start_addr The start address of the buffer
kenjiArai 0:5b88d5760320 74 * \param[in] len The length of the buffer
kenjiArai 0:5b88d5760320 75 * \param[in] alignment The expected alignment (in bits)
kenjiArai 0:5b88d5760320 76 *
kenjiArai 0:5b88d5760320 77 * \return 1 if the check passes, 0 otherwise.
kenjiArai 0:5b88d5760320 78 *
kenjiArai 0:5b88d5760320 79 * \note For a 0 long buffer the check fails.
kenjiArai 0:5b88d5760320 80 */
kenjiArai 0:5b88d5760320 81 int32_t tfm_core_check_buffer_access(uint32_t partition_idx,
kenjiArai 0:5b88d5760320 82 void *start_addr,
kenjiArai 0:5b88d5760320 83 size_t len,
kenjiArai 0:5b88d5760320 84 uint32_t alignment);
kenjiArai 0:5b88d5760320 85
kenjiArai 0:5b88d5760320 86 /**
kenjiArai 0:5b88d5760320 87 * \brief Retrieve secure partition related data from shared memory area, which
kenjiArai 0:5b88d5760320 88 * stores shared data between bootloader and runtime firmware.
kenjiArai 0:5b88d5760320 89 *
kenjiArai 0:5b88d5760320 90 * \param[in] args Pointer to stack frame, which carries input parameters.
kenjiArai 0:5b88d5760320 91 */
kenjiArai 0:5b88d5760320 92 void tfm_core_get_boot_data_handler(uint32_t args[]);
kenjiArai 0:5b88d5760320 93
kenjiArai 0:5b88d5760320 94 /**
kenjiArai 0:5b88d5760320 95 * \brief Validate the content of shared memory area, which stores the shared
kenjiArai 0:5b88d5760320 96 * data between bootloader and runtime firmware.
kenjiArai 0:5b88d5760320 97 */
kenjiArai 0:5b88d5760320 98 void tfm_core_validate_boot_data(void);
kenjiArai 0:5b88d5760320 99
kenjiArai 0:5b88d5760320 100 #endif /* __TFM_INTERNAL_H__ */