Lines Matching defs:gus
10 #include <sound/gus.h>
12 static void snd_gf1_dma_ack(struct snd_gus_card * gus)
14 guard(spinlock_irqsave)(&gus->reg_lock);
15 snd_gf1_write8(gus, SNDRV_GF1_GB_DRAM_DMA_CONTROL, 0x00);
16 snd_gf1_look8(gus, SNDRV_GF1_GB_DRAM_DMA_CONTROL);
19 static void snd_gf1_dma_program(struct snd_gus_card * gus,
29 dev_dbg(gus->card->dev,
33 if (gus->gf1.dma1 > 3) {
34 if (gus->gf1.enh_mode) {
38 dev_dbg(gus->card->dev,
57 if (gus->gf1.dma1 > 3) {
62 snd_gf1_dma_ack(gus);
63 snd_dma_program(gus->gf1.dma1, buf_addr, count, dma_cmd & SNDRV_GF1_DMA_READ ? DMA_MODE_READ : DMA_MODE_WRITE);
65 dev_dbg(gus->card->dev,
69 guard(spinlock_irqsave)(&gus->reg_lock);
70 if (gus->gf1.enh_mode) {
72 snd_gf1_write16(gus, SNDRV_GF1_GW_DRAM_DMA_LOW, (unsigned short) (address >> 4));
73 snd_gf1_write8(gus, SNDRV_GF1_GB_DRAM_DMA_HIGH, (unsigned char) address_high);
75 snd_gf1_write16(gus, SNDRV_GF1_GW_DRAM_DMA_LOW, (unsigned short) (address >> 4));
76 snd_gf1_write8(gus, SNDRV_GF1_GB_DRAM_DMA_CONTROL, dma_cmd);
79 static struct snd_gf1_dma_block *snd_gf1_dma_next_block(struct snd_gus_card * gus)
84 if (gus->gf1.dma_data_pcm) {
85 block = gus->gf1.dma_data_pcm;
86 if (gus->gf1.dma_data_pcm_last == block) {
87 gus->gf1.dma_data_pcm =
88 gus->gf1.dma_data_pcm_last = NULL;
90 gus->gf1.dma_data_pcm = block->next;
92 } else if (gus->gf1.dma_data_synth) {
93 block = gus->gf1.dma_data_synth;
94 if (gus->gf1.dma_data_synth_last == block) {
95 gus->gf1.dma_data_synth =
96 gus->gf1.dma_data_synth_last = NULL;
98 gus->gf1.dma_data_synth = block->next;
104 gus->gf1.dma_ack = block->ack;
105 gus->gf1.dma_private_data = block->private_data;
111 static void snd_gf1_dma_interrupt(struct snd_gus_card * gus)
115 snd_gf1_dma_ack(gus);
116 if (gus->gf1.dma_ack)
117 gus->gf1.dma_ack(gus, gus->gf1.dma_private_data);
118 scoped_guard(spinlock, &gus->dma_lock) {
119 if (gus->gf1.dma_data_pcm == NULL &&
120 gus->gf1.dma_data_synth == NULL) {
121 gus->gf1.dma_ack = NULL;
122 gus->gf1.dma_flags &= ~SNDRV_GF1_DMA_TRIGGER;
125 block = snd_gf1_dma_next_block(gus);
129 snd_gf1_dma_program(gus, block->addr, block->buf_addr, block->count, (unsigned short) block->cmd);
132 dev_dbg(gus->card->dev,
138 int snd_gf1_dma_init(struct snd_gus_card * gus)
140 guard(mutex)(&gus->dma_mutex);
141 gus->gf1.dma_shared++;
142 if (gus->gf1.dma_shared > 1)
144 gus->gf1.interrupt_handler_dma_write = snd_gf1_dma_interrupt;
145 gus->gf1.dma_data_pcm =
146 gus->gf1.dma_data_pcm_last =
147 gus->gf1.dma_data_synth =
148 gus->gf1.dma_data_synth_last = NULL;
152 int snd_gf1_dma_done(struct snd_gus_card * gus)
156 guard(mutex)(&gus->dma_mutex);
157 gus->gf1.dma_shared--;
158 if (!gus->gf1.dma_shared) {
159 snd_dma_disable(gus->gf1.dma1);
160 snd_gf1_set_default_handlers(gus, SNDRV_GF1_HANDLER_DMA_WRITE);
161 snd_gf1_dma_ack(gus);
162 while ((block = gus->gf1.dma_data_pcm)) {
163 gus->gf1.dma_data_pcm = block->next;
166 while ((block = gus->gf1.dma_data_synth)) {
167 gus->gf1.dma_data_synth = block->next;
170 gus->gf1.dma_data_pcm_last =
171 gus->gf1.dma_data_synth_last = NULL;
176 int snd_gf1_dma_transfer_block(struct snd_gus_card * gus,
191 dev_dbg(gus->card->dev,
196 dev_dbg(gus->card->dev,
197 "gus->gf1.dma_data_pcm_last = 0x%lx\n",
198 (long)gus->gf1.dma_data_pcm_last);
199 dev_dbg(gus->card->dev,
200 "gus->gf1.dma_data_pcm = 0x%lx\n",
201 (long)gus->gf1.dma_data_pcm);
203 scoped_guard(spinlock_irqsave, &gus->dma_lock) {
205 if (gus->gf1.dma_data_synth_last) {
206 gus->gf1.dma_data_synth_last->next = block;
207 gus->gf1.dma_data_synth_last = block;
209 gus->gf1.dma_data_synth =
210 gus->gf1.dma_data_synth_last = block;
213 if (gus->gf1.dma_data_pcm_last) {
214 gus->gf1.dma_data_pcm_last->next = block;
215 gus->gf1.dma_data_pcm_last = block;
217 gus->gf1.dma_data_pcm =
218 gus->gf1.dma_data_pcm_last = block;
221 if (!(gus->gf1.dma_flags & SNDRV_GF1_DMA_TRIGGER)) {
222 gus->gf1.dma_flags |= SNDRV_GF1_DMA_TRIGGER;
223 free_block = snd_gf1_dma_next_block(gus);
228 snd_gf1_dma_program(gus, free_block->addr, free_block->buf_addr,