blob: de32bb9afccbdd226e4dbe6145db25f511e3d6a6 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Intel Smart Sound Technology
*
* Copyright (C) 2013, Intel Corporation
*/
#ifndef __SOUND_SOC_SST_DSP_PRIV_H
#define __SOUND_SOC_SST_DSP_PRIV_H
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/firmware.h>
#include "../skylake/skl-sst-dsp.h"
/*
* DSP Operations exported by platform Audio DSP driver.
*/
struct sst_ops {
/* Shim IO */
void (*write)(void __iomem *addr, u32 offset, u32 value);
u32 (*read)(void __iomem *addr, u32 offset);
/* IRQ handlers */
irqreturn_t (*irq_handler)(int irq, void *context);
/* SST init and free */
int (*init)(struct sst_dsp *sst);
void (*free)(struct sst_dsp *sst);
};
/*
* Audio DSP memory offsets and addresses.
*/
struct sst_addr {
u32 sram0_base;
u32 sram1_base;
u32 w0_stat_sz;
u32 w0_up_sz;
void __iomem *lpe;
void __iomem *shim;
};
/*
* Audio DSP Mailbox configuration.
*/
struct sst_mailbox {
void __iomem *in_base;
void __iomem *out_base;
size_t in_size;
size_t out_size;
};
/*
* Generic SST Shim Interface.
*/
struct sst_dsp {
/* Shared for all platforms */
/* runtime */
struct sst_dsp_device *sst_dev;
spinlock_t spinlock; /* IPC locking */
struct mutex mutex; /* DSP FW lock */
struct device *dev;
void *thread_context;
int irq;
u32 id;
/* operations */
struct sst_ops *ops;
/* debug FS */
struct dentry *debugfs_root;
/* base addresses */
struct sst_addr addr;
/* mailbox */
struct sst_mailbox mailbox;
/* SST FW files loaded and their modules */
struct list_head module_list;
/* SKL data */
const char *fw_name;
/* To allocate CL dma buffers */
struct skl_dsp_loader_ops dsp_ops;
struct skl_dsp_fw_ops fw_ops;
int sst_state;
struct skl_cl_dev cl_dev;
u32 intr_status;
const struct firmware *fw;
struct snd_dma_buffer dmab;
};
#endif