ALSA project - the C library reference

/usr/src/packages/BUILD/alsa-lib-1.1.2/include/topology.h

00001 /*
00002  *
00003  *  This library is free software; you can redistribute it and/or modify
00004  *  it under the terms of the GNU Lesser General Public License as
00005  *  published by the Free Software Foundation; either version 2.1 of
00006  *  the License, or (at your option) any later version.
00007  *
00008  *  This program is distributed in the hope that it will be useful,
00009  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00010  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00011  *  GNU Lesser General Public License for more details.
00012  *
00013  *  You should have received a copy of the GNU Lesser General Public
00014  *  License along with this library; if not, write to the Free Software
00015  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00016  *
00017  *  Copyright (C) 2015 Intel Corporation
00018  *
00019  */
00020 
00021 #ifndef __ALSA_TOPOLOGY_H
00022 #define __ALSA_TOPOLOGY_H
00023 
00024 #include <stdint.h>
00025 
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029 
00629 #define SND_TPLG_MAX_CHAN               8
00630 
00632 typedef struct snd_tplg snd_tplg_t;
00633 
00635 enum snd_tplg_type {
00636         SND_TPLG_TYPE_TLV = 0,          
00637         SND_TPLG_TYPE_MIXER,            
00638         SND_TPLG_TYPE_ENUM,             
00639         SND_TPLG_TYPE_TEXT,             
00640         SND_TPLG_TYPE_DATA,             
00641         SND_TPLG_TYPE_BYTES,            
00642         SND_TPLG_TYPE_STREAM_CONFIG,    
00643         SND_TPLG_TYPE_STREAM_CAPS,      
00644         SND_TPLG_TYPE_PCM,              
00645         SND_TPLG_TYPE_DAPM_WIDGET,      
00646         SND_TPLG_TYPE_DAPM_GRAPH,       
00647         SND_TPLG_TYPE_BE,               
00648         SND_TPLG_TYPE_CC,               
00649         SND_TPLG_TYPE_MANIFEST,         
00650         SND_TPLG_TYPE_TOKEN,            
00651         SND_TPLG_TYPE_TUPLE,            
00652 };
00653 
00658 snd_tplg_t *snd_tplg_new(void);
00659 
00664 void snd_tplg_free(snd_tplg_t *tplg);
00665 
00673 int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
00674         const char *outfile);
00675 
00681 void snd_tplg_verbose(snd_tplg_t *tplg, int verbose);
00682 
00686 struct snd_tplg_tlv_template {
00687         int type;        
00688 };
00689 
00693 struct snd_tplg_tlv_dbscale_template {
00694         struct snd_tplg_tlv_template hdr;       
00695         int min;                        
00696         int step;                       
00697         int mute;                       
00698 };
00699 
00703 struct snd_tplg_channel_elem {
00704         int size;       
00705         int reg;        
00706         int shift;      
00707         int id;         
00708 };
00709 
00713 struct snd_tplg_channel_map_template {
00714         int num_channels;       
00715         struct snd_tplg_channel_elem channel[SND_TPLG_MAX_CHAN];        
00716 };
00717 
00721 struct snd_tplg_pdata_template {
00722         unsigned int length;    
00723         const void *data;       
00724 };
00725 
00729 struct snd_tplg_io_ops_template {
00730         int get;        
00731         int put;        
00732         int info;       
00733 };
00734 
00738 struct snd_tplg_ctl_template {
00739         int type;               
00740         const char *name;       
00741         int access;             
00742         struct snd_tplg_io_ops_template ops;    
00743         struct snd_tplg_tlv_template *tlv; 
00744 };
00745 
00749 struct snd_tplg_mixer_template {
00750         struct snd_tplg_ctl_template hdr;       
00751         struct snd_tplg_channel_map_template *map;      
00752         int min;        
00753         int max;        
00754         int platform_max;       
00755         int invert;     
00756         struct snd_soc_tplg_private *priv;      
00757 };
00758 
00762 struct snd_tplg_enum_template {
00763         struct snd_tplg_ctl_template hdr;       
00764         struct snd_tplg_channel_map_template *map;      
00765         int items;      
00766         int mask;       
00767         const char **texts;     
00768         const int **values;     
00769         struct snd_soc_tplg_private *priv;      
00770 };
00771 
00775 struct snd_tplg_bytes_template {
00776         struct snd_tplg_ctl_template hdr;       
00777         int max;                
00778         int mask;               
00779         int base;               
00780         int num_regs;           
00781         struct snd_tplg_io_ops_template ext_ops;        
00782         struct snd_soc_tplg_private *priv;      
00783 };
00784 
00788 struct snd_tplg_graph_elem {
00789         const char *src;        
00790         const char *ctl;        
00791         const char *sink;       
00792 };
00793 
00797 struct snd_tplg_graph_template {
00798         int count;              
00799         struct snd_tplg_graph_elem elem[0];     
00800 };
00801 
00805 struct snd_tplg_widget_template {
00806         int id;                 
00807         const char *name;       
00808         const char *sname;      
00809         int reg;                
00810         int shift;              
00811         int mask;               
00812         int subseq;             
00813         unsigned int invert;            
00814         unsigned int ignore_suspend;    
00815         unsigned short event_flags;     
00816         unsigned short event_type;      
00817         struct snd_soc_tplg_private *priv;      
00818         int num_ctls;                   
00819         struct snd_tplg_ctl_template *ctl[0];   
00820 };
00821 
00825 struct snd_tplg_stream_template {
00826         const char *name;       
00827         int format;             
00828         int rate;               
00829         int period_bytes;       
00830         int buffer_bytes;       
00831         int channels;           
00832 };
00833 
00837 struct snd_tplg_stream_caps_template {
00838         const char *name;       
00839         uint64_t formats;       
00840         unsigned int rates;     
00841         unsigned int rate_min;  
00842         unsigned int rate_max;  
00843         unsigned int channels_min;      
00844         unsigned int channels_max;      
00845         unsigned int periods_min;       
00846         unsigned int periods_max;       
00847         unsigned int period_size_min;   
00848         unsigned int period_size_max;   
00849         unsigned int buffer_size_min;   
00850         unsigned int buffer_size_max;   
00851 };
00852 
00856 struct snd_tplg_pcm_template {
00857         const char *pcm_name;   
00858         const char *dai_name;   
00859         unsigned int pcm_id;    
00860         unsigned int dai_id;    
00861         unsigned int playback;  
00862         unsigned int capture;   
00863         unsigned int compress;  
00864         struct snd_tplg_stream_caps_template *caps[2]; 
00865         int num_streams;        
00866         struct snd_tplg_stream_template stream[0]; 
00867 };
00868 
00872 struct snd_tplg_link_template {
00873         const char *name;       
00874         int id; 
00875         int num_streams;        
00876         struct snd_tplg_stream_template stream[0]; 
00877 };
00878 
00882 typedef struct snd_tplg_obj_template {
00883         enum snd_tplg_type type;        
00884         int index;              
00885         int version;            
00886         int vendor_type;        
00887         union {
00888                 struct snd_tplg_widget_template *widget;        
00889                 struct snd_tplg_mixer_template *mixer;          
00890                 struct snd_tplg_bytes_template *bytes_ctl;      
00891                 struct snd_tplg_enum_template *enum_ctl;        
00892                 struct snd_tplg_graph_template *graph;          
00893                 struct snd_tplg_pcm_template *pcm;              
00894                 struct snd_tplg_link_template *link;            
00895         };
00896 } snd_tplg_obj_template_t;
00897 
00904 int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t);
00905 
00912 int snd_tplg_build(snd_tplg_t *tplg, const char *outfile);
00913 
00921 int snd_tplg_set_manifest_data(snd_tplg_t *tplg, const void *data, int len);
00922 
00929 int snd_tplg_set_version(snd_tplg_t *tplg, unsigned int version);
00930 
00931 /* \} */
00932 
00933 #ifdef __cplusplus
00934 }
00935 #endif
00936 
00937 #endif /* __ALSA_TOPOLOGY_H */
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines