Lines Matching +full:left +full:- +full:shift

4  * Copyright (c) 2002-2005 Vassili Karpov (malc)
32 #include "hw/qdev-properties.h"
54 int pos, left, shift, irqs; member
70 return gus_read (&s->emu, nport, 1); in gus_readb()
77 gus_write (&s->emu, nport, 1, val); in gus_writeb()
83 int pos = s->pos; in write_audio()
88 nbytes = samples << s->shift; in write_audio()
90 s->voice, in write_audio()
91 s->mixbuf + (pos << (s->shift - 1)), in write_audio()
96 wsampl = wbytes >> s->shift; in write_audio()
98 samples -= wsampl; in write_audio()
99 pos = (pos + wsampl) % s->samples; in write_audio()
116 samples = free >> s->shift; in GUS_callback()
117 to_play = MIN (samples, s->left); in GUS_callback()
126 s->left -= written; in GUS_callback()
127 to_play -= written; in GUS_callback()
128 samples -= written; in GUS_callback()
132 samples = MIN (samples, s->samples); in GUS_callback()
134 gus_mixvoices (&s->emu, s->freq, samples, s->mixbuf); in GUS_callback()
141 samples -= written; in GUS_callback()
145 s->left = samples; in GUS_callback()
148 gus_irqgen (&s->emu, (uint64_t)net * 1000000 / s->freq); in GUS_callback()
153 GUSState *s = emu->opaque; in GUS_irqrequest()
154 /* qemu_irq_lower (s->pic); */ in GUS_irqrequest()
155 qemu_irq_raise (s->pic); in GUS_irqrequest()
156 s->irqs += n; in GUS_irqrequest()
157 ldebug ("irqrequest %d %d %d\n", hwirq, n, s->irqs); in GUS_irqrequest()
163 GUSState *s = emu->opaque; in GUS_irqclear()
164 ldebug ("irqclear %d %d\n", hwirq, s->irqs); in GUS_irqclear()
165 qemu_irq_lower (s->pic); in GUS_irqclear()
166 s->irqs -= 1; in GUS_irqclear()
168 if (s->irqs > 0) { in GUS_irqclear()
169 qemu_irq_raise (s->pic[hwirq]); in GUS_irqclear()
176 GUSState *s = emu->opaque; in GUS_dmarequest()
177 IsaDmaClass *k = ISADMA_GET_CLASS(s->isa_dma); in GUS_dmarequest()
178 ldebug ("dma request %d\n", der->gusdma); in GUS_dmarequest()
179 k->hold_DREQ(s->isa_dma, s->emu.gusdma); in GUS_dmarequest()
185 IsaDmaClass *k = ISADMA_GET_CLASS(s->isa_dma); in GUS_read_DMA()
187 int pos = dma_pos, mode, left = dma_len - dma_pos; in GUS_read_DMA() local
190 mode = k->has_autoinitialization(s->isa_dma, s->emu.gusdma); in GUS_read_DMA()
191 while (left) { in GUS_read_DMA()
192 int to_copy = MIN ((size_t) left, sizeof (tmpbuf)); in GUS_read_DMA()
195 ldebug ("left=%d to_copy=%d pos=%d\n", left, to_copy, pos); in GUS_read_DMA()
196 copied = k->read_memory(s->isa_dma, nchan, tmpbuf, pos, to_copy); in GUS_read_DMA()
197 gus_dma_transferdata (&s->emu, tmpbuf, copied, left == copied); in GUS_read_DMA()
198 left -= copied; in GUS_read_DMA()
203 k->release_DREQ(s->isa_dma, s->emu.gusdma); in GUS_read_DMA()
214 VMSTATE_INT32 (left, GUSState),
215 VMSTATE_INT32 (shift, GUSState),
244 if (!AUD_register_card ("gus", &s->card, errp)) { in gus_realizefn()
248 s->isa_dma = isa_bus_get_dma(bus, s->emu.gusdma); in gus_realizefn()
249 if (!s->isa_dma) { in gus_realizefn()
254 as.freq = s->freq; in gus_realizefn()
259 s->voice = AUD_open_out ( in gus_realizefn()
260 &s->card, in gus_realizefn()
268 if (!s->voice) { in gus_realizefn()
269 AUD_remove_card (&s->card); in gus_realizefn()
274 s->shift = 2; in gus_realizefn()
275 s->samples = AUD_get_buffer_size_out (s->voice) >> s->shift; in gus_realizefn()
276 s->mixbuf = g_malloc0 (s->samples << s->shift); in gus_realizefn()
278 isa_register_portio_list(d, &s->portio_list1, s->port, in gus_realizefn()
280 isa_register_portio_list(d, &s->portio_list2, (s->port + 0x100) & 0xf00, in gus_realizefn()
283 k = ISADMA_GET_CLASS(s->isa_dma); in gus_realizefn()
284 k->register_channel(s->isa_dma, s->emu.gusdma, GUS_read_DMA, s); in gus_realizefn()
285 s->emu.himemaddr = s->himem; in gus_realizefn()
286 s->emu.gusdatapos = s->emu.himemaddr + 1024 * 1024 + 32; in gus_realizefn()
287 s->emu.opaque = s; in gus_realizefn()
288 s->pic = isa_bus_get_irq(bus, s->emu.gusirq); in gus_realizefn()
290 AUD_set_active_out (s->voice, 1); in gus_realizefn()
305 dc->realize = gus_realizefn; in gus_class_initfn()
306 set_bit(DEVICE_CATEGORY_SOUND, dc->categories); in gus_class_initfn()
307 dc->desc = "Gravis Ultrasound GF1"; in gus_class_initfn()
308 dc->vmsd = &vmstate_gus; in gus_class_initfn()