Revision d537cf6c hw/sb16.c
b/hw/sb16.c | ||
---|---|---|
54 | 54 |
|
55 | 55 |
typedef struct SB16State { |
56 | 56 |
QEMUSoundCard card; |
57 |
qemu_irq *pic; |
|
57 | 58 |
int irq; |
58 | 59 |
int dma; |
59 | 60 |
int hdma; |
... | ... | |
187 | 188 |
{ |
188 | 189 |
SB16State *s = opaque; |
189 | 190 |
s->can_write = 1; |
190 |
pic_set_irq (s->irq, 1);
|
|
191 |
qemu_irq_raise (s->pic[s->irq]);
|
|
191 | 192 |
} |
192 | 193 |
|
193 | 194 |
#define DMA8_AUTO 1 |
... | ... | |
595 | 596 |
case 0xf3: |
596 | 597 |
dsp_out_data (s, 0xaa); |
597 | 598 |
s->mixer_regs[0x82] |= (cmd == 0xf2) ? 1 : 2; |
598 |
pic_set_irq (s->irq, 1);
|
|
599 |
qemu_irq_raise (s->pic[s->irq]);
|
|
599 | 600 |
break; |
600 | 601 |
|
601 | 602 |
case 0xf9: |
... | ... | |
763 | 764 |
bytes = samples << s->fmt_stereo << (s->fmt_bits == 16); |
764 | 765 |
ticks = (bytes * ticks_per_sec) / freq; |
765 | 766 |
if (ticks < ticks_per_sec / 1024) { |
766 |
pic_set_irq (s->irq, 1);
|
|
767 |
qemu_irq_raise (s->pic[s->irq]);
|
|
767 | 768 |
} |
768 | 769 |
else { |
769 | 770 |
if (s->aux_ts) { |
... | ... | |
855 | 856 |
|
856 | 857 |
static void reset (SB16State *s) |
857 | 858 |
{ |
858 |
pic_set_irq (s->irq, 0);
|
|
859 |
qemu_irq_lower (s->pic[s->irq]);
|
|
859 | 860 |
if (s->dma_auto) { |
860 |
pic_set_irq (s->irq, 1);
|
|
861 |
pic_set_irq (s->irq, 0);
|
|
861 |
qemu_irq_raise (s->pic[s->irq]);
|
|
862 |
qemu_irq_lower (s->pic[s->irq]);
|
|
862 | 863 |
} |
863 | 864 |
|
864 | 865 |
s->mixer_regs[0x82] = 0; |
... | ... | |
894 | 895 |
if (s->v2x6 == 1) { |
895 | 896 |
if (0 && s->highspeed) { |
896 | 897 |
s->highspeed = 0; |
897 |
pic_set_irq (s->irq, 0);
|
|
898 |
qemu_irq_lower (s->pic[s->irq]);
|
|
898 | 899 |
control (s, 0); |
899 | 900 |
} |
900 | 901 |
else { |
... | ... | |
1005 | 1006 |
if (s->mixer_regs[0x82] & 1) { |
1006 | 1007 |
ack = 1; |
1007 | 1008 |
s->mixer_regs[0x82] &= 1; |
1008 |
pic_set_irq (s->irq, 0);
|
|
1009 |
qemu_irq_lower (s->pic[s->irq]);
|
|
1009 | 1010 |
} |
1010 | 1011 |
break; |
1011 | 1012 |
|
... | ... | |
1014 | 1015 |
if (s->mixer_regs[0x82] & 2) { |
1015 | 1016 |
ack = 1; |
1016 | 1017 |
s->mixer_regs[0x82] &= 2; |
1017 |
pic_set_irq (s->irq, 0);
|
|
1018 |
qemu_irq_lower (s->pic[s->irq]);
|
|
1018 | 1019 |
} |
1019 | 1020 |
break; |
1020 | 1021 |
|
... | ... | |
1222 | 1223 |
|
1223 | 1224 |
if (s->left_till_irq <= 0) { |
1224 | 1225 |
s->mixer_regs[0x82] |= (nchan & 4) ? 2 : 1; |
1225 |
pic_set_irq (s->irq, 1);
|
|
1226 |
qemu_irq_raise (s->pic[s->irq]);
|
|
1226 | 1227 |
if (0 == s->dma_auto) { |
1227 | 1228 |
control (s, 0); |
1228 | 1229 |
speaker (s, 0); |
... | ... | |
1389 | 1390 |
return 0; |
1390 | 1391 |
} |
1391 | 1392 |
|
1392 |
int SB16_init (AudioState *audio) |
|
1393 |
int SB16_init (AudioState *audio, qemu_irq *pic)
|
|
1393 | 1394 |
{ |
1394 | 1395 |
SB16State *s; |
1395 | 1396 |
int i; |
... | ... | |
1409 | 1410 |
} |
1410 | 1411 |
|
1411 | 1412 |
s->cmd = -1; |
1413 |
s->pic = pic; |
|
1412 | 1414 |
s->irq = conf.irq; |
1413 | 1415 |
s->dma = conf.dma; |
1414 | 1416 |
s->hdma = conf.hdma; |
Also available in: Unified diff