cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

wm_adsp.h (4620B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * wm_adsp.h  --  Wolfson ADSP support
      4 *
      5 * Copyright 2012 Wolfson Microelectronics plc
      6 *
      7 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
      8 */
      9
     10#ifndef __WM_ADSP_H
     11#define __WM_ADSP_H
     12
     13#include <linux/firmware/cirrus/cs_dsp.h>
     14#include <linux/firmware/cirrus/wmfw.h>
     15
     16#include <sound/soc.h>
     17#include <sound/soc-dapm.h>
     18#include <sound/compress_driver.h>
     19
     20/* Return values for wm_adsp_compr_handle_irq */
     21#define WM_ADSP_COMPR_OK                 0
     22#define WM_ADSP_COMPR_VOICE_TRIGGER      1
     23
     24struct wm_adsp_compr;
     25struct wm_adsp_compr_buf;
     26
     27struct wm_adsp {
     28	struct cs_dsp cs_dsp;
     29	const char *part;
     30	const char *fwf_name;
     31	const char *system_name;
     32	struct snd_soc_component *component;
     33
     34	unsigned int sys_config_size;
     35
     36	int fw;
     37
     38	struct work_struct boot_work;
     39
     40	bool preloaded;
     41	bool fatal_error;
     42
     43	struct list_head compr_list;
     44	struct list_head buffer_list;
     45
     46	/*
     47	 * Flag indicating the preloader widget only needs power toggled
     48	 * on state change rather than held on for the duration of the
     49	 * preload, useful for devices that can retain firmware memory
     50	 * across power down.
     51	 */
     52	bool toggle_preload;
     53};
     54
     55#define WM_ADSP1(wname, num) \
     56	SND_SOC_DAPM_PGA_E(wname, SND_SOC_NOPM, num, 0, NULL, 0, \
     57		wm_adsp1_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD)
     58
     59#define WM_ADSP2_PRELOAD_SWITCH(wname, num) \
     60	SOC_SINGLE_EXT(wname " Preload Switch", SND_SOC_NOPM, num, 1, 0, \
     61		wm_adsp2_preloader_get, wm_adsp2_preloader_put)
     62
     63#define WM_ADSP2(wname, num, event_fn) \
     64	SND_SOC_DAPM_SPK(wname " Preload", NULL), \
     65{	.id = snd_soc_dapm_supply, .name = wname " Preloader", \
     66	.reg = SND_SOC_NOPM, .shift = num, .event = event_fn, \
     67	.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD, \
     68	.subseq = 100, /* Ensure we run after SYSCLK supply widget */ }, \
     69{	.id = snd_soc_dapm_out_drv, .name = wname, \
     70	.reg = SND_SOC_NOPM, .shift = num, .event = wm_adsp_event, \
     71	.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD }
     72
     73#define WM_ADSP_FW_CONTROL(dspname, num) \
     74	SOC_ENUM_EXT(dspname " Firmware", wm_adsp_fw_enum[num], \
     75		     wm_adsp_fw_get, wm_adsp_fw_put)
     76
     77extern const struct soc_enum wm_adsp_fw_enum[];
     78
     79int wm_adsp1_init(struct wm_adsp *dsp);
     80int wm_adsp2_init(struct wm_adsp *dsp);
     81void wm_adsp2_remove(struct wm_adsp *dsp);
     82int wm_adsp2_component_probe(struct wm_adsp *dsp, struct snd_soc_component *component);
     83int wm_adsp2_component_remove(struct wm_adsp *dsp, struct snd_soc_component *component);
     84int wm_halo_init(struct wm_adsp *dsp);
     85
     86int wm_adsp1_event(struct snd_soc_dapm_widget *w,
     87		   struct snd_kcontrol *kcontrol, int event);
     88
     89int wm_adsp_early_event(struct snd_soc_dapm_widget *w,
     90			struct snd_kcontrol *kcontrol, int event);
     91
     92irqreturn_t wm_adsp2_bus_error(int irq, void *data);
     93irqreturn_t wm_halo_bus_error(int irq, void *data);
     94irqreturn_t wm_halo_wdt_expire(int irq, void *data);
     95
     96int wm_adsp_event(struct snd_soc_dapm_widget *w,
     97		  struct snd_kcontrol *kcontrol, int event);
     98
     99int wm_adsp2_set_dspclk(struct snd_soc_dapm_widget *w, unsigned int freq);
    100
    101int wm_adsp2_preloader_get(struct snd_kcontrol *kcontrol,
    102			   struct snd_ctl_elem_value *ucontrol);
    103int wm_adsp2_preloader_put(struct snd_kcontrol *kcontrol,
    104			   struct snd_ctl_elem_value *ucontrol);
    105int wm_adsp_fw_get(struct snd_kcontrol *kcontrol,
    106		   struct snd_ctl_elem_value *ucontrol);
    107int wm_adsp_fw_put(struct snd_kcontrol *kcontrol,
    108		   struct snd_ctl_elem_value *ucontrol);
    109
    110int wm_adsp_compr_open(struct wm_adsp *dsp, struct snd_compr_stream *stream);
    111int wm_adsp_compr_free(struct snd_soc_component *component,
    112		       struct snd_compr_stream *stream);
    113int wm_adsp_compr_set_params(struct snd_soc_component *component,
    114			     struct snd_compr_stream *stream,
    115			     struct snd_compr_params *params);
    116int wm_adsp_compr_get_caps(struct snd_soc_component *component,
    117			   struct snd_compr_stream *stream,
    118			   struct snd_compr_caps *caps);
    119int wm_adsp_compr_trigger(struct snd_soc_component *component,
    120			  struct snd_compr_stream *stream, int cmd);
    121int wm_adsp_compr_handle_irq(struct wm_adsp *dsp);
    122int wm_adsp_compr_pointer(struct snd_soc_component *component,
    123			  struct snd_compr_stream *stream,
    124			  struct snd_compr_tstamp *tstamp);
    125int wm_adsp_compr_copy(struct snd_soc_component *component,
    126		       struct snd_compr_stream *stream,
    127		       char __user *buf, size_t count);
    128int wm_adsp_write_ctl(struct wm_adsp *dsp, const char *name,  int type,
    129		      unsigned int alg, void *buf, size_t len);
    130int wm_adsp_read_ctl(struct wm_adsp *dsp, const char *name,  int type,
    131		      unsigned int alg, void *buf, size_t len);
    132
    133#endif