summaryrefslogtreecommitdiff
path: root/hw/audio/gus.c
diff options
context:
space:
mode:
authorBlue Swirl <blauwirbel@gmail.com>2013-06-15 10:53:44 +0000
committerBlue Swirl <blauwirbel@gmail.com>2013-06-15 10:53:44 +0000
commit371a775dc18ece3ff7d77328d1ee28cb2d473706 (patch)
tree328c5e856f25c5f0176d9361b641e8061e093ae2 /hw/audio/gus.c
parent22bfa16ed3d4c9d534dcfe6f2381a654f32296b9 (diff)
parentfef7fbc92496f5f6d2b7395263830bce15ebf410 (diff)
downloadqemu-371a775dc18ece3ff7d77328d1ee28cb2d473706.tar.gz
Merge branch 'realize-isa.v2' of git://github.com/afaerber/qemu-cpu
* 'realize-isa.v2' of git://github.com/afaerber/qemu-cpu: qdev: Drop FROM_QBUS() macro isa: QOM'ify ISADevice isa: QOM'ify ISABus i8259: Convert PICCommonState to use QOM realizefn kvm/i8259: QOM'ify some more i8259: QOM'ify some more i8254: Convert PITCommonState to QOM realizefn kvm/i8254: QOM'ify some more i8254: QOM'ify some more isa: Use realizefn for ISADevice cs4231a: QOM'ify some more gus: QOM'ify some more
Diffstat (limited to 'hw/audio/gus.c')
-rw-r--r--hw/audio/gus.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/hw/audio/gus.c b/hw/audio/gus.c
index a91921c77d..f45ed0b0e9 100644
--- a/hw/audio/gus.c
+++ b/hw/audio/gus.c
@@ -46,6 +46,9 @@
#define IO_WRITE_PROTO(name) \
static void name (void *opaque, uint32_t nport, uint32_t val)
+#define TYPE_GUS "gus"
+#define GUS(obj) OBJECT_CHECK (GUSState, (obj), TYPE_GUS)
+
typedef struct GUSState {
ISADevice dev;
GUSEmuState emu;
@@ -248,9 +251,10 @@ static const MemoryRegionPortio gus_portio_list2[] = {
PORTIO_END_OF_LIST (),
};
-static int gus_initfn (ISADevice *dev)
+static void gus_realizefn (DeviceState *dev, Error **errp)
{
- GUSState *s = DO_UPCAST (GUSState, dev, dev);
+ ISADevice *d = ISA_DEVICE(dev);
+ GUSState *s = GUS (dev);
struct audsettings as;
AUD_register_card ("gus", &s->card);
@@ -271,31 +275,30 @@ static int gus_initfn (ISADevice *dev)
if (!s->voice) {
AUD_remove_card (&s->card);
- return -1;
+ error_setg(errp, "No voice");
+ return;
}
s->shift = 2;
s->samples = AUD_get_buffer_size_out (s->voice) >> s->shift;
s->mixbuf = g_malloc0 (s->samples << s->shift);
- isa_register_portio_list (dev, s->port, gus_portio_list1, s, "gus");
- isa_register_portio_list (dev, (s->port + 0x100) & 0xf00,
+ isa_register_portio_list (d, s->port, gus_portio_list1, s, "gus");
+ isa_register_portio_list (d, (s->port + 0x100) & 0xf00,
gus_portio_list2, s, "gus");
DMA_register_channel (s->emu.gusdma, GUS_read_DMA, s);
s->emu.himemaddr = s->himem;
s->emu.gusdatapos = s->emu.himemaddr + 1024 * 1024 + 32;
s->emu.opaque = s;
- isa_init_irq (dev, &s->pic, s->emu.gusirq);
+ isa_init_irq (d, &s->pic, s->emu.gusirq);
AUD_set_active_out (s->voice, 1);
-
- return 0;
}
static int GUS_init (ISABus *bus)
{
- isa_create_simple (bus, "gus");
+ isa_create_simple (bus, TYPE_GUS);
return 0;
}
@@ -310,15 +313,15 @@ static Property gus_properties[] = {
static void gus_class_initfn (ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS (klass);
- ISADeviceClass *ic = ISA_DEVICE_CLASS (klass);
- ic->init = gus_initfn;
+
+ dc->realize = gus_realizefn;
dc->desc = "Gravis Ultrasound GF1";
dc->vmsd = &vmstate_gus;
dc->props = gus_properties;
}
static const TypeInfo gus_info = {
- .name = "gus",
+ .name = TYPE_GUS,
.parent = TYPE_ISA_DEVICE,
.instance_size = sizeof (GUSState),
.class_init = gus_class_initfn,