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 | |
47 | static inline void mtk_adsp_ipc_set_data(struct mtk_adsp_ipc *ipc, void *data) |
48 | { |
49 | ipc->private_data = data; |
50 | } |
51 | |
52 | static inline void *mtk_adsp_ipc_get_data(struct mtk_adsp_ipc *ipc) |
53 | { |
54 | return ipc->private_data; |
55 | } |
56 | |
57 | int mtk_adsp_ipc_send(struct mtk_adsp_ipc *ipc, unsigned int idx, uint32_t op); |
58 | |
59 | #endif /* MTK_ADSP_IPC_H */ |
60 |