linux/include/linux/firmware/imx/dsp.h
<<
>>
Prefs
   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 */
  78