Lines Matching refs:chip

207 static inline long get_play_delay_jiffies(struct snd_msnd *chip, long size)  in get_play_delay_jiffies()  argument
209 long tmp = (size * HZ * chip->play_sample_size) / 8; in get_play_delay_jiffies()
210 return tmp / (chip->play_sample_rate * chip->play_channels); in get_play_delay_jiffies()
213 static void snd_msnd_dsp_write_flush(struct snd_msnd *chip) in snd_msnd_dsp_write_flush() argument
215 if (!(chip->mode & FMODE_WRITE) || !test_bit(F_WRITING, &chip->flags)) in snd_msnd_dsp_write_flush()
217 set_bit(F_WRITEFLUSH, &chip->flags); in snd_msnd_dsp_write_flush()
221 clear_bit(F_WRITEFLUSH, &chip->flags); in snd_msnd_dsp_write_flush()
224 get_play_delay_jiffies(chip, chip->play_period_bytes)); in snd_msnd_dsp_write_flush()
225 clear_bit(F_WRITING, &chip->flags); in snd_msnd_dsp_write_flush()
228 void snd_msnd_dsp_halt(struct snd_msnd *chip, struct file *file) in snd_msnd_dsp_halt() argument
230 if ((file ? file->f_mode : chip->mode) & FMODE_READ) { in snd_msnd_dsp_halt()
231 clear_bit(F_READING, &chip->flags); in snd_msnd_dsp_halt()
232 snd_msnd_send_dsp_cmd(chip, HDEX_RECORD_STOP); in snd_msnd_dsp_halt()
233 snd_msnd_disable_irq(chip); in snd_msnd_dsp_halt()
237 chip->mode &= ~FMODE_READ; in snd_msnd_dsp_halt()
239 clear_bit(F_AUDIO_READ_INUSE, &chip->flags); in snd_msnd_dsp_halt()
241 if ((file ? file->f_mode : chip->mode) & FMODE_WRITE) { in snd_msnd_dsp_halt()
242 if (test_bit(F_WRITING, &chip->flags)) { in snd_msnd_dsp_halt()
243 snd_msnd_dsp_write_flush(chip); in snd_msnd_dsp_halt()
244 snd_msnd_send_dsp_cmd(chip, HDEX_PLAY_STOP); in snd_msnd_dsp_halt()
246 snd_msnd_disable_irq(chip); in snd_msnd_dsp_halt()
250 chip->mode &= ~FMODE_WRITE; in snd_msnd_dsp_halt()
252 clear_bit(F_AUDIO_WRITE_INUSE, &chip->flags); in snd_msnd_dsp_halt()
258 int snd_msnd_DARQ(struct snd_msnd *chip, int bank) in snd_msnd_DARQ() argument
265 wTmp = readw(chip->DARQ + JQS_wTail) + PCTODSP_OFFSET(DAQDS__size); in snd_msnd_DARQ()
266 if (wTmp > readw(chip->DARQ + JQS_wSize)) in snd_msnd_DARQ()
268 while (wTmp == readw(chip->DARQ + JQS_wHead) && timeout--) in snd_msnd_DARQ()
271 if (chip->capturePeriods == 2) { in snd_msnd_DARQ()
272 void *pDAQ = chip->mappedbase + DARQ_DATA_BUFF + in snd_msnd_DARQ()
274 unsigned short offset = 0x3000 + chip->capturePeriodBytes; in snd_msnd_DARQ()
281 writew(wTmp, chip->DARQ + JQS_wTail); in snd_msnd_DARQ()
285 DAQD = bank * DAQDS__size + chip->mappedbase + DARQ_DATA_BUFF; in snd_msnd_DARQ()
292 outb(HPBLKSEL_1, chip->io + HP_BLKS); in snd_msnd_DARQ()
293 n = msnd_fifo_write(&chip->DARF, in snd_msnd_DARQ()
294 (char *)(chip->base + bank * DAR_BUFF_SIZE), in snd_msnd_DARQ()
297 outb(HPBLKSEL_0, chip->io + HP_BLKS); in snd_msnd_DARQ()
300 outb(HPBLKSEL_0, chip->io + HP_BLKS); in snd_msnd_DARQ()
307 int snd_msnd_DAPQ(struct snd_msnd *chip, int start) in snd_msnd_DAPQ() argument
316 DAPQ_tail = readw(chip->DAPQ + JQS_wTail); in snd_msnd_DAPQ()
317 while (DAPQ_tail != readw(chip->DAPQ + JQS_wHead) || start) { in snd_msnd_DAPQ()
326 DAQD = bank_num * DAQDS__size + chip->mappedbase + in snd_msnd_DAPQ()
330 writew(chip->play_period_bytes, DAQD + DAQDS_wSize); in snd_msnd_DAPQ()
333 else if (chip->playPeriods == 2) { in snd_msnd_DAPQ()
334 unsigned short offset = chip->play_period_bytes; in snd_msnd_DAPQ()
351 writew(DAPQ_tail, chip->DAPQ + JQS_wTail); in snd_msnd_DAPQ()
353 snd_msnd_send_dsp_cmd(chip, HDEX_PLAY_START); in snd_msnd_DAPQ()
367 static void snd_msnd_play_reset_queue(struct snd_msnd *chip, in snd_msnd_play_reset_queue() argument
372 void *pDAQ = chip->mappedbase + DAPQ_DATA_BUFF; in snd_msnd_play_reset_queue()
374 chip->last_playbank = -1; in snd_msnd_play_reset_queue()
375 chip->playLimit = pcm_count * (pcm_periods - 1); in snd_msnd_play_reset_queue()
376 chip->playPeriods = pcm_periods; in snd_msnd_play_reset_queue()
377 writew(PCTODSP_OFFSET(0 * DAQDS__size), chip->DAPQ + JQS_wHead); in snd_msnd_play_reset_queue()
378 writew(PCTODSP_OFFSET(0 * DAQDS__size), chip->DAPQ + JQS_wTail); in snd_msnd_play_reset_queue()
380 chip->play_period_bytes = pcm_count; in snd_msnd_play_reset_queue()
387 writew(chip->play_sample_size, pDAQ + DAQDS_wSampleSize); in snd_msnd_play_reset_queue()
388 writew(chip->play_channels, pDAQ + DAQDS_wChannels); in snd_msnd_play_reset_queue()
389 writew(chip->play_sample_rate, pDAQ + DAQDS_wSampleRate); in snd_msnd_play_reset_queue()
395 static void snd_msnd_capture_reset_queue(struct snd_msnd *chip, in snd_msnd_capture_reset_queue() argument
405 chip->last_recbank = 2; in snd_msnd_capture_reset_queue()
406 chip->captureLimit = pcm_count * (pcm_periods - 1); in snd_msnd_capture_reset_queue()
407 chip->capturePeriods = pcm_periods; in snd_msnd_capture_reset_queue()
408 writew(PCTODSP_OFFSET(0 * DAQDS__size), chip->DARQ + JQS_wHead); in snd_msnd_capture_reset_queue()
409 writew(PCTODSP_OFFSET(chip->last_recbank * DAQDS__size), in snd_msnd_capture_reset_queue()
410 chip->DARQ + JQS_wTail); in snd_msnd_capture_reset_queue()
413 spin_lock_irqsave(&chip->lock, flags); in snd_msnd_capture_reset_queue()
414 outb(HPBLKSEL_1, chip->io + HP_BLKS); in snd_msnd_capture_reset_queue()
415 memset_io(chip->mappedbase, 0, DAR_BUFF_SIZE * 3); in snd_msnd_capture_reset_queue()
416 outb(HPBLKSEL_0, chip->io + HP_BLKS); in snd_msnd_capture_reset_queue()
417 spin_unlock_irqrestore(&chip->lock, flags); in snd_msnd_capture_reset_queue()
420 chip->capturePeriodBytes = pcm_count; in snd_msnd_capture_reset_queue()
423 pDAQ = chip->mappedbase + DARQ_DATA_BUFF; in snd_msnd_capture_reset_queue()
431 writew(chip->capture_sample_size, pDAQ + DAQDS_wSampleSize); in snd_msnd_capture_reset_queue()
432 writew(chip->capture_channels, pDAQ + DAQDS_wChannels); in snd_msnd_capture_reset_queue()
433 writew(chip->capture_sample_rate, pDAQ + DAQDS_wSampleRate); in snd_msnd_capture_reset_queue()
481 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_playback_open() local
483 set_bit(F_AUDIO_WRITE_INUSE, &chip->flags); in snd_msnd_playback_open()
484 clear_bit(F_WRITING, &chip->flags); in snd_msnd_playback_open()
485 snd_msnd_enable_irq(chip); in snd_msnd_playback_open()
487 runtime->dma_area = chip->mappedbase; in snd_msnd_playback_open()
490 chip->playback_substream = substream; in snd_msnd_playback_open()
497 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_playback_close() local
499 snd_msnd_disable_irq(chip); in snd_msnd_playback_close()
500 clear_bit(F_AUDIO_WRITE_INUSE, &chip->flags); in snd_msnd_playback_close()
509 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_playback_hw_params() local
510 void *pDAQ = chip->mappedbase + DAPQ_DATA_BUFF; in snd_msnd_playback_hw_params()
512 chip->play_sample_size = snd_pcm_format_width(params_format(params)); in snd_msnd_playback_hw_params()
513 chip->play_channels = params_channels(params); in snd_msnd_playback_hw_params()
514 chip->play_sample_rate = params_rate(params); in snd_msnd_playback_hw_params()
517 writew(chip->play_sample_size, pDAQ + DAQDS_wSampleSize); in snd_msnd_playback_hw_params()
518 writew(chip->play_channels, pDAQ + DAQDS_wChannels); in snd_msnd_playback_hw_params()
519 writew(chip->play_sample_rate, pDAQ + DAQDS_wSampleRate); in snd_msnd_playback_hw_params()
530 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_playback_prepare() local
535 snd_msnd_play_reset_queue(chip, pcm_periods, pcm_count); in snd_msnd_playback_prepare()
536 chip->playDMAPos = 0; in snd_msnd_playback_prepare()
543 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_playback_trigger() local
548 chip->banksPlayed = 0; in snd_msnd_playback_trigger()
549 set_bit(F_WRITING, &chip->flags); in snd_msnd_playback_trigger()
550 snd_msnd_DAPQ(chip, 1); in snd_msnd_playback_trigger()
554 clear_bit(F_WRITING, &chip->flags); in snd_msnd_playback_trigger()
555 snd_msnd_send_dsp_cmd(chip, HDEX_PLAY_STOP); in snd_msnd_playback_trigger()
568 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_playback_pointer() local
570 return bytes_to_frames(substream->runtime, chip->playDMAPos); in snd_msnd_playback_pointer()
587 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_capture_open() local
589 set_bit(F_AUDIO_READ_INUSE, &chip->flags); in snd_msnd_capture_open()
590 snd_msnd_enable_irq(chip); in snd_msnd_capture_open()
591 runtime->dma_area = chip->mappedbase + 0x3000; in snd_msnd_capture_open()
594 chip->capture_substream = substream; in snd_msnd_capture_open()
601 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_capture_close() local
603 snd_msnd_disable_irq(chip); in snd_msnd_capture_close()
604 clear_bit(F_AUDIO_READ_INUSE, &chip->flags); in snd_msnd_capture_close()
610 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_capture_prepare() local
615 snd_msnd_capture_reset_queue(chip, pcm_periods, pcm_count); in snd_msnd_capture_prepare()
616 chip->captureDMAPos = 0; in snd_msnd_capture_prepare()
623 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_capture_trigger() local
626 chip->last_recbank = -1; in snd_msnd_capture_trigger()
627 set_bit(F_READING, &chip->flags); in snd_msnd_capture_trigger()
628 if (snd_msnd_send_dsp_cmd(chip, HDEX_RECORD_START) == 0) in snd_msnd_capture_trigger()
631 clear_bit(F_READING, &chip->flags); in snd_msnd_capture_trigger()
633 clear_bit(F_READING, &chip->flags); in snd_msnd_capture_trigger()
634 snd_msnd_send_dsp_cmd(chip, HDEX_RECORD_STOP); in snd_msnd_capture_trigger()
645 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_capture_pointer() local
647 return bytes_to_frames(runtime, chip->captureDMAPos); in snd_msnd_capture_pointer()
655 struct snd_msnd *chip = snd_pcm_substream_chip(substream); in snd_msnd_capture_hw_params() local
656 void *pDAQ = chip->mappedbase + DARQ_DATA_BUFF; in snd_msnd_capture_hw_params()
658 chip->capture_sample_size = snd_pcm_format_width(params_format(params)); in snd_msnd_capture_hw_params()
659 chip->capture_channels = params_channels(params); in snd_msnd_capture_hw_params()
660 chip->capture_sample_rate = params_rate(params); in snd_msnd_capture_hw_params()
663 writew(chip->capture_sample_size, pDAQ + DAQDS_wSampleSize); in snd_msnd_capture_hw_params()
664 writew(chip->capture_channels, pDAQ + DAQDS_wChannels); in snd_msnd_capture_hw_params()
665 writew(chip->capture_sample_rate, pDAQ + DAQDS_wSampleRate); in snd_msnd_capture_hw_params()
684 struct snd_msnd *chip = card->private_data; in snd_msnd_pcm() local
695 pcm->private_data = chip; in snd_msnd_pcm()