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 const 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 ipc->private_data = data; 49 ipc->private_data = data; 50 } 50 } 51 51 52 static inline void *mtk_adsp_ipc_get_data(stru 52 static inline void *mtk_adsp_ipc_get_data(struct mtk_adsp_ipc *ipc) 53 { 53 { 54 return ipc->private_data; 54 return ipc->private_data; 55 } 55 } 56 56 57 int mtk_adsp_ipc_send(struct mtk_adsp_ipc *ipc 57 int mtk_adsp_ipc_send(struct mtk_adsp_ipc *ipc, unsigned int idx, uint32_t op); 58 58 59 #endif /* MTK_ADSP_IPC_H */ 59 #endif /* MTK_ADSP_IPC_H */ 60 60
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.