*参照元 [#z89598bf]
#backlinks

*説明 [#tea1ea5d]
-パス: [[linux-4.4.1/sound/core/pcm_memory.c]]

-FIXME: これは何?
--指定した PCM デバイスのすべての substream について、バッファを確保する。
--指定した PCM デバイスのすべての substream のために、バッファを確保する。


**引数 [#u4e3d3b9]
-struct snd_pcm *pcm
--PCM デバイス
--[[linux-4.4.1/snd_pcm]]
-int type
--バッファのタイプ
--SNDRV_DMA_TYPE_CONTINUOUS
--SNDRV_DMA_TYPE_DEV
--など
-void *data
--type によって何を渡せば良いか変わる
--SNDRV_DMA_TYPE_CONTINUOUS なら GFP_XXXX
--SNDRV_DMA_TYPE_DEV なら struct device *
--[[linux-4.4.1/device]]
-size_t size
--バッファサイズ
-size_t max
--最大バッファサイズ、何に使われているのか良くわからない…


**返り値 [#a32a8ffb]
-int
--0 なら成功、負のエラー値なら失敗。


**参考 [#aeed1c47]


*実装 [#o097deb7]
 /**
  * snd_pcm_lib_preallocate_pages_for_all - pre-allocation for continuous memory type (all substreams)
  * @pcm: the pcm instance
  * @type: DMA type (SNDRV_DMA_TYPE_*)
  * @data: DMA type dependent data
  * @size: the requested pre-allocation size in bytes
  * @max: the max. allowed pre-allocation size
  *
  * Do pre-allocation to all substreams of the given pcm for the
  * specified DMA type.
  *
  * Return: Zero if successful, or a negative error code on failure.
  */
 int snd_pcm_lib_preallocate_pages_for_all(struct snd_pcm *pcm,
 					  int type, void *data,
 					  size_t size, size_t max)
 {
 	struct snd_pcm_substream *substream;
 	int stream, err;
 
-[[linux-4.4.1/snd_pcm_substream]]

 	for (stream = 0; stream < 2; stream++)
 		for (substream = pcm->streams[stream].substream; substream; substream = substream->next)
-substream は playback と capture の 2つ
-pcm->streams は struct snd_pcm_str 型
--substream はデバイスによって存在したり、存在しなかったりする
--null じゃなければ存在していることになるようだ
--[[linux-4.4.1/snd_pcm_str]]

 			if ((err = snd_pcm_lib_preallocate_pages(substream, type, data, size, max)) < 0)
 				return err;
-substream に対してバッファを確保する
--[[linux-4.4.1/snd_pcm_lib_preallocate_pages()]]

 	return 0;
 }
 
 EXPORT_SYMBOL(snd_pcm_lib_preallocate_pages_for_all);
-ライセンスに関係なくシンボルを公開する
--[[linux-4.4.1/EXPORT_SYMBOL()]]


*コメント [#yf3a7162]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS