xref: /optee_os/core/include/drivers/versal_mbox.h (revision 4b46e0e812911b918c64c5f80da1ebc2bd6214d4)
1*4b46e0e8SJorge Ramirez-Ortiz /* SPDX-License-Identifier: BSD-2-Clause */
2*4b46e0e8SJorge Ramirez-Ortiz /*
3*4b46e0e8SJorge Ramirez-Ortiz  * Copyright (c) 2022, Foundries.io Ltd
4*4b46e0e8SJorge Ramirez-Ortiz  */
5*4b46e0e8SJorge Ramirez-Ortiz #ifndef __DRIVERS_VERSAL_MBOX_H
6*4b46e0e8SJorge Ramirez-Ortiz #define __DRIVERS_VERSAL_MBOX_H
7*4b46e0e8SJorge Ramirez-Ortiz 
8*4b46e0e8SJorge Ramirez-Ortiz #include <platform_config.h>
9*4b46e0e8SJorge Ramirez-Ortiz #include <tee_api_types.h>
10*4b46e0e8SJorge Ramirez-Ortiz #include <util.h>
11*4b46e0e8SJorge Ramirez-Ortiz 
12*4b46e0e8SJorge Ramirez-Ortiz #define VERSAL_MAX_IPI_BUF 7
13*4b46e0e8SJorge Ramirez-Ortiz 
14*4b46e0e8SJorge Ramirez-Ortiz struct versal_mbox_mem {
15*4b46e0e8SJorge Ramirez-Ortiz 	size_t alloc_len;
16*4b46e0e8SJorge Ramirez-Ortiz 	size_t len;
17*4b46e0e8SJorge Ramirez-Ortiz 	void *buf;
18*4b46e0e8SJorge Ramirez-Ortiz };
19*4b46e0e8SJorge Ramirez-Ortiz 
20*4b46e0e8SJorge Ramirez-Ortiz struct versal_ipi_buf {
21*4b46e0e8SJorge Ramirez-Ortiz 	struct versal_mbox_mem mem;
22*4b46e0e8SJorge Ramirez-Ortiz 	bool only_cache;
23*4b46e0e8SJorge Ramirez-Ortiz };
24*4b46e0e8SJorge Ramirez-Ortiz 
25*4b46e0e8SJorge Ramirez-Ortiz struct versal_ipi_cmd {
26*4b46e0e8SJorge Ramirez-Ortiz 	uint32_t data[8];
27*4b46e0e8SJorge Ramirez-Ortiz 	struct versal_ipi_buf ibuf[VERSAL_MAX_IPI_BUF];
28*4b46e0e8SJorge Ramirez-Ortiz };
29*4b46e0e8SJorge Ramirez-Ortiz 
30*4b46e0e8SJorge Ramirez-Ortiz TEE_Result versal_mbox_notify(struct versal_ipi_cmd *cmd,
31*4b46e0e8SJorge Ramirez-Ortiz 			      struct versal_ipi_cmd *rsp, uint32_t *err);
32*4b46e0e8SJorge Ramirez-Ortiz TEE_Result versal_mbox_alloc(size_t len, const void *init,
33*4b46e0e8SJorge Ramirez-Ortiz 			     struct versal_mbox_mem *mem);
34*4b46e0e8SJorge Ramirez-Ortiz #endif /* __DRIVERS_VERSAL_MBOX_H */
35