LCOV - code coverage report
Current view: top level - include/sound - core.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 4 0.0 %
Date: 2014-02-18 Functions: 0 0 -
Branches: 0 2 0.0 %

           Branch data     Line data    Source code
       1                 :            : #ifndef __SOUND_CORE_H
       2                 :            : #define __SOUND_CORE_H
       3                 :            : 
       4                 :            : /*
       5                 :            :  *  Main header file for the ALSA driver
       6                 :            :  *  Copyright (c) 1994-2001 by Jaroslav Kysela <perex@perex.cz>
       7                 :            :  *
       8                 :            :  *
       9                 :            :  *   This program is free software; you can redistribute it and/or modify
      10                 :            :  *   it under the terms of the GNU General Public License as published by
      11                 :            :  *   the Free Software Foundation; either version 2 of the License, or
      12                 :            :  *   (at your option) any later version.
      13                 :            :  *
      14                 :            :  *   This program is distributed in the hope that it will be useful,
      15                 :            :  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
      16                 :            :  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17                 :            :  *   GNU General Public License for more details.
      18                 :            :  *
      19                 :            :  *   You should have received a copy of the GNU General Public License
      20                 :            :  *   along with this program; if not, write to the Free Software
      21                 :            :  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
      22                 :            :  *
      23                 :            :  */
      24                 :            : 
      25                 :            : #include <linux/sched.h>          /* wake_up() */
      26                 :            : #include <linux/mutex.h>          /* struct mutex */
      27                 :            : #include <linux/rwsem.h>          /* struct rw_semaphore */
      28                 :            : #include <linux/pm.h>                     /* pm_message_t */
      29                 :            : #include <linux/stringify.h>
      30                 :            : #include <linux/printk.h>
      31                 :            : 
      32                 :            : /* number of supported soundcards */
      33                 :            : #ifdef CONFIG_SND_DYNAMIC_MINORS
      34                 :            : #define SNDRV_CARDS CONFIG_SND_MAX_CARDS
      35                 :            : #else
      36                 :            : #define SNDRV_CARDS 8           /* don't change - minor numbers */
      37                 :            : #endif
      38                 :            : 
      39                 :            : #define CONFIG_SND_MAJOR        116     /* standard configuration */
      40                 :            : 
      41                 :            : /* forward declarations */
      42                 :            : struct pci_dev;
      43                 :            : struct module;
      44                 :            : struct device;
      45                 :            : struct device_attribute;
      46                 :            : 
      47                 :            : /* device allocation stuff */
      48                 :            : 
      49                 :            : #define SNDRV_DEV_TYPE_RANGE_SIZE               0x1000
      50                 :            : 
      51                 :            : typedef int __bitwise snd_device_type_t;
      52                 :            : #define SNDRV_DEV_TOPLEVEL      ((__force snd_device_type_t) 0)
      53                 :            : #define SNDRV_DEV_CONTROL       ((__force snd_device_type_t) 1)
      54                 :            : #define SNDRV_DEV_LOWLEVEL_PRE  ((__force snd_device_type_t) 2)
      55                 :            : #define SNDRV_DEV_LOWLEVEL_NORMAL ((__force snd_device_type_t) 0x1000)
      56                 :            : #define SNDRV_DEV_PCM           ((__force snd_device_type_t) 0x1001)
      57                 :            : #define SNDRV_DEV_RAWMIDI       ((__force snd_device_type_t) 0x1002)
      58                 :            : #define SNDRV_DEV_TIMER         ((__force snd_device_type_t) 0x1003)
      59                 :            : #define SNDRV_DEV_SEQUENCER     ((__force snd_device_type_t) 0x1004)
      60                 :            : #define SNDRV_DEV_HWDEP         ((__force snd_device_type_t) 0x1005)
      61                 :            : #define SNDRV_DEV_INFO          ((__force snd_device_type_t) 0x1006)
      62                 :            : #define SNDRV_DEV_BUS           ((__force snd_device_type_t) 0x1007)
      63                 :            : #define SNDRV_DEV_CODEC         ((__force snd_device_type_t) 0x1008)
      64                 :            : #define SNDRV_DEV_JACK          ((__force snd_device_type_t) 0x1009)
      65                 :            : #define SNDRV_DEV_COMPRESS      ((__force snd_device_type_t) 0x100A)
      66                 :            : #define SNDRV_DEV_LOWLEVEL      ((__force snd_device_type_t) 0x2000)
      67                 :            : 
      68                 :            : typedef int __bitwise snd_device_state_t;
      69                 :            : #define SNDRV_DEV_BUILD         ((__force snd_device_state_t) 0)
      70                 :            : #define SNDRV_DEV_REGISTERED    ((__force snd_device_state_t) 1)
      71                 :            : #define SNDRV_DEV_DISCONNECTED  ((__force snd_device_state_t) 2)
      72                 :            : 
      73                 :            : typedef int __bitwise snd_device_cmd_t;
      74                 :            : #define SNDRV_DEV_CMD_PRE       ((__force snd_device_cmd_t) 0)
      75                 :            : #define SNDRV_DEV_CMD_NORMAL    ((__force snd_device_cmd_t) 1)  
      76                 :            : #define SNDRV_DEV_CMD_POST      ((__force snd_device_cmd_t) 2)
      77                 :            : 
      78                 :            : struct snd_device;
      79                 :            : 
      80                 :            : struct snd_device_ops {
      81                 :            :         int (*dev_free)(struct snd_device *dev);
      82                 :            :         int (*dev_register)(struct snd_device *dev);
      83                 :            :         int (*dev_disconnect)(struct snd_device *dev);
      84                 :            : };
      85                 :            : 
      86                 :            : struct snd_device {
      87                 :            :         struct list_head list;          /* list of registered devices */
      88                 :            :         struct snd_card *card;          /* card which holds this device */
      89                 :            :         snd_device_state_t state;       /* state of the device */
      90                 :            :         snd_device_type_t type;         /* device type */
      91                 :            :         void *device_data;              /* device structure */
      92                 :            :         struct snd_device_ops *ops;     /* operations */
      93                 :            : };
      94                 :            : 
      95                 :            : #define snd_device(n) list_entry(n, struct snd_device, list)
      96                 :            : 
      97                 :            : /* main structure for soundcard */
      98                 :            : 
      99                 :            : struct snd_card {
     100                 :            :         int number;                     /* number of soundcard (index to
     101                 :            :                                                                 snd_cards) */
     102                 :            : 
     103                 :            :         char id[16];                    /* id string of this card */
     104                 :            :         char driver[16];                /* driver name */
     105                 :            :         char shortname[32];             /* short name of this soundcard */
     106                 :            :         char longname[80];              /* name of this soundcard */
     107                 :            :         char mixername[80];             /* mixer name */
     108                 :            :         char components[128];           /* card components delimited with
     109                 :            :                                                                 space */
     110                 :            :         struct module *module;          /* top-level module */
     111                 :            : 
     112                 :            :         void *private_data;             /* private data for soundcard */
     113                 :            :         void (*private_free) (struct snd_card *card); /* callback for freeing of
     114                 :            :                                                                 private data */
     115                 :            :         struct list_head devices;       /* devices */
     116                 :            : 
     117                 :            :         unsigned int last_numid;        /* last used numeric ID */
     118                 :            :         struct rw_semaphore controls_rwsem;     /* controls list lock */
     119                 :            :         rwlock_t ctl_files_rwlock;      /* ctl_files list lock */
     120                 :            :         int controls_count;             /* count of all controls */
     121                 :            :         int user_ctl_count;             /* count of all user controls */
     122                 :            :         struct list_head controls;      /* all controls for this card */
     123                 :            :         struct list_head ctl_files;     /* active control files */
     124                 :            : 
     125                 :            :         struct snd_info_entry *proc_root;       /* root for soundcard specific files */
     126                 :            :         struct snd_info_entry *proc_id; /* the card id */
     127                 :            :         struct proc_dir_entry *proc_root_link;  /* number link to real id */
     128                 :            : 
     129                 :            :         struct list_head files_list;    /* all files associated to this card */
     130                 :            :         struct snd_shutdown_f_ops *s_f_ops; /* file operations in the shutdown
     131                 :            :                                                                 state */
     132                 :            :         spinlock_t files_lock;          /* lock the files for this card */
     133                 :            :         int shutdown;                   /* this card is going down */
     134                 :            :         int free_on_last_close;         /* free in context of file_release */
     135                 :            :         wait_queue_head_t shutdown_sleep;
     136                 :            :         atomic_t refcount;              /* refcount for disconnection */
     137                 :            :         struct device *dev;             /* device assigned to this card */
     138                 :            :         struct device *card_dev;        /* cardX object for sysfs */
     139                 :            : 
     140                 :            : #ifdef CONFIG_PM
     141                 :            :         unsigned int power_state;       /* power state */
     142                 :            :         struct mutex power_lock;        /* power lock */
     143                 :            :         wait_queue_head_t power_sleep;
     144                 :            : #endif
     145                 :            : 
     146                 :            : #if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE)
     147                 :            :         struct snd_mixer_oss *mixer_oss;
     148                 :            :         int mixer_oss_change_count;
     149                 :            : #endif
     150                 :            : };
     151                 :            : 
     152                 :            : #ifdef CONFIG_PM
     153                 :            : static inline void snd_power_lock(struct snd_card *card)
     154                 :            : {
     155                 :          0 :         mutex_lock(&card->power_lock);
     156                 :            : }
     157                 :            : 
     158                 :            : static inline void snd_power_unlock(struct snd_card *card)
     159                 :            : {
     160                 :          0 :         mutex_unlock(&card->power_lock);
     161                 :            : }
     162                 :            : 
     163                 :            : static inline unsigned int snd_power_get_state(struct snd_card *card)
     164                 :            : {
     165                 :            :         return card->power_state;
     166                 :            : }
     167                 :            : 
     168                 :            : static inline void snd_power_change_state(struct snd_card *card, unsigned int state)
     169                 :            : {
     170                 :            :         card->power_state = state;
     171                 :            :         wake_up(&card->power_sleep);
     172                 :            : }
     173                 :            : 
     174                 :            : /* init.c */
     175                 :            : int snd_power_wait(struct snd_card *card, unsigned int power_state);
     176                 :            : 
     177                 :            : #else /* ! CONFIG_PM */
     178                 :            : 
     179                 :            : #define snd_power_lock(card)            do { (void)(card); } while (0)
     180                 :            : #define snd_power_unlock(card)          do { (void)(card); } while (0)
     181                 :            : static inline int snd_power_wait(struct snd_card *card, unsigned int state) { return 0; }
     182                 :            : #define snd_power_get_state(card)       ({ (void)(card); SNDRV_CTL_POWER_D0; })
     183                 :            : #define snd_power_change_state(card, state)     do { (void)(card); } while (0)
     184                 :            : 
     185                 :            : #endif /* CONFIG_PM */
     186                 :            : 
     187                 :            : struct snd_minor {
     188                 :            :         int type;                       /* SNDRV_DEVICE_TYPE_XXX */
     189                 :            :         int card;                       /* card number */
     190                 :            :         int device;                     /* device number */
     191                 :            :         const struct file_operations *f_ops;    /* file operations */
     192                 :            :         void *private_data;             /* private data for f_ops->open */
     193                 :            :         struct device *dev;             /* device for sysfs */
     194                 :            :         struct snd_card *card_ptr;      /* assigned card instance */
     195                 :            : };
     196                 :            : 
     197                 :            : /* return a device pointer linked to each sound device as a parent */
     198                 :            : static inline struct device *snd_card_get_device_link(struct snd_card *card)
     199                 :            : {
     200         [ #  # ]:          0 :         return card ? card->card_dev : NULL;
     201                 :            : }
     202                 :            : 
     203                 :            : /* sound.c */
     204                 :            : 
     205                 :            : extern int snd_major;
     206                 :            : extern int snd_ecards_limit;
     207                 :            : extern struct class *sound_class;
     208                 :            : 
     209                 :            : void snd_request_card(int card);
     210                 :            : 
     211                 :            : int snd_register_device_for_dev(int type, struct snd_card *card,
     212                 :            :                                 int dev,
     213                 :            :                                 const struct file_operations *f_ops,
     214                 :            :                                 void *private_data,
     215                 :            :                                 const char *name,
     216                 :            :                                 struct device *device);
     217                 :            : 
     218                 :            : /**
     219                 :            :  * snd_register_device - Register the ALSA device file for the card
     220                 :            :  * @type: the device type, SNDRV_DEVICE_TYPE_XXX
     221                 :            :  * @card: the card instance
     222                 :            :  * @dev: the device index
     223                 :            :  * @f_ops: the file operations
     224                 :            :  * @private_data: user pointer for f_ops->open()
     225                 :            :  * @name: the device file name
     226                 :            :  *
     227                 :            :  * Registers an ALSA device file for the given card.
     228                 :            :  * The operators have to be set in reg parameter.
     229                 :            :  *
     230                 :            :  * This function uses the card's device pointer to link to the
     231                 :            :  * correct &struct device.
     232                 :            :  *
     233                 :            :  * Return: Zero if successful, or a negative error code on failure.
     234                 :            :  */
     235                 :            : static inline int snd_register_device(int type, struct snd_card *card, int dev,
     236                 :            :                                       const struct file_operations *f_ops,
     237                 :            :                                       void *private_data,
     238                 :            :                                       const char *name)
     239                 :            : {
     240                 :          0 :         return snd_register_device_for_dev(type, card, dev, f_ops,
     241                 :            :                                            private_data, name,
     242                 :            :                                            snd_card_get_device_link(card));
     243                 :            : }
     244                 :            : 
     245                 :            : int snd_unregister_device(int type, struct snd_card *card, int dev);
     246                 :            : void *snd_lookup_minor_data(unsigned int minor, int type);
     247                 :            : int snd_add_device_sysfs_file(int type, struct snd_card *card, int dev,
     248                 :            :                               struct device_attribute *attr);
     249                 :            : 
     250                 :            : #ifdef CONFIG_SND_OSSEMUL
     251                 :            : int snd_register_oss_device(int type, struct snd_card *card, int dev,
     252                 :            :                             const struct file_operations *f_ops, void *private_data,
     253                 :            :                             const char *name);
     254                 :            : int snd_unregister_oss_device(int type, struct snd_card *card, int dev);
     255                 :            : void *snd_lookup_oss_minor_data(unsigned int minor, int type);
     256                 :            : #endif
     257                 :            : 
     258                 :            : int snd_minor_info_init(void);
     259                 :            : int snd_minor_info_done(void);
     260                 :            : 
     261                 :            : /* sound_oss.c */
     262                 :            : 
     263                 :            : #ifdef CONFIG_SND_OSSEMUL
     264                 :            : int snd_minor_info_oss_init(void);
     265                 :            : int snd_minor_info_oss_done(void);
     266                 :            : #else
     267                 :            : static inline int snd_minor_info_oss_init(void) { return 0; }
     268                 :            : static inline int snd_minor_info_oss_done(void) { return 0; }
     269                 :            : #endif
     270                 :            : 
     271                 :            : /* memory.c */
     272                 :            : 
     273                 :            : int copy_to_user_fromio(void __user *dst, const volatile void __iomem *src, size_t count);
     274                 :            : int copy_from_user_toio(volatile void __iomem *dst, const void __user *src, size_t count);
     275                 :            : 
     276                 :            : /* init.c */
     277                 :            : 
     278                 :            : extern struct snd_card *snd_cards[SNDRV_CARDS];
     279                 :            : int snd_card_locked(int card);
     280                 :            : #if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE)
     281                 :            : #define SND_MIXER_OSS_NOTIFY_REGISTER   0
     282                 :            : #define SND_MIXER_OSS_NOTIFY_DISCONNECT 1
     283                 :            : #define SND_MIXER_OSS_NOTIFY_FREE       2
     284                 :            : extern int (*snd_mixer_oss_notify_callback)(struct snd_card *card, int cmd);
     285                 :            : #endif
     286                 :            : 
     287                 :            : int snd_card_create(int idx, const char *id,
     288                 :            :                     struct module *module, int extra_size,
     289                 :            :                     struct snd_card **card_ret);
     290                 :            : 
     291                 :            : int snd_card_disconnect(struct snd_card *card);
     292                 :            : int snd_card_free(struct snd_card *card);
     293                 :            : int snd_card_free_when_closed(struct snd_card *card);
     294                 :            : void snd_card_set_id(struct snd_card *card, const char *id);
     295                 :            : int snd_card_register(struct snd_card *card);
     296                 :            : int snd_card_info_init(void);
     297                 :            : int snd_card_info_done(void);
     298                 :            : int snd_component_add(struct snd_card *card, const char *component);
     299                 :            : int snd_card_file_add(struct snd_card *card, struct file *file);
     300                 :            : int snd_card_file_remove(struct snd_card *card, struct file *file);
     301                 :            : void snd_card_unref(struct snd_card *card);
     302                 :            : 
     303                 :            : #define snd_card_set_dev(card, devptr) ((card)->dev = (devptr))
     304                 :            : 
     305                 :            : /* device.c */
     306                 :            : 
     307                 :            : int snd_device_new(struct snd_card *card, snd_device_type_t type,
     308                 :            :                    void *device_data, struct snd_device_ops *ops);
     309                 :            : int snd_device_register(struct snd_card *card, void *device_data);
     310                 :            : int snd_device_register_all(struct snd_card *card);
     311                 :            : int snd_device_disconnect(struct snd_card *card, void *device_data);
     312                 :            : int snd_device_disconnect_all(struct snd_card *card);
     313                 :            : int snd_device_free(struct snd_card *card, void *device_data);
     314                 :            : int snd_device_free_all(struct snd_card *card, snd_device_cmd_t cmd);
     315                 :            : 
     316                 :            : /* isadma.c */
     317                 :            : 
     318                 :            : #ifdef CONFIG_ISA_DMA_API
     319                 :            : #define DMA_MODE_NO_ENABLE      0x0100
     320                 :            : 
     321                 :            : void snd_dma_program(unsigned long dma, unsigned long addr, unsigned int size, unsigned short mode);
     322                 :            : void snd_dma_disable(unsigned long dma);
     323                 :            : unsigned int snd_dma_pointer(unsigned long dma, unsigned int size);
     324                 :            : #endif
     325                 :            : 
     326                 :            : /* misc.c */
     327                 :            : struct resource;
     328                 :            : void release_and_free_resource(struct resource *res);
     329                 :            : 
     330                 :            : /* --- */
     331                 :            : 
     332                 :            : /* sound printk debug levels */
     333                 :            : enum {
     334                 :            :         SND_PR_ALWAYS,
     335                 :            :         SND_PR_DEBUG,
     336                 :            :         SND_PR_VERBOSE,
     337                 :            : };
     338                 :            : 
     339                 :            : #if defined(CONFIG_SND_DEBUG) || defined(CONFIG_SND_VERBOSE_PRINTK)
     340                 :            : __printf(4, 5)
     341                 :            : void __snd_printk(unsigned int level, const char *file, int line,
     342                 :            :                   const char *format, ...);
     343                 :            : #else
     344                 :            : #define __snd_printk(level, file, line, format, args...) \
     345                 :            :         printk(format, ##args)
     346                 :            : #endif
     347                 :            : 
     348                 :            : /**
     349                 :            :  * snd_printk - printk wrapper
     350                 :            :  * @fmt: format string
     351                 :            :  *
     352                 :            :  * Works like printk() but prints the file and the line of the caller
     353                 :            :  * when configured with CONFIG_SND_VERBOSE_PRINTK.
     354                 :            :  */
     355                 :            : #define snd_printk(fmt, args...) \
     356                 :            :         __snd_printk(0, __FILE__, __LINE__, fmt, ##args)
     357                 :            : 
     358                 :            : #ifdef CONFIG_SND_DEBUG
     359                 :            : /**
     360                 :            :  * snd_printd - debug printk
     361                 :            :  * @fmt: format string
     362                 :            :  *
     363                 :            :  * Works like snd_printk() for debugging purposes.
     364                 :            :  * Ignored when CONFIG_SND_DEBUG is not set.
     365                 :            :  */
     366                 :            : #define snd_printd(fmt, args...) \
     367                 :            :         __snd_printk(1, __FILE__, __LINE__, fmt, ##args)
     368                 :            : #define _snd_printd(level, fmt, args...) \
     369                 :            :         __snd_printk(level, __FILE__, __LINE__, fmt, ##args)
     370                 :            : 
     371                 :            : /**
     372                 :            :  * snd_BUG - give a BUG warning message and stack trace
     373                 :            :  *
     374                 :            :  * Calls WARN() if CONFIG_SND_DEBUG is set.
     375                 :            :  * Ignored when CONFIG_SND_DEBUG is not set.
     376                 :            :  */
     377                 :            : #define snd_BUG()               WARN(1, "BUG?\n")
     378                 :            : 
     379                 :            : /**
     380                 :            :  * Suppress high rates of output when CONFIG_SND_DEBUG is enabled.
     381                 :            :  */
     382                 :            : #define snd_printd_ratelimit() printk_ratelimit()
     383                 :            : 
     384                 :            : /**
     385                 :            :  * snd_BUG_ON - debugging check macro
     386                 :            :  * @cond: condition to evaluate
     387                 :            :  *
     388                 :            :  * Has the same behavior as WARN_ON when CONFIG_SND_DEBUG is set,
     389                 :            :  * otherwise just evaluates the conditional and returns the value.
     390                 :            :  */
     391                 :            : #define snd_BUG_ON(cond)        WARN_ON((cond))
     392                 :            : 
     393                 :            : #else /* !CONFIG_SND_DEBUG */
     394                 :            : 
     395                 :            : __printf(1, 2)
     396                 :            : static inline void snd_printd(const char *format, ...) {}
     397                 :            : __printf(2, 3)
     398                 :            : static inline void _snd_printd(int level, const char *format, ...) {}
     399                 :            : 
     400                 :            : #define snd_BUG()                       do { } while (0)
     401                 :            : 
     402                 :            : #define snd_BUG_ON(condition) ({ \
     403                 :            :         int __ret_warn_on = !!(condition); \
     404                 :            :         unlikely(__ret_warn_on); \
     405                 :            : })
     406                 :            : 
     407                 :            : static inline bool snd_printd_ratelimit(void) { return false; }
     408                 :            : 
     409                 :            : #endif /* CONFIG_SND_DEBUG */
     410                 :            : 
     411                 :            : #ifdef CONFIG_SND_DEBUG_VERBOSE
     412                 :            : /**
     413                 :            :  * snd_printdd - debug printk
     414                 :            :  * @format: format string
     415                 :            :  *
     416                 :            :  * Works like snd_printk() for debugging purposes.
     417                 :            :  * Ignored when CONFIG_SND_DEBUG_VERBOSE is not set.
     418                 :            :  */
     419                 :            : #define snd_printdd(format, args...) \
     420                 :            :         __snd_printk(2, __FILE__, __LINE__, format, ##args)
     421                 :            : #else
     422                 :            : __printf(1, 2)
     423                 :            : static inline void snd_printdd(const char *format, ...) {}
     424                 :            : #endif
     425                 :            : 
     426                 :            : 
     427                 :            : #define SNDRV_OSS_VERSION         ((3<<16)|(8<<8)|(1<<4)|(0)) /* 3.8.1a */
     428                 :            : 
     429                 :            : /* for easier backward-porting */
     430                 :            : #if defined(CONFIG_GAMEPORT) || defined(CONFIG_GAMEPORT_MODULE)
     431                 :            : #define gameport_set_dev_parent(gp,xdev) ((gp)->dev.parent = (xdev))
     432                 :            : #define gameport_set_port_data(gp,r) ((gp)->port_data = (r))
     433                 :            : #define gameport_get_port_data(gp) (gp)->port_data
     434                 :            : #endif
     435                 :            : 
     436                 :            : #ifdef CONFIG_PCI
     437                 :            : /* PCI quirk list helper */
     438                 :            : struct snd_pci_quirk {
     439                 :            :         unsigned short subvendor;       /* PCI subvendor ID */
     440                 :            :         unsigned short subdevice;       /* PCI subdevice ID */
     441                 :            :         unsigned short subdevice_mask;  /* bitmask to match */
     442                 :            :         int value;                      /* value */
     443                 :            : #ifdef CONFIG_SND_DEBUG_VERBOSE
     444                 :            :         const char *name;               /* name of the device (optional) */
     445                 :            : #endif
     446                 :            : };
     447                 :            : 
     448                 :            : #define _SND_PCI_QUIRK_ID_MASK(vend, mask, dev) \
     449                 :            :         .subvendor = (vend), .subdevice = (dev), .subdevice_mask = (mask)
     450                 :            : #define _SND_PCI_QUIRK_ID(vend, dev) \
     451                 :            :         _SND_PCI_QUIRK_ID_MASK(vend, 0xffff, dev)
     452                 :            : #define SND_PCI_QUIRK_ID(vend,dev) {_SND_PCI_QUIRK_ID(vend, dev)}
     453                 :            : #ifdef CONFIG_SND_DEBUG_VERBOSE
     454                 :            : #define SND_PCI_QUIRK(vend,dev,xname,val) \
     455                 :            :         {_SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname)}
     456                 :            : #define SND_PCI_QUIRK_VENDOR(vend, xname, val)                  \
     457                 :            :         {_SND_PCI_QUIRK_ID_MASK(vend, 0, 0), .value = (val), .name = (xname)}
     458                 :            : #define SND_PCI_QUIRK_MASK(vend, mask, dev, xname, val)                 \
     459                 :            :         {_SND_PCI_QUIRK_ID_MASK(vend, mask, dev),                       \
     460                 :            :                         .value = (val), .name = (xname)}
     461                 :            : #define snd_pci_quirk_name(q)   ((q)->name)
     462                 :            : #else
     463                 :            : #define SND_PCI_QUIRK(vend,dev,xname,val) \
     464                 :            :         {_SND_PCI_QUIRK_ID(vend, dev), .value = (val)}
     465                 :            : #define SND_PCI_QUIRK_MASK(vend, mask, dev, xname, val)                 \
     466                 :            :         {_SND_PCI_QUIRK_ID_MASK(vend, mask, dev), .value = (val)}
     467                 :            : #define SND_PCI_QUIRK_VENDOR(vend, xname, val)                  \
     468                 :            :         {_SND_PCI_QUIRK_ID_MASK(vend, 0, 0), .value = (val)}
     469                 :            : #define snd_pci_quirk_name(q)   ""
     470                 :            : #endif
     471                 :            : 
     472                 :            : const struct snd_pci_quirk *
     473                 :            : snd_pci_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list);
     474                 :            : 
     475                 :            : const struct snd_pci_quirk *
     476                 :            : snd_pci_quirk_lookup_id(u16 vendor, u16 device,
     477                 :            :                         const struct snd_pci_quirk *list);
     478                 :            : #endif
     479                 :            : 
     480                 :            : #endif /* __SOUND_CORE_H */

Generated by: LCOV version 1.9