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