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 imx_dsp_set_data(struct imx_dsp_ipc * ipc,void * data)38static inline void imx_dsp_set_data(struct imx_dsp_ipc *ipc, void *data) 39 { 40 if (!ipc) 41 return; 42 43 ipc->private_data = data; 44 } 45 imx_dsp_get_data(struct imx_dsp_ipc * ipc)46static inline void *imx_dsp_get_data(struct imx_dsp_ipc *ipc) 47 { 48 if (!ipc) 49 return NULL; 50 51 return ipc->private_data; 52 } 53 54 #if IS_ENABLED(CONFIG_IMX_DSP) 55 56 int imx_dsp_ring_doorbell(struct imx_dsp_ipc *dsp, unsigned int chan_idx); 57 58 #else 59 imx_dsp_ring_doorbell(struct imx_dsp_ipc * ipc,unsigned int chan_idx)60static inline int imx_dsp_ring_doorbell(struct imx_dsp_ipc *ipc, 61 unsigned int chan_idx) 62 { 63 return -ENOTSUPP; 64 } 65 66 #endif 67 #endif /* _IMX_DSP_IPC_H */ 68