1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (c) 2022 MediaTek Inc. 4 */ 5 6 #ifndef MTK_ADSP_IPC_H 7 #define MTK_ADSP_IPC_H 8 9 #include <linux/device.h> 10 #include <linux/types.h> 11 #include <linux/mailbox_controller.h> 12 #include <linux/mailbox_client.h> 13 14 #define MTK_ADSP_IPC_REQ 0 15 #define MTK_ADSP_IPC_RSP 1 16 #define MTK_ADSP_IPC_OP_REQ 0x1 17 #define MTK_ADSP_IPC_OP_RSP 0x2 18 19 enum { 20 MTK_ADSP_MBOX_REPLY, 21 MTK_ADSP_MBOX_REQUEST, 22 MTK_ADSP_MBOX_NUM, 23 }; 24 25 struct mtk_adsp_ipc; 26 27 struct mtk_adsp_ipc_ops { 28 void (*handle_reply)(struct mtk_adsp_ipc *ipc); 29 void (*handle_request)(struct mtk_adsp_ipc *ipc); 30 }; 31 32 struct mtk_adsp_chan { 33 struct mtk_adsp_ipc *ipc; 34 struct mbox_client cl; 35 struct mbox_chan *ch; 36 char *name; 37 int idx; 38 }; 39 40 struct mtk_adsp_ipc { 41 struct mtk_adsp_chan chans[MTK_ADSP_MBOX_NUM]; 42 struct device *dev; 43 struct mtk_adsp_ipc_ops *ops; 44 void *private_data; 45 }; 46 mtk_adsp_ipc_set_data(struct mtk_adsp_ipc * ipc,void * data)47static inline void mtk_adsp_ipc_set_data(struct mtk_adsp_ipc *ipc, void *data) 48 { 49 if (!ipc) 50 return; 51 52 ipc->private_data = data; 53 } 54 mtk_adsp_ipc_get_data(struct mtk_adsp_ipc * ipc)55static inline void *mtk_adsp_ipc_get_data(struct mtk_adsp_ipc *ipc) 56 { 57 if (!ipc) 58 return NULL; 59 60 return ipc->private_data; 61 } 62 63 int mtk_adsp_ipc_send(struct mtk_adsp_ipc *ipc, unsigned int idx, uint32_t op); 64 65 #endif /* MTK_ADSP_IPC_H */ 66