From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:44360) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UPvmI-0002fs-KX for qemu-devel@nongnu.org; Wed, 10 Apr 2013 10:13:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UPvmF-0005hJ-RQ for qemu-devel@nongnu.org; Wed, 10 Apr 2013 10:13:34 -0400 Received: from mx1.redhat.com ([209.132.183.28]:10524) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UPvmF-0005h2-IV for qemu-devel@nongnu.org; Wed, 10 Apr 2013 10:13:31 -0400 Message-ID: <5165737D.7040301@redhat.com> Date: Wed, 10 Apr 2013 16:13:17 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1364914261-4237-1-git-send-email-pbonzini@redhat.com> <1364914261-4237-2-git-send-email-pbonzini@redhat.com> <51644FAB.1090908@suse.de> In-Reply-To: <51644FAB.1090908@suse.de> Content-Type: multipart/mixed; boundary="------------010602090004080502080509" Subject: Re: [Qemu-devel] [RFC PATCH 1/6] adlib: qdev-ify List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?ISO-8859-15?Q?Andreas_F=E4rber?= Cc: av1474@comtv.ru, qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------010602090004080502080509 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by mx1.redhat.com id r3AEDNBY010694 Il 09/04/2013 19:28, Andreas F=E4rber ha scritto: >> -int Adlib_init (ISABus *bus) >> +static int Adlib_initfn (ISADevice *dev) >=20 > Hm, obviously that conflicts with my series converting ISADevices to QO= M > realize that I was hoping to still get into 1.5... Just put this patch in front of your series (I attach an updated version). The patch will just disappear at the next rebase for whoever submits last. Paolo >> { >> - AdlibState *s =3D &glob_adlib; >> + AdlibState *s; >> struct audsettings as; >> =20 >> + if (glob_adlib) { >> + dolog ("Cannot create more than 1 adlib device\n"); >> + return -1; >> + } >> + s =3D DO_UPCAST (AdlibState, dev, dev); >=20 > No new DO_UPCAST() for QOM objects please! >=20 >> + glob_adlib =3D s; >> + >> #ifdef HAS_YMF262 >> - if (YMF262Init (1, 14318180, conf.freq)) { >> - dolog ("YMF262Init %d failed\n", conf.freq); >> + if (YMF262Init (1, 14318180, s->freq)) { >> + dolog ("YMF262Init %d failed\n", s->freq); >> return -1; >> } >> else { >> @@ -290,9 +301,9 @@ int Adlib_init (ISABus *bus) >> s->enabled =3D 1; >> } >> #else >> - s->opl =3D OPLCreate (OPL_TYPE_YM3812, 3579545, conf.freq); >> + s->opl =3D OPLCreate (OPL_TYPE_YM3812, 3579545, s->freq); >> if (!s->opl) { >> - dolog ("OPLCreate %d failed\n", conf.freq); >> + dolog ("OPLCreate %d failed\n", s->freq); >> return -1; >> } >> else { >> @@ -301,7 +312,7 @@ int Adlib_init (ISABus *bus) >> } >> #endif >> =20 >> - as.freq =3D conf.freq; >> + as.freq =3D s->freq; >> as.nchannels =3D SHIFT; >> as.fmt =3D AUD_FMT_S16; >> as.endianness =3D AUDIO_HOST_ENDIANNESS; >> @@ -327,11 +338,46 @@ int Adlib_init (ISABus *bus) >> register_ioport_read (0x388, 4, 1, adlib_read, s); >> register_ioport_write (0x388, 4, 1, adlib_write, s); >> =20 >> - register_ioport_read (conf.port, 4, 1, adlib_read, s); >> - register_ioport_write (conf.port, 4, 1, adlib_write, s); >> + register_ioport_read (s->port, 4, 1, adlib_read, s); >> + register_ioport_write (s->port, 4, 1, adlib_write, s); >> =20 >> - register_ioport_read (conf.port + 8, 2, 1, adlib_read, s); >> - register_ioport_write (conf.port + 8, 2, 1, adlib_write, s); >> + register_ioport_read (s->port + 8, 2, 1, adlib_read, s); >> + register_ioport_write (s->port + 8, 2, 1, adlib_write, s); >> =20 >> return 0; >> } >> + >> +static Property adlib_properties[] =3D { >> + DEFINE_PROP_HEX32 ("iobase", AdlibState, port, 0x220), >> + DEFINE_PROP_UINT32 ("freq", AdlibState, freq, 44100), >> + DEFINE_PROP_END_OF_LIST (), >> +}; >> + >> +static void adlib_class_initfn (ObjectClass *klass, void *data) >> +{ >> + DeviceClass *dc =3D DEVICE_CLASS (klass); >> + ISADeviceClass *ic =3D ISA_DEVICE_CLASS (klass); >> + ic->init =3D Adlib_initfn; >> + dc->desc =3D ADLIB_DESC; >> + dc->props =3D adlib_properties; >> +} >> + >> +static TypeInfo adlib_info =3D { >=20 > static const please. >=20 >> + .name =3D "adlib", >> + .parent =3D TYPE_ISA_DEVICE, >> + .instance_size =3D sizeof (AdlibState), >> + .class_init =3D adlib_class_initfn, >> +}; >> + >> +int Adlib_init (ISABus *bus) >> +{ >> + isa_create_simple (bus, "adlib"); >> + return 0; >> +} >> + >> +static void adlib_register_types (void) >> +{ >> + type_register_static (&adlib_info); >> +} >> + >> +type_init (adlib_register_types) >=20 > Andreas >=20 --------------010602090004080502080509 Content-Type: text/x-patch; name="0001-adlib-qdev-ify.patch" Content-Disposition: attachment; filename="0001-adlib-qdev-ify.patch" Content-Transfer-Encoding: 7bit >>From 2e03021695ed22fb02906eca8fc98c29a6ad50e6 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 2 Apr 2013 15:14:55 +0200 Subject: [PATCH] adlib: qdev-ify Signed-off-by: Paolo Bonzini --- hw/audio/adlib.c | 83 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 66 insertions(+), 17 deletions(-) diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c index 4a58e6e..fb41f9d 100644 --- a/hw/audio/adlib.c +++ b/hw/audio/adlib.c @@ -31,6 +31,12 @@ #define ADLIB_KILL_TIMERS 1 +#ifdef HAS_YMF262 +#define ADLIB_DESC "Yamaha YMF262 (OPL3)" +#else +#define ADLIB_DESC "Yamaha YM3812 (OPL2)" +#endif + #ifdef DEBUG #include "qemu/timer.h" #endif @@ -56,13 +62,15 @@ void YMF262UpdateOneQEMU (int which, INT16 *dst, int length); #define IO_WRITE_PROTO(name) \ void name (void *opaque, uint32_t nport, uint32_t val) -static struct { - int port; - int freq; -} conf = {0x220, 44100}; +#define TYPE_ADLIB "adlib" +#define ADLIB(obj) OBJECT_CHECK(AdlibState, (obj), TYPE_ADLIB) typedef struct { + ISADevice parent_obj; + QEMUSoundCard card; + uint32_t freq; + uint32_t port; int ticking[2]; int enabled; int active; @@ -80,7 +88,7 @@ typedef struct { #endif } AdlibState; -static AdlibState glob_adlib; +static AdlibState *glob_adlib; static void adlib_stop_opl_timer (AdlibState *s, size_t n) { @@ -150,7 +158,7 @@ static IO_READ_PROTO (adlib_read) static void timer_handler (int c, double interval_Sec) { - AdlibState *s = &glob_adlib; + AdlibState *s = glob_adlib; unsigned n = c & 1; #ifdef DEBUG double interval; @@ -275,14 +283,20 @@ static void Adlib_fini (AdlibState *s) AUD_remove_card (&s->card); } -int Adlib_init (ISABus *bus) +static int Adlib_initfn (ISADevice *dev) { - AdlibState *s = &glob_adlib; + AdlibState *s = ADLIB(dev); struct audsettings as; + if (glob_adlib) { + dolog ("Cannot create more than 1 adlib device\n"); + return -1; + } + glob_adlib = s; + #ifdef HAS_YMF262 - if (YMF262Init (1, 14318180, conf.freq)) { - dolog ("YMF262Init %d failed\n", conf.freq); + if (YMF262Init (1, 14318180, s->freq)) { + dolog ("YMF262Init %d failed\n", s->freq); return -1; } else { @@ -290,9 +304,9 @@ int Adlib_init (ISABus *bus) s->enabled = 1; } #else - s->opl = OPLCreate (OPL_TYPE_YM3812, 3579545, conf.freq); + s->opl = OPLCreate (OPL_TYPE_YM3812, 3579545, s->freq); if (!s->opl) { - dolog ("OPLCreate %d failed\n", conf.freq); + dolog ("OPLCreate %d failed\n", s->freq); return -1; } else { @@ -301,7 +315,7 @@ int Adlib_init (ISABus *bus) } #endif - as.freq = conf.freq; + as.freq = s->freq; as.nchannels = SHIFT; as.fmt = AUD_FMT_S16; as.endianness = AUDIO_HOST_ENDIANNESS; @@ -327,11 +341,46 @@ int Adlib_init (ISABus *bus) register_ioport_read (0x388, 4, 1, adlib_read, s); register_ioport_write (0x388, 4, 1, adlib_write, s); - register_ioport_read (conf.port, 4, 1, adlib_read, s); - register_ioport_write (conf.port, 4, 1, adlib_write, s); + register_ioport_read (s->port, 4, 1, adlib_read, s); + register_ioport_write (s->port, 4, 1, adlib_write, s); - register_ioport_read (conf.port + 8, 2, 1, adlib_read, s); - register_ioport_write (conf.port + 8, 2, 1, adlib_write, s); + register_ioport_read (s->port + 8, 2, 1, adlib_read, s); + register_ioport_write (s->port + 8, 2, 1, adlib_write, s); return 0; } + +static Property adlib_properties[] = { + DEFINE_PROP_HEX32 ("iobase", AdlibState, port, 0x220), + DEFINE_PROP_UINT32 ("freq", AdlibState, freq, 44100), + DEFINE_PROP_END_OF_LIST (), +}; + +static void adlib_class_initfn (ObjectClass *klass, void *data) +{ + DeviceClass *dc = DEVICE_CLASS (klass); + ISADeviceClass *ic = ISA_DEVICE_CLASS (klass); + ic->init = Adlib_initfn; + dc->desc = ADLIB_DESC; + dc->props = adlib_properties; +} + +static const TypeInfo adlib_info = { + .name = TYPE_ADLIB, + .parent = TYPE_ISA_DEVICE, + .instance_size = sizeof (AdlibState), + .class_init = adlib_class_initfn, +}; + +int Adlib_init (ISABus *bus) +{ + isa_create_simple (bus, TYPE_ADLIB); + return 0; +} + +static void adlib_register_types (void) +{ + type_register_static (&adlib_info); +} + +type_init (adlib_register_types) -- 1.8.1.4 --------------010602090004080502080509--