Lines Matching refs:chip
195 static inline long get_play_delay_jiffies(struct snd_msnd *chip, long size)
197 long tmp = (size * HZ * chip->play_sample_size) / 8;
198 return tmp / (chip->play_sample_rate * chip->play_channels);
201 static void snd_msnd_dsp_write_flush(struct snd_msnd *chip)
203 if (!(chip->mode & FMODE_WRITE) || !test_bit(F_WRITING, &chip->flags))
205 set_bit(F_WRITEFLUSH, &chip->flags);
207 &chip->writeflush,
208 get_play_delay_jiffies(&chip, chip->DAPF.len));*/
209 clear_bit(F_WRITEFLUSH, &chip->flags);
212 get_play_delay_jiffies(chip, chip->play_period_bytes));
213 clear_bit(F_WRITING, &chip->flags);
216 void snd_msnd_dsp_halt(struct snd_msnd *chip, struct file *file)
218 if ((file ? file->f_mode : chip->mode) & FMODE_READ) {
219 clear_bit(F_READING, &chip->flags);
220 snd_msnd_send_dsp_cmd(chip, HDEX_RECORD_STOP);
221 snd_msnd_disable_irq(chip);
225 chip->mode &= ~FMODE_READ;
227 clear_bit(F_AUDIO_READ_INUSE, &chip->flags);
229 if ((file ? file->f_mode : chip->mode) & FMODE_WRITE) {
230 if (test_bit(F_WRITING, &chip->flags)) {
231 snd_msnd_dsp_write_flush(chip);
232 snd_msnd_send_dsp_cmd(chip, HDEX_PLAY_STOP);
234 snd_msnd_disable_irq(chip);
238 chip->mode &= ~FMODE_WRITE;
240 clear_bit(F_AUDIO_WRITE_INUSE, &chip->flags);
246 int snd_msnd_DARQ(struct snd_msnd *chip, int bank)
253 wTmp = readw(chip->DARQ + JQS_wTail) + PCTODSP_OFFSET(DAQDS__size);
254 if (wTmp > readw(chip->DARQ + JQS_wSize))
256 while (wTmp == readw(chip->DARQ + JQS_wHead) && timeout--)
259 if (chip->capturePeriods == 2) {
260 void __iomem *pDAQ = chip->mappedbase + DARQ_DATA_BUFF +
262 unsigned short offset = 0x3000 + chip->capturePeriodBytes;
269 writew(wTmp, chip->DARQ + JQS_wTail);
273 DAQD = bank * DAQDS__size + chip->mappedbase + DARQ_DATA_BUFF;
280 outb(HPBLKSEL_1, chip->io + HP_BLKS);
281 n = msnd_fifo_write(&chip->DARF,
282 (char *)(chip->base + bank * DAR_BUFF_SIZE),
285 outb(HPBLKSEL_0, chip->io + HP_BLKS);
288 outb(HPBLKSEL_0, chip->io + HP_BLKS);
295 int snd_msnd_DAPQ(struct snd_msnd *chip, int start)
302 spin_lock_irqsave(&chip->lock, flags); not necessary */
304 DAPQ_tail = readw(chip->DAPQ + JQS_wTail);
305 while (DAPQ_tail != readw(chip->DAPQ + JQS_wHead) || start) {
314 DAQD = bank_num * DAQDS__size + chip->mappedbase +
318 writew(chip->play_period_bytes, DAQD + DAQDS_wSize);
321 else if (chip->playPeriods == 2) {
322 unsigned short offset = chip->play_period_bytes;
339 writew(DAPQ_tail, chip->DAPQ + JQS_wTail);
341 snd_msnd_send_dsp_cmd(chip, HDEX_PLAY_START);
350 /* spin_unlock_irqrestore(&chip->lock, flags); not necessary */
355 static void snd_msnd_play_reset_queue(struct snd_msnd *chip,
360 void __iomem *pDAQ = chip->mappedbase + DAPQ_DATA_BUFF;
362 chip->last_playbank = -1;
363 chip->playLimit = pcm_count * (pcm_periods - 1);
364 chip->playPeriods = pcm_periods;
365 writew(PCTODSP_OFFSET(0 * DAQDS__size), chip->DAPQ + JQS_wHead);
366 writew(PCTODSP_OFFSET(0 * DAQDS__size), chip->DAPQ + JQS_wTail);
368 chip->play_period_bytes = pcm_count;
375 writew(chip->play_sample_size, pDAQ + DAQDS_wSampleSize);
376 writew(chip->play_channels, pDAQ + DAQDS_wChannels);
377 writew(chip->play_sample_rate, pDAQ + DAQDS_wSampleRate);
383 static void snd_msnd_capture_reset_queue(struct snd_msnd *chip,
391 /* snd_msnd_init_queue(chip->DARQ, DARQ_DATA_BUFF, DARQ_BUFF_SIZE); */
393 chip->last_recbank = 2;
394 chip->captureLimit = pcm_count * (pcm_periods - 1);
395 chip->capturePeriods = pcm_periods;
396 writew(PCTODSP_OFFSET(0 * DAQDS__size), chip->DARQ + JQS_wHead);
397 writew(PCTODSP_OFFSET(chip->last_recbank * DAQDS__size),
398 chip->DARQ + JQS_wTail);
401 spin_lock_irqsave(&chip->lock, flags);
402 outb(HPBLKSEL_1, chip->io + HP_BLKS);
403 memset_io(chip->mappedbase, 0, DAR_BUFF_SIZE * 3);
404 outb(HPBLKSEL_0, chip->io + HP_BLKS);
405 spin_unlock_irqrestore(&chip->lock, flags);
408 chip->capturePeriodBytes = pcm_count;
411 pDAQ = chip->mappedbase + DARQ_DATA_BUFF;
419 writew(chip->capture_sample_size, pDAQ + DAQDS_wSampleSize);
420 writew(chip->capture_channels, pDAQ + DAQDS_wChannels);
421 writew(chip->capture_sample_rate, pDAQ + DAQDS_wSampleRate);
469 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
471 set_bit(F_AUDIO_WRITE_INUSE, &chip->flags);
472 clear_bit(F_WRITING, &chip->flags);
473 snd_msnd_enable_irq(chip);
475 runtime->dma_area = (__force void *)chip->mappedbase;
476 runtime->dma_addr = chip->base;
479 chip->playback_substream = substream;
486 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
488 snd_msnd_disable_irq(chip);
489 clear_bit(F_AUDIO_WRITE_INUSE, &chip->flags);
498 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
499 void __iomem *pDAQ = chip->mappedbase + DAPQ_DATA_BUFF;
501 chip->play_sample_size = snd_pcm_format_width(params_format(params));
502 chip->play_channels = params_channels(params);
503 chip->play_sample_rate = params_rate(params);
506 writew(chip->play_sample_size, pDAQ + DAQDS_wSampleSize);
507 writew(chip->play_channels, pDAQ + DAQDS_wChannels);
508 writew(chip->play_sample_rate, pDAQ + DAQDS_wSampleRate);
511 * snd_msnd_calibrate_adc(chip->play_sample_rate);
519 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
524 snd_msnd_play_reset_queue(chip, pcm_periods, pcm_count);
525 chip->playDMAPos = 0;
532 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
537 chip->banksPlayed = 0;
538 set_bit(F_WRITING, &chip->flags);
539 snd_msnd_DAPQ(chip, 1);
543 clear_bit(F_WRITING, &chip->flags);
544 snd_msnd_send_dsp_cmd(chip, HDEX_PLAY_STOP);
557 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
559 return bytes_to_frames(substream->runtime, chip->playDMAPos);
576 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
578 set_bit(F_AUDIO_READ_INUSE, &chip->flags);
579 snd_msnd_enable_irq(chip);
580 runtime->dma_area = (__force void *)chip->mappedbase + 0x3000;
581 runtime->dma_addr = chip->base + 0x3000;
584 chip->capture_substream = substream;
591 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
593 snd_msnd_disable_irq(chip);
594 clear_bit(F_AUDIO_READ_INUSE, &chip->flags);
600 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
605 snd_msnd_capture_reset_queue(chip, pcm_periods, pcm_count);
606 chip->captureDMAPos = 0;
613 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
616 chip->last_recbank = -1;
617 set_bit(F_READING, &chip->flags);
618 if (snd_msnd_send_dsp_cmd(chip, HDEX_RECORD_START) == 0)
621 clear_bit(F_READING, &chip->flags);
623 clear_bit(F_READING, &chip->flags);
624 snd_msnd_send_dsp_cmd(chip, HDEX_RECORD_STOP);
635 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
637 return bytes_to_frames(runtime, chip->captureDMAPos);
645 struct snd_msnd *chip = snd_pcm_substream_chip(substream);
646 void __iomem *pDAQ = chip->mappedbase + DARQ_DATA_BUFF;
648 chip->capture_sample_size = snd_pcm_format_width(params_format(params));
649 chip->capture_channels = params_channels(params);
650 chip->capture_sample_rate = params_rate(params);
653 writew(chip->capture_sample_size, pDAQ + DAQDS_wSampleSize);
654 writew(chip->capture_channels, pDAQ + DAQDS_wChannels);
655 writew(chip->capture_sample_rate, pDAQ + DAQDS_wSampleRate);
674 struct snd_msnd *chip = card->private_data;
685 pcm->private_data = chip;