Merge branch 'topic/hda-dmic' of https://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / sound / soc / intel / skylake / skl.h
index f4dd6c7679932964e5bba2aabc7fb0c036cf3375..f8c71415361005c846c13b77d0bf05fcb515b3ee 100644 (file)
@@ -17,6 +17,7 @@
 #include <sound/hda_codec.h>
 #include <sound/soc.h>
 #include "skl-ssp-clk.h"
+#include "skl-sst-ipc.h"
 
 #define SKL_SUSPEND_DELAY 2000
 
 #define AZX_VS_EM2_DUM                 BIT(23)
 #define AZX_REG_VS_EM2_L1SEN           BIT(13)
 
-struct skl_dsp_resource {
-       u32 max_mcps;
-       u32 max_mem;
-       u32 mcps;
-       u32 mem;
-};
-
 struct skl_debug;
 
 struct skl_astate_param {
@@ -62,7 +56,7 @@ struct skl_fw_config {
        struct skl_astate_config *astate_cfg;
 };
 
-struct skl {
+struct skl_dev {
        struct hda_bus hbus;
        struct pci_dev *pci;
 
@@ -74,9 +68,7 @@ struct skl {
        struct snd_soc_dai_driver *dais;
 
        struct nhlt_acpi_table *nhlt; /* nhlt ptr */
-       struct skl_sst *skl_sst; /* sst skl ctx */
 
-       struct skl_dsp_resource resource;
        struct list_head ppl_list;
        struct list_head bind_list;
 
@@ -95,13 +87,59 @@ struct skl {
        bool use_tplg_pcm;
        struct skl_fw_config cfg;
        struct snd_soc_acpi_mach *mach;
+
+       struct device *dev;
+       struct sst_dsp *dsp;
+
+       /* boot */
+       wait_queue_head_t boot_wait;
+       bool boot_complete;
+
+       /* module load */
+       wait_queue_head_t mod_load_wait;
+       bool mod_load_complete;
+       bool mod_load_status;
+
+       /* IPC messaging */
+       struct sst_generic_ipc ipc;
+
+       /* callback for miscbdge */
+       void (*enable_miscbdcge)(struct device *dev, bool enable);
+       /* Is CGCTL.MISCBDCGE disabled */
+       bool miscbdcg_disabled;
+
+       /* Populate module information */
+       struct list_head uuid_list;
+
+       /* Is firmware loaded */
+       bool fw_loaded;
+
+       /* first boot ? */
+       bool is_first_boot;
+
+       /* multi-core */
+       struct skl_dsp_cores cores;
+
+       /* library info */
+       struct skl_lib_info  lib_info[SKL_MAX_LIB];
+       int lib_count;
+
+       /* Callback to update D0i3C register */
+       void (*update_d0i3c)(struct device *dev, bool enable);
+
+       struct skl_d0i3_data d0i3;
+
+       const struct skl_dsp_ops *dsp_ops;
+
+       /* Callback to update dynamic clock and power gating registers */
+       void (*clock_power_gating)(struct device *dev, bool enable);
 };
 
 #define skl_to_bus(s)  (&(s)->hbus.core)
-#define bus_to_skl(bus) container_of(bus, struct skl, hbus.core)
+#define bus_to_skl(bus) container_of(bus, struct skl_dev, hbus.core)
 
 #define skl_to_hbus(s) (&(s)->hbus)
-#define hbus_to_skl(hbus) container_of((hbus), struct skl, (hbus))
+#define hbus_to_skl(hbus) container_of((hbus), struct skl_dev, (hbus))
 
 /* to pass dai dma data */
 struct skl_dma_params {
@@ -120,49 +158,49 @@ struct skl_dsp_ops {
        int (*init)(struct device *dev, void __iomem *mmio_base,
                        int irq, const char *fw_name,
                        struct skl_dsp_loader_ops loader_ops,
-                       struct skl_sst **skl_sst);
-       int (*init_fw)(struct device *dev, struct skl_sst *ctx);
-       void (*cleanup)(struct device *dev, struct skl_sst *ctx);
+                       struct skl_dev **skl_sst);
+       int (*init_fw)(struct device *dev, struct skl_dev *skl);
+       void (*cleanup)(struct device *dev, struct skl_dev *skl);
 };
 
 int skl_platform_unregister(struct device *dev);
 int skl_platform_register(struct device *dev);
 
-struct nhlt_specific_cfg *skl_get_ep_blob(struct skl *skl, u32 instance,
+struct nhlt_specific_cfg *skl_get_ep_blob(struct skl_dev *skl, u32 instance,
                                        u8 link_type, u8 s_fmt, u8 no_ch,
                                        u32 s_rate, u8 dirn, u8 dev_type);
 
-int skl_nhlt_update_topology_bin(struct skl *skl);
-int skl_init_dsp(struct skl *skl);
-int skl_free_dsp(struct skl *skl);
-int skl_suspend_late_dsp(struct skl *skl);
-int skl_suspend_dsp(struct skl *skl);
-int skl_resume_dsp(struct skl *skl);
-void skl_cleanup_resources(struct skl *skl);
+int skl_nhlt_update_topology_bin(struct skl_dev *skl);
+int skl_init_dsp(struct skl_dev *skl);
+int skl_free_dsp(struct skl_dev *skl);
+int skl_suspend_late_dsp(struct skl_dev *skl);
+int skl_suspend_dsp(struct skl_dev *skl);
+int skl_resume_dsp(struct skl_dev *skl);
+void skl_cleanup_resources(struct skl_dev *skl);
 const struct skl_dsp_ops *skl_get_dsp_ops(int pci_id);
 void skl_update_d0i3c(struct device *dev, bool enable);
-int skl_nhlt_create_sysfs(struct skl *skl);
-void skl_nhlt_remove_sysfs(struct skl *skl);
-void skl_get_clks(struct skl *skl, struct skl_ssp_clk *ssp_clks);
+int skl_nhlt_create_sysfs(struct skl_dev *skl);
+void skl_nhlt_remove_sysfs(struct skl_dev *skl);
+void skl_get_clks(struct skl_dev *skl, struct skl_ssp_clk *ssp_clks);
 struct skl_clk_parent_src *skl_get_parent_clk(u8 clk_id);
-int skl_dsp_set_dma_control(struct skl_sst *ctx, u32 *caps,
+int skl_dsp_set_dma_control(struct skl_dev *skl, u32 *caps,
                                u32 caps_size, u32 node_id);
 
 struct skl_module_cfg;
 
 #ifdef CONFIG_DEBUG_FS
-struct skl_debug *skl_debugfs_init(struct skl *skl);
-void skl_debugfs_exit(struct skl *skl);
+struct skl_debug *skl_debugfs_init(struct skl_dev *skl);
+void skl_debugfs_exit(struct skl_dev *skl);
 void skl_debug_init_module(struct skl_debug *d,
                        struct snd_soc_dapm_widget *w,
                        struct skl_module_cfg *mconfig);
 #else
-static inline struct skl_debug *skl_debugfs_init(struct skl *skl)
+static inline struct skl_debug *skl_debugfs_init(struct skl_dev *skl)
 {
        return NULL;
 }
 
-static inline void skl_debugfs_exit(struct skl *skl)
+static inline void skl_debugfs_exit(struct skl_dev *skl)
 {}
 
 static inline void skl_debug_init_module(struct skl_debug *d,