Lines Matching defs:dma
342 static int atiixp_build_dma_packets(struct atiixp *chip, struct atiixp_dma *dma,
354 if (dma->desc_buf.area == NULL) {
358 &dma->desc_buf) < 0)
360 dma->period_bytes = dma->periods = 0; /* clear */
363 if (dma->periods == periods && dma->period_bytes == period_bytes)
368 writel(0, chip->remap_addr + dma->ops->llp_offset);
369 dma->ops->enable_dma(chip, 0);
370 dma->ops->enable_dma(chip, 1);
375 desc_addr = (u32)dma->desc_buf.addr;
378 desc = &((struct atiixp_dma_desc *)dma->desc_buf.area)[i];
384 desc->next = cpu_to_le32((u32)dma->desc_buf.addr);
390 writel((u32)dma->desc_buf.addr | ATI_REG_LINKPTR_EN,
391 chip->remap_addr + dma->ops->llp_offset);
393 dma->period_bytes = period_bytes;
394 dma->periods = periods;
402 static void atiixp_clear_dma_packets(struct atiixp *chip, struct atiixp_dma *dma,
405 if (dma->desc_buf.area) {
406 writel(0, chip->remap_addr + dma->ops->llp_offset);
407 snd_dma_free_pages(&dma->desc_buf);
408 dma->desc_buf.area = NULL;
651 struct atiixp_dma *dma = runtime->private_data;
656 curptr = readl(chip->remap_addr + dma->ops->dt_cur);
657 if (curptr < dma->buf_addr)
659 curptr -= dma->buf_addr;
660 if (curptr >= dma->buf_bytes)
665 readl(chip->remap_addr + dma->ops->dt_cur), dma->buf_addr);
672 static void snd_atiixp_xrun_dma(struct atiixp *chip, struct atiixp_dma *dma)
674 if (! dma->substream || ! dma->running)
676 dev_dbg(chip->card->dev, "XRUN detected (DMA %d)\n", dma->ops->type);
677 snd_pcm_stop_xrun(dma->substream);
683 static void snd_atiixp_update_dma(struct atiixp *chip, struct atiixp_dma *dma)
685 if (! dma->substream || ! dma->running)
687 snd_pcm_period_elapsed(dma->substream);
710 struct atiixp_dma *dma = substream->runtime->private_data;
713 if (snd_BUG_ON(!dma->ops->enable_transfer ||
714 !dma->ops->flush_dma))
722 if (dma->running && dma->suspended &&
724 writel(dma->saved_curptr, chip->remap_addr +
725 dma->ops->dt_cur);
726 dma->ops->enable_transfer(chip, 1);
727 dma->running = 1;
728 dma->suspended = 0;
733 dma->suspended = cmd == SNDRV_PCM_TRIGGER_SUSPEND;
734 if (dma->running && dma->suspended)
735 dma->saved_curptr = readl(chip->remap_addr +
736 dma->ops->dt_cur);
737 dma->ops->enable_transfer(chip, 0);
738 dma->running = 0;
747 dma->ops->flush_dma(chip);
952 struct atiixp_dma *dma = substream->runtime->private_data;
955 dma->buf_addr = substream->runtime->dma_addr;
956 dma->buf_bytes = params_buffer_bytes(hw_params);
958 err = atiixp_build_dma_packets(chip, dma, substream,
964 if (dma->ac97_pcm_type >= 0) {
965 struct ac97_pcm *pcm = chip->pcms[dma->ac97_pcm_type];
969 if (dma->pcm_open_flag) {
971 dma->pcm_open_flag = 0;
977 dma->pcm_open_flag = 1;
986 struct atiixp_dma *dma = substream->runtime->private_data;
988 if (dma->pcm_open_flag) {
989 struct ac97_pcm *pcm = chip->pcms[dma->ac97_pcm_type];
991 dma->pcm_open_flag = 0;
993 atiixp_clear_dma_packets(chip, dma, substream);
1022 struct atiixp_dma *dma, int pcm_type)
1028 if (snd_BUG_ON(!dma->ops || !dma->ops->enable_dma))
1031 if (dma->opened)
1033 dma->substream = substream;
1035 dma->ac97_pcm_type = pcm_type;
1045 runtime->private_data = dma;
1049 dma->ops->enable_dma(chip, 1);
1051 dma->opened = 1;
1057 struct atiixp_dma *dma)
1061 if (snd_BUG_ON(!dma->ops || !dma->ops->enable_dma))
1064 dma->ops->enable_dma(chip, 0);
1066 dma->substream = NULL;
1067 dma->opened = 0;
1487 struct atiixp_dma *dma = &chip->dmas[i];
1488 if (dma->substream && dma->suspended) {
1489 dma->ops->enable_dma(chip, 1);
1490 dma->substream->ops->prepare(dma->substream);
1491 writel((u32)dma->desc_buf.addr | ATI_REG_LINKPTR_EN,
1492 chip->remap_addr + dma->ops->llp_offset);