/* SPDX-License-Identifier: GPL-2.0 */ /* * mtk-base-dsp.h -- Mediatek ADSP dsp base * * Copyright (c) 2018 MediaTek Inc. * Author: Chipeng */ #ifndef _MTK_BASE_DSP_H_ #define _MTK_BASE_DSP_H_ struct device; struct snd_pcm_substream; struct snd_soc_dai; struct snd_soc_dai_driver; struct gen_pool; #include "audio_buf.h" #include #include "audio_task.h" #include "mtk-dsp-common.h" #include #include #include #define MAX_PAYLOAD_SIZE (32) /* 32bytes */ struct mtk_dsp_ipi_ops { void (*ipi_message_callback)(struct ipi_msg_t *ipi_msg); void (*ipi_handler)(struct mtk_base_dsp *dsp, struct ipi_msg_t *ipi_msg); }; struct mtk_base_dsp_mem { struct audio_hw_buffer adsp_buf; /* dsp <-> audio data struct */ struct audio_hw_buffer adsp_work_buf; /* working buffer */ struct audio_hw_buffer audio_afepcm_buf; /* dsp <-> audio data struct */ struct RingBuf ring_buf; struct snd_pcm_substream *substream; struct gen_pool *gen_pool_buffer; struct audio_dsp_dram msg_atod_share_buf; struct audio_dsp_dram msg_dtoa_share_buf; struct audio_dsp_dram dsp_ring_share_buf; unsigned char ipi_payload_buf[MAX_PAYLOAD_SIZE]; unsigned int dsp_feature_counter; int adsp_xrun_flag; spinlock_t ringbuf_lock; }; struct audio_core_flag { /* * flag with which irq occur * bit mask with adsp scene */ unsigned long long atod_flag; unsigned long long dtoa_flag; }; struct mtk_ap_adsp_mem { struct gen_pool *gen_pool_buffer; /* share dram */ struct audio_core_flag *ap_adsp_core_mem[ADSP_CORE_TOTAL]; struct audio_dsp_dram ap_adsp_share_buf[ADSP_CORE_TOTAL]; }; struct mtk_base_dsp { struct device *dev; const struct snd_pcm_hardware *mtk_dsp_hardware; struct mtk_base_dsp_mem dsp_mem[AUDIO_TASK_DAI_NUM]; struct snd_soc_dai_driver *dai_drivers; unsigned int num_dai_drivers; const struct snd_soc_component_driver *component_driver; int (*runtime_suspend)(struct device *dev); int (*runtime_resume)(struct device *dev); int (*request_dram_resource)(struct device *dev); int (*release_dram_resource)(struct device *dev); bool suspended; int adsp_reset; int dsp_dram_resource_counter; struct mtk_dsp_ipi_ops dsp_ipi_ops; struct mtk_ap_adsp_mem core_share_mem; /* * 0: playback task direct to AFE DL , * aud_playback task get data from UL and write to AFE HW * 1: playback task as a source write to target * aud_playback task get data from source and write to AFE HW */ int dsp_ver; }; struct mtk_adsp_task_attr { unsigned int default_enable; /* default setting */ int afe_memif_dl; int afe_memif_ul; int afe_memif_ref; int adsp_feature_id; int runtime_enable; int ref_runtime_enable; unsigned int spk_protect_in_dsp; }; #endif