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