mtk-adsp-ipc.h (1242B)
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 19enum { 20 MTK_ADSP_MBOX_REPLY, 21 MTK_ADSP_MBOX_REQUEST, 22 MTK_ADSP_MBOX_NUM, 23}; 24 25struct mtk_adsp_ipc; 26 27struct mtk_adsp_ipc_ops { 28 void (*handle_reply)(struct mtk_adsp_ipc *ipc); 29 void (*handle_request)(struct mtk_adsp_ipc *ipc); 30}; 31 32struct 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 40struct 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 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 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 63int mtk_adsp_ipc_send(struct mtk_adsp_ipc *ipc, unsigned int idx, uint32_t op); 64 65#endif /* MTK_ADSP_IPC_H */