blob: d2bbd3f4fd4ddb81789f7580d214c83f82cdfabc [file] [log] [blame]
David Hu49ec08a2019-09-23 16:13:41 +08001/*
2 * Copyright (c) 2019, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8/* API definitions in NSPE mailbox library */
9
10#ifndef __TFM_NS_MAILBOX_H__
11#define __TFM_NS_MAILBOX_H__
12
13#include <stdbool.h>
14#include "tfm_mailbox.h"
15
David Hudbafa3e2019-10-22 11:26:37 +080016#ifdef __cplusplus
17extern "C" {
18#endif
19
David Hu49ec08a2019-09-23 16:13:41 +080020/**
David Hudbafa3e2019-10-22 11:26:37 +080021 * \brief Prepare and send PSA client request to SPE via mailbox.
David Hu49ec08a2019-09-23 16:13:41 +080022 *
23 * \param[in] call_type PSA client call type
24 * \param[in] params Parmaters used for PSA client call
25 * \param[in] client_id Optional client ID of non-secure caller.
26 * It is required to identify the non-secure caller
27 * when NSPE OS enforces non-secure task isolation.
28 *
29 * \retval >= 0 The handle to the mailbox message assigned.
30 * \retval < 0 Operation failed with an error code.
31 */
David Hudbafa3e2019-10-22 11:26:37 +080032mailbox_msg_handle_t tfm_ns_mailbox_tx_client_req(uint32_t call_type,
33 const struct psa_client_params_t *params,
34 int32_t client_id);
David Hu49ec08a2019-09-23 16:13:41 +080035
36/**
David Hudbafa3e2019-10-22 11:26:37 +080037 * \brief Fetch PSA client return result.
David Hu49ec08a2019-09-23 16:13:41 +080038 *
39 * \param[in] handle The handle to the mailbox message
40 * \param[out] reply The address to be written with return result.
41 *
42 * \retval MAILBOX_SUCCESS Successfully get PSA client call return result.
43 * \retval Other return code Operation failed with an error code.
44 */
David Hudbafa3e2019-10-22 11:26:37 +080045int32_t tfm_ns_mailbox_rx_client_reply(mailbox_msg_handle_t handle,
46 int32_t *reply);
David Hu49ec08a2019-09-23 16:13:41 +080047
48/**
49 * \brief Check whether a specific mailbox message has been replied.
50 *
51 * \param[in] handle The handle to the mailbox message
52 *
53 * \retval true The PSA client call return value is replied.
54 * \retval false The PSA client call return value is not
55 * replied yet.
56 */
David Hudbafa3e2019-10-22 11:26:37 +080057bool tfm_ns_mailbox_is_msg_replied(mailbox_msg_handle_t handle);
David Hu49ec08a2019-09-23 16:13:41 +080058
59/**
60 * \brief NSPE mailbox initialization
61 *
62 * \param[in] queue The base address of NSPE mailbox queue to be
63 * initialized.
64 *
65 * \retval MAILBOX_SUCCESS Operation succeeded.
66 * \retval Other return code Operation failed with an error code.
67 */
David Hudbafa3e2019-10-22 11:26:37 +080068int32_t tfm_ns_mailbox_init(struct ns_mailbox_queue_t *queue);
David Hu49ec08a2019-09-23 16:13:41 +080069
70/**
71 * \brief Platform specific NSPE mailbox initialization.
David Hudbafa3e2019-10-22 11:26:37 +080072 * Invoked by \ref tfm_ns_mailbox_init().
David Hu49ec08a2019-09-23 16:13:41 +080073 *
74 * \param[in] queue The base address of NSPE mailbox queue to be
75 * initialized.
76 *
77 * \retval MAILBOX_SUCCESS Operation succeeded.
78 * \retval Other return code Operation failed with an error code.
79 */
David Hudbafa3e2019-10-22 11:26:37 +080080int32_t tfm_ns_mailbox_hal_init(struct ns_mailbox_queue_t *queue);
David Hu49ec08a2019-09-23 16:13:41 +080081
82/**
David Hudbafa3e2019-10-22 11:26:37 +080083 * \brief Notify SPE to deal with the PSA client call sent via mailbox
84 *
85 * \note The implementation depends on platform specific hardware and use case.
86 *
87 * \retval MAILBOX_SUCCESS Operation succeeded.
88 * \retval Other return code Operation failed with an error code.
David Hu49ec08a2019-09-23 16:13:41 +080089 */
David Hudbafa3e2019-10-22 11:26:37 +080090int32_t tfm_ns_mailbox_hal_notify_peer(void);
David Hu49ec08a2019-09-23 16:13:41 +080091
92/**
David Hudbafa3e2019-10-22 11:26:37 +080093 * \brief Enter critical section of NSPE mailbox.
94 *
95 * \note The implementation depends on platform specific hardware and use case.
David Hu49ec08a2019-09-23 16:13:41 +080096 */
David Hudbafa3e2019-10-22 11:26:37 +080097void tfm_ns_mailbox_hal_enter_critical(void);
98
99/**
100 * \brief Exit critical section of NSPE mailbox.
101 *
102 * \note The implementation depends on platform specific hardware and use case.
103 */
104void tfm_ns_mailbox_hal_exit_critical(void);
105
106#ifdef __cplusplus
107}
108#endif
David Hu49ec08a2019-09-23 16:13:41 +0800109
110#endif /* __TFM_NS_MAILBOX_H__ */