微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Linux ALSA声卡驱动之二:声卡的创建

Linux ALSA声卡驱动之二:声卡的创建

时间:12-07 来源:互联网 点击:

  1. struct snd_card

1.1. snd_card是什么

snd_card可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声音相关的逻辑设备都是在snd_card的管理之下,声卡驱动的第一个动作通常就是创建一个snd_card结构体。正因为如此,本节中,我们也从 struct cnd_card开始吧。

1.2. snd_card的定义

snd_card的定义位于改头文件中:include/sound/core.h

/* main structure for soundcard */

struct snd_card {

int number; /* number of soundcard (index to

snd_cards) */

char id[16]; /* id string of this card */

char driver[16]; /* driver name */

char shortname[32]; /* short name of this soundcard */

char longname[80]; /* name of this soundcard */

char mixername[80]; /* mixer name */

char components[128]; /* card components delimited with

space */

struct module *module; /* top-level module */

void *private_data; /* private data for soundcard */

void (*private_free) (struct snd_card *card); /* callback for freeing of

private data */

struct list_head devices; /* devices */

unsigned int last_numid; /* last used numeric ID */

struct rw_semaphore controls_rwsem; /* controls list lock */

rwlock_t ctl_files_rwlock; /* ctl_files list lock */

int controls_count; /* count of all controls */

int user_ctl_count; /* count of all user controls */

struct list_head controls; /* all controls for this card */

struct list_head ctl_files; /* active control files */

struct snd_info_entry *proc_root; /* root for soundcard specific files */

struct snd_info_entry *proc_id; /* the card id */

struct proc_dir_entry *proc_root_link; /* number link to real id */

struct list_head files_list; /* all files associated to this card */

struct snd_shutdown_f_ops *s_f_ops; /* file operations in the shutdown

state */

spinlock_t files_lock; /* lock the files for this card */

int shutdown; /* this card is going down */

int free_on_last_close; /* free in context of file_release */

wait_queue_head_t shutdown_sleep;

struct device *dev; /* device assigned to this card */

#ifndef CONFIG_SYSFS_DEPRECATED

struct device *card_dev; /* cardX object for sysfs */

#endif

#ifdef CONFIG_PM

unsigned int power_state; /* power state */

struct mutex power_lock; /* power lock */

wait_queue_head_t power_sleep;

#endif

#if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE)

struct snd_mixer_oss *mixer_oss;

int mixer_oss_change_count;

#endif

};

struct list_head devices 记录该声卡下所有逻辑设备的链表

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top