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
27 extern "C" {
28 #endif
29 
743 #define SND_TPLG_MAX_CHAN 8
744 
746 typedef 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)
782 const char *snd_tplg_version(void);
783 
788 snd_tplg_t *snd_tplg_new(void);
789 
794 snd_tplg_t *snd_tplg_create(int flags);
795 
800 void snd_tplg_free(snd_tplg_t *tplg);
801 
809 int snd_tplg_load(snd_tplg_t *tplg, const char *buf, size_t size);
810 
818 int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
819  const char *outfile);
820 
826 void 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;
928  int num_regs;
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;
966  int num_ctls;
968 };
969 
974  const char *name;
975  int format;
976  int rate;
979  int channels;
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 
1087 typedef struct snd_tplg_obj_template {
1088  enum snd_tplg_type type;
1089  int index;
1090  int version;
1092  union {
1101  };
1103 
1111 
1118 int snd_tplg_build(snd_tplg_t *tplg, const char *outfile);
1119 
1127 int snd_tplg_build_bin(snd_tplg_t *tplg, void **bin, size_t *size);
1128 
1136 int snd_tplg_set_manifest_data(snd_tplg_t *tplg, const void *data, int len);
1137 
1144 int 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)
1159 int snd_tplg_save(snd_tplg_t *tplg, char **dst, int flags);
1160 
1168 int 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 */
Definition: topology.h:753
struct snd_soc_tplg_private * priv
Definition: topology.h:930
const char * ctl
Definition: topology.h:938
const char * name
Definition: topology.h:986
int rate
Definition: topology.h:976
uint64_t formats
Definition: topology.h:987
int items
Definition: topology.h:913
struct snd_tplg_channel_elem channel[SND_TPLG_MAX_CHAN]
Definition: topology.h:860
int num_ctls
Definition: topology.h:966
unsigned int flags
Definition: topology.h:1059
const int ** values
Definition: topology.h:916
Template type to describe a physical link runtime supported hardware config, i.e. hardware audio form...
Definition: topology.h:1025
struct snd_soc_tplg_private * priv
Definition: topology.h:965
unsigned int flag_mask
Definition: topology.h:1058
int snd_tplg_decode(snd_tplg_t *tplg, void *bin, size_t size, int dflags)
Decode the binary topology contents.
Definition: decoder.c:44
Template type for enumerated control objects.
Definition: topology.h:910
Definition: topology.h:848
unsigned int rate_min
Definition: topology.h:989
Template type for array of DAPM graph elements.
Definition: topology.h:945
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
Definition: topology.h:766
Definition: topology.h:762
int reg
Definition: topology.h:957
Definition: topology.h:763
Template type for DAPM widget objects.
Definition: topology.h:953
snd_tplg_type
Definition: topology.h:749
struct snd_tplg_pcm_template * pcm
Definition: topology.h:1098
int mask
Definition: topology.h:914
struct snd_tplg_enum_template * enum_ctl
Definition: topology.h:1096
struct snd_tplg_bytes_template * bytes_ctl
Definition: topology.h:1095
Definition: topology.h:759
struct snd_soc_tplg_private * priv
Definition: topology.h:904
struct snd_tplg_channel_map_template * map
Definition: topology.h:912
Definition: topology.h:758
int access
Definition: topology.h:886
Definition: topology.h:768
unsigned int dai_id
Definition: topology.h:1054
struct snd_tplg_io_ops_template ops
Definition: topology.h:887
struct snd_tplg_tlv_template hdr
Definition: topology.h:839
unsigned int ignore_suspend
Definition: topology.h:962
struct snd_tplg_stream_template stream[0]
Definition: topology.h:1018
snd_tplg_t * snd_tplg_create(int flags)
Create a new topology parser instance.
Definition: parser.c:435
int subseq
Definition: topology.h:960
int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
Register topology template object.
Definition: parser.c:325
Definition: topology.h:751
snd_tplg_t * snd_tplg_new(void)
Create a new topology parser instance.
Definition: parser.c:475
struct snd_tplg_widget_template * widget
Definition: topology.h:1093
Template type for control objects.
Definition: topology.h:883
int platform_max
Definition: topology.h:902
struct snd_tplg_io_ops_template ext_ops
Definition: topology.h:929
unsigned int length
Definition: topology.h:867
Definition: topology.h:1087
unsigned int buffer_size_max
Definition: topology.h:998
unsigned int invert
Definition: topology.h:961
struct snd_soc_tplg_private * priv
Definition: topology.h:917
unsigned int rate_max
Definition: topology.h:990
int count
Definition: topology.h:946
const char * dai_name
Definition: topology.h:1007
const char * name
Definition: topology.h:955
int format
Definition: topology.h:975
Definition: topology.h:764
struct snd_tplg_ctl_template hdr
Definition: topology.h:911
struct snd_tplg_stream_caps_template * caps[2]
Definition: topology.h:1057
struct snd_tplg snd_tplg_t
Definition: topology.h:746
int reg
Definition: topology.h:850
Template type for TLV Scale objects.
Definition: topology.h:838
int vendor_type
Definition: topology.h:1091
struct snd_tplg_ctl_template * ctl[0]
Definition: topology.h:967
Stream configurations.
Definition: topology.h:973
struct snd_tplg_ctl_template hdr
Definition: topology.h:924
void snd_tplg_free(snd_tplg_t *tplg)
Free a topology parser instance.
Definition: parser.c:480
int max
Definition: topology.h:925
unsigned int capture
Definition: topology.h:1011
int max
Definition: topology.h:901
int shift
Definition: topology.h:958
int buffer_bytes
Definition: topology.h:978
int mute
Definition: topology.h:842
struct snd_tplg_graph_elem elem[0]
Definition: topology.h:947
int num_regs
Definition: topology.h:928
struct snd_tplg_mixer_template * mixer
Definition: topology.h:1094
Definition: topology.h:754
#define SND_TPLG_MAX_CHAN
Definition: topology.h:743
unsigned short event_type
Definition: topology.h:964
Generic Template Object.
Template type for PCM (FE DAI & DAI links).
Definition: topology.h:1005
const char ** texts
Definition: topology.h:915
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
int snd_tplg_set_version(snd_tplg_t *tplg, unsigned int version)
Set an optional vendor specific version number.
Definition: parser.c:415
struct snd_soc_tplg_private * priv
Definition: topology.h:1016
unsigned int buffer_size_min
Definition: topology.h:997
const char * src
Definition: topology.h:937
struct snd_tplg_dai_template * dai
Definition: topology.h:1100
Template type for single DAPM graph element.
Definition: topology.h:936
Definition: topology.h:756
int min
Definition: topology.h:840
void snd_tplg_verbose(snd_tplg_t *tplg, int verbose)
Enable verbose reporting of binary file output.
Definition: parser.c:422
struct snd_tplg_stream_caps_template * caps[2]
Definition: topology.h:1013
const char * sink
Definition: topology.h:939
Template type for TLV Scale objects.
Definition: topology.h:923
int id
Definition: topology.h:954
Template type for object operations mapping.
Definition: topology.h:874
struct snd_tplg_ctl_template hdr
Definition: topology.h:898
int put
Definition: topology.h:876
unsigned int capture
Definition: topology.h:1056
struct snd_tplg_channel_map_template * map
Definition: topology.h:899
int mask
Definition: topology.h:926
unsigned int flag_mask
Definition: topology.h:1014
Definition: topology.h:767
unsigned int pcm_id
Definition: topology.h:1008
Template type for all TLV objects.
Definition: topology.h:831
unsigned int len
Definition: seq_event.h:198
unsigned int periods_max
Definition: topology.h:994
const char * name
Definition: topology.h:885
Template type for physical DAI. It can be used to configure backend DAIs for DPCM.
Definition: topology.h:1052
Definition: topology.h:757
Definition: topology.h:765
int mask
Definition: topology.h:959
unsigned int periods_min
Definition: topology.h:993
unsigned int sig_bits
Definition: topology.h:999
Definition: topology.h:760
unsigned short event_flags
Definition: topology.h:963
Definition: topology.h:761
Definition: topology.h:750
int shift
Definition: topology.h:851
const void * data
Definition: topology.h:868
int invert
Definition: topology.h:903
int num_streams
Definition: topology.h:1017
int type
Definition: topology.h:832
int size
Definition: topology.h:849
struct snd_tplg_graph_template * graph
Definition: topology.h:1097
Template type for mixer control objects.
Definition: topology.h:897
struct snd_soc_tplg_private * priv
Definition: topology.h:1060
struct snd_tplg_link_template * link
Definition: topology.h:1099
unsigned int channels_min
Definition: topology.h:991
const char * name
Definition: topology.h:974
const char * sname
Definition: topology.h:956
unsigned int dai_id
Definition: topology.h:1009
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 playback
Definition: topology.h:1010
int type
Definition: topology.h:884
struct snd_tplg_tlv_dbscale_template * tlv_scale
Definition: topology.h:890
int channels
Definition: topology.h:979
int num_channels
Definition: topology.h:859
unsigned int period_size_min
Definition: topology.h:995
Template type for channel mapping.
Definition: topology.h:858
unsigned int period_size_max
Definition: topology.h:996
unsigned int compress
Definition: topology.h:1012
int min
Definition: topology.h:900
unsigned int playback
Definition: topology.h:1055
unsigned int channels_max
Definition: topology.h:992
int snd_tplg_load(snd_tplg_t *tplg, const char *buf, size_t size)
Load topology from the text buffer.
Definition: parser.c:262
struct snd_tplg_tlv_template * tlv
Definition: topology.h:889
int base
Definition: topology.h:927
int info
Definition: topology.h:877
unsigned int flags
Definition: topology.h:1015
int snd_tplg_build(snd_tplg_t *tplg, const char *outfile)
Build all registered topology data into binary file.
Definition: parser.c:352
int step
Definition: topology.h:841
Definition: topology.h:755
unsigned int rates
Definition: topology.h:988
int index
Definition: topology.h:1089
const char * dai_name
Definition: topology.h:1053
Template type for private data objects.
Definition: topology.h:866
int id
Definition: topology.h:852
Stream Capabilities.
Definition: topology.h:985
int period_bytes
Definition: topology.h:977
int version
Definition: topology.h:1090
Definition: topology.h:752
const char * pcm_name
Definition: topology.h:1006