Lines Matching refs:viadev

63 #define VIADEV_REG(viadev, x) ((viadev)->port + VIA_REG_##x)  argument
204 struct viadev { struct
235 struct viadev devs[VIA_MAX_MODEM_DEVS]; argument
263 static int build_via_table(struct viadev *dev, struct snd_pcm_substream *substream, in build_via_table()
339 static int clean_via_table(struct viadev *dev, struct snd_pcm_substream *substream, in clean_via_table()
453 static void snd_via82xx_channel_reset(struct via82xx_modem *chip, struct viadev *viadev) in snd_via82xx_channel_reset() argument
456 VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_channel_reset()
457 inb(VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_channel_reset()
460 outb(0x00, VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_channel_reset()
462 outb(0x03, VIADEV_REG(viadev, OFFSET_STATUS)); in snd_via82xx_channel_reset()
463 outb(0x00, VIADEV_REG(viadev, OFFSET_TYPE)); /* for via686 */ in snd_via82xx_channel_reset()
465 viadev->lastpos = 0; in snd_via82xx_channel_reset()
488 struct viadev *viadev = &chip->devs[i]; in snd_via82xx_interrupt() local
489 unsigned char c_status = inb(VIADEV_REG(viadev, OFFSET_STATUS)); in snd_via82xx_interrupt()
493 if (viadev->substream && viadev->running) { in snd_via82xx_interrupt()
495 snd_pcm_period_elapsed(viadev->substream); in snd_via82xx_interrupt()
498 outb(c_status, VIADEV_REG(viadev, OFFSET_STATUS)); /* ack */ in snd_via82xx_interrupt()
514 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_pcm_trigger() local
521 viadev->running = 1; in snd_via82xx_pcm_trigger()
525 viadev->running = 0; in snd_via82xx_pcm_trigger()
529 viadev->running = 0; in snd_via82xx_pcm_trigger()
532 viadev->running = 1; in snd_via82xx_pcm_trigger()
537 outb(val, VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_pcm_trigger()
539 snd_via82xx_channel_reset(chip, viadev); in snd_via82xx_pcm_trigger()
551 #define check_invalid_pos(viadev,pos) \ argument
552 ((pos) < viadev->lastpos && ((pos) >= viadev->bufsize2 ||\
553 viadev->lastpos < viadev->bufsize2))
556 struct viadev *viadev, in calc_linear_pos() argument
562 size = viadev->idx_table[idx].size; in calc_linear_pos()
563 res = viadev->idx_table[idx].offset + size - count; in calc_linear_pos()
570 res = viadev->lastpos; in calc_linear_pos()
571 } else if (check_invalid_pos(viadev, res)) { in calc_linear_pos()
575 idx, viadev->tbl_entries, viadev->lastpos, in calc_linear_pos()
576 viadev->bufsize2, viadev->idx_table[idx].offset, in calc_linear_pos()
577 viadev->idx_table[idx].size, count); in calc_linear_pos()
582 res = viadev->lastpos; in calc_linear_pos()
586 res = viadev->idx_table[idx].offset; in calc_linear_pos()
591 res = viadev->idx_table[idx].offset + size; in calc_linear_pos()
592 if (check_invalid_pos(viadev, res)) { in calc_linear_pos()
595 res = viadev->lastpos; in calc_linear_pos()
599 viadev->lastpos = res; /* remember the last position */ in calc_linear_pos()
600 if (res >= viadev->bufsize) in calc_linear_pos()
601 res -= viadev->bufsize; in calc_linear_pos()
611 struct viadev *viadev = substream->runtime->private_data; in snd_via686_pcm_pointer() local
614 if (snd_BUG_ON(!viadev->tbl_entries)) in snd_via686_pcm_pointer()
616 if (!(inb(VIADEV_REG(viadev, OFFSET_STATUS)) & VIA_REG_STAT_ACTIVE)) in snd_via686_pcm_pointer()
620 count = inl(VIADEV_REG(viadev, OFFSET_CURR_COUNT)) & 0xffffff; in snd_via686_pcm_pointer()
624 ptr = inl(VIADEV_REG(viadev, OFFSET_CURR_PTR)); in snd_via686_pcm_pointer()
625 if (ptr <= (unsigned int)viadev->table.addr) in snd_via686_pcm_pointer()
628 idx = ((ptr - (unsigned int)viadev->table.addr) / 8 - 1) % in snd_via686_pcm_pointer()
629 viadev->tbl_entries; in snd_via686_pcm_pointer()
630 res = calc_linear_pos(chip, viadev, idx, count); in snd_via686_pcm_pointer()
644 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_hw_params() local
647 err = build_via_table(viadev, substream, chip->pci, in snd_via82xx_hw_params()
666 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_hw_free() local
668 clean_via_table(viadev, substream, chip->pci); in snd_via82xx_hw_free()
676 static void snd_via82xx_set_table_ptr(struct via82xx_modem *chip, struct viadev *viadev) in snd_via82xx_set_table_ptr() argument
679 outl((u32)viadev->table.addr, VIADEV_REG(viadev, OFFSET_TABLE_PTR)); in snd_via82xx_set_table_ptr()
690 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_pcm_prepare() local
692 snd_via82xx_channel_reset(chip, viadev); in snd_via82xx_pcm_prepare()
694 snd_via82xx_set_table_ptr(chip, viadev); in snd_via82xx_pcm_prepare()
696 VIADEV_REG(viadev, OFFSET_TYPE)); in snd_via82xx_pcm_prepare()
728 static int snd_via82xx_modem_pcm_open(struct via82xx_modem *chip, struct viadev *viadev, in snd_via82xx_modem_pcm_open() argument
753 runtime->private_data = viadev; in snd_via82xx_modem_pcm_open()
754 viadev->substream = substream; in snd_via82xx_modem_pcm_open()
766 struct viadev *viadev = &chip->devs[chip->playback_devno + substream->number]; in snd_via82xx_playback_open() local
768 return snd_via82xx_modem_pcm_open(chip, viadev, substream); in snd_via82xx_playback_open()
777 struct viadev *viadev = &chip->devs[chip->capture_devno + substream->pcm->device]; in snd_via82xx_capture_open() local
779 return snd_via82xx_modem_pcm_open(chip, viadev, substream); in snd_via82xx_capture_open()
787 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_pcm_close() local
789 viadev->substream = NULL; in snd_via82xx_pcm_close()