Warning: This file is not a C or C++ file. It does not have highlighting.
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 |
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 | |
18 | struct snd_sof_dsp_ops; |
19 | struct 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_DSPLESS_MODE: DSP is not used |
25 | * @SOF_FW_BOOT_PREPARE: preparing for boot (firmware loading for exaqmple) |
26 | * @SOF_FW_BOOT_IN_PROGRESS: firmware boot is in progress |
27 | * @SOF_FW_BOOT_FAILED: firmware boot failed |
28 | * @SOF_FW_BOOT_READY_FAILED: firmware booted but fw_ready op failed |
29 | * @SOF_FW_BOOT_READY_OK: firmware booted and fw_ready op passed |
30 | * @SOF_FW_BOOT_COMPLETE: firmware is booted up and functional |
31 | * @SOF_FW_CRASHED: firmware crashed after successful boot |
32 | */ |
33 | enum sof_fw_state { |
34 | SOF_FW_BOOT_NOT_STARTED = 0, |
35 | SOF_DSPLESS_MODE, |
36 | SOF_FW_BOOT_PREPARE, |
37 | SOF_FW_BOOT_IN_PROGRESS, |
38 | SOF_FW_BOOT_FAILED, |
39 | SOF_FW_BOOT_READY_FAILED, |
40 | SOF_FW_BOOT_READY_OK, |
41 | SOF_FW_BOOT_COMPLETE, |
42 | SOF_FW_CRASHED, |
43 | }; |
44 | |
45 | /* DSP power states */ |
46 | enum sof_dsp_power_states { |
47 | SOF_DSP_PM_D0, |
48 | SOF_DSP_PM_D1, |
49 | SOF_DSP_PM_D2, |
50 | SOF_DSP_PM_D3, |
51 | }; |
52 | |
53 | /* Definitions for multiple IPCs */ |
54 | enum sof_ipc_type { |
55 | SOF_IPC_TYPE_3, |
56 | SOF_IPC_TYPE_4, |
57 | SOF_IPC_TYPE_COUNT |
58 | }; |
59 | |
60 | struct sof_loadable_file_profile { |
61 | enum sof_ipc_type ipc_type; |
62 | |
63 | const char *fw_path; |
64 | const char *fw_path_postfix; |
65 | const char *fw_name; |
66 | const char *fw_lib_path; |
67 | const char *fw_lib_path_postfix; |
68 | const char *tplg_path; |
69 | const char *tplg_name; |
70 | }; |
71 | |
72 | /* |
73 | * SOF Platform data. |
74 | */ |
75 | struct snd_sof_pdata { |
76 | const char *name; |
77 | const char *platform; |
78 | |
79 | /* |
80 | * PCI SSID. As PCI does not define 0 as invalid, the subsystem_id_set |
81 | * flag indicates that a value has been written to these members. |
82 | */ |
83 | unsigned short subsystem_vendor; |
84 | unsigned short subsystem_device; |
85 | bool subsystem_id_set; |
86 | |
87 | struct device *dev; |
88 | |
89 | /* |
90 | * notification callback used if the hardware initialization |
91 | * can take time or is handled in a workqueue. This callback |
92 | * can be used by the caller to e.g. enable runtime_pm |
93 | * or limit functionality until all low-level inits are |
94 | * complete. |
95 | */ |
96 | void (*sof_probe_complete)(struct device *dev); |
97 | |
98 | /* descriptor */ |
99 | const struct sof_dev_desc *desc; |
100 | |
101 | /* platform's preferred IPC type and path overrides */ |
102 | struct sof_loadable_file_profile ipc_file_profile_base; |
103 | |
104 | /* firmware and topology filenames */ |
105 | const char *fw_filename_prefix; |
106 | const char *fw_filename; |
107 | const char *tplg_filename_prefix; |
108 | const char *tplg_filename; |
109 | bool disable_function_topology; |
110 | |
111 | /* loadable external libraries available under this directory */ |
112 | const char *fw_lib_prefix; |
113 | |
114 | /* machine */ |
115 | struct platform_device *pdev_mach; |
116 | const struct snd_soc_acpi_mach *machine; |
117 | const struct snd_sof_of_mach *of_machine; |
118 | |
119 | void *hw_pdata; |
120 | |
121 | enum sof_ipc_type ipc_type; |
122 | }; |
123 | |
124 | /* |
125 | * Descriptor used for setting up SOF platform data. This is used when |
126 | * ACPI/PCI data is missing or mapped differently. |
127 | */ |
128 | struct sof_dev_desc { |
129 | /* list of machines using this configuration */ |
130 | struct snd_soc_acpi_mach *machines; |
131 | struct snd_sof_of_mach *of_machines; |
132 | |
133 | /* alternate list of machines using this configuration */ |
134 | struct snd_soc_acpi_mach *alt_machines; |
135 | |
136 | bool use_acpi_target_states; |
137 | |
138 | /* Platform resource indexes in BAR / ACPI resources. */ |
139 | /* Must set to -1 if not used - add new items to end */ |
140 | int resindex_lpe_base; |
141 | int resindex_pcicfg_base; |
142 | int resindex_imr_base; |
143 | int irqindex_host_ipc; |
144 | |
145 | /* IPC timeouts in ms */ |
146 | int ipc_timeout; |
147 | int boot_timeout; |
148 | |
149 | /* chip information for dsp */ |
150 | const void *chip_info; |
151 | |
152 | /* defaults for no codec mode */ |
153 | const char *nocodec_tplg_filename; |
154 | |
155 | /* information on supported IPCs */ |
156 | unsigned int ipc_supported_mask; |
157 | enum sof_ipc_type ipc_default; |
158 | |
159 | /* The platform supports DSPless mode */ |
160 | bool dspless_mode_supported; |
161 | |
162 | /* defaults paths for firmware, library and topology files */ |
163 | const char *default_fw_path[SOF_IPC_TYPE_COUNT]; |
164 | const char *default_lib_path[SOF_IPC_TYPE_COUNT]; |
165 | const char *default_tplg_path[SOF_IPC_TYPE_COUNT]; |
166 | |
167 | /* default firmware name */ |
168 | const char *default_fw_filename[SOF_IPC_TYPE_COUNT]; |
169 | |
170 | const struct snd_sof_dsp_ops *ops; |
171 | int (*ops_init)(struct snd_sof_dev *sdev); |
172 | void (*ops_free)(struct snd_sof_dev *sdev); |
173 | }; |
174 | |
175 | int sof_dai_get_mclk(struct snd_soc_pcm_runtime *rtd); |
176 | int sof_dai_get_bclk(struct snd_soc_pcm_runtime *rtd); |
177 | int sof_dai_get_tdm_slots(struct snd_soc_pcm_runtime *rtd); |
178 | |
179 | #endif |
180 |
Warning: This file is not a C or C++ file. It does not have highlighting.