static void vx2_outl(struct vx_core *chip, int offset, unsigned int val) { /* */ outl(val, vx2_reg_addr(chip, offset)); }
/* pseudo-dma write */ static void vx2_dma_write(struct vx_core *chip, struct snd_pcm_runtime *runtime, struct vx_pipe *pipe, int count) { unsigned long port = vx2_reg_addr(chip, VX_DMA); int offset = pipe->hw_ptr; u32 *addr = (u32 *)(runtime->dma_area + offset); snd_assert(count % 4 == 0, return); vx2_setup_pseudo_dma(chip, 1); /* Transfer using pseudo-dma. */ if (offset + count > pipe->buffer_bytes) { int length = pipe->buffer_bytes - offset; count -= length; length >>= 2; /* in 32bit words */ /* Transfer using pseudo-dma. */ while (length-- > 0) { outl(cpu_to_le32(*addr), port); addr++; } addr = (u32 *)runtime->dma_area; pipe->hw_ptr = 0; }
static void vx2_outb(struct vx_core *chip, int offset, unsigned char val) { outb(val, vx2_reg_addr(chip, offset)); /* */ }
static void vx2_dma_write(struct vx_core *chip, struct snd_pcm_runtime *runtime, struct vx_pipe *pipe, int count) { unsigned long port = vx2_reg_addr(chip, VX_DMA); int offset = pipe->hw_ptr; u32 *addr = (u32 *)(runtime->dma_area + offset); if (snd_BUG_ON(count % 4)) return; vx2_setup_pseudo_dma(chip, 1); if (offset + count > pipe->buffer_bytes) { int length = pipe->buffer_bytes - offset; count -= length; length >>= 2; while (length-- > 0) { outl(cpu_to_le32(*addr), port); addr++; } addr = (u32 *)runtime->dma_area; pipe->hw_ptr = 0; }
/** * snd_vx_inb - read a byte from the register * @offset: register enum */ static unsigned char vx2_inb(struct vx_core *chip, int offset) { return inb(vx2_reg_addr(chip, offset)); }
/** * snd_vx_outl - write a 32bit word on the register * @offset: the register enum * @val: the value to write */ static void vx2_outl(struct vx_core *chip, int offset, unsigned int val) { // printk("outl: %x -> %x\n", val, vx2_reg_addr(chip, offset)); outl(val, vx2_reg_addr(chip, offset)); }
/** * snd_vx_outb - write a byte on the register * @offset: the register offset * @val: the value to write */ static void vx2_outb(struct vx_core *chip, int offset, unsigned char val) { outb(val, vx2_reg_addr(chip, offset)); //printk("outb: %x -> %x\n", val, vx2_reg_addr(chip, offset)); }
/** * snd_vx_inl - read a 32bit word from the register * @offset: register enum */ static unsigned int vx2_inl(vx_core_t *chip, int offset) { return inl(vx2_reg_addr(chip, offset)); }