Lines Matching defs:dma

341 static int atiixp_build_dma_packets(struct atiixp *chip, struct atiixp_dma *dma,
353 if (dma->desc_buf.area == NULL) {
357 &dma->desc_buf) < 0)
359 dma->period_bytes = dma->periods = 0; /* clear */
362 if (dma->periods == periods && dma->period_bytes == period_bytes)
367 writel(0, chip->remap_addr + dma->ops->llp_offset);
368 dma->ops->enable_dma(chip, 0);
369 dma->ops->enable_dma(chip, 1);
374 desc_addr = (u32)dma->desc_buf.addr;
377 desc = &((struct atiixp_dma_desc *)dma->desc_buf.area)[i];
383 desc->next = cpu_to_le32((u32)dma->desc_buf.addr);
389 writel((u32)dma->desc_buf.addr | ATI_REG_LINKPTR_EN,
390 chip->remap_addr + dma->ops->llp_offset);
392 dma->period_bytes = period_bytes;
393 dma->periods = periods;
401 static void atiixp_clear_dma_packets(struct atiixp *chip, struct atiixp_dma *dma,
404 if (dma->desc_buf.area) {
405 writel(0, chip->remap_addr + dma->ops->llp_offset);
406 snd_dma_free_pages(&dma->desc_buf);
407 dma->desc_buf.area = NULL;
650 struct atiixp_dma *dma = runtime->private_data;
655 curptr = readl(chip->remap_addr + dma->ops->dt_cur);
656 if (curptr < dma->buf_addr)
658 curptr -= dma->buf_addr;
659 if (curptr >= dma->buf_bytes)
664 readl(chip->remap_addr + dma->ops->dt_cur), dma->buf_addr);
671 static void snd_atiixp_xrun_dma(struct atiixp *chip, struct atiixp_dma *dma)
673 if (! dma->substream || ! dma->running)
675 dev_dbg(chip->card->dev, "XRUN detected (DMA %d)\n", dma->ops->type);
676 snd_pcm_stop_xrun(dma->substream);
682 static void snd_atiixp_update_dma(struct atiixp *chip, struct atiixp_dma *dma)
684 if (! dma->substream || ! dma->running)
686 snd_pcm_period_elapsed(dma->substream);
709 struct atiixp_dma *dma = substream->runtime->private_data;
712 if (snd_BUG_ON(!dma->ops->enable_transfer ||
713 !dma->ops->flush_dma))
721 if (dma->running && dma->suspended &&
723 writel(dma->saved_curptr, chip->remap_addr +
724 dma->ops->dt_cur);
725 dma->ops->enable_transfer(chip, 1);
726 dma->running = 1;
727 dma->suspended = 0;
732 dma->suspended = cmd == SNDRV_PCM_TRIGGER_SUSPEND;
733 if (dma->running && dma->suspended)
734 dma->saved_curptr = readl(chip->remap_addr +
735 dma->ops->dt_cur);
736 dma->ops->enable_transfer(chip, 0);
737 dma->running = 0;
746 dma->ops->flush_dma(chip);
951 struct atiixp_dma *dma = substream->runtime->private_data;
954 dma->buf_addr = substream->runtime->dma_addr;
955 dma->buf_bytes = params_buffer_bytes(hw_params);
957 err = atiixp_build_dma_packets(chip, dma, substream,
963 if (dma->ac97_pcm_type >= 0) {
964 struct ac97_pcm *pcm = chip->pcms[dma->ac97_pcm_type];
968 if (dma->pcm_open_flag) {
970 dma->pcm_open_flag = 0;
976 dma->pcm_open_flag = 1;
985 struct atiixp_dma *dma = substream->runtime->private_data;
987 if (dma->pcm_open_flag) {
988 struct ac97_pcm *pcm = chip->pcms[dma->ac97_pcm_type];
990 dma->pcm_open_flag = 0;
992 atiixp_clear_dma_packets(chip, dma, substream);
1021 struct atiixp_dma *dma, int pcm_type)
1027 if (snd_BUG_ON(!dma->ops || !dma->ops->enable_dma))
1030 if (dma->opened)
1032 dma->substream = substream;
1034 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;
1489 struct atiixp_dma *dma = &chip->dmas[i];
1490 if (dma->substream && dma->suspended) {
1491 dma->ops->enable_dma(chip, 1);
1492 dma->substream->ops->prepare(dma->substream);
1493 writel((u32)dma->desc_buf.addr | ATI_REG_LINKPTR_EN,
1494 chip->remap_addr + dma->ops->llp_offset);