ALSA project - the C library reference
topology.h
1/*
2 *
3 * This library is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU Lesser General Public License as
5 * published by the Free Software Foundation; either version 2.1 of
6 * the License, or (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with this library; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16 *
17 * Copyright (C) 2015 Intel Corporation
18 *
19 */
20
21#ifndef __ALSA_TOPOLOGY_H
22#define __ALSA_TOPOLOGY_H
23
24#include <stdint.h>
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
743#define SND_TPLG_MAX_CHAN 8
744
746typedef struct snd_tplg snd_tplg_t;
747
769};
770
772#define SND_TPLG_INDEX_ALL 0
773
775#define SND_TPLG_CREATE_VERBOSE (1<<0)
776#define SND_TPLG_CREATE_DAPM_NOSORT (1<<1)
782const char *snd_tplg_version(void);
783
789
794snd_tplg_t *snd_tplg_create(int flags);
795
800void snd_tplg_free(snd_tplg_t *tplg);
801
809int snd_tplg_load(snd_tplg_t *tplg, const char *buf, size_t size);
810
818int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
819 const char *outfile);
820
826void snd_tplg_verbose(snd_tplg_t *tplg, int verbose);
827
832 int type;
833};
834
840 int min;
841 int step;
842 int mute;
843};
844
849 int size;
850 int reg;
851 int shift;
852 int id;
853};
854
861};
862
867 unsigned int length;
868 const void *data;
869};
870
875 int get;
876 int put;
877 int info;
878};
879
884 int type;
885 const char *name;
886 int access;
888 union {
891 };
892};
893
900 int min;
901 int max;
903 int invert;
904 struct snd_soc_tplg_private *priv;
905};
906
913 int items;
914 int mask;
915 const char **texts;
916 const int **values;
917 struct snd_soc_tplg_private *priv;
918};
919
925 int max;
926 int mask;
927 int base;
930 struct snd_soc_tplg_private *priv;
931};
932
937 const char *src;
938 const char *ctl;
939 const char *sink;
940};
941
946 int count;
948};
949
954 int id;
955 const char *name;
956 const char *sname;
957 int reg;
958 int shift;
959 int mask;
960 int subseq;
961 unsigned int invert;
962 unsigned int ignore_suspend;
963 unsigned short event_flags;
964 unsigned short event_type;
965 struct snd_soc_tplg_private *priv;
968};
969
974 const char *name;
975 int format;
976 int rate;
980};
981
986 const char *name;
987 uint64_t formats;
988 unsigned int rates;
989 unsigned int rate_min;
990 unsigned int rate_max;
991 unsigned int channels_min;
992 unsigned int channels_max;
993 unsigned int periods_min;
994 unsigned int periods_max;
995 unsigned int period_size_min;
996 unsigned int period_size_max;
997 unsigned int buffer_size_min;
998 unsigned int buffer_size_max;
999 unsigned int sig_bits;
1000};
1001
1006 const char *pcm_name;
1007 const char *dai_name;
1008 unsigned int pcm_id;
1009 unsigned int dai_id;
1010 unsigned int playback;
1011 unsigned int capture;
1012 unsigned int compress;
1014 unsigned int flag_mask;
1015 unsigned int flags;
1016 struct snd_soc_tplg_private *priv;
1019};
1020
1026 int id; /* unique ID - - used to match */
1027 unsigned int fmt; /* SND_SOC_DAI_FORMAT_ format value */
1028 unsigned char clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */
1029 unsigned char invert_bclk; /* 1 for inverted BCLK, 0 for normal */
1030 unsigned char invert_fsync; /* 1 for inverted frame clock, 0 for normal */
1031 unsigned char bclk_provider; /* SND_SOC_TPLG_BCLK_ value */
1032 unsigned char fsync_provider; /* SND_SOC_TPLG_FSYNC_ value */
1033 unsigned char mclk_direction; /* SND_SOC_TPLG_MCLK_ value */
1034 unsigned short reserved; /* for 32bit alignment */
1035 unsigned int mclk_rate; /* MCLK or SYSCLK freqency in Hz */
1036 unsigned int bclk_rate; /* BCLK freqency in Hz */
1037 unsigned int fsync_rate; /* frame clock in Hz */
1038 unsigned int tdm_slots; /* number of TDM slots in use */
1039 unsigned int tdm_slot_width; /* width in bits for each slot */
1040 unsigned int tx_slots; /* bit mask for active Tx slots */
1041 unsigned int rx_slots; /* bit mask for active Rx slots */
1042 unsigned int tx_channels; /* number of Tx channels */
1043 unsigned int *tx_chanmap; /* array of slot number */
1044 unsigned int rx_channels; /* number of Rx channels */
1045 unsigned int *rx_chanmap; /* array of slot number */
1046};
1047
1053 const char *dai_name;
1054 unsigned int dai_id;
1055 unsigned int playback;
1056 unsigned int capture;
1058 unsigned int flag_mask;
1059 unsigned int flags;
1060 struct snd_soc_tplg_private *priv;
1062};
1063
1068 const char *name;
1069 int id;
1070 const char *stream_name;
1076 int num_hw_configs; /* number of hw configs */
1077 int default_hw_config_id; /* default hw config ID for init */
1078
1079 unsigned int flag_mask; /* bitmask of flags to configure */
1080 unsigned int flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */
1081 struct snd_soc_tplg_private *priv;
1082};
1083
1089 int index;
1092 union {
1101 };
1103
1111
1118int snd_tplg_build(snd_tplg_t *tplg, const char *outfile);
1119
1127int snd_tplg_build_bin(snd_tplg_t *tplg, void **bin, size_t *size);
1128
1136int snd_tplg_set_manifest_data(snd_tplg_t *tplg, const void *data, int len);
1137
1144int snd_tplg_set_version(snd_tplg_t *tplg, unsigned int version);
1145
1146/*
1147 * Flags for the snd_tplg_save()
1148 */
1149#define SND_TPLG_SAVE_SORT (1<<0)
1150#define SND_TPLG_SAVE_GROUPS (1<<1)
1151#define SND_TPLG_SAVE_NOCHECK (1<<16)
1159int snd_tplg_save(snd_tplg_t *tplg, char **dst, int flags);
1160
1168int snd_tplg_decode(snd_tplg_t *tplg, void *bin, size_t size, int dflags);
1169
1170/* \} */
1171
1172#ifdef __cplusplus
1173}
1174#endif
1175
1176#endif /* __ALSA_TOPOLOGY_H */
struct snd_tplg_link_template * link
Definition: topology.h:1099
int num_channels
Definition: topology.h:859
int snd_tplg_save(snd_tplg_t *tplg, char **dst, int flags)
Save the topology to the text configuration string.
Definition: save.c:558
int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
Register topology template object.
Definition: parser.c:325
snd_tplg_t * snd_tplg_new(void)
Create a new topology parser instance.
Definition: parser.c:475
int access
Definition: topology.h:886
int period_bytes
Definition: topology.h:977
unsigned int playback
Definition: topology.h:1010
struct snd_tplg_hw_config_template * hw_config
Definition: topology.h:1075
struct snd_soc_tplg_private * priv
Definition: topology.h:930
unsigned int periods_min
Definition: topology.h:993
const char * src
Definition: topology.h:937
unsigned int rate_max
Definition: topology.h:990
const char * name
Definition: topology.h:1068
struct snd_tplg_dai_template * dai
Definition: topology.h:1100
struct snd_tplg_graph_elem elem[0]
Definition: topology.h:947
int base
Definition: topology.h:927
#define SND_TPLG_MAX_CHAN
Definition: topology.h:743
const int ** values
Definition: topology.h:916
int id
Definition: topology.h:954
struct snd_soc_tplg_private * priv
Definition: topology.h:904
const char * stream_name
Definition: topology.h:1070
struct snd_tplg_tlv_template hdr
Definition: topology.h:839
int version
Definition: topology.h:1090
int count
Definition: topology.h:946
struct snd_soc_tplg_private * priv
Definition: topology.h:917
int max
Definition: topology.h:925
int id
Definition: topology.h:1069
const char ** texts
Definition: topology.h:915
const char * snd_tplg_version(void)
Return the version of the topology library.
Definition: parser.c:507
unsigned int rates
Definition: topology.h:988
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:296
struct snd_tplg_bytes_template * bytes_ctl
Definition: topology.h:1095
unsigned int flags
Definition: topology.h:1015
unsigned int buffer_size_max
Definition: topology.h:998
struct snd_tplg_ctl_template hdr
Definition: topology.h:924
int min
Definition: topology.h:840
int size
Definition: topology.h:849
const char * pcm_name
Definition: topology.h:1006
int snd_tplg_set_version(snd_tplg_t *tplg, unsigned int version)
Set an optional vendor specific version number.
Definition: parser.c:415
const char * dai_name
Definition: topology.h:1007
int snd_tplg_build_bin(snd_tplg_t *tplg, void **bin, size_t *size)
Build all registered topology data into memory.
Definition: parser.c:380
unsigned int flags
Definition: topology.h:1059
snd_tplg_type
Definition: topology.h:749
struct snd_tplg_ctl_template hdr
Definition: topology.h:898
struct snd_tplg_ctl_template hdr
Definition: topology.h:911
int invert
Definition: topology.h:903
unsigned int period_size_max
Definition: topology.h:996
int snd_tplg_decode(snd_tplg_t *tplg, void *bin, size_t size, int dflags)
Decode the binary topology contents.
Definition: decoder.c:44
const char * sink
Definition: topology.h:939
struct snd_tplg_ctl_template * ctl[0]
Definition: topology.h:967
int snd_tplg_build(snd_tplg_t *tplg, const char *outfile)
Build all registered topology data into binary file.
Definition: parser.c:352
struct snd_tplg_channel_map_template * map
Definition: topology.h:912
struct snd_tplg_io_ops_template ext_ops
Definition: topology.h:929
enum snd_tplg_type type
Definition: topology.h:1088
int subseq
Definition: topology.h:960
unsigned int periods_max
Definition: topology.h:994
int num_streams
Definition: topology.h:1017
struct snd_tplg_pcm_template * pcm
Definition: topology.h:1098
const char * sname
Definition: topology.h:956
struct snd_soc_tplg_private * priv
Definition: topology.h:1060
int min
Definition: topology.h:900
unsigned int ignore_suspend
Definition: topology.h:962
int info
Definition: topology.h:877
int num_streams
Definition: topology.h:1072
int mute
Definition: topology.h:842
unsigned short event_flags
Definition: topology.h:963
int shift
Definition: topology.h:851
unsigned int capture
Definition: topology.h:1011
int max
Definition: topology.h:901
const void * data
Definition: topology.h:868
struct snd_tplg_graph_template * graph
Definition: topology.h:1097
int num_ctls
Definition: topology.h:966
struct snd_tplg snd_tplg_t
Definition: topology.h:746
int id
Definition: topology.h:852
unsigned short event_type
Definition: topology.h:964
int vendor_type
Definition: topology.h:1091
struct snd_tplg_stream_caps_template * caps[2]
Definition: topology.h:1013
const char * name
Definition: topology.h:974
unsigned int length
Definition: topology.h:867
uint64_t formats
Definition: topology.h:987
int get
Definition: topology.h:875
int reg
Definition: topology.h:957
struct snd_soc_tplg_private * priv
Definition: topology.h:1081
snd_tplg_t * snd_tplg_create(int flags)
Create a new topology parser instance.
Definition: parser.c:435
unsigned int period_size_min
Definition: topology.h:995
int format
Definition: topology.h:975
struct snd_soc_tplg_private * priv
Definition: topology.h:1016
struct snd_tplg_channel_elem channel[SND_TPLG_MAX_CHAN]
Definition: topology.h:860
int mask
Definition: topology.h:959
int step
Definition: topology.h:841
int platform_max
Definition: topology.h:902
struct snd_tplg_stream_template stream[0]
Definition: topology.h:1018
int mask
Definition: topology.h:926
struct snd_tplg_enum_template * enum_ctl
Definition: topology.h:1096
unsigned int channels_min
Definition: topology.h:991
int type
Definition: topology.h:884
const char * dai_name
Definition: topology.h:1053
struct snd_tplg_io_ops_template ops
Definition: topology.h:887
struct snd_soc_tplg_private * priv
Definition: topology.h:965
unsigned int capture
Definition: topology.h:1056
int snd_tplg_set_manifest_data(snd_tplg_t *tplg, const void *data, int len)
Attach private data to topology manifest.
Definition: parser.c:396
unsigned int invert
Definition: topology.h:961
struct snd_tplg_tlv_dbscale_template * tlv_scale
Definition: topology.h:890
unsigned int dai_id
Definition: topology.h:1009
int mask
Definition: topology.h:914
const char * name
Definition: topology.h:955
const char * name
Definition: topology.h:885
unsigned int flag_mask
Definition: topology.h:1014
void snd_tplg_verbose(snd_tplg_t *tplg, int verbose)
Enable verbose reporting of binary file output.
Definition: parser.c:422
const char * ctl
Definition: topology.h:938
struct snd_tplg_widget_template * widget
Definition: topology.h:1093
int channels
Definition: topology.h:979
int snd_tplg_load(snd_tplg_t *tplg, const char *buf, size_t size)
Load topology from the text buffer.
Definition: parser.c:262
unsigned int dai_id
Definition: topology.h:1054
struct snd_tplg_tlv_template * tlv
Definition: topology.h:889
int rate
Definition: topology.h:976
int buffer_bytes
Definition: topology.h:978
struct snd_tplg_mixer_template * mixer
Definition: topology.h:1094
void snd_tplg_free(snd_tplg_t *tplg)
Free a topology parser instance.
Definition: parser.c:480
unsigned int playback
Definition: topology.h:1055
struct snd_tplg_stream_template * stream
Definition: topology.h:1073
int num_regs
Definition: topology.h:928
struct snd_tplg_channel_map_template * map
Definition: topology.h:899
unsigned int compress
Definition: topology.h:1012
unsigned int channels_max
Definition: topology.h:992
unsigned int sig_bits
Definition: topology.h:999
int type
Definition: topology.h:832
const char * name
Definition: topology.h:986
int index
Definition: topology.h:1089
struct snd_tplg_stream_caps_template * caps[2]
Definition: topology.h:1057
unsigned int rate_min
Definition: topology.h:989
unsigned int buffer_size_min
Definition: topology.h:997
int items
Definition: topology.h:913
int put
Definition: topology.h:876
unsigned int pcm_id
Definition: topology.h:1008
int reg
Definition: topology.h:850
int shift
Definition: topology.h:958
unsigned int flag_mask
Definition: topology.h:1058
@ SND_TPLG_TYPE_TEXT
Definition: topology.h:753
@ SND_TPLG_TYPE_MANIFEST
Definition: topology.h:763
@ SND_TPLG_TYPE_STREAM_CAPS
Definition: topology.h:757
@ SND_TPLG_TYPE_STREAM_CONFIG
Definition: topology.h:756
@ SND_TPLG_TYPE_TOKEN
Definition: topology.h:764
@ SND_TPLG_TYPE_HW_CONFIG
Definition: topology.h:767
@ SND_TPLG_TYPE_DATA
Definition: topology.h:754
@ SND_TPLG_TYPE_DAPM_GRAPH
Definition: topology.h:760
@ SND_TPLG_TYPE_DAI
Definition: topology.h:768
@ SND_TPLG_TYPE_LINK
Definition: topology.h:766
@ SND_TPLG_TYPE_CC
Definition: topology.h:762
@ SND_TPLG_TYPE_BE
Definition: topology.h:761
@ SND_TPLG_TYPE_MIXER
Definition: topology.h:751
@ SND_TPLG_TYPE_TLV
Definition: topology.h:750
@ SND_TPLG_TYPE_PCM
Definition: topology.h:758
@ SND_TPLG_TYPE_BYTES
Definition: topology.h:755
@ SND_TPLG_TYPE_TUPLE
Definition: topology.h:765
@ SND_TPLG_TYPE_ENUM
Definition: topology.h:752
@ SND_TPLG_TYPE_DAPM_WIDGET
Definition: topology.h:759
unsigned int len
Definition: seq_event.h:0
Template type for TLV Scale objects.
Definition: topology.h:923
Definition: topology.h:848
Template type for channel mapping.
Definition: topology.h:858
Template type for control objects.
Definition: topology.h:883
Template type for physical DAI. It can be used to configure backend DAIs for DPCM.
Definition: topology.h:1052
Template type for enumerated control objects.
Definition: topology.h:910
Template type for single DAPM graph element.
Definition: topology.h:936
Template type for array of DAPM graph elements.
Definition: topology.h:945
Template type to describe a physical link runtime supported hardware config, i.e. hardware audio form...
Definition: topology.h:1025
Template type for object operations mapping.
Definition: topology.h:874
Template type for mixer control objects.
Definition: topology.h:897
Definition: topology.h:1087
Generic Template Object.
Template type for PCM (FE DAI & DAI links).
Definition: topology.h:1005
Template type for private data objects.
Definition: topology.h:866
Stream Capabilities.
Definition: topology.h:985
Stream configurations.
Definition: topology.h:973
Template type for TLV Scale objects.
Definition: topology.h:838
Template type for all TLV objects.
Definition: topology.h:831
Template type for DAPM widget objects.
Definition: topology.h:953