Lines Matching refs:viadev
64 #define VIADEV_REG(viadev, x) ((viadev)->port + VIA_REG_##x) argument
205 struct viadev { struct
236 struct viadev devs[VIA_MAX_MODEM_DEVS]; argument
264 static int build_via_table(struct viadev *dev, struct snd_pcm_substream *substream, in build_via_table()
338 static int clean_via_table(struct viadev *dev, struct snd_pcm_substream *substream, in clean_via_table()
451 static void snd_via82xx_channel_reset(struct via82xx_modem *chip, struct viadev *viadev) in snd_via82xx_channel_reset() argument
454 VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_channel_reset()
455 inb(VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_channel_reset()
458 outb(0x00, VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_channel_reset()
460 outb(0x03, VIADEV_REG(viadev, OFFSET_STATUS)); in snd_via82xx_channel_reset()
461 outb(0x00, VIADEV_REG(viadev, OFFSET_TYPE)); /* for via686 */ in snd_via82xx_channel_reset()
463 viadev->lastpos = 0; in snd_via82xx_channel_reset()
486 struct viadev *viadev = &chip->devs[i]; in snd_via82xx_interrupt() local
487 unsigned char c_status = inb(VIADEV_REG(viadev, OFFSET_STATUS)); in snd_via82xx_interrupt()
491 if (viadev->substream && viadev->running) { in snd_via82xx_interrupt()
493 snd_pcm_period_elapsed(viadev->substream); in snd_via82xx_interrupt()
496 outb(c_status, VIADEV_REG(viadev, OFFSET_STATUS)); /* ack */ in snd_via82xx_interrupt()
512 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_pcm_trigger() local
519 viadev->running = 1; in snd_via82xx_pcm_trigger()
523 viadev->running = 0; in snd_via82xx_pcm_trigger()
527 viadev->running = 0; in snd_via82xx_pcm_trigger()
530 viadev->running = 1; in snd_via82xx_pcm_trigger()
535 outb(val, VIADEV_REG(viadev, OFFSET_CONTROL)); in snd_via82xx_pcm_trigger()
537 snd_via82xx_channel_reset(chip, viadev); in snd_via82xx_pcm_trigger()
549 #define check_invalid_pos(viadev,pos) \ argument
550 ((pos) < viadev->lastpos && ((pos) >= viadev->bufsize2 ||\
551 viadev->lastpos < viadev->bufsize2))
554 struct viadev *viadev, in calc_linear_pos() argument
560 size = viadev->idx_table[idx].size; in calc_linear_pos()
561 res = viadev->idx_table[idx].offset + size - count; in calc_linear_pos()
568 res = viadev->lastpos; in calc_linear_pos()
569 } else if (check_invalid_pos(viadev, res)) { in calc_linear_pos()
573 idx, viadev->tbl_entries, viadev->lastpos, in calc_linear_pos()
574 viadev->bufsize2, viadev->idx_table[idx].offset, in calc_linear_pos()
575 viadev->idx_table[idx].size, count); in calc_linear_pos()
580 res = viadev->lastpos; in calc_linear_pos()
584 res = viadev->idx_table[idx].offset; in calc_linear_pos()
589 res = viadev->idx_table[idx].offset + size; in calc_linear_pos()
590 if (check_invalid_pos(viadev, res)) { in calc_linear_pos()
593 res = viadev->lastpos; in calc_linear_pos()
597 viadev->lastpos = res; /* remember the last position */ in calc_linear_pos()
598 if (res >= viadev->bufsize) in calc_linear_pos()
599 res -= viadev->bufsize; in calc_linear_pos()
609 struct viadev *viadev = substream->runtime->private_data; in snd_via686_pcm_pointer() local
612 if (snd_BUG_ON(!viadev->tbl_entries)) in snd_via686_pcm_pointer()
614 if (!(inb(VIADEV_REG(viadev, OFFSET_STATUS)) & VIA_REG_STAT_ACTIVE)) in snd_via686_pcm_pointer()
618 count = inl(VIADEV_REG(viadev, OFFSET_CURR_COUNT)) & 0xffffff; in snd_via686_pcm_pointer()
622 ptr = inl(VIADEV_REG(viadev, OFFSET_CURR_PTR)); in snd_via686_pcm_pointer()
623 if (ptr <= (unsigned int)viadev->table.addr) in snd_via686_pcm_pointer()
626 idx = ((ptr - (unsigned int)viadev->table.addr) / 8 - 1) % in snd_via686_pcm_pointer()
627 viadev->tbl_entries; in snd_via686_pcm_pointer()
628 res = calc_linear_pos(chip, viadev, idx, count); in snd_via686_pcm_pointer()
642 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_hw_params() local
648 err = build_via_table(viadev, substream, chip->pci, in snd_via82xx_hw_params()
667 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_hw_free() local
669 clean_via_table(viadev, substream, chip->pci); in snd_via82xx_hw_free()
678 static void snd_via82xx_set_table_ptr(struct via82xx_modem *chip, struct viadev *viadev) in snd_via82xx_set_table_ptr() argument
681 outl((u32)viadev->table.addr, VIADEV_REG(viadev, OFFSET_TABLE_PTR)); in snd_via82xx_set_table_ptr()
692 struct viadev *viadev = substream->runtime->private_data; in snd_via82xx_pcm_prepare() local
694 snd_via82xx_channel_reset(chip, viadev); in snd_via82xx_pcm_prepare()
696 snd_via82xx_set_table_ptr(chip, viadev); in snd_via82xx_pcm_prepare()
698 VIADEV_REG(viadev, OFFSET_TYPE)); in snd_via82xx_pcm_prepare()
730 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()