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