All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
topology.h
/*
*
* This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Copyright (C) 2015 Intel Corporation
*
*/
#ifndef __ALSA_TOPOLOGY_H
#define __ALSA_TOPOLOGY_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SND_TPLG_MAX_CHAN 8
typedef struct snd_tplg snd_tplg_t;
enum snd_tplg_type {
SND_TPLG_TYPE_TLV = 0,
SND_TPLG_TYPE_MIXER,
SND_TPLG_TYPE_ENUM,
SND_TPLG_TYPE_TEXT,
SND_TPLG_TYPE_DATA,
SND_TPLG_TYPE_BYTES,
SND_TPLG_TYPE_STREAM_CONFIG,
SND_TPLG_TYPE_STREAM_CAPS,
SND_TPLG_TYPE_PCM,
SND_TPLG_TYPE_DAPM_WIDGET,
SND_TPLG_TYPE_DAPM_GRAPH,
SND_TPLG_TYPE_BE,
SND_TPLG_TYPE_CC,
SND_TPLG_TYPE_MANIFEST,
SND_TPLG_TYPE_TOKEN,
SND_TPLG_TYPE_TUPLE,
SND_TPLG_TYPE_LINK,
SND_TPLG_TYPE_HW_CONFIG,
SND_TPLG_TYPE_DAI,
};
#define SND_TPLG_INDEX_ALL 0
snd_tplg_t *snd_tplg_new(void);
void snd_tplg_free(snd_tplg_t *tplg);
int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
const char *outfile);
void snd_tplg_verbose(snd_tplg_t *tplg, int verbose);
struct snd_tplg_tlv_template {
int type;
};
struct snd_tplg_tlv_dbscale_template {
struct snd_tplg_tlv_template hdr;
int min;
int step;
int mute;
};
struct snd_tplg_channel_elem {
int size;
int reg;
int shift;
int id;
};
struct snd_tplg_channel_map_template {
int num_channels;
struct snd_tplg_channel_elem channel[SND_TPLG_MAX_CHAN];
};
struct snd_tplg_pdata_template {
unsigned int length;
const void *data;
};
struct snd_tplg_io_ops_template {
int get;
int put;
int info;
};
struct snd_tplg_ctl_template {
int type;
const char *name;
int access;
struct snd_tplg_io_ops_template ops;
struct snd_tplg_tlv_template *tlv;
};
struct snd_tplg_mixer_template {
struct snd_tplg_ctl_template hdr;
struct snd_tplg_channel_map_template *map;
int min;
int max;
int platform_max;
int invert;
struct snd_soc_tplg_private *priv;
};
struct snd_tplg_enum_template {
struct snd_tplg_ctl_template hdr;
struct snd_tplg_channel_map_template *map;
int items;
int mask;
const char **texts;
const int **values;
struct snd_soc_tplg_private *priv;
};
struct snd_tplg_bytes_template {
struct snd_tplg_ctl_template hdr;
int max;
int mask;
int base;
int num_regs;
struct snd_tplg_io_ops_template ext_ops;
struct snd_soc_tplg_private *priv;
};
struct snd_tplg_graph_elem {
const char *src;
const char *ctl;
const char *sink;
};
struct snd_tplg_graph_template {
int count;
struct snd_tplg_graph_elem elem[0];
};
struct snd_tplg_widget_template {
int id;
const char *name;
const char *sname;
int reg;
int shift;
int mask;
int subseq;
unsigned int invert;
unsigned int ignore_suspend;
unsigned short event_flags;
unsigned short event_type;
struct snd_soc_tplg_private *priv;
int num_ctls;
struct snd_tplg_ctl_template *ctl[0];
};
struct snd_tplg_stream_template {
const char *name;
int format;
int rate;
int period_bytes;
int buffer_bytes;
int channels;
};
struct snd_tplg_stream_caps_template {
const char *name;
uint64_t formats;
unsigned int rates;
unsigned int rate_min;
unsigned int rate_max;
unsigned int channels_min;
unsigned int channels_max;
unsigned int periods_min;
unsigned int periods_max;
unsigned int period_size_min;
unsigned int period_size_max;
unsigned int buffer_size_min;
unsigned int buffer_size_max;
unsigned int sig_bits;
};
struct snd_tplg_pcm_template {
const char *pcm_name;
const char *dai_name;
unsigned int pcm_id;
unsigned int dai_id;
unsigned int playback;
unsigned int capture;
unsigned int compress;
struct snd_tplg_stream_caps_template *caps[2];
unsigned int flag_mask;
unsigned int flags;
struct snd_soc_tplg_private *priv;
int num_streams;
struct snd_tplg_stream_template stream[0];
};
struct snd_tplg_hw_config_template {
int id; /* unique ID - - used to match */
unsigned int fmt; /* SND_SOC_DAI_FORMAT_ format value */
unsigned char clock_gated; /* 1 if clock can be gated to save power */
unsigned char invert_bclk; /* 1 for inverted BCLK, 0 for normal */
unsigned char invert_fsync; /* 1 for inverted frame clock, 0 for normal */
unsigned char bclk_master; /* 1 for master of BCLK, 0 for slave */
unsigned char fsync_master; /* 1 for master of FSYNC, 0 for slave */
unsigned char mclk_direction; /* 0 for input, 1 for output */
unsigned short reserved; /* for 32bit alignment */
unsigned int mclk_rate; /* MCLK or SYSCLK freqency in Hz */
unsigned int bclk_rate; /* BCLK freqency in Hz */
unsigned int fsync_rate; /* frame clock in Hz */
unsigned int tdm_slots; /* number of TDM slots in use */
unsigned int tdm_slot_width; /* width in bits for each slot */
unsigned int tx_slots; /* bit mask for active Tx slots */
unsigned int rx_slots; /* bit mask for active Rx slots */
unsigned int tx_channels; /* number of Tx channels */
unsigned int *tx_chanmap; /* array of slot number */
unsigned int rx_channels; /* number of Rx channels */
unsigned int *rx_chanmap; /* array of slot number */
};
struct snd_tplg_dai_template {
const char *dai_name;
unsigned int dai_id;
unsigned int playback;
unsigned int capture;
struct snd_tplg_stream_caps_template *caps[2];
unsigned int flag_mask;
unsigned int flags;
struct snd_soc_tplg_private *priv;
};
struct snd_tplg_link_template {
const char *name;
int id;
const char *stream_name;
int num_streams;
struct snd_tplg_stream_template *stream;
struct snd_tplg_hw_config_template *hw_config;
int num_hw_configs; /* number of hw configs */
int default_hw_config_id; /* default hw config ID for init */
unsigned int flag_mask; /* bitmask of flags to configure */
unsigned int flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */
struct snd_soc_tplg_private *priv;
};
typedef struct snd_tplg_obj_template {
enum snd_tplg_type type;
int index;
int version;
int vendor_type;
union {
struct snd_tplg_widget_template *widget;
struct snd_tplg_mixer_template *mixer;
struct snd_tplg_bytes_template *bytes_ctl;
struct snd_tplg_enum_template *enum_ctl;
struct snd_tplg_graph_template *graph;
struct snd_tplg_pcm_template *pcm;
struct snd_tplg_link_template *link;
struct snd_tplg_dai_template *dai;
};
} snd_tplg_obj_template_t;
int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t);
int snd_tplg_build(snd_tplg_t *tplg, const char *outfile);
int snd_tplg_set_manifest_data(snd_tplg_t *tplg, const void *data, int len);
int snd_tplg_set_version(snd_tplg_t *tplg, unsigned int version);
/* \} */
#ifdef __cplusplus
}
#endif
#endif /* __ALSA_TOPOLOGY_H */
SND_TPLG_TYPE_TEXT
Definition: topology.h:753
snd_tplg_bytes_template::priv
struct snd_soc_tplg_private * priv
Definition: topology.h:902
snd_tplg_graph_elem::ctl
const char * ctl
Definition: topology.h:910
snd_tplg_stream_caps_template::name
const char * name
Definition: topology.h:958
snd_tplg_stream_template::rate
int rate
Definition: topology.h:948
snd_tplg_stream_caps_template::formats
uint64_t formats
Definition: topology.h:959
snd_tplg_enum_template::items
int items
Definition: topology.h:885
snd_tplg_channel_map_template::channel
struct snd_tplg_channel_elem channel[SND_TPLG_MAX_CHAN]
Definition: topology.h:835
snd_tplg_widget_template::num_ctls
int num_ctls
Definition: topology.h:938
snd_tplg_dai_template::flags
unsigned int flags
Definition: topology.h:1031
snd_tplg_enum_template::values
const int ** values
Definition: topology.h:888
snd_tplg_hw_config_template
Template type to describe a physical link runtime supported hardware config, i.e. hardware audio form...
Definition: topology.h:997
snd_tplg_widget_template::priv
struct snd_soc_tplg_private * priv
Definition: topology.h:937
snd_tplg_dai_template::flag_mask
unsigned int flag_mask
Definition: topology.h:1030
snd_tplg_enum_template
Template type for enumerated control objects.
Definition: topology.h:882
snd_tplg_channel_elem
Definition: topology.h:823
snd_tplg_stream_caps_template::rate_min
unsigned int rate_min
Definition: topology.h:961
snd_tplg_graph_template
Template type for array of DAPM graph elements.
Definition: topology.h:917
SND_TPLG_TYPE_LINK
Definition: topology.h:766
snd_tplg_link_template::stream
struct snd_tplg_stream_template * stream
Definition: topology.h:1045
SND_TPLG_TYPE_CC
Definition: topology.h:762
snd_tplg_widget_template::reg
int reg
Definition: topology.h:929
SND_TPLG_TYPE_MANIFEST
Definition: topology.h:763
snd_tplg_widget_template
Template type for DAPM widget objects.
Definition: topology.h:925
snd_tplg_type
snd_tplg_type
Definition: topology.h:749
snd_tplg_obj_template_t::pcm
struct snd_tplg_pcm_template * pcm
Definition: topology.h:1070
snd_tplg_enum_template::mask
int mask
Definition: topology.h:886
snd_tplg_obj_template_t::enum_ctl
struct snd_tplg_enum_template * enum_ctl
Definition: topology.h:1068
snd_tplg_obj_template_t::bytes_ctl
struct snd_tplg_bytes_template * bytes_ctl
Definition: topology.h:1067
SND_TPLG_TYPE_DAPM_WIDGET
Definition: topology.h:759
snd_tplg_mixer_template::priv
struct snd_soc_tplg_private * priv
Definition: topology.h:876
snd_tplg_enum_template::map
struct snd_tplg_channel_map_template * map
Definition: topology.h:884
SND_TPLG_TYPE_PCM
Definition: topology.h:758
snd_tplg_ctl_template::access
int access
Definition: topology.h:861
SND_TPLG_TYPE_DAI
Definition: topology.h:768
snd_tplg_dai_template::dai_id
unsigned int dai_id
Definition: topology.h:1026
snd_tplg_ctl_template::ops
struct snd_tplg_io_ops_template ops
Definition: topology.h:862
snd_tplg_tlv_dbscale_template::hdr
struct snd_tplg_tlv_template hdr
Definition: topology.h:814
snd_tplg_widget_template::ignore_suspend
unsigned int ignore_suspend
Definition: topology.h:934
snd_tplg_pcm_template::stream
struct snd_tplg_stream_template stream[0]
Definition: topology.h:990
snd_tplg_widget_template::subseq
int subseq
Definition: topology.h:932
snd_tplg_add_object
int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
Register topology template object.
Definition: parser.c:357
SND_TPLG_TYPE_MIXER
Definition: topology.h:751
snd_tplg_new
snd_tplg_t * snd_tplg_new(void)
Create a new topology parser instance.
Definition: parser.c:450
snd_tplg_obj_template_t::widget
struct snd_tplg_widget_template * widget
Definition: topology.h:1065
snd_tplg_ctl_template
Template type for control objects.
Definition: topology.h:858
snd_tplg_mixer_template::platform_max
int platform_max
Definition: topology.h:874
snd_tplg_bytes_template::ext_ops
struct snd_tplg_io_ops_template ext_ops
Definition: topology.h:901
snd_tplg_pdata_template::length
unsigned int length
Definition: topology.h:842
snd_tplg_obj_template_t
Definition: topology.h:1059
snd_tplg_link_template::name
const char * name
Definition: topology.h:1040
snd_tplg_stream_caps_template::buffer_size_max
unsigned int buffer_size_max
Definition: topology.h:970
snd_tplg_widget_template::invert
unsigned int invert
Definition: topology.h:933
snd_tplg_enum_template::priv
struct snd_soc_tplg_private * priv
Definition: topology.h:889
snd_tplg_stream_caps_template::rate_max
unsigned int rate_max
Definition: topology.h:962
snd_tplg_graph_template::count
int count
Definition: topology.h:918
snd_tplg_pcm_template::dai_name
const char * dai_name
Definition: topology.h:979
snd_tplg_widget_template::name
const char * name
Definition: topology.h:927
snd_tplg_stream_template::format
int format
Definition: topology.h:947
SND_TPLG_TYPE_TOKEN
Definition: topology.h:764
snd_tplg_enum_template::hdr
struct snd_tplg_ctl_template hdr
Definition: topology.h:883
snd_tplg_dai_template::caps
struct snd_tplg_stream_caps_template * caps[2]
Definition: topology.h:1029
snd_tplg_t
struct snd_tplg snd_tplg_t
Definition: topology.h:746
snd_tplg_channel_elem::reg
int reg
Definition: topology.h:825
snd_tplg_tlv_dbscale_template
Template type for TLV Scale objects.
Definition: topology.h:813
snd_tplg_obj_template_t::vendor_type
int vendor_type
Definition: topology.h:1063
snd_tplg_widget_template::ctl
struct snd_tplg_ctl_template * ctl[0]
Definition: topology.h:939
snd_tplg_stream_template
Stream configurations.
Definition: topology.h:945
snd_tplg_bytes_template::hdr
struct snd_tplg_ctl_template hdr
Definition: topology.h:896
snd_tplg_free
void snd_tplg_free(snd_tplg_t *tplg)
Free a topology parser instance.
Definition: parser.c:487
snd_tplg_link_template::stream_name
const char * stream_name
Definition: topology.h:1042
snd_tplg_bytes_template::max
int max
Definition: topology.h:897
snd_tplg_pcm_template::capture
unsigned int capture
Definition: topology.h:983
snd_tplg_mixer_template::max
int max
Definition: topology.h:873
snd_tplg_widget_template::shift
int shift
Definition: topology.h:930
snd_tplg_stream_template::buffer_bytes
int buffer_bytes
Definition: topology.h:950
snd_tplg_tlv_dbscale_template::mute
int mute
Definition: topology.h:817
snd_tplg_graph_template::elem
struct snd_tplg_graph_elem elem[0]
Definition: topology.h:919
snd_tplg_bytes_template::num_regs
int num_regs
Definition: topology.h:900
snd_tplg_obj_template_t::mixer
struct snd_tplg_mixer_template * mixer
Definition: topology.h:1066
SND_TPLG_TYPE_DATA
Definition: topology.h:754
SND_TPLG_MAX_CHAN
#define SND_TPLG_MAX_CHAN
Definition: topology.h:743
snd_tplg_link_template::hw_config
struct snd_tplg_hw_config_template * hw_config
Definition: topology.h:1047
snd_tplg_widget_template::event_type
unsigned short event_type
Definition: topology.h:936
snd_tplg_obj_template
Generic Template Object.
snd_tplg_pcm_template
Template type for PCM (FE DAI &amp; DAI links).
Definition: topology.h:977
snd_tplg_enum_template::texts
const char ** texts
Definition: topology.h:887
snd_tplg_build_file
int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile, const char *outfile)
Parse and build topology text file into binary file.
Definition: parser.c:311
snd_tplg_set_version
int snd_tplg_set_version(snd_tplg_t *tplg, unsigned int version)
Set an optional vendor specific version number.
Definition: parser.c:428
snd_tplg_pcm_template::priv
struct snd_soc_tplg_private * priv
Definition: topology.h:988
snd_tplg_stream_caps_template::buffer_size_min
unsigned int buffer_size_min
Definition: topology.h:969
snd_tplg_graph_elem::src
const char * src
Definition: topology.h:909
snd_tplg_obj_template_t::dai
struct snd_tplg_dai_template * dai
Definition: topology.h:1072
snd_tplg_graph_elem
Template type for single DAPM graph element.
Definition: topology.h:908
SND_TPLG_TYPE_STREAM_CONFIG
Definition: topology.h:756
snd_tplg_tlv_dbscale_template::min
int min
Definition: topology.h:815
snd_tplg_verbose
void snd_tplg_verbose(snd_tplg_t *tplg, int verbose)
Enable verbose reporting of binary file output.
Definition: parser.c:435
snd_tplg_pcm_template::caps
struct snd_tplg_stream_caps_template * caps[2]
Definition: topology.h:985
snd_tplg_graph_elem::sink
const char * sink
Definition: topology.h:911
snd_tplg_bytes_template
Template type for TLV Scale objects.
Definition: topology.h:895
snd_tplg_widget_template::id
int id
Definition: topology.h:926
snd_tplg_io_ops_template
Template type for object operations mapping.
Definition: topology.h:849
snd_tplg_mixer_template::hdr
struct snd_tplg_ctl_template hdr
Definition: topology.h:870
snd_tplg_io_ops_template::put
int put
Definition: topology.h:851
snd_tplg_dai_template::capture
unsigned int capture
Definition: topology.h:1028
snd_tplg_mixer_template::map
struct snd_tplg_channel_map_template * map
Definition: topology.h:871
snd_tplg_bytes_template::mask
int mask
Definition: topology.h:898
snd_tplg_pcm_template::flag_mask
unsigned int flag_mask
Definition: topology.h:986
SND_TPLG_TYPE_HW_CONFIG
Definition: topology.h:767
snd_tplg_pcm_template::pcm_id
unsigned int pcm_id
Definition: topology.h:980
snd_tplg_tlv_template
Template type for all TLV objects.
Definition: topology.h:806
len
unsigned int len
Definition: seq_event.h:198
snd_tplg_stream_caps_template::periods_max
unsigned int periods_max
Definition: topology.h:966
snd_tplg_ctl_template::name
const char * name
Definition: topology.h:860
snd_tplg_link_template::id
int id
Definition: topology.h:1041
snd_tplg_dai_template
Template type for physical DAI. It can be used to configure backend DAIs for DPCM.
Definition: topology.h:1024
SND_TPLG_TYPE_STREAM_CAPS
Definition: topology.h:757
SND_TPLG_TYPE_TUPLE
Definition: topology.h:765
snd_tplg_widget_template::mask
int mask
Definition: topology.h:931
snd_tplg_stream_caps_template::periods_min
unsigned int periods_min
Definition: topology.h:965
snd_tplg_stream_caps_template::sig_bits
unsigned int sig_bits
Definition: topology.h:971
SND_TPLG_TYPE_DAPM_GRAPH
Definition: topology.h:760
snd_tplg_widget_template::event_flags
unsigned short event_flags
Definition: topology.h:935
SND_TPLG_TYPE_BE
Definition: topology.h:761
SND_TPLG_TYPE_TLV
Definition: topology.h:750
snd_tplg_channel_elem::shift
int shift
Definition: topology.h:826
snd_tplg_pdata_template::data
const void * data
Definition: topology.h:843
snd_tplg_mixer_template::invert
int invert
Definition: topology.h:875
snd_tplg_pcm_template::num_streams
int num_streams
Definition: topology.h:989
snd_tplg_tlv_template::type
int type
Definition: topology.h:807
snd_tplg_channel_elem::size
int size
Definition: topology.h:824
snd_tplg_obj_template_t::graph
struct snd_tplg_graph_template * graph
Definition: topology.h:1069
snd_tplg_link_template
Template type for physical DAI Links.
Definition: topology.h:1039
snd_tplg_mixer_template
Template type for mixer control objects.
Definition: topology.h:869
snd_tplg_link_template::num_streams
int num_streams
Definition: topology.h:1044
snd_tplg_dai_template::priv
struct snd_soc_tplg_private * priv
Definition: topology.h:1032
snd_tplg_obj_template_t::link
struct snd_tplg_link_template * link
Definition: topology.h:1071
snd_tplg_stream_caps_template::channels_min
unsigned int channels_min
Definition: topology.h:963
snd_tplg_stream_template::name
const char * name
Definition: topology.h:946
snd_tplg_widget_template::sname
const char * sname
Definition: topology.h:928
snd_tplg_pcm_template::dai_id
unsigned int dai_id
Definition: topology.h:981
snd_tplg_set_manifest_data
int snd_tplg_set_manifest_data(snd_tplg_t *tplg, const void *data, int len)
Attach private data to topology manifest.
Definition: parser.c:413
snd_tplg_pcm_template::playback
unsigned int playback
Definition: topology.h:982
snd_tplg_ctl_template::type
int type
Definition: topology.h:859
snd_tplg_stream_template::channels
int channels
Definition: topology.h:951
snd_tplg_channel_map_template::num_channels
int num_channels
Definition: topology.h:834
snd_tplg_stream_caps_template::period_size_min
unsigned int period_size_min
Definition: topology.h:967
snd_tplg_channel_map_template
Template type for channel mapping.
Definition: topology.h:833
snd_tplg_link_template::priv
struct snd_soc_tplg_private * priv
Definition: topology.h:1053
snd_tplg_stream_caps_template::period_size_max
unsigned int period_size_max
Definition: topology.h:968
snd_tplg_pcm_template::compress
unsigned int compress
Definition: topology.h:984
snd_tplg_mixer_template::min
int min
Definition: topology.h:872
snd_tplg_dai_template::playback
unsigned int playback
Definition: topology.h:1027
snd_tplg_stream_caps_template::channels_max
unsigned int channels_max
Definition: topology.h:964
snd_tplg_ctl_template::tlv
struct snd_tplg_tlv_template * tlv
Definition: topology.h:863
snd_tplg_bytes_template::base
int base
Definition: topology.h:899
snd_tplg_io_ops_template::info
int info
Definition: topology.h:852
snd_tplg_pcm_template::flags
unsigned int flags
Definition: topology.h:987
snd_tplg_build
int snd_tplg_build(snd_tplg_t *tplg, const char *outfile)
Build all registered topology data into binary file.
Definition: parser.c:384
snd_tplg_tlv_dbscale_template::step
int step
Definition: topology.h:816
SND_TPLG_TYPE_BYTES
Definition: topology.h:755
snd_tplg_stream_caps_template::rates
unsigned int rates
Definition: topology.h:960
snd_tplg_obj_template_t::index
int index
Definition: topology.h:1061
snd_tplg_dai_template::dai_name
const char * dai_name
Definition: topology.h:1025
snd_tplg_pdata_template
Template type for private data objects.
Definition: topology.h:841
snd_tplg_channel_elem::id
int id
Definition: topology.h:827
snd_tplg_stream_caps_template
Stream Capabilities.
Definition: topology.h:957
snd_tplg_stream_template::period_bytes
int period_bytes
Definition: topology.h:949
snd_tplg_obj_template_t::version
int version
Definition: topology.h:1062
SND_TPLG_TYPE_ENUM
Definition: topology.h:752
snd_tplg_pcm_template::pcm_name
const char * pcm_name
Definition: topology.h:978