*参照元 [#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]