From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:49653) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TfvfY-0003Az-Tu for qemu-devel@nongnu.org; Tue, 04 Dec 2012 11:48:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TfvfU-0005q5-9Z for qemu-devel@nongnu.org; Tue, 04 Dec 2012 11:48:28 -0500 Received: from cantor2.suse.de ([195.135.220.15]:33205 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TfvfT-0005px-Vh for qemu-devel@nongnu.org; Tue, 04 Dec 2012 11:48:24 -0500 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Tue, 4 Dec 2012 17:48:12 +0100 Message-Id: <1354639696-22168-3-git-send-email-afaerber@suse.de> In-Reply-To: <1354639696-22168-1-git-send-email-afaerber@suse.de> References: <1354639696-22168-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 2/6] hw/apm.c: Replace register_ioport_* List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Julien Grall , =?UTF-8?q?Andreas=20F=C3=A4rber?= From: Julien Grall Replace all register_ioport_*() with a MemoryRegion. This permits to use the new Memory stuff like listeners. Moreover, the PCI device is added as an argument for apm_init(), so we can register IO inside the PCI IO address space. Signed-off-by: Julien Grall Acked-by: Avi Kivity [AF: Rebased onto hwaddr and q35] Signed-off-by: Andreas F=C3=A4rber --- hw/acpi_piix4.c | 2 +- hw/apm.c | 23 ++++++++++++++++++----- hw/apm.h | 5 ++++- hw/lpc_ich9.c | 2 +- hw/vt82c686.c | 2 +- 5 Dateien ge=C3=A4ndert, 25 Zeilen hinzugef=C3=BCgt(+), 9 Zeilen entfern= t(-) diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c index 519269a..dbddde1 100644 --- a/hw/acpi_piix4.c +++ b/hw/acpi_piix4.c @@ -438,7 +438,7 @@ static int piix4_pm_initfn(PCIDevice *dev) pci_conf[0x3d] =3D 0x01; // interrupt pin 1 =20 /* APM */ - apm_init(&s->apm, apm_ctrl_changed, s); + apm_init(dev, &s->apm, apm_ctrl_changed, s); =20 register_ioport_write(ACPI_DBG_IO_ADDR, 4, 4, acpi_dbg_writel, s); =20 diff --git a/hw/apm.c b/hw/apm.c index 2aead52..e988ad9 100644 --- a/hw/apm.c +++ b/hw/apm.c @@ -22,6 +22,7 @@ =20 #include "apm.h" #include "hw.h" +#include "pci.h" =20 //#define DEBUG =20 @@ -35,7 +36,8 @@ #define APM_CNT_IOPORT 0xb2 #define APM_STS_IOPORT 0xb3 =20 -static void apm_ioport_writeb(void *opaque, uint32_t addr, uint32_t val) +static void apm_ioport_writeb(void *opaque, hwaddr addr, uint64_t val, + unsigned size) { APMState *apm =3D opaque; addr &=3D 1; @@ -51,7 +53,7 @@ static void apm_ioport_writeb(void *opaque, uint32_t ad= dr, uint32_t val) } } =20 -static uint32_t apm_ioport_readb(void *opaque, uint32_t addr) +static uint64_t apm_ioport_readb(void *opaque, hwaddr addr, unsigned siz= e) { APMState *apm =3D opaque; uint32_t val; @@ -78,12 +80,23 @@ const VMStateDescription vmstate_apm =3D { } }; =20 -void apm_init(APMState *apm, apm_ctrl_changed_t callback, void *arg) +static const MemoryRegionOps apm_ops =3D { + .read =3D apm_ioport_readb, + .write =3D apm_ioport_writeb, + .impl =3D { + .min_access_size =3D 1, + .max_access_size =3D 1, + }, +}; + +void apm_init(PCIDevice *dev, APMState *apm, apm_ctrl_changed_t callback= , + void *arg) { apm->callback =3D callback; apm->arg =3D arg; =20 /* ioport 0xb2, 0xb3 */ - register_ioport_write(APM_CNT_IOPORT, 2, 1, apm_ioport_writeb, apm); - register_ioport_read(APM_CNT_IOPORT, 2, 1, apm_ioport_readb, apm); + memory_region_init_io(&apm->io, &apm_ops, apm, "apm-io", 2); + memory_region_add_subregion(pci_address_space_io(dev), APM_CNT_IOPOR= T, + &apm->io); } diff --git a/hw/apm.h b/hw/apm.h index f7c741e..5431b6d 100644 --- a/hw/apm.h +++ b/hw/apm.h @@ -4,6 +4,7 @@ #include #include "qemu-common.h" #include "hw.h" +#include "memory.h" =20 typedef void (*apm_ctrl_changed_t)(uint32_t val, void *arg); =20 @@ -13,9 +14,11 @@ typedef struct APMState { =20 apm_ctrl_changed_t callback; void *arg; + MemoryRegion io; } APMState; =20 -void apm_init(APMState *s, apm_ctrl_changed_t callback, void *arg); +void apm_init(PCIDevice *dev, APMState *s, apm_ctrl_changed_t callback, + void *arg); =20 extern const VMStateDescription vmstate_apm; =20 diff --git a/hw/lpc_ich9.c b/hw/lpc_ich9.c index 2fc83a4..7de5427 100644 --- a/hw/lpc_ich9.c +++ b/hw/lpc_ich9.c @@ -472,7 +472,7 @@ static int ich9_lpc_initfn(PCIDevice *d) lpc->isa_bus =3D isa_bus; =20 ich9_cc_init(lpc); - apm_init(&lpc->apm, ich9_apm_ctrl_changed, lpc); + apm_init(d, &lpc->apm, ich9_apm_ctrl_changed, lpc); return 0; } =20 diff --git a/hw/vt82c686.c b/hw/vt82c686.c index 5d7c00c..7f11dbe 100644 --- a/hw/vt82c686.c +++ b/hw/vt82c686.c @@ -427,7 +427,7 @@ static int vt82c686b_pm_initfn(PCIDevice *dev) register_ioport_write(s->smb_io_base, 0xf, 1, smb_ioport_writeb, &s-= >smb); register_ioport_read(s->smb_io_base, 0xf, 1, smb_ioport_readb, &s->s= mb); =20 - apm_init(&s->apm, NULL, s); + apm_init(dev, &s->apm, NULL, s); =20 acpi_pm_tmr_init(&s->ar, pm_tmr_timer); acpi_pm1_cnt_init(&s->ar); --=20 1.7.10.4