1 /* 2 * Copyright (c) 2021-2022, Arm Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 #ifndef __BACKEND_H__ 9 #define __BACKEND_H__ 10 11 #include <stdint.h> 12 #include "spm_ipc.h" 13 #include "tfm_arch.h" 14 #include "load/spm_load_api.h" 15 #include "psa/error.h" 16 17 #if CONFIG_TFM_SPM_BACKEND_IPC == 1 18 #include "backend_ipc.h" 19 #elif CONFIG_TFM_SPM_BACKEND_SFN == 1 20 #include "backend_sfn.h" 21 #else 22 #error "No backend selected, check configurations." 23 #endif 24 25 /* 26 * Runtime model-specific component initialization routine. This 27 * is an `assuredly` function, would panic if any error occurred. 28 */ 29 void backend_init_comp_assuredly(struct partition_t *p_pt, 30 uint32_t service_setting); 31 32 /* 33 * Runtime model-specific kick-off method for the whole system. 34 * Returns a hardware-specific control value, which is transparent 35 * to SPM common logic. 36 */ 37 uint32_t backend_system_run(void); 38 39 /* Runtime model-specific message handling mechanism. */ 40 psa_status_t backend_messaging(struct service_t *p_serv, 41 struct conn_handle_t *handle); 42 43 /* 44 * Runtime model-specific message replying. 45 * Return the connection handle or the acked status code. 46 */ 47 psa_status_t backend_replying(struct conn_handle_t *handle, int32_t status); 48 49 /* 50 * Runtime model-specific Partition wait operation. 51 * Put the Partition to a status that waits for signals. 52 */ 53 psa_signal_t backend_wait(struct partition_t *p_pt, psa_signal_t signal_mask); 54 55 /* 56 * Runtime model-specific Partition wake up operation. 57 * Wakes up the Partition with the asserted signals in 'p_pt'. 58 */ 59 void backend_wake_up(struct partition_t *p_pt); 60 61 62 /* The component list, and a MACRO indicate this is not a common global. */ 63 extern struct partition_head_t partition_listhead; 64 #define PARTITION_LIST_ADDR (&partition_listhead) 65 66 /* TODO: Put this into NS Agent related service when available. */ 67 extern struct context_ctrl_t *p_spm_thread_context; 68 #define SPM_THREAD_CONTEXT p_spm_thread_context 69 70 #endif /* __BACKEND_H__ */ 71