1e149ca29SPierre-Louis Bossart /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 2c16211d6SLiam Girdwood /* 3c16211d6SLiam Girdwood * This file is provided under a dual BSD/GPLv2 license. When using or 4c16211d6SLiam Girdwood * redistributing this file, you may do so under either license. 5c16211d6SLiam Girdwood * 6c16211d6SLiam Girdwood * Copyright(c) 2018 Intel Corporation. All rights reserved. 7c16211d6SLiam Girdwood * 8c16211d6SLiam Girdwood * Author: Liam Girdwood <liam.r.girdwood@linux.intel.com> 9c16211d6SLiam Girdwood */ 10c16211d6SLiam Girdwood 11c16211d6SLiam Girdwood #ifndef __INCLUDE_SOUND_SOF_H 12c16211d6SLiam Girdwood #define __INCLUDE_SOUND_SOF_H 13c16211d6SLiam Girdwood 14c16211d6SLiam Girdwood #include <linux/pci.h> 158017b8fdSLiam Girdwood #include <sound/soc.h> 16c16211d6SLiam Girdwood #include <sound/soc-acpi.h> 17c16211d6SLiam Girdwood 18c16211d6SLiam Girdwood struct snd_sof_dsp_ops; 19c16211d6SLiam Girdwood 20fc179420SPeter Ujfalusi /** 21d41607d3SPeter Ujfalusi * enum sof_fw_state - DSP firmware state definitions 22fc179420SPeter Ujfalusi * @SOF_FW_BOOT_NOT_STARTED: firmware boot is not yet started 23fc179420SPeter Ujfalusi * @SOF_FW_BOOT_PREPARE: preparing for boot (firmware loading for exaqmple) 24fc179420SPeter Ujfalusi * @SOF_FW_BOOT_IN_PROGRESS: firmware boot is in progress 25fc179420SPeter Ujfalusi * @SOF_FW_BOOT_FAILED: firmware boot failed 26fc179420SPeter Ujfalusi * @SOF_FW_BOOT_READY_FAILED: firmware booted but fw_ready op failed 27fc179420SPeter Ujfalusi * @SOF_FW_BOOT_READY_OK: firmware booted and fw_ready op passed 28fc179420SPeter Ujfalusi * @SOF_FW_BOOT_COMPLETE: firmware is booted up and functional 29fc179420SPeter Ujfalusi * @SOF_FW_CRASHED: firmware crashed after successful boot 30fc179420SPeter Ujfalusi */ 31d41607d3SPeter Ujfalusi enum sof_fw_state { 32fc179420SPeter Ujfalusi SOF_FW_BOOT_NOT_STARTED = 0, 33fc179420SPeter Ujfalusi SOF_FW_BOOT_PREPARE, 34fc179420SPeter Ujfalusi SOF_FW_BOOT_IN_PROGRESS, 35fc179420SPeter Ujfalusi SOF_FW_BOOT_FAILED, 36fc179420SPeter Ujfalusi SOF_FW_BOOT_READY_FAILED, 37fc179420SPeter Ujfalusi SOF_FW_BOOT_READY_OK, 38fc179420SPeter Ujfalusi SOF_FW_BOOT_COMPLETE, 39fc179420SPeter Ujfalusi SOF_FW_CRASHED, 40fc179420SPeter Ujfalusi }; 41fc179420SPeter Ujfalusi 425fdc1242SPeter Ujfalusi /* DSP power states */ 435fdc1242SPeter Ujfalusi enum sof_dsp_power_states { 445fdc1242SPeter Ujfalusi SOF_DSP_PM_D0, 455fdc1242SPeter Ujfalusi SOF_DSP_PM_D1, 465fdc1242SPeter Ujfalusi SOF_DSP_PM_D2, 475fdc1242SPeter Ujfalusi SOF_DSP_PM_D3, 485fdc1242SPeter Ujfalusi }; 495fdc1242SPeter Ujfalusi 5015527feeSPierre-Louis Bossart /* Definitions for multiple IPCs */ 5115527feeSPierre-Louis Bossart enum sof_ipc_type { 5215527feeSPierre-Louis Bossart SOF_IPC, 5315527feeSPierre-Louis Bossart SOF_INTEL_IPC4, 5415527feeSPierre-Louis Bossart SOF_IPC_TYPE_COUNT 5515527feeSPierre-Louis Bossart }; 5615527feeSPierre-Louis Bossart 57c16211d6SLiam Girdwood /* 58c16211d6SLiam Girdwood * SOF Platform data. 59c16211d6SLiam Girdwood */ 60c16211d6SLiam Girdwood struct snd_sof_pdata { 61c16211d6SLiam Girdwood const struct firmware *fw; 62c16211d6SLiam Girdwood const char *name; 63c16211d6SLiam Girdwood const char *platform; 64c16211d6SLiam Girdwood 65c16211d6SLiam Girdwood struct device *dev; 66c16211d6SLiam Girdwood 6792be17a5SKarol Trzcinski /* indicate how many first bytes shouldn't be loaded into DSP memory. */ 6892be17a5SKarol Trzcinski size_t fw_offset; 6992be17a5SKarol Trzcinski 70c16211d6SLiam Girdwood /* 71c16211d6SLiam Girdwood * notification callback used if the hardware initialization 72c16211d6SLiam Girdwood * can take time or is handled in a workqueue. This callback 73c16211d6SLiam Girdwood * can be used by the caller to e.g. enable runtime_pm 74c16211d6SLiam Girdwood * or limit functionality until all low-level inits are 75c16211d6SLiam Girdwood * complete. 76c16211d6SLiam Girdwood */ 77c16211d6SLiam Girdwood void (*sof_probe_complete)(struct device *dev); 78c16211d6SLiam Girdwood 79c16211d6SLiam Girdwood /* descriptor */ 80c16211d6SLiam Girdwood const struct sof_dev_desc *desc; 81c16211d6SLiam Girdwood 82c16211d6SLiam Girdwood /* firmware and topology filenames */ 83c16211d6SLiam Girdwood const char *fw_filename_prefix; 84c16211d6SLiam Girdwood const char *fw_filename; 85c16211d6SLiam Girdwood const char *tplg_filename_prefix; 86c16211d6SLiam Girdwood const char *tplg_filename; 87c16211d6SLiam Girdwood 88c16211d6SLiam Girdwood /* machine */ 89c16211d6SLiam Girdwood struct platform_device *pdev_mach; 90c16211d6SLiam Girdwood const struct snd_soc_acpi_mach *machine; 91c16211d6SLiam Girdwood 92c16211d6SLiam Girdwood void *hw_pdata; 9315527feeSPierre-Louis Bossart 9415527feeSPierre-Louis Bossart enum sof_ipc_type ipc_type; 95c16211d6SLiam Girdwood }; 96c16211d6SLiam Girdwood 97c16211d6SLiam Girdwood /* 98c16211d6SLiam Girdwood * Descriptor used for setting up SOF platform data. This is used when 99c16211d6SLiam Girdwood * ACPI/PCI data is missing or mapped differently. 100c16211d6SLiam Girdwood */ 101c16211d6SLiam Girdwood struct sof_dev_desc { 102c16211d6SLiam Girdwood /* list of machines using this configuration */ 103c16211d6SLiam Girdwood struct snd_soc_acpi_mach *machines; 104c16211d6SLiam Girdwood 1051466327eSPierre-Louis Bossart /* alternate list of machines using this configuration */ 1061466327eSPierre-Louis Bossart struct snd_soc_acpi_mach *alt_machines; 1071466327eSPierre-Louis Bossart 10843437d04SDaniel Baluta bool use_acpi_target_states; 10943437d04SDaniel Baluta 110c16211d6SLiam Girdwood /* Platform resource indexes in BAR / ACPI resources. */ 111c16211d6SLiam Girdwood /* Must set to -1 if not used - add new items to end */ 112c16211d6SLiam Girdwood int resindex_lpe_base; 113c16211d6SLiam Girdwood int resindex_pcicfg_base; 114c16211d6SLiam Girdwood int resindex_imr_base; 115c16211d6SLiam Girdwood int irqindex_host_ipc; 116c16211d6SLiam Girdwood 117c16211d6SLiam Girdwood /* IPC timeouts in ms */ 118c16211d6SLiam Girdwood int ipc_timeout; 119c16211d6SLiam Girdwood int boot_timeout; 120c16211d6SLiam Girdwood 121c16211d6SLiam Girdwood /* chip information for dsp */ 122c16211d6SLiam Girdwood const void *chip_info; 123c16211d6SLiam Girdwood 124c16211d6SLiam Girdwood /* defaults for no codec mode */ 125c16211d6SLiam Girdwood const char *nocodec_tplg_filename; 126c16211d6SLiam Girdwood 1270cf8ff05SPierre-Louis Bossart /* information on supported IPCs */ 1280cf8ff05SPierre-Louis Bossart unsigned int ipc_supported_mask; 1290cf8ff05SPierre-Louis Bossart enum sof_ipc_type ipc_default; 1300cf8ff05SPierre-Louis Bossart 131c16211d6SLiam Girdwood /* defaults paths for firmware and topology files */ 132a3757915SPierre-Louis Bossart const char *default_fw_path[SOF_IPC_TYPE_COUNT]; 133a3757915SPierre-Louis Bossart const char *default_tplg_path[SOF_IPC_TYPE_COUNT]; 134c16211d6SLiam Girdwood 13503eec9b4SRanjani Sridharan /* default firmware name */ 136*a97abb3cSPierre-Louis Bossart const char *default_fw_filename[SOF_IPC_TYPE_COUNT]; 13703eec9b4SRanjani Sridharan 138c16211d6SLiam Girdwood const struct snd_sof_dsp_ops *ops; 139c16211d6SLiam Girdwood }; 140c16211d6SLiam Girdwood 141b951b51eSKeyon Jie int sof_dai_get_mclk(struct snd_soc_pcm_runtime *rtd); 142bc619cfcSBrent Lu int sof_dai_get_bclk(struct snd_soc_pcm_runtime *rtd); 143f805e7e0SRanjani Sridharan 144c16211d6SLiam Girdwood #endif 145