2005-04-17 02:20:36 +04:00
# ifndef __SOUND_INFO_H
# define __SOUND_INFO_H
/*
* Header file for info interface
2007-10-15 11:50:19 +04:00
* Copyright ( c ) by Jaroslav Kysela < perex @ perex . cz >
2005-04-17 02:20:36 +04:00
*
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 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 General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*
*/
# include <linux/poll.h>
/* buffer for information */
struct snd_info_buffer {
char * buffer ; /* pointer to begin of buffer */
2006-04-28 17:13:40 +04:00
unsigned int curr ; /* current position in buffer */
unsigned int size ; /* current size */
unsigned int len ; /* total length of buffer */
2005-04-17 02:20:36 +04:00
int stop ; /* stop flag */
int error ; /* error code */
} ;
# define SNDRV_INFO_CONTENT_TEXT 0
# define SNDRV_INFO_CONTENT_DATA 1
struct snd_info_entry ;
struct snd_info_entry_text {
2005-11-17 15:58:48 +03:00
void ( * read ) ( struct snd_info_entry * entry , struct snd_info_buffer * buffer ) ;
void ( * write ) ( struct snd_info_entry * entry , struct snd_info_buffer * buffer ) ;
2005-04-17 02:20:36 +04:00
} ;
struct snd_info_entry_ops {
2005-11-17 15:58:48 +03:00
int ( * open ) ( struct snd_info_entry * entry ,
2005-04-17 02:20:36 +04:00
unsigned short mode , void * * file_private_data ) ;
2005-11-17 15:58:48 +03:00
int ( * release ) ( struct snd_info_entry * entry ,
2005-04-17 02:20:36 +04:00
unsigned short mode , void * file_private_data ) ;
2005-11-17 15:58:48 +03:00
long ( * read ) ( struct snd_info_entry * entry , void * file_private_data ,
2005-04-17 02:20:36 +04:00
struct file * file , char __user * buf ,
unsigned long count , unsigned long pos ) ;
2005-11-17 15:58:48 +03:00
long ( * write ) ( struct snd_info_entry * entry , void * file_private_data ,
2005-04-17 02:20:36 +04:00
struct file * file , const char __user * buf ,
unsigned long count , unsigned long pos ) ;
2005-11-17 15:58:48 +03:00
long long ( * llseek ) ( struct snd_info_entry * entry , void * file_private_data ,
2005-04-17 02:20:36 +04:00
struct file * file , long long offset , int orig ) ;
2005-11-17 15:58:48 +03:00
unsigned int ( * poll ) ( struct snd_info_entry * entry , void * file_private_data ,
2005-04-17 02:20:36 +04:00
struct file * file , poll_table * wait ) ;
2005-11-17 15:58:48 +03:00
int ( * ioctl ) ( struct snd_info_entry * entry , void * file_private_data ,
2005-04-17 02:20:36 +04:00
struct file * file , unsigned int cmd , unsigned long arg ) ;
2005-11-17 15:58:48 +03:00
int ( * mmap ) ( struct snd_info_entry * entry , void * file_private_data ,
2005-04-17 02:20:36 +04:00
struct inode * inode , struct file * file ,
struct vm_area_struct * vma ) ;
} ;
struct snd_info_entry {
const char * name ;
mode_t mode ;
long size ;
unsigned short content ;
union {
struct snd_info_entry_text text ;
struct snd_info_entry_ops * ops ;
} c ;
2005-11-17 15:58:48 +03:00
struct snd_info_entry * parent ;
struct snd_card * card ;
2005-04-17 02:20:36 +04:00
struct module * module ;
void * private_data ;
2005-11-17 15:58:48 +03:00
void ( * private_free ) ( struct snd_info_entry * entry ) ;
2005-04-17 02:20:36 +04:00
struct proc_dir_entry * p ;
2006-01-16 18:29:08 +03:00
struct mutex access ;
2006-06-23 16:37:59 +04:00
struct list_head children ;
struct list_head list ;
2005-04-17 02:20:36 +04:00
} ;
# if defined(CONFIG_SND_OSSEMUL) && defined(CONFIG_PROC_FS)
2005-11-17 15:58:48 +03:00
int snd_info_minor_register ( void ) ;
int snd_info_minor_unregister ( void ) ;
2005-04-17 02:20:36 +04:00
# else
# define snd_info_minor_register() /* NOP */
# define snd_info_minor_unregister() /* NOP */
# endif
# ifdef CONFIG_PROC_FS
2005-11-17 15:58:48 +03:00
extern struct snd_info_entry * snd_seq_root ;
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_SND_OSSEMUL
2005-11-17 15:58:48 +03:00
extern struct snd_info_entry * snd_oss_root ;
2007-12-14 14:58:45 +03:00
void snd_card_info_read_oss ( struct snd_info_buffer * buffer ) ;
2005-04-17 02:20:36 +04:00
# else
# define snd_oss_root NULL
2007-12-14 14:58:45 +03:00
static inline void snd_card_info_read_oss ( struct snd_info_buffer * buffer ) { }
2005-04-17 02:20:36 +04:00
# endif
2005-11-17 15:58:48 +03:00
int snd_iprintf ( struct snd_info_buffer * buffer , char * fmt , . . . ) __attribute__ ( ( format ( printf , 2 , 3 ) ) ) ;
2005-04-17 02:20:36 +04:00
int snd_info_init ( void ) ;
int snd_info_done ( void ) ;
2005-11-17 15:58:48 +03:00
int snd_info_get_line ( struct snd_info_buffer * buffer , char * line , int len ) ;
2005-04-17 02:20:36 +04:00
char * snd_info_get_str ( char * dest , char * src , int len ) ;
2005-11-17 15:58:48 +03:00
struct snd_info_entry * snd_info_create_module_entry ( struct module * module ,
2005-04-17 02:20:36 +04:00
const char * name ,
2005-11-17 15:58:48 +03:00
struct snd_info_entry * parent ) ;
struct snd_info_entry * snd_info_create_card_entry ( struct snd_card * card ,
2005-04-17 02:20:36 +04:00
const char * name ,
2005-11-17 15:58:48 +03:00
struct snd_info_entry * parent ) ;
void snd_info_free_entry ( struct snd_info_entry * entry ) ;
int snd_info_store_text ( struct snd_info_entry * entry ) ;
int snd_info_restore_text ( struct snd_info_entry * entry ) ;
2005-04-17 02:20:36 +04:00
2005-11-17 15:58:48 +03:00
int snd_info_card_create ( struct snd_card * card ) ;
int snd_info_card_register ( struct snd_card * card ) ;
int snd_info_card_free ( struct snd_card * card ) ;
2006-06-23 16:37:59 +04:00
void snd_info_card_disconnect ( struct snd_card * card ) ;
2005-11-17 15:58:48 +03:00
int snd_info_register ( struct snd_info_entry * entry ) ;
2005-04-17 02:20:36 +04:00
/* for card drivers */
2005-11-17 15:58:48 +03:00
int snd_card_proc_new ( struct snd_card * card , const char * name , struct snd_info_entry * * entryp ) ;
2005-04-17 02:20:36 +04:00
2005-11-17 15:58:48 +03:00
static inline void snd_info_set_text_ops ( struct snd_info_entry * entry ,
2005-04-17 02:20:36 +04:00
void * private_data ,
2005-11-17 15:58:48 +03:00
void ( * read ) ( struct snd_info_entry * , struct snd_info_buffer * ) )
2005-04-17 02:20:36 +04:00
{
entry - > private_data = private_data ;
entry - > c . text . read = read ;
}
2005-12-01 12:42:42 +03:00
int snd_info_check_reserved_words ( const char * str ) ;
2005-04-17 02:20:36 +04:00
# else
# define snd_seq_root NULL
# define snd_oss_root NULL
2005-11-17 15:58:48 +03:00
static inline int snd_iprintf ( struct snd_info_buffer * buffer , char * fmt , . . . ) { return 0 ; }
2005-04-17 02:20:36 +04:00
static inline int snd_info_init ( void ) { return 0 ; }
static inline int snd_info_done ( void ) { return 0 ; }
2005-11-17 15:58:48 +03:00
static inline int snd_info_get_line ( struct snd_info_buffer * buffer , char * line , int len ) { return 0 ; }
2005-04-17 02:20:36 +04:00
static inline char * snd_info_get_str ( char * dest , char * src , int len ) { return NULL ; }
2005-11-17 15:58:48 +03:00
static inline struct snd_info_entry * snd_info_create_module_entry ( struct module * module , const char * name , struct snd_info_entry * parent ) { return NULL ; }
static inline struct snd_info_entry * snd_info_create_card_entry ( struct snd_card * card , const char * name , struct snd_info_entry * parent ) { return NULL ; }
static inline void snd_info_free_entry ( struct snd_info_entry * entry ) { ; }
2005-04-17 02:20:36 +04:00
2005-11-17 15:58:48 +03:00
static inline int snd_info_card_create ( struct snd_card * card ) { return 0 ; }
static inline int snd_info_card_register ( struct snd_card * card ) { return 0 ; }
static inline int snd_info_card_free ( struct snd_card * card ) { return 0 ; }
2006-06-23 16:37:59 +04:00
static inline void snd_info_card_disconnect ( struct snd_card * card ) { }
2005-11-17 15:58:48 +03:00
static inline int snd_info_register ( struct snd_info_entry * entry ) { return 0 ; }
2005-04-17 02:20:36 +04:00
2005-12-01 12:42:42 +03:00
static inline int snd_card_proc_new ( struct snd_card * card , const char * name ,
struct snd_info_entry * * entryp ) { return - EINVAL ; }
static inline void snd_info_set_text_ops ( struct snd_info_entry * entry __attribute__ ( ( unused ) ) ,
void * private_data ,
void ( * read ) ( struct snd_info_entry * , struct snd_info_buffer * ) ) { }
static inline int snd_info_check_reserved_words ( const char * str ) { return 1 ; }
2005-04-17 02:20:36 +04:00
# endif
/*
* OSS info part
*/
# if defined(CONFIG_SND_OSSEMUL) && defined(CONFIG_PROC_FS)
# define SNDRV_OSS_INFO_DEV_AUDIO 0
# define SNDRV_OSS_INFO_DEV_SYNTH 1
# define SNDRV_OSS_INFO_DEV_MIDI 2
# define SNDRV_OSS_INFO_DEV_TIMERS 4
# define SNDRV_OSS_INFO_DEV_MIXERS 5
# define SNDRV_OSS_INFO_DEV_COUNT 6
2005-11-17 15:58:48 +03:00
int snd_oss_info_register ( int dev , int num , char * string ) ;
2005-04-17 02:20:36 +04:00
# define snd_oss_info_unregister(dev, num) snd_oss_info_register(dev, num, NULL)
# endif /* CONFIG_SND_OSSEMUL && CONFIG_PROC_FS */
# endif /* __SOUND_INFO_H */