*参照元 [#icf8d45e] #backlinks *説明 [#w800b22c] -パス: [[linux-4.4.1/include/sound/pcm.h]] -FIXME: これは何? --PCM の情報 --最大で Playback と Capture の 2つの substream を持てる。 -card, pcm, substream の関係については、ALSA のページ参照。 --[[linux-4.4/ALSA]] **参考: private_data について [#ud13f36e] struct snd_pcm_ops にて与える PCM デバイス操作に使う関数群は、 引数として struct snd_pcm_substream * を受け取るものがほとんど。 この構造体からドライバ独自のデータを取り出す方法を調べた。 snd_pcm_substream 構造体は snd_pcm から、値を受け継いでいる。 詳細な関係については、下記を参照。 ALSA SoC Layer を使わない場合 ----- //ドライバ自身が行う snd_pcm->private_data = ドライバ独自データ ALSA SoC Layer を使う場合 ----- //soc_new_pcm() が行う snd_pcm->private_data = 共通 ----- //snd_pcm_attach_substream() が行うと思われる snd_pcm_substream->private_data = snd_pcm->private_data -取得: --おそらくドライバが行う機会はないと思う。 -設定: 上記参照 --ドライバが設定する場合と、SoC Layer が設定する場合があってややこしい。 -リンク --[[linux-4.4.1/snd_pcm_substream]] --[[linux-4.4.1/soc_new_pcm()]] --[[linux-4.4.1/snd_pcm_attach_substream()]] *実装 [#l62bf94e] struct snd_pcm { struct snd_card *card; struct list_head list; - --[[linux-4.4.1/snd_card]] --[[linux-4.4.1/list_head]] int device; /* device number */ unsigned int info_flags; unsigned short dev_class; unsigned short dev_subclass; char id[64]; char name[80]; struct snd_pcm_str streams[2]; - --[[linux-4.4.1/snd_pcm_str]] struct mutex open_mutex; wait_queue_head_t open_wait; - --[[linux-4.4.1/mutex]] --[[linux-4.4.1/wait_queue_head_t]] void *private_data; void (*private_free) (struct snd_pcm *pcm); bool internal; /* pcm is for internal use only */ bool nonatomic; /* whole PCM operations are in non-atomic context */ #if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE) - --[[linux-4.4.1/CONFIG_SND_PCM_OSS]] --[[linux-4.4.1/CONFIG_SND_PCM_OSS_MODULE]] struct snd_pcm_oss oss; - --[[linux-4.4.1/snd_pcm_oss]] #endif }; *コメント [#sfbbf6d3]