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