Lines Matching refs:viadev
78 #define VIADEV_REG(viadev, x) ((viadev)->port + VIA_REG_##x) argument
219 struct viadev { struct
250 struct viadev devs[VIA_MAX_MODEM_DEVS]; argument
278 static int build_via_table(struct viadev *dev, struct snd_pcm_substream *substream, in build_via_table()
350 static int clean_via_table(struct viadev *dev, struct snd_pcm_substream *substream, in clean_via_table()
463 static void snd_via82xx_channel_reset(struct via82xx_modem *chip, struct viadev *viadev) in snd_via82xx_channel_reset() argument
466 VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_channel_reset()
467 inb(VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_channel_reset()
470 outb(0x00, VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_channel_reset()
472 outb(0x03, VIADEV_REG(viadev, OFFSET_STATUS)); in snd_via82xx_channel_reset()
473 outb(0x00, VIADEV_REG(viadev, OFFSET_TYPE)); /* for via686 */ in snd_via82xx_channel_reset()
475 viadev->lastpos = 0; in snd_via82xx_channel_reset()
498 struct viadev *viadev = &chip->devs[i]; in snd_via82xx_interrupt() local
499 unsigned char c_status = inb(VIADEV_REG(viadev, OFFSET_STATUS)); in snd_via82xx_interrupt()
503 if (viadev->substream && viadev->running) { in snd_via82xx_interrupt()
505 snd_pcm_period_elapsed(viadev->substream); in snd_via82xx_interrupt()
508 outb(c_status, VIADEV_REG(viadev, OFFSET_STATUS)); /* ack */ in snd_via82xx_interrupt()
524 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_pcm_trigger() local
531 viadev->running = 1; in snd_via82xx_pcm_trigger()
535 viadev->running = 0; in snd_via82xx_pcm_trigger()
539 viadev->running = 0; in snd_via82xx_pcm_trigger()
542 viadev->running = 1; in snd_via82xx_pcm_trigger()
547 outb(val, VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_pcm_trigger()
549 snd_via82xx_channel_reset(chip, viadev); in snd_via82xx_pcm_trigger()
561 #define check_invalid_pos(viadev,pos) \ argument
562 ((pos) < viadev->lastpos && ((pos) >= viadev->bufsize2 ||\
563 viadev->lastpos < viadev->bufsize2))
566 struct viadev *viadev, in calc_linear_pos() argument
572 size = viadev->idx_table[idx].size; in calc_linear_pos()
573 res = viadev->idx_table[idx].offset + size - count; in calc_linear_pos()
580 res = viadev->lastpos; in calc_linear_pos()
581 } else if (check_invalid_pos(viadev, res)) { in calc_linear_pos()
585 idx, viadev->tbl_entries, viadev->lastpos, in calc_linear_pos()
586 viadev->bufsize2, viadev->idx_table[idx].offset, in calc_linear_pos()
587 viadev->idx_table[idx].size, count); in calc_linear_pos()
592 res = viadev->lastpos; in calc_linear_pos()
596 res = viadev->idx_table[idx].offset; in calc_linear_pos()
601 res = viadev->idx_table[idx].offset + size; in calc_linear_pos()
602 if (check_invalid_pos(viadev, res)) { in calc_linear_pos()
605 res = viadev->lastpos; in calc_linear_pos()
609 viadev->lastpos = res; /* remember the last position */ in calc_linear_pos()
610 if (res >= viadev->bufsize) in calc_linear_pos()
611 res -= viadev->bufsize; in calc_linear_pos()
621 struct viadev *viadev = substream->runtime->private_data; in snd_via686_pcm_pointer() local
624 if (snd_BUG_ON(!viadev->tbl_entries)) in snd_via686_pcm_pointer()
626 if (!(inb(VIADEV_REG(viadev, OFFSET_STATUS)) & VIA_REG_STAT_ACTIVE)) in snd_via686_pcm_pointer()
630 count = inl(VIADEV_REG(viadev, OFFSET_CURR_COUNT)) & 0xffffff; in snd_via686_pcm_pointer()
634 ptr = inl(VIADEV_REG(viadev, OFFSET_CURR_PTR)); in snd_via686_pcm_pointer()
635 if (ptr <= (unsigned int)viadev->table.addr) in snd_via686_pcm_pointer()
638 idx = ((ptr - (unsigned int)viadev->table.addr) / 8 - 1) % in snd_via686_pcm_pointer()
639 viadev->tbl_entries; in snd_via686_pcm_pointer()
640 res = calc_linear_pos(chip, viadev, idx, count); in snd_via686_pcm_pointer()
654 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_hw_params() local
660 err = build_via_table(viadev, substream, chip->pci, in snd_via82xx_hw_params()
679 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_hw_free() local
681 clean_via_table(viadev, substream, chip->pci); in snd_via82xx_hw_free()
690 static void snd_via82xx_set_table_ptr(struct via82xx_modem *chip, struct viadev *viadev) in snd_via82xx_set_table_ptr() argument
693 outl((u32)viadev->table.addr, VIADEV_REG(viadev, OFFSET_TABLE_PTR)); in snd_via82xx_set_table_ptr()
704 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_pcm_prepare() local
706 snd_via82xx_channel_reset(chip, viadev); in snd_via82xx_pcm_prepare()
708 snd_via82xx_set_table_ptr(chip, viadev); in snd_via82xx_pcm_prepare()
710 VIADEV_REG(viadev, OFFSET_TYPE)); in snd_via82xx_pcm_prepare()
742 static int snd_via82xx_modem_pcm_open(struct via82xx_modem *chip, struct viadev *viadev, in snd_via82xx_modem_pcm_open() argument
765 runtime->private_data = viadev; in snd_via82xx_modem_pcm_open()
766 viadev->substream = substream; in snd_via82xx_modem_pcm_open()
778 struct viadev *viadev = &chip->devs[chip->playback_devno + substream->number]; in snd_via82xx_playback_open() local
780 return snd_via82xx_modem_pcm_open(chip, viadev, substream); in snd_via82xx_playback_open()
789 struct viadev *viadev = &chip->devs[chip->capture_devno + substream->pcm->device]; in snd_via82xx_capture_open() local
791 return snd_via82xx_modem_pcm_open(chip, viadev, substream); in snd_via82xx_capture_open()
799 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_pcm_close() local
801 viadev->substream = NULL; in snd_via82xx_pcm_close()