blob: 61df7b72973e5abbf63a139da6786cd91e836160 [file] [log] [blame]
Mingyang Sundeae45d2021-09-06 15:31:07 +08001/*
Mingyang Suna09adda2022-02-16 18:11:33 +08002 * Copyright (c) 2021-2022, Arm Limited. All rights reserved.
Mingyang Sundeae45d2021-09-06 15:31:07 +08003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8#ifndef __BACKEND_H__
9#define __BACKEND_H__
10
11#include <stdint.h>
Mingyang Sundeae45d2021-09-06 15:31:07 +080012#include "spm_ipc.h"
Ken Liue07c3b72021-10-14 16:19:13 +080013#include "tfm_arch.h"
Mingyang Sundeae45d2021-09-06 15:31:07 +080014#include "load/spm_load_api.h"
Ken Liue07c3b72021-10-14 16:19:13 +080015#include "psa/error.h"
Mingyang Sundeae45d2021-09-06 15:31:07 +080016
17/* BASIC TYPE DEFINITIONS */
18
19struct backend_ops_t {
20 /*
21 * Runtime model-specific component initialization routine. This
22 * is an `assuredly` function, would panic if any error occurred.
23 */
24 void (*comp_init_assuredly)(struct partition_t *p_pt,
25 uint32_t service_setting);
26
27 /*
28 * Runtime model-specific kick-off method for the whole system.
29 * Returns a hardware-specific control value, which is transparent
30 * to SPM common logic.
31 */
32 uint32_t (*system_run)(void);
33
34 /* Runtime model-specific message handling mechanism. */
35 psa_status_t (*messaging)(struct service_t *p_serv,
Mingyang Suna09adda2022-02-16 18:11:33 +080036 struct conn_handle_t *handle);
Mingyang Sundeae45d2021-09-06 15:31:07 +080037
Ken Liu802a3702021-10-15 12:09:56 +080038 /*
39 * Runtime model-specific message replying.
Ken Liuf39d8eb2021-10-07 12:55:33 +080040 * Return the connection handle or the acked status code.
Ken Liu802a3702021-10-15 12:09:56 +080041 */
Mingyang Suna09adda2022-02-16 18:11:33 +080042 psa_status_t (*replying)(struct conn_handle_t *handle, int32_t status);
Kevin Pengdef92de2021-11-10 16:14:48 +080043
44 /*
45 * Runtime model-specific Partition wait operation.
46 * Put the Partition to a status that waits for signals.
47 */
Mingyang Sun5c9529f2022-03-15 17:51:56 +080048 psa_signal_t (*wait)(struct partition_t *p_pt, psa_signal_t signal_mask);
Kevin Pengdef92de2021-11-10 16:14:48 +080049
50 /*
51 * Runtime model-specific Partition wake up operation.
52 * Wakes up the Partition with the give signals.
53 */
54 void (*wake_up)(struct partition_t *p_pt, psa_signal_t signals);
Mingyang Sundeae45d2021-09-06 15:31:07 +080055};
56
57/* RUNTIME MODEL BACKENDS DECLARATION */
58
59/* IPC backend */
60extern const struct backend_ops_t backend_instance;
61
62/* The component list, and a MACRO indicate this is not a common global. */
63extern struct partition_head_t partition_listhead;
64#define PARTITION_LIST_ADDR (&partition_listhead)
65
Ken Liue07c3b72021-10-14 16:19:13 +080066/* TODO: Put this into NS Agent related service when available. */
67extern struct context_ctrl_t *p_spm_thread_context;
68#define SPM_THREAD_CONTEXT p_spm_thread_context
69
Mingyang Sundeae45d2021-09-06 15:31:07 +080070#endif /* __BACKEND_H__ */