blob: a846e7612d4f5eaf57d3b09182941afa458f311e [file] [log] [blame]
David Hu49ec08a2019-09-23 16:13:41 +08001/*
David Hu06ebac72019-09-29 16:01:54 +08002 * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
David Hu49ec08a2019-09-23 16:13:41 +08003 *
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
David Hu06ebac72019-09-29 16:01:54 +080070#ifdef TFM_MULTI_CORE_MULTI_CLIENT_CALL
71/**
72 * \brief Get the handle of the current non-secure task executing mailbox
73 * functionalities
74 *
75 * \note This function should be implemented according to platform, NS OS
76 * and actual use scenario.
77 * This function can be ignored or return NULL if sleep/wake-up mechanism
78 * is not required in PSA Client API implementation.
79 *
80 * \return Return the handle of task.
81 */
82const void *tfm_ns_mailbox_get_task_handle(void);
83#else
84static inline const void *tfm_ns_mailbox_get_task_handle(void)
85{
86 return NULL;
87}
88#endif
89
David Hu49ec08a2019-09-23 16:13:41 +080090/**
91 * \brief Platform specific NSPE mailbox initialization.
David Hudbafa3e2019-10-22 11:26:37 +080092 * Invoked by \ref tfm_ns_mailbox_init().
David Hu49ec08a2019-09-23 16:13:41 +080093 *
94 * \param[in] queue The base address of NSPE mailbox queue to be
95 * initialized.
96 *
97 * \retval MAILBOX_SUCCESS Operation succeeded.
98 * \retval Other return code Operation failed with an error code.
99 */
David Hudbafa3e2019-10-22 11:26:37 +0800100int32_t tfm_ns_mailbox_hal_init(struct ns_mailbox_queue_t *queue);
David Hu49ec08a2019-09-23 16:13:41 +0800101
102/**
David Hudbafa3e2019-10-22 11:26:37 +0800103 * \brief Notify SPE to deal with the PSA client call sent via mailbox
104 *
105 * \note The implementation depends on platform specific hardware and use case.
106 *
107 * \retval MAILBOX_SUCCESS Operation succeeded.
108 * \retval Other return code Operation failed with an error code.
David Hu49ec08a2019-09-23 16:13:41 +0800109 */
David Hudbafa3e2019-10-22 11:26:37 +0800110int32_t tfm_ns_mailbox_hal_notify_peer(void);
David Hu49ec08a2019-09-23 16:13:41 +0800111
112/**
David Hudbafa3e2019-10-22 11:26:37 +0800113 * \brief Enter critical section of NSPE mailbox.
114 *
115 * \note The implementation depends on platform specific hardware and use case.
David Hu49ec08a2019-09-23 16:13:41 +0800116 */
David Hudbafa3e2019-10-22 11:26:37 +0800117void tfm_ns_mailbox_hal_enter_critical(void);
118
119/**
120 * \brief Exit critical section of NSPE mailbox.
121 *
122 * \note The implementation depends on platform specific hardware and use case.
123 */
124void tfm_ns_mailbox_hal_exit_critical(void);
125
126#ifdef __cplusplus
127}
128#endif
David Hu49ec08a2019-09-23 16:13:41 +0800129
130#endif /* __TFM_NS_MAILBOX_H__ */