18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Intel Smart Sound Technology
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2013, Intel Corporation. All rights reserved.
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef __SOUND_SOC_SST_DSP_PRIV_H
98c2ecf20Sopenharmony_ci#define __SOUND_SOC_SST_DSP_PRIV_H
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <linux/kernel.h>
128c2ecf20Sopenharmony_ci#include <linux/types.h>
138c2ecf20Sopenharmony_ci#include <linux/interrupt.h>
148c2ecf20Sopenharmony_ci#include <linux/firmware.h>
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci#include "../skylake/skl-sst-dsp.h"
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci/*
198c2ecf20Sopenharmony_ci * DSP Operations exported by platform Audio DSP driver.
208c2ecf20Sopenharmony_ci */
218c2ecf20Sopenharmony_cistruct sst_ops {
228c2ecf20Sopenharmony_ci	/* Shim IO */
238c2ecf20Sopenharmony_ci	void (*write)(void __iomem *addr, u32 offset, u32 value);
248c2ecf20Sopenharmony_ci	u32 (*read)(void __iomem *addr, u32 offset);
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci	/* IRQ handlers */
278c2ecf20Sopenharmony_ci	irqreturn_t (*irq_handler)(int irq, void *context);
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci	/* SST init and free */
308c2ecf20Sopenharmony_ci	int (*init)(struct sst_dsp *sst);
318c2ecf20Sopenharmony_ci	void (*free)(struct sst_dsp *sst);
328c2ecf20Sopenharmony_ci};
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci/*
358c2ecf20Sopenharmony_ci * Audio DSP memory offsets and addresses.
368c2ecf20Sopenharmony_ci */
378c2ecf20Sopenharmony_cistruct sst_addr {
388c2ecf20Sopenharmony_ci	u32 sram0_base;
398c2ecf20Sopenharmony_ci	u32 sram1_base;
408c2ecf20Sopenharmony_ci	u32 w0_stat_sz;
418c2ecf20Sopenharmony_ci	u32 w0_up_sz;
428c2ecf20Sopenharmony_ci	void __iomem *lpe;
438c2ecf20Sopenharmony_ci	void __iomem *shim;
448c2ecf20Sopenharmony_ci};
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci/*
478c2ecf20Sopenharmony_ci * Audio DSP Mailbox configuration.
488c2ecf20Sopenharmony_ci */
498c2ecf20Sopenharmony_cistruct sst_mailbox {
508c2ecf20Sopenharmony_ci	void __iomem *in_base;
518c2ecf20Sopenharmony_ci	void __iomem *out_base;
528c2ecf20Sopenharmony_ci	size_t in_size;
538c2ecf20Sopenharmony_ci	size_t out_size;
548c2ecf20Sopenharmony_ci};
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci/*
578c2ecf20Sopenharmony_ci * Generic SST Shim Interface.
588c2ecf20Sopenharmony_ci */
598c2ecf20Sopenharmony_cistruct sst_dsp {
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci	/* Shared for all platforms */
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci	/* runtime */
648c2ecf20Sopenharmony_ci	struct sst_dsp_device *sst_dev;
658c2ecf20Sopenharmony_ci	spinlock_t spinlock;	/* IPC locking */
668c2ecf20Sopenharmony_ci	struct mutex mutex;	/* DSP FW lock */
678c2ecf20Sopenharmony_ci	struct device *dev;
688c2ecf20Sopenharmony_ci	void *thread_context;
698c2ecf20Sopenharmony_ci	int irq;
708c2ecf20Sopenharmony_ci	u32 id;
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci	/* operations */
738c2ecf20Sopenharmony_ci	struct sst_ops *ops;
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_ci	/* debug FS */
768c2ecf20Sopenharmony_ci	struct dentry *debugfs_root;
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ci	/* base addresses */
798c2ecf20Sopenharmony_ci	struct sst_addr addr;
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci	/* mailbox */
828c2ecf20Sopenharmony_ci	struct sst_mailbox mailbox;
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ci	/* SST FW files loaded and their modules */
858c2ecf20Sopenharmony_ci	struct list_head module_list;
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ci	/* SKL data */
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ci	const char *fw_name;
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ci	/* To allocate CL dma buffers */
928c2ecf20Sopenharmony_ci	struct skl_dsp_loader_ops dsp_ops;
938c2ecf20Sopenharmony_ci	struct skl_dsp_fw_ops fw_ops;
948c2ecf20Sopenharmony_ci	int sst_state;
958c2ecf20Sopenharmony_ci	struct skl_cl_dev cl_dev;
968c2ecf20Sopenharmony_ci	u32 intr_status;
978c2ecf20Sopenharmony_ci	const struct firmware *fw;
988c2ecf20Sopenharmony_ci	struct snd_dma_buffer dmab;
998c2ecf20Sopenharmony_ci};
1008c2ecf20Sopenharmony_ci
1018c2ecf20Sopenharmony_ci#endif
102