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

topology.h (3928B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright(c) 2021 Intel Corporation. All rights reserved.
      4 *
      5 * Authors: Cezary Rojewski <cezary.rojewski@intel.com>
      6 *          Amadeusz Slawinski <amadeuszx.slawinski@linux.intel.com>
      7 */
      8
      9#ifndef __SOUND_SOC_INTEL_AVS_TPLG_H
     10#define __SOUND_SOC_INTEL_AVS_TPLG_H
     11
     12#include <linux/list.h>
     13#include "messages.h"
     14
     15#define INVALID_OBJECT_ID	UINT_MAX
     16
     17struct snd_soc_component;
     18
     19struct avs_tplg {
     20	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
     21	u32 version;
     22	struct snd_soc_component *comp;
     23
     24	struct avs_tplg_library *libs;
     25	u32 num_libs;
     26	struct avs_audio_format *fmts;
     27	u32 num_fmts;
     28	struct avs_tplg_modcfg_base *modcfgs_base;
     29	u32 num_modcfgs_base;
     30	struct avs_tplg_modcfg_ext *modcfgs_ext;
     31	u32 num_modcfgs_ext;
     32	struct avs_tplg_pplcfg *pplcfgs;
     33	u32 num_pplcfgs;
     34	struct avs_tplg_binding *bindings;
     35	u32 num_bindings;
     36
     37	struct list_head path_tmpl_list;
     38};
     39
     40struct avs_tplg_library {
     41	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
     42};
     43
     44/* Matches header of struct avs_mod_cfg_base. */
     45struct avs_tplg_modcfg_base {
     46	u32 cpc;
     47	u32 ibs;
     48	u32 obs;
     49	u32 is_pages;
     50};
     51
     52struct avs_tplg_pin_format {
     53	u32 pin_index;
     54	u32 iobs;
     55	struct avs_audio_format *fmt;
     56};
     57
     58struct avs_tplg_modcfg_ext {
     59	guid_t type;
     60
     61	union {
     62		struct {
     63			u16 num_input_pins;
     64			u16 num_output_pins;
     65			struct avs_tplg_pin_format *pin_fmts;
     66		} generic;
     67		struct {
     68			struct avs_audio_format *out_fmt;
     69			struct avs_audio_format *blob_fmt; /* optional override */
     70			u32 feature_mask;
     71			union avs_virtual_index vindex;
     72			u32 dma_type;
     73			u32 dma_buffer_size;
     74			u32 config_length;
     75			/* config_data part of priv data */
     76		} copier;
     77		struct {
     78			u32 out_channel_config;
     79			u32 coefficients_select;
     80			s32 coefficients[AVS_CHANNELS_MAX];
     81			u32 channel_map;
     82		} updown_mix;
     83		struct {
     84			u32 out_freq;
     85		} src;
     86		struct {
     87			u32 out_freq;
     88			u8 mode;
     89			u8 disable_jitter_buffer;
     90		} asrc;
     91		struct {
     92			u32 cpc_lp_mode;
     93		} wov;
     94		struct {
     95			struct avs_audio_format *ref_fmt;
     96			struct avs_audio_format *out_fmt;
     97			u32 cpc_lp_mode;
     98		} aec;
     99		struct {
    100			struct avs_audio_format *ref_fmt;
    101			struct avs_audio_format *out_fmt;
    102		} mux;
    103		struct {
    104			struct avs_audio_format *out_fmt;
    105		} micsel;
    106	};
    107};
    108
    109/* Specifies path behaviour during PCM ->trigger(START) command. */
    110enum avs_tplg_trigger {
    111	AVS_TPLG_TRIGGER_AUTO = 0,
    112};
    113
    114struct avs_tplg_pplcfg {
    115	u16 req_size;
    116	u8 priority;
    117	bool lp;
    118	u16 attributes;
    119	enum avs_tplg_trigger trigger;
    120};
    121
    122struct avs_tplg_binding {
    123	char target_tplg_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
    124	u32 target_path_tmpl_id;
    125	u32 target_ppl_id;
    126	u32 target_mod_id;
    127	u8 target_mod_pin;
    128	u32 mod_id;
    129	u8 mod_pin;
    130	u8 is_sink;
    131};
    132
    133struct avs_tplg_path_template_id {
    134	u32 id;
    135	char tplg_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
    136};
    137
    138struct avs_tplg_path_template {
    139	u32 id;
    140
    141	struct list_head path_list;
    142
    143	struct avs_tplg *owner;
    144	/* Driver path templates management. */
    145	struct list_head node;
    146};
    147
    148struct avs_tplg_path {
    149	u32 id;
    150
    151	/* Path format requirements. */
    152	struct avs_audio_format *fe_fmt;
    153	struct avs_audio_format *be_fmt;
    154
    155	struct list_head ppl_list;
    156
    157	struct avs_tplg_path_template *owner;
    158	/* Path template path-variants management. */
    159	struct list_head node;
    160};
    161
    162struct avs_tplg_pipeline {
    163	u32 id;
    164
    165	struct avs_tplg_pplcfg *cfg;
    166	struct avs_tplg_binding **bindings;
    167	u32 num_bindings;
    168	struct list_head mod_list;
    169
    170	struct avs_tplg_path *owner;
    171	/* Path pipelines management. */
    172	struct list_head node;
    173};
    174
    175struct avs_tplg_module {
    176	u32 id;
    177
    178	struct avs_tplg_modcfg_base *cfg_base;
    179	struct avs_audio_format *in_fmt;
    180	u8 core_id;
    181	u8 domain;
    182	struct avs_tplg_modcfg_ext *cfg_ext;
    183
    184	struct avs_tplg_pipeline *owner;
    185	/* Pipeline modules management. */
    186	struct list_head node;
    187};
    188
    189struct avs_tplg *avs_tplg_new(struct snd_soc_component *comp);
    190
    191int avs_load_topology(struct snd_soc_component *comp, const char *filename);
    192int avs_remove_topology(struct snd_soc_component *comp);
    193
    194#endif