Linux Audio

Check our new training course

Yocto / OpenEmbedded training

Feb 10-13, 2025
Register
Loading...
Note: File does not exist in v3.1.
  1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
  2/*
  3 * This file is provided under a dual BSD/GPLv2 license.  When using or
  4 * redistributing this file, you may do so under either license.
  5 *
  6 * Copyright(c) 2018 Intel Corporation. All rights reserved.
  7 *
  8 * Author: Liam Girdwood <liam.r.girdwood@linux.intel.com>
  9 */
 10
 11#ifndef __INCLUDE_SOUND_SOF_H
 12#define __INCLUDE_SOUND_SOF_H
 13
 14#include <linux/pci.h>
 15#include <sound/soc.h>
 16#include <sound/soc-acpi.h>
 17
 18struct snd_sof_dsp_ops;
 19struct snd_sof_dev;
 20
 21/**
 22 * enum sof_fw_state - DSP firmware state definitions
 23 * @SOF_FW_BOOT_NOT_STARTED:	firmware boot is not yet started
 24 * @SOF_FW_BOOT_PREPARE:	preparing for boot (firmware loading for exaqmple)
 25 * @SOF_FW_BOOT_IN_PROGRESS:	firmware boot is in progress
 26 * @SOF_FW_BOOT_FAILED:		firmware boot failed
 27 * @SOF_FW_BOOT_READY_FAILED:	firmware booted but fw_ready op failed
 28 * @SOF_FW_BOOT_READY_OK:	firmware booted and fw_ready op passed
 29 * @SOF_FW_BOOT_COMPLETE:	firmware is booted up and functional
 30 * @SOF_FW_CRASHED:		firmware crashed after successful boot
 31 */
 32enum sof_fw_state {
 33	SOF_FW_BOOT_NOT_STARTED = 0,
 34	SOF_FW_BOOT_PREPARE,
 35	SOF_FW_BOOT_IN_PROGRESS,
 36	SOF_FW_BOOT_FAILED,
 37	SOF_FW_BOOT_READY_FAILED,
 38	SOF_FW_BOOT_READY_OK,
 39	SOF_FW_BOOT_COMPLETE,
 40	SOF_FW_CRASHED,
 41};
 42
 43/* DSP power states */
 44enum sof_dsp_power_states {
 45	SOF_DSP_PM_D0,
 46	SOF_DSP_PM_D1,
 47	SOF_DSP_PM_D2,
 48	SOF_DSP_PM_D3,
 49};
 50
 51/* Definitions for multiple IPCs */
 52enum sof_ipc_type {
 53	SOF_IPC,
 54	SOF_INTEL_IPC4,
 55	SOF_IPC_TYPE_COUNT
 56};
 57
 58/*
 59 * SOF Platform data.
 60 */
 61struct snd_sof_pdata {
 62	const char *name;
 63	const char *platform;
 64
 65	struct device *dev;
 66
 67	/*
 68	 * notification callback used if the hardware initialization
 69	 * can take time or is handled in a workqueue. This callback
 70	 * can be used by the caller to e.g. enable runtime_pm
 71	 * or limit functionality until all low-level inits are
 72	 * complete.
 73	 */
 74	void (*sof_probe_complete)(struct device *dev);
 75
 76	/* descriptor */
 77	const struct sof_dev_desc *desc;
 78
 79	/* firmware and topology filenames */
 80	const char *fw_filename_prefix;
 81	const char *fw_filename;
 82	const char *tplg_filename_prefix;
 83	const char *tplg_filename;
 84
 85	/* loadable external libraries available under this directory */
 86	const char *fw_lib_prefix;
 87
 88	/* machine */
 89	struct platform_device *pdev_mach;
 90	const struct snd_soc_acpi_mach *machine;
 91	const struct snd_sof_of_mach *of_machine;
 92
 93	void *hw_pdata;
 94
 95	enum sof_ipc_type ipc_type;
 96};
 97
 98/*
 99 * Descriptor used for setting up SOF platform data. This is used when
100 * ACPI/PCI data is missing or mapped differently.
101 */
102struct sof_dev_desc {
103	/* list of machines using this configuration */
104	struct snd_soc_acpi_mach *machines;
105	struct snd_sof_of_mach *of_machines;
106
107	/* alternate list of machines using this configuration */
108	struct snd_soc_acpi_mach *alt_machines;
109
110	bool use_acpi_target_states;
111
112	/* Platform resource indexes in BAR / ACPI resources. */
113	/* Must set to -1 if not used - add new items to end */
114	int resindex_lpe_base;
115	int resindex_pcicfg_base;
116	int resindex_imr_base;
117	int irqindex_host_ipc;
118
119	/* IPC timeouts in ms */
120	int ipc_timeout;
121	int boot_timeout;
122
123	/* chip information for dsp */
124	const void *chip_info;
125
126	/* defaults for no codec mode */
127	const char *nocodec_tplg_filename;
128
129	/* information on supported IPCs */
130	unsigned int ipc_supported_mask;
131	enum sof_ipc_type ipc_default;
132
133	/* defaults paths for firmware, library and topology files */
134	const char *default_fw_path[SOF_IPC_TYPE_COUNT];
135	const char *default_lib_path[SOF_IPC_TYPE_COUNT];
136	const char *default_tplg_path[SOF_IPC_TYPE_COUNT];
137
138	/* default firmware name */
139	const char *default_fw_filename[SOF_IPC_TYPE_COUNT];
140
141	struct snd_sof_dsp_ops *ops;
142	int (*ops_init)(struct snd_sof_dev *sdev);
143	void (*ops_free)(struct snd_sof_dev *sdev);
144};
145
146int sof_dai_get_mclk(struct snd_soc_pcm_runtime *rtd);
147int sof_dai_get_bclk(struct snd_soc_pcm_runtime *rtd);
148
149#endif