dsp.h (1559B)
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 17struct 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 25struct imx_dsp_ops { 26 void (*handle_reply)(struct imx_dsp_ipc *ipc); 27 void (*handle_request)(struct imx_dsp_ipc *ipc); 28}; 29 30struct 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 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 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 56int imx_dsp_ring_doorbell(struct imx_dsp_ipc *dsp, unsigned int chan_idx); 57 58struct mbox_chan *imx_dsp_request_channel(struct imx_dsp_ipc *ipc, int idx); 59void imx_dsp_free_channel(struct imx_dsp_ipc *ipc, int idx); 60 61#else 62 63static inline int imx_dsp_ring_doorbell(struct imx_dsp_ipc *ipc, 64 unsigned int chan_idx) 65{ 66 return -ENOTSUPP; 67} 68 69struct mbox_chan *imx_dsp_request_channel(struct imx_dsp_ipc *ipc, int idx) 70{ 71 return ERR_PTR(-EOPNOTSUPP); 72} 73 74void imx_dsp_free_channel(struct imx_dsp_ipc *ipc, int idx) { } 75 76#endif 77#endif /* _IMX_DSP_IPC_H */