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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 
727 #define SND_TPLG_MAX_CHAN 8
728 
730 typedef struct snd_tplg snd_tplg_t;
731 
753 };
754 
759 snd_tplg_t *snd_tplg_new(void);
760 
765 void snd_tplg_free(snd_tplg_t *tplg);
766 
774 int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
775  const char *outfile);
776 
782 void snd_tplg_verbose(snd_tplg_t *tplg, int verbose);
783 
788  int type;
789 };
790 
796  int min;
797  int step;
798  int mute;
799 };
800 
805  int size;
806  int reg;
807  int shift;
808  int id;
809 };
810 
817 };
818 
823  unsigned int length;
824  const void *data;
825 };
826 
831  int get;
832  int put;
833  int info;
834 };
835 
840  int type;
841  const char *name;
842  int access;
845 };
846 
853  int min;
854  int max;
856  int invert;
857  struct snd_soc_tplg_private *priv;
858 };
859 
866  int items;
867  int mask;
868  const char **texts;
869  const int **values;
870  struct snd_soc_tplg_private *priv;
871 };
872 
878  int max;
879  int mask;
880  int base;
881  int num_regs;
882  struct snd_tplg_io_ops_template ext_ops;
883  struct snd_soc_tplg_private *priv;
884 };
885 
890  const char *src;
891  const char *ctl;
892  const char *sink;
893 };
894 
899  int count;
900  struct snd_tplg_graph_elem elem[0];
901 };
902 
907  int id;
908  const char *name;
909  const char *sname;
910  int reg;
911  int shift;
912  int mask;
913  int subseq;
914  unsigned int invert;
915  unsigned int ignore_suspend;
916  unsigned short event_flags;
917  unsigned short event_type;
918  struct snd_soc_tplg_private *priv;
919  int num_ctls;
920  struct snd_tplg_ctl_template *ctl[0];
921 };
922 
927  const char *name;
928  int format;
929  int rate;
932  int channels;
933 };
934 
939  const char *name;
940  uint64_t formats;
941  unsigned int rates;
942  unsigned int rate_min;
943  unsigned int rate_max;
944  unsigned int channels_min;
945  unsigned int channels_max;
946  unsigned int periods_min;
947  unsigned int periods_max;
948  unsigned int period_size_min;
949  unsigned int period_size_max;
950  unsigned int buffer_size_min;
951  unsigned int buffer_size_max;
952  unsigned int sig_bits;
953 };
954 
959  const char *pcm_name;
960  const char *dai_name;
961  unsigned int pcm_id;
962  unsigned int dai_id;
963  unsigned int playback;
964  unsigned int capture;
965  unsigned int compress;
967  unsigned int flag_mask;
968  unsigned int flags;
969  struct snd_soc_tplg_private *priv;
971  struct snd_tplg_stream_template stream[0];
972 };
973 
979  int id; /* unique ID - - used to match */
980  unsigned int fmt; /* SND_SOC_DAI_FORMAT_ format value */
981  unsigned char clock_gated; /* 1 if clock can be gated to save power */
982  unsigned char invert_bclk; /* 1 for inverted BCLK, 0 for normal */
983  unsigned char invert_fsync; /* 1 for inverted frame clock, 0 for normal */
984  unsigned char bclk_master; /* 1 for master of BCLK, 0 for slave */
985  unsigned char fsync_master; /* 1 for master of FSYNC, 0 for slave */
986  unsigned char mclk_direction; /* 0 for input, 1 for output */
987  unsigned short reserved; /* for 32bit alignment */
988  unsigned int mclk_rate; /* MCLK or SYSCLK freqency in Hz */
989  unsigned int bclk_rate; /* BCLK freqency in Hz */
990  unsigned int fsync_rate; /* frame clock in Hz */
991  unsigned int tdm_slots; /* number of TDM slots in use */
992  unsigned int tdm_slot_width; /* width in bits for each slot */
993  unsigned int tx_slots; /* bit mask for active Tx slots */
994  unsigned int rx_slots; /* bit mask for active Rx slots */
995  unsigned int tx_channels; /* number of Tx channels */
996  unsigned int *tx_chanmap; /* array of slot number */
997  unsigned int rx_channels; /* number of Rx channels */
998  unsigned int *rx_chanmap; /* array of slot number */
999 };
1000 
1006  const char *dai_name;
1007  unsigned int dai_id;
1008  unsigned int playback;
1009  unsigned int capture;
1011  unsigned int flag_mask;
1012  unsigned int flags;
1013  struct snd_soc_tplg_private *priv;
1015 };
1016 
1021  const char *name;
1022  int id;
1023  const char *stream_name;
1029  int num_hw_configs; /* number of hw configs */
1030  int default_hw_config_id; /* default hw config ID for init */
1031 
1032  unsigned int flag_mask; /* bitmask of flags to configure */
1033  unsigned int flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */
1034  struct snd_soc_tplg_private *priv;
1035 };
1036 
1040 typedef struct snd_tplg_obj_template {
1042  int index;
1043  int version;
1045  union {
1054  };
1056 
1064 
1071 int snd_tplg_build(snd_tplg_t *tplg, const char *outfile);
1072 
1080 int snd_tplg_set_manifest_data(snd_tplg_t *tplg, const void *data, int len);
1081 
1088 int snd_tplg_set_version(snd_tplg_t *tplg, unsigned int version);
1089 
1090 /* \} */
1091 
1092 #ifdef __cplusplus
1093 }
1094 #endif
1095 
1096 #endif /* __ALSA_TOPOLOGY_H */
Definition: topology.h:737
struct snd_soc_tplg_private * priv
Definition: topology.h:883
const char * ctl
Definition: topology.h:891
const char * name
Definition: topology.h:939
int rate
Definition: topology.h:929
uint64_t formats
Definition: topology.h:940
int items
Definition: topology.h:866
int num_ctls
Definition: topology.h:919
unsigned int flags
Definition: topology.h:1012
const int ** values
Definition: topology.h:869
Template type to describe a physical link runtime supported hardware config, i.e. hardware audio form...
Definition: topology.h:978
struct snd_soc_tplg_private * priv
Definition: topology.h:918
unsigned int flag_mask
Definition: topology.h:1011
Template type for enumerated control objects.
Definition: topology.h:863
Definition: topology.h:804
unsigned int rate_min
Definition: topology.h:942
Template type for array of DAPM graph elements.
Definition: topology.h:898
Definition: topology.h:750
Definition: topology.h:746
int reg
Definition: topology.h:910
Definition: topology.h:747
Template type for DAPM widget objects.
Definition: topology.h:906
snd_tplg_type
Definition: topology.h:733
struct snd_tplg_pcm_template * pcm
Definition: topology.h:1051
int mask
Definition: topology.h:867
struct snd_tplg_enum_template * enum_ctl
Definition: topology.h:1049
struct snd_tplg_bytes_template * bytes_ctl
Definition: topology.h:1048
Definition: topology.h:743
struct snd_soc_tplg_private * priv
Definition: topology.h:857
struct snd_tplg_channel_map_template * map
Definition: topology.h:865
Definition: topology.h:742
int access
Definition: topology.h:842
Definition: topology.h:752
unsigned int dai_id
Definition: topology.h:1007
unsigned int ignore_suspend
Definition: topology.h:915
int subseq
Definition: topology.h:913
int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
Register topology template object.
Definition: parser.c:357
Definition: topology.h:735
snd_tplg_t * snd_tplg_new(void)
Create a new topology parser instance.
Definition: parser.c:450
struct snd_tplg_widget_template * widget
Definition: topology.h:1046
Template type for control objects.
Definition: topology.h:839
int platform_max
Definition: topology.h:855
unsigned int length
Definition: topology.h:823
Definition: topology.h:1040
unsigned int buffer_size_max
Definition: topology.h:951
unsigned int invert
Definition: topology.h:914
struct snd_soc_tplg_private * priv
Definition: topology.h:870
unsigned int rate_max
Definition: topology.h:943
int count
Definition: topology.h:899
const char * dai_name
Definition: topology.h:960
const char * name
Definition: topology.h:908
int format
Definition: topology.h:928
Definition: topology.h:748
struct snd_tplg snd_tplg_t
Definition: topology.h:730
int reg
Definition: topology.h:806
Template type for TLV Scale objects.
Definition: topology.h:794
int vendor_type
Definition: topology.h:1044
Stream configurations.
Definition: topology.h:926
void snd_tplg_free(snd_tplg_t *tplg)
Free a topology parser instance.
Definition: parser.c:487
int max
Definition: topology.h:878
unsigned int capture
Definition: topology.h:964
int max
Definition: topology.h:854
int shift
Definition: topology.h:911
int buffer_bytes
Definition: topology.h:931
int mute
Definition: topology.h:798
int num_regs
Definition: topology.h:881
struct snd_tplg_mixer_template * mixer
Definition: topology.h:1047
Definition: topology.h:738
#define SND_TPLG_MAX_CHAN
Definition: topology.h:727
unsigned short event_type
Definition: topology.h:917
Generic Template Object.
Template type for PCM (FE DAI & DAI links).
Definition: topology.h:958
const char ** texts
Definition: topology.h:868
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
int snd_tplg_set_version(snd_tplg_t *tplg, unsigned int version)
Set an optional vendor specific version number.
Definition: parser.c:428
struct snd_soc_tplg_private * priv
Definition: topology.h:969
unsigned int buffer_size_min
Definition: topology.h:950
const char * src
Definition: topology.h:890
struct snd_tplg_dai_template * dai
Definition: topology.h:1053
Template type for single DAPM graph element.
Definition: topology.h:889
Definition: topology.h:740
int min
Definition: topology.h:796
void snd_tplg_verbose(snd_tplg_t *tplg, int verbose)
Enable verbose reporting of binary file output.
Definition: parser.c:435
const char * sink
Definition: topology.h:892
Template type for TLV Scale objects.
Definition: topology.h:876
int id
Definition: topology.h:907
Template type for object operations mapping.
Definition: topology.h:830
int put
Definition: topology.h:832
unsigned int capture
Definition: topology.h:1009
struct snd_tplg_channel_map_template * map
Definition: topology.h:852
int mask
Definition: topology.h:879
unsigned int flag_mask
Definition: topology.h:967
Definition: topology.h:751
unsigned int pcm_id
Definition: topology.h:961
Template type for all TLV objects.
Definition: topology.h:787
unsigned int len
Definition: seq_event.h:198
unsigned int periods_max
Definition: topology.h:947
const char * name
Definition: topology.h:841
Template type for physical DAI. It can be used to configure backend DAIs for DPCM.
Definition: topology.h:1005
Definition: topology.h:741
Definition: topology.h:749
int mask
Definition: topology.h:912
unsigned int periods_min
Definition: topology.h:946
unsigned int sig_bits
Definition: topology.h:952
Definition: topology.h:744
unsigned short event_flags
Definition: topology.h:916
Definition: topology.h:745
Definition: topology.h:734
int shift
Definition: topology.h:807
const void * data
Definition: topology.h:824
int invert
Definition: topology.h:856
int num_streams
Definition: topology.h:970
int type
Definition: topology.h:788
int size
Definition: topology.h:805
struct snd_tplg_graph_template * graph
Definition: topology.h:1050
Template type for mixer control objects.
Definition: topology.h:850
struct snd_soc_tplg_private * priv
Definition: topology.h:1013
struct snd_tplg_link_template * link
Definition: topology.h:1052
unsigned int channels_min
Definition: topology.h:944
const char * name
Definition: topology.h:927
const char * sname
Definition: topology.h:909
unsigned int dai_id
Definition: topology.h:962
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
unsigned int playback
Definition: topology.h:963
int type
Definition: topology.h:840
int channels
Definition: topology.h:932
int num_channels
Definition: topology.h:815
unsigned int period_size_min
Definition: topology.h:948
Template type for channel mapping.
Definition: topology.h:814
unsigned int period_size_max
Definition: topology.h:949
unsigned int compress
Definition: topology.h:965
int min
Definition: topology.h:853
unsigned int playback
Definition: topology.h:1008
unsigned int channels_max
Definition: topology.h:945
struct snd_tplg_tlv_template * tlv
Definition: topology.h:844
int base
Definition: topology.h:880
int info
Definition: topology.h:833
unsigned int flags
Definition: topology.h:968
int snd_tplg_build(snd_tplg_t *tplg, const char *outfile)
Build all registered topology data into binary file.
Definition: parser.c:384
int step
Definition: topology.h:797
Definition: topology.h:739
unsigned int rates
Definition: topology.h:941
int index
Definition: topology.h:1042
const char * dai_name
Definition: topology.h:1006
Template type for private data objects.
Definition: topology.h:822
int id
Definition: topology.h:808
Stream Capabilities.
Definition: topology.h:938
int period_bytes
Definition: topology.h:930
int version
Definition: topology.h:1043
Definition: topology.h:736
const char * pcm_name
Definition: topology.h:959