Lines Matching refs:stream
101 struct audio_stream *stream[2]; /* playback & capture */ member
134 au1000_release_dma_link(struct audio_stream *stream) in au1000_release_dma_link() argument
139 stream->period_size = 0; in au1000_release_dma_link()
140 stream->periods = 0; in au1000_release_dma_link()
141 pointer = stream->buffer; in au1000_release_dma_link()
148 } while (pointer != stream->buffer); in au1000_release_dma_link()
149 stream->buffer = NULL; in au1000_release_dma_link()
153 au1000_setup_dma_link(struct audio_stream *stream, unsigned int period_bytes, in au1000_setup_dma_link() argument
156 struct snd_pcm_substream *substream = stream->substream; in au1000_setup_dma_link()
164 if (stream->period_size == period_bytes && in au1000_setup_dma_link()
165 stream->periods == periods) in au1000_setup_dma_link()
168 au1000_release_dma_link(stream); in au1000_setup_dma_link()
170 stream->period_size = period_bytes; in au1000_setup_dma_link()
171 stream->periods = periods; in au1000_setup_dma_link()
173 stream->buffer = kmalloc(sizeof(struct au1000_period), GFP_KERNEL); in au1000_setup_dma_link()
174 if (! stream->buffer) in au1000_setup_dma_link()
176 pointer = stream->buffer; in au1000_setup_dma_link()
183 au1000_release_dma_link(stream); in au1000_setup_dma_link()
189 pointer->next = stream->buffer; in au1000_setup_dma_link()
194 au1000_dma_stop(struct audio_stream *stream) in au1000_dma_stop() argument
196 if (snd_BUG_ON(!stream->buffer)) in au1000_dma_stop()
198 disable_dma(stream->dma); in au1000_dma_stop()
202 au1000_dma_start(struct audio_stream *stream) in au1000_dma_start() argument
204 if (snd_BUG_ON(!stream->buffer)) in au1000_dma_start()
207 init_dma(stream->dma); in au1000_dma_start()
208 if (get_dma_active_buffer(stream->dma) == 0) { in au1000_dma_start()
209 clear_dma_done0(stream->dma); in au1000_dma_start()
210 set_dma_addr0(stream->dma, stream->buffer->start); in au1000_dma_start()
211 set_dma_count0(stream->dma, stream->period_size >> 1); in au1000_dma_start()
212 set_dma_addr1(stream->dma, stream->buffer->next->start); in au1000_dma_start()
213 set_dma_count1(stream->dma, stream->period_size >> 1); in au1000_dma_start()
215 clear_dma_done1(stream->dma); in au1000_dma_start()
216 set_dma_addr1(stream->dma, stream->buffer->start); in au1000_dma_start()
217 set_dma_count1(stream->dma, stream->period_size >> 1); in au1000_dma_start()
218 set_dma_addr0(stream->dma, stream->buffer->next->start); in au1000_dma_start()
219 set_dma_count0(stream->dma, stream->period_size >> 1); in au1000_dma_start()
221 enable_dma_buffers(stream->dma); in au1000_dma_start()
222 start_dma(stream->dma); in au1000_dma_start()
228 struct audio_stream *stream = (struct audio_stream *) dev_id; in au1000_dma_interrupt() local
229 struct snd_pcm_substream *substream = stream->substream; in au1000_dma_interrupt()
231 spin_lock(&stream->dma_lock); in au1000_dma_interrupt()
232 switch (get_dma_buffer_done(stream->dma)) { in au1000_dma_interrupt()
234 stream->buffer = stream->buffer->next; in au1000_dma_interrupt()
235 clear_dma_done0(stream->dma); in au1000_dma_interrupt()
236 set_dma_addr0(stream->dma, stream->buffer->next->start); in au1000_dma_interrupt()
237 set_dma_count0(stream->dma, stream->period_size >> 1); in au1000_dma_interrupt()
238 enable_dma_buffer0(stream->dma); in au1000_dma_interrupt()
241 stream->buffer = stream->buffer->next; in au1000_dma_interrupt()
242 clear_dma_done1(stream->dma); in au1000_dma_interrupt()
243 set_dma_addr1(stream->dma, stream->buffer->next->start); in au1000_dma_interrupt()
244 set_dma_count1(stream->dma, stream->period_size >> 1); in au1000_dma_interrupt()
245 enable_dma_buffer1(stream->dma); in au1000_dma_interrupt()
248 printk(KERN_ERR "DMA %d missed interrupt.\n",stream->dma); in au1000_dma_interrupt()
249 au1000_dma_stop(stream); in au1000_dma_interrupt()
250 au1000_dma_start(stream); in au1000_dma_interrupt()
253 printk(KERN_ERR "DMA %d empty irq.\n",stream->dma); in au1000_dma_interrupt()
255 spin_unlock(&stream->dma_lock); in au1000_dma_interrupt()
293 au1000->stream[PLAYBACK]->substream = substream; in snd_au1000_playback_open()
294 au1000->stream[PLAYBACK]->buffer = NULL; in snd_au1000_playback_open()
295 substream->private_data = au1000->stream[PLAYBACK]; in snd_au1000_playback_open()
306 au1000->stream[CAPTURE]->substream = substream; in snd_au1000_capture_open()
307 au1000->stream[CAPTURE]->buffer = NULL; in snd_au1000_capture_open()
308 substream->private_data = au1000->stream[CAPTURE]; in snd_au1000_capture_open()
319 au1000->stream[PLAYBACK]->substream = NULL; in snd_au1000_playback_close()
328 au1000->stream[CAPTURE]->substream = NULL; in snd_au1000_capture_close()
336 struct audio_stream *stream = substream->private_data; in snd_au1000_hw_params() local
343 return au1000_setup_dma_link(stream, in snd_au1000_hw_params()
351 struct audio_stream *stream = substream->private_data; in snd_au1000_hw_free() local
352 au1000_release_dma_link(stream); in snd_au1000_hw_free()
387 struct audio_stream *stream = substream->private_data; in snd_au1000_trigger() local
390 spin_lock(&stream->dma_lock); in snd_au1000_trigger()
393 au1000_dma_start(stream); in snd_au1000_trigger()
396 au1000_dma_stop(stream); in snd_au1000_trigger()
402 spin_unlock(&stream->dma_lock); in snd_au1000_trigger()
409 struct audio_stream *stream = substream->private_data; in snd_au1000_pointer() local
413 spin_lock(&stream->dma_lock); in snd_au1000_pointer()
414 location = get_dma_residue(stream->dma); in snd_au1000_pointer()
415 spin_unlock(&stream->dma_lock); in snd_au1000_pointer()
416 location = stream->buffer->relative_end - location; in snd_au1000_pointer()
466 spin_lock_init(&au1000->stream[PLAYBACK]->dma_lock); in snd_au1000_pcm_new()
467 spin_lock_init(&au1000->stream[CAPTURE]->dma_lock); in snd_au1000_pcm_new()
470 au1000->stream[PLAYBACK]->dma = request_au1000_dma(au1000->dmaid[0], in snd_au1000_pcm_new()
472 au1000->stream[PLAYBACK]); in snd_au1000_pcm_new()
473 if (au1000->stream[PLAYBACK]->dma < 0) { in snd_au1000_pcm_new()
477 au1000->stream[CAPTURE]->dma = request_au1000_dma(au1000->dmaid[1], in snd_au1000_pcm_new()
479 au1000->stream[CAPTURE]); in snd_au1000_pcm_new()
480 if (au1000->stream[CAPTURE]->dma < 0){ in snd_au1000_pcm_new()
485 set_dma_mode(au1000->stream[PLAYBACK]->dma, in snd_au1000_pcm_new()
486 get_dma_mode(au1000->stream[PLAYBACK]->dma) & ~DMA_NC); in snd_au1000_pcm_new()
487 set_dma_mode(au1000->stream[CAPTURE]->dma, in snd_au1000_pcm_new()
488 get_dma_mode(au1000->stream[CAPTURE]->dma) & ~DMA_NC); in snd_au1000_pcm_new()
565 if (au1000->stream[PLAYBACK]) { in snd_au1000_free()
566 if (au1000->stream[PLAYBACK]->dma >= 0) in snd_au1000_free()
567 free_au1000_dma(au1000->stream[PLAYBACK]->dma); in snd_au1000_free()
568 kfree(au1000->stream[PLAYBACK]); in snd_au1000_free()
571 if (au1000->stream[CAPTURE]) { in snd_au1000_free()
572 if (au1000->stream[CAPTURE]->dma >= 0) in snd_au1000_free()
573 free_au1000_dma(au1000->stream[CAPTURE]->dma); in snd_au1000_free()
574 kfree(au1000->stream[CAPTURE]); in snd_au1000_free()
634 au1000->stream[PLAYBACK] = kmalloc(sizeof(struct audio_stream), in au1000_ac97_probe()
636 if (!au1000->stream[PLAYBACK]) { in au1000_ac97_probe()
640 au1000->stream[PLAYBACK]->dma = -1; in au1000_ac97_probe()
642 au1000->stream[CAPTURE] = kmalloc(sizeof(struct audio_stream), in au1000_ac97_probe()
644 if (!au1000->stream[CAPTURE]) { in au1000_ac97_probe()
648 au1000->stream[CAPTURE]->dma = -1; in au1000_ac97_probe()