viadev
struct viafb_dev *viadev = pdev->dev.platform_data;
if (viadev->camera_fbmem_size < (VGA_HEIGHT*VGA_WIDTH*4)) {
if (viadev->engine_mmio == NULL) {
cam->viadev = viadev;
cam->mmio = viadev->engine_mmio;
cam->fbmem = viadev->fbmem;
cam->fb_offset = viadev->camera_fbmem_offset;
pdev->dev.dma_mask = &viadev->pdev->dma_mask;
ret = request_threaded_irq(viadev->pdev->irq, viacam_quick_irq,
free_irq(viadev->pdev->irq, cam);
struct viafb_dev *viadev = pdev->dev.platform_data;
free_irq(viadev->pdev->irq, cam);
spin_lock(&cam->viadev->reg_lock);
spin_unlock(&cam->viadev->reg_lock);
int nbuf = cam->viadev->camera_fbmem_size/cam->sensor_format.sizeimage;
spin_lock_irqsave(&cam->viadev->reg_lock, flags);
spin_unlock_irqrestore(&cam->viadev->reg_lock, flags);
spin_lock_irq(&cam->viadev->reg_lock);
spin_unlock_irq(&cam->viadev->reg_lock);
spin_lock_irq(&cam->viadev->reg_lock);
spin_unlock_irq(&cam->viadev->reg_lock);
struct viafb_dev *viadev;
struct viadev *viadev = substream->runtime->private_data;
if (chip->spdif_on && viadev->reg_offset == 0x30)
snd_via82xx_channel_reset(chip, viadev);
snd_via82xx_set_table_ptr(chip, viadev);
outb(chip->playback_volume[viadev->reg_offset / 0x10][0],
VIADEV_REG(viadev, OFS_PLAYBACK_VOLUME_L));
outb(chip->playback_volume[viadev->reg_offset / 0x10][1],
VIADEV_REG(viadev, OFS_PLAYBACK_VOLUME_R));
VIADEV_REG(viadev, OFFSET_STOP_IDX));
struct viadev *viadev = substream->runtime->private_data;
snd_via82xx_channel_reset(chip, viadev);
snd_via82xx_set_table_ptr(chip, viadev);
outb(fmt, VIADEV_REG(viadev, OFS_MULTPLAY_FORMAT));
outl(0xff000000 | slots, VIADEV_REG(viadev, OFFSET_STOP_IDX));
struct viadev *viadev = substream->runtime->private_data;
snd_via82xx_channel_reset(chip, viadev);
snd_via82xx_set_table_ptr(chip, viadev);
outb(VIA_REG_CAPTURE_FIFO_ENABLE, VIADEV_REG(viadev, OFS_CAPTURE_FIFO));
VIADEV_REG(viadev, OFFSET_STOP_IDX));
static int snd_via82xx_pcm_open(struct via82xx *chip, struct viadev *viadev,
ratep = &chip->rates[viadev->direction];
if (chip->spdif_on && viadev->reg_offset == 0x30) {
} else if (chip->dxs_fixed && viadev->reg_offset < 0x40) {
} else if (chip->dxs_src && viadev->reg_offset < 0x40) {
int idx = viadev->direction ? AC97_RATES_ADC : AC97_RATES_FRONT_DAC;
runtime->private_data = viadev;
viadev->substream = substream;
struct viadev *viadev = &chip->devs[chip->playback_devno + substream->number];
err = snd_via82xx_pcm_open(chip, viadev, substream);
struct viadev *viadev;
viadev = &chip->devs[chip->playback_devno + substream->number];
err = snd_via82xx_pcm_open(chip, viadev, substream);
stream = viadev->reg_offset / 0x10;
#define VIADEV_REG(viadev, x) ((viadev)->port + VIA_REG_##x)
struct viadev *viadev = &chip->devs[chip->multi_devno];
err = snd_via82xx_pcm_open(chip, viadev, substream);
struct viadev *viadev = &chip->devs[chip->capture_devno + substream->pcm->device];
return snd_via82xx_pcm_open(chip, viadev, substream);
struct viadev *viadev = substream->runtime->private_data;
ratep = &chip->rates[viadev->direction];
if (! viadev->direction) {
viadev->substream = NULL;
struct viadev *viadev = substream->runtime->private_data;
stream = viadev->reg_offset / 0x10;
struct viadev devs[VIA_MAX_DEVS];
static int build_via_table(struct viadev *dev, struct snd_pcm_substream *substream,
static int clean_via_table(struct viadev *dev, struct snd_pcm_substream *substream,
static void snd_via82xx_channel_reset(struct via82xx *chip, struct viadev *viadev)
VIADEV_REG(viadev, OFFSET_CONTROL));
inb(VIADEV_REG(viadev, OFFSET_CONTROL));
outb(0x00, VIADEV_REG(viadev, OFFSET_CONTROL));
outb(0x03, VIADEV_REG(viadev, OFFSET_STATUS));
outb(0x00, VIADEV_REG(viadev, OFFSET_TYPE)); /* for via686 */
viadev->lastpos = 0;
viadev->hwptr_done = 0;
struct viadev *viadev = &chip->devs[i];
unsigned char c_status = inb(VIADEV_REG(viadev, OFFSET_STATUS));
if (viadev->substream && viadev->running) {
viadev->hwptr_done = 0;
viadev->hwptr_done += viadev->fragsize;
viadev->in_interrupt = c_status;
snd_pcm_period_elapsed(viadev->substream);
viadev->in_interrupt = 0;
outb(c_status, VIADEV_REG(viadev, OFFSET_STATUS)); /* ack */
struct viadev *viadev = &chip->devs[i];
shadow_status = (status >> viadev->shadow_shift) &
substream = viadev->substream;
if (substream && viadev->running) {
viadev->hwptr_done = 0;
viadev->hwptr_done += viadev->fragsize;
viadev->in_interrupt = c_status;
viadev->in_interrupt |= VIA_REG_STAT_ACTIVE;
viadev->in_interrupt = 0;
outb(c_status, VIADEV_REG(viadev, OFFSET_STATUS)); /* ack */
struct viadev *viadev = substream->runtime->private_data;
viadev->running = 1;
viadev->running = 0;
viadev->running = 0;
viadev->running = 1;
outb(val, VIADEV_REG(viadev, OFFSET_CONTROL));
snd_via82xx_channel_reset(chip, viadev);
#define check_invalid_pos(viadev,pos) \
((pos) < viadev->lastpos && ((pos) >= viadev->bufsize2 ||\
viadev->lastpos < viadev->bufsize2))
struct viadev *viadev,
size = viadev->idx_table[idx].size;
base = viadev->idx_table[idx].offset;
if (res >= viadev->bufsize)
res -= viadev->bufsize;
res = viadev->lastpos;
int delta = res - viadev->lastpos;
delta += viadev->bufsize;
if ((unsigned int)delta > viadev->fragsize)
if (check_invalid_pos(viadev, res)) {
idx, viadev->tbl_entries,
viadev->lastpos, viadev->bufsize2,
viadev->idx_table[idx].offset,
viadev->idx_table[idx].size, count);
if (check_invalid_pos(viadev, res)) {
res = viadev->lastpos;
struct viadev *viadev = substream->runtime->private_data;
if (snd_BUG_ON(!viadev->tbl_entries))
if (!(inb(VIADEV_REG(viadev, OFFSET_STATUS)) & VIA_REG_STAT_ACTIVE))
count = inl(VIADEV_REG(viadev, OFFSET_CURR_COUNT)) & 0xffffff;
ptr = inl(VIADEV_REG(viadev, OFFSET_CURR_PTR));
if (ptr <= (unsigned int)viadev->table.addr)
idx = ((ptr - (unsigned int)viadev->table.addr) / 8 - 1) % viadev->tbl_entries;
res = calc_linear_pos(chip, viadev, idx, count);
viadev->lastpos = res; /* remember the last position */
struct viadev *viadev = substream->runtime->private_data;
if (snd_BUG_ON(!viadev->tbl_entries))
count = inl(VIADEV_REG(viadev, OFFSET_CURR_COUNT));
status = viadev->in_interrupt;
status = inb(VIADEV_REG(viadev, OFFSET_STATUS));
if (idx >= viadev->tbl_entries) {
viadev->tbl_entries);
res = viadev->lastpos;
res = calc_linear_pos(chip, viadev, idx, count);
res = viadev->hwptr_done;
if (!viadev->in_interrupt) {
res += viadev->fragsize;
viadev->lastpos = res;
struct viadev *viadev = substream->runtime->private_data;
return build_via_table(viadev, substream, chip->pci,
struct viadev *viadev = substream->runtime->private_data;
clean_via_table(viadev, substream, chip->pci);
static void snd_via82xx_set_table_ptr(struct via82xx *chip, struct viadev *viadev)
outl((u32)viadev->table.addr, VIADEV_REG(viadev, OFFSET_TABLE_PTR));
static void via686_setup_format(struct via82xx *chip, struct viadev *viadev,
snd_via82xx_channel_reset(chip, viadev);
snd_via82xx_set_table_ptr(chip, viadev);
((viadev->reg_offset & 0x10) == 0 ? VIA_REG_TYPE_INT_LSAMPLE : 0) |
VIA_REG_TYPE_INT_FLAG, VIADEV_REG(viadev, OFFSET_TYPE));
struct viadev *viadev = substream->runtime->private_data;
via686_setup_format(chip, viadev, runtime);
struct viadev *viadev = substream->runtime->private_data;
via686_setup_format(chip, viadev, runtime);
struct viadev devs[VIA_MAX_MODEM_DEVS];
static int build_via_table(struct viadev *dev, struct snd_pcm_substream *substream,
static int clean_via_table(struct viadev *dev, struct snd_pcm_substream *substream,
static void snd_via82xx_channel_reset(struct via82xx_modem *chip, struct viadev *viadev)
VIADEV_REG(viadev, OFFSET_CONTROL));
inb(VIADEV_REG(viadev, OFFSET_CONTROL));
outb(0x00, VIADEV_REG(viadev, OFFSET_CONTROL));
outb(0x03, VIADEV_REG(viadev, OFFSET_STATUS));
outb(0x00, VIADEV_REG(viadev, OFFSET_TYPE)); /* for via686 */
viadev->lastpos = 0;
struct viadev *viadev = &chip->devs[i];
unsigned char c_status = inb(VIADEV_REG(viadev, OFFSET_STATUS));
if (viadev->substream && viadev->running) {
snd_pcm_period_elapsed(viadev->substream);
outb(c_status, VIADEV_REG(viadev, OFFSET_STATUS)); /* ack */
struct viadev *viadev = substream->runtime->private_data;
viadev->running = 1;
viadev->running = 0;
viadev->running = 0;
viadev->running = 1;
outb(val, VIADEV_REG(viadev, OFFSET_CONTROL));
snd_via82xx_channel_reset(chip, viadev);
#define check_invalid_pos(viadev,pos) \
((pos) < viadev->lastpos && ((pos) >= viadev->bufsize2 ||\
viadev->lastpos < viadev->bufsize2))
struct viadev *viadev,
size = viadev->idx_table[idx].size;
res = viadev->idx_table[idx].offset + size - count;
res = viadev->lastpos;
} else if (check_invalid_pos(viadev, res)) {
idx, viadev->tbl_entries, viadev->lastpos,
viadev->bufsize2, viadev->idx_table[idx].offset,
viadev->idx_table[idx].size, count);
res = viadev->lastpos;
res = viadev->idx_table[idx].offset;
res = viadev->idx_table[idx].offset + size;
if (check_invalid_pos(viadev, res)) {
res = viadev->lastpos;
viadev->lastpos = res; /* remember the last position */
if (res >= viadev->bufsize)
res -= viadev->bufsize;
struct viadev *viadev = substream->runtime->private_data;
if (snd_BUG_ON(!viadev->tbl_entries))
if (!(inb(VIADEV_REG(viadev, OFFSET_STATUS)) & VIA_REG_STAT_ACTIVE))
count = inl(VIADEV_REG(viadev, OFFSET_CURR_COUNT)) & 0xffffff;
ptr = inl(VIADEV_REG(viadev, OFFSET_CURR_PTR));
if (ptr <= (unsigned int)viadev->table.addr)
idx = ((ptr - (unsigned int)viadev->table.addr) / 8 - 1) %
viadev->tbl_entries;
res = calc_linear_pos(chip, viadev, idx, count);
#define VIADEV_REG(viadev, x) ((viadev)->port + VIA_REG_##x)
struct viadev *viadev = substream->runtime->private_data;
err = build_via_table(viadev, substream, chip->pci,
struct viadev *viadev = substream->runtime->private_data;
clean_via_table(viadev, substream, chip->pci);
static void snd_via82xx_set_table_ptr(struct via82xx_modem *chip, struct viadev *viadev)
outl((u32)viadev->table.addr, VIADEV_REG(viadev, OFFSET_TABLE_PTR));
struct viadev *viadev = substream->runtime->private_data;
snd_via82xx_channel_reset(chip, viadev);
snd_via82xx_set_table_ptr(chip, viadev);
VIADEV_REG(viadev, OFFSET_TYPE));
static int snd_via82xx_modem_pcm_open(struct via82xx_modem *chip, struct viadev *viadev,
runtime->private_data = viadev;
viadev->substream = substream;
struct viadev *viadev = &chip->devs[chip->playback_devno + substream->number];
return snd_via82xx_modem_pcm_open(chip, viadev, substream);
struct viadev *viadev = &chip->devs[chip->capture_devno + substream->pcm->device];
return snd_via82xx_modem_pcm_open(chip, viadev, substream);
struct viadev *viadev = substream->runtime->private_data;
viadev->substream = NULL;