1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright 2019 NXP 4 * 5 * Header file for the DSP IPC implementation 6 */ 7 8 #ifndef _IMX_DSP_IPC_H 9 #define _IMX_DSP_IPC_H 10 11 #include <linux/device.h> 12 #include <linux/types.h> 13 #include <linux/mailbox_client.h> 14 15 #define DSP_MU_CHAN_NUM 4 16 17 struct imx_dsp_chan { 18 struct imx_dsp_ipc *ipc; 19 struct mbox_client cl; 20 struct mbox_chan *ch; 21 char *name; 22 int idx; 23 }; 24 25 struct imx_dsp_ops { 26 void (*handle_reply)(struct imx_dsp_ipc *ipc); 27 void (*handle_request)(struct imx_dsp_ipc *ipc); 28 }; 29 30 struct imx_dsp_ipc { 31 /* Host <-> DSP communication uses 2 txdb and 2 rxdb channels */ 32 struct imx_dsp_chan chans[DSP_MU_CHAN_NUM]; 33 struct device *dev; 34 struct imx_dsp_ops *ops; 35 void *private_data; 36 }; 37 38 static inline void imx_dsp_set_data(struct imx_dsp_ipc *ipc, void *data) 39 { 40 ipc->private_data = data; 41 } 42 43 static inline void *imx_dsp_get_data(struct imx_dsp_ipc *ipc) 44 { 45 return ipc->private_data; 46 } 47 48 #if IS_ENABLED(CONFIG_IMX_DSP) 49 50 int imx_dsp_ring_doorbell(struct imx_dsp_ipc *dsp, unsigned int chan_idx); 51 52 struct mbox_chan *imx_dsp_request_channel(struct imx_dsp_ipc *ipc, int idx); 53 void imx_dsp_free_channel(struct imx_dsp_ipc *ipc, int idx); 54 55 #else 56 57 static inline int imx_dsp_ring_doorbell(struct imx_dsp_ipc *ipc, 58 unsigned int chan_idx) 59 { 60 return -ENOTSUPP; 61 } 62 63 struct mbox_chan *imx_dsp_request_channel(struct imx_dsp_ipc *ipc, int idx) 64 { 65 return ERR_PTR(-EOPNOTSUPP); 66 } 67 68 void imx_dsp_free_channel(struct imx_dsp_ipc *ipc, int idx) { } 69 70 #endif 71 #endif /* _IMX_DSP_IPC_H */ 72
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.