2020-05-01 17:58:50 +03:00
/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2019-04-12 19:05:06 +03:00
/*
* This file is provided under a dual BSD / GPLv2 license . When using or
* redistributing this file , you may do so under either license .
*
* Copyright ( c ) 2018 Intel Corporation . All rights reserved .
*
* Author : Liam Girdwood < liam . r . girdwood @ linux . intel . com >
*/
# ifndef __INCLUDE_SOUND_SOF_H
# define __INCLUDE_SOUND_SOF_H
# include <linux/pci.h>
2019-04-12 19:05:17 +03:00
# include <sound/soc.h>
2019-04-12 19:05:06 +03:00
# include <sound/soc-acpi.h>
struct snd_sof_dsp_ops ;
2022-04-14 21:48:10 +03:00
struct snd_sof_dev ;
2019-04-12 19:05:06 +03:00
2021-12-23 14:36:17 +03:00
/**
2021-12-23 14:36:18 +03:00
* enum sof_fw_state - DSP firmware state definitions
2021-12-23 14:36:17 +03:00
* @ SOF_FW_BOOT_NOT_STARTED : firmware boot is not yet started
* @ SOF_FW_BOOT_PREPARE : preparing for boot ( firmware loading for exaqmple )
* @ SOF_FW_BOOT_IN_PROGRESS : firmware boot is in progress
* @ SOF_FW_BOOT_FAILED : firmware boot failed
* @ SOF_FW_BOOT_READY_FAILED : firmware booted but fw_ready op failed
* @ SOF_FW_BOOT_READY_OK : firmware booted and fw_ready op passed
* @ SOF_FW_BOOT_COMPLETE : firmware is booted up and functional
* @ SOF_FW_CRASHED : firmware crashed after successful boot
*/
2021-12-23 14:36:18 +03:00
enum sof_fw_state {
2021-12-23 14:36:17 +03:00
SOF_FW_BOOT_NOT_STARTED = 0 ,
SOF_FW_BOOT_PREPARE ,
SOF_FW_BOOT_IN_PROGRESS ,
SOF_FW_BOOT_FAILED ,
SOF_FW_BOOT_READY_FAILED ,
SOF_FW_BOOT_READY_OK ,
SOF_FW_BOOT_COMPLETE ,
SOF_FW_CRASHED ,
} ;
2022-02-10 18:05:18 +03:00
/* DSP power states */
enum sof_dsp_power_states {
SOF_DSP_PM_D0 ,
SOF_DSP_PM_D1 ,
SOF_DSP_PM_D2 ,
SOF_DSP_PM_D3 ,
} ;
2022-04-14 21:48:03 +03:00
/* Definitions for multiple IPCs */
enum sof_ipc_type {
SOF_IPC ,
SOF_INTEL_IPC4 ,
SOF_IPC_TYPE_COUNT
} ;
2019-04-12 19:05:06 +03:00
/*
* SOF Platform data .
*/
struct snd_sof_pdata {
const struct firmware * fw ;
const char * name ;
const char * platform ;
struct device * dev ;
2020-04-15 23:27:55 +03:00
/* indicate how many first bytes shouldn't be loaded into DSP memory. */
size_t fw_offset ;
2019-04-12 19:05:06 +03:00
/*
* notification callback used if the hardware initialization
* can take time or is handled in a workqueue . This callback
* can be used by the caller to e . g . enable runtime_pm
* or limit functionality until all low - level inits are
* complete .
*/
void ( * sof_probe_complete ) ( struct device * dev ) ;
/* descriptor */
const struct sof_dev_desc * desc ;
/* firmware and topology filenames */
const char * fw_filename_prefix ;
const char * fw_filename ;
const char * tplg_filename_prefix ;
const char * tplg_filename ;
/* machine */
struct platform_device * pdev_mach ;
const struct snd_soc_acpi_mach * machine ;
void * hw_pdata ;
2022-04-14 21:48:03 +03:00
enum sof_ipc_type ipc_type ;
2019-04-12 19:05:06 +03:00
} ;
/*
* Descriptor used for setting up SOF platform data . This is used when
* ACPI / PCI data is missing or mapped differently .
*/
struct sof_dev_desc {
/* list of machines using this configuration */
struct snd_soc_acpi_mach * machines ;
2019-09-17 00:42:41 +03:00
/* alternate list of machines using this configuration */
struct snd_soc_acpi_mach * alt_machines ;
2020-09-21 13:50:38 +03:00
bool use_acpi_target_states ;
2019-04-12 19:05:06 +03:00
/* Platform resource indexes in BAR / ACPI resources. */
/* Must set to -1 if not used - add new items to end */
int resindex_lpe_base ;
int resindex_pcicfg_base ;
int resindex_imr_base ;
int irqindex_host_ipc ;
/* IPC timeouts in ms */
int ipc_timeout ;
int boot_timeout ;
/* chip information for dsp */
const void * chip_info ;
/* defaults for no codec mode */
const char * nocodec_tplg_filename ;
2022-04-14 21:48:05 +03:00
/* information on supported IPCs */
unsigned int ipc_supported_mask ;
enum sof_ipc_type ipc_default ;
2019-04-12 19:05:06 +03:00
/* defaults paths for firmware and topology files */
2022-04-14 21:48:04 +03:00
const char * default_fw_path [ SOF_IPC_TYPE_COUNT ] ;
const char * default_tplg_path [ SOF_IPC_TYPE_COUNT ] ;
2019-04-12 19:05:06 +03:00
2019-12-05 00:15:50 +03:00
/* default firmware name */
2022-04-14 21:48:06 +03:00
const char * default_fw_filename [ SOF_IPC_TYPE_COUNT ] ;
2019-12-05 00:15:50 +03:00
2022-04-14 21:48:10 +03:00
struct snd_sof_dsp_ops * ops ;
int ( * ops_init ) ( struct snd_sof_dev * sdev ) ;
2019-04-12 19:05:06 +03:00
} ;
2021-03-19 15:49:49 +03:00
int sof_dai_get_mclk ( struct snd_soc_pcm_runtime * rtd ) ;
2021-06-25 23:50:41 +03:00
int sof_dai_get_bclk ( struct snd_soc_pcm_runtime * rtd ) ;
2020-11-20 17:16:53 +03:00
2019-04-12 19:05:06 +03:00
# endif