From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LXGuB-0004RI-TP for qemu-devel@nongnu.org; Wed, 11 Feb 2009 10:21:39 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LXGuA-0004Qf-QQ for qemu-devel@nongnu.org; Wed, 11 Feb 2009 10:21:39 -0500 Received: from [199.232.76.173] (port=52365 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LXGuA-0004QP-ER for qemu-devel@nongnu.org; Wed, 11 Feb 2009 10:21:38 -0500 Received: from savannah.gnu.org ([199.232.41.3]:40315 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LXGuA-0002Hv-5E for qemu-devel@nongnu.org; Wed, 11 Feb 2009 10:21:38 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1LXGu9-0004tm-6Z for qemu-devel@nongnu.org; Wed, 11 Feb 2009 15:21:37 +0000 Received: from aliguori by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1LXGu8-0004ti-IJ for qemu-devel@nongnu.org; Wed, 11 Feb 2009 15:21:36 +0000 MIME-Version: 1.0 Errors-To: aliguori Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Anthony Liguori Message-Id: Date: Wed, 11 Feb 2009 15:21:36 +0000 Subject: [Qemu-devel] [6607] qemu: initialize hot add system / acpi gpe (Marcelo Tosatti) Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 6607 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6607 Author: aliguori Date: 2009-02-11 15:21:35 +0000 (Wed, 11 Feb 2009) Log Message: ----------- qemu: initialize hot add system / acpi gpe (Marcelo Tosatti) ACPI GPE support, used by PCI (and CPU) hotplug. From: Glauber Costa Signed-off-by: Marcelo Tosatti Signed-off-by: Anthony Liguori Modified Paths: -------------- trunk/hw/acpi.c trunk/hw/pc.c trunk/sysemu.h Modified: trunk/hw/acpi.c =================================================================== --- trunk/hw/acpi.c 2009-02-11 15:21:29 UTC (rev 6606) +++ trunk/hw/acpi.c 2009-02-11 15:21:35 UTC (rev 6607) @@ -561,3 +561,71 @@ } } #endif + +#define GPE_BASE 0xafe0 + +struct gpe_regs { + uint16_t sts; /* status */ + uint16_t en; /* enabled */ +}; + +static struct gpe_regs gpe; + +static uint32_t gpe_readb(void *opaque, uint32_t addr) +{ + uint32_t val = 0; + struct gpe_regs *g = opaque; + switch (addr) { + case GPE_BASE: + val = g->sts & 0xFF; + break; + case GPE_BASE + 1: + val = (g->sts >> 8) & 0xFF; + break; + case GPE_BASE + 2: + val = g->en & 0xFF; + break; + case GPE_BASE + 3: + val = (g->en >> 8) & 0xFF; + break; + default: + break; + } + +#if defined(DEBUG) + printf("gpe read %lx == %lx\n", addr, val); +#endif + return val; +} + +static void gpe_writeb(void *opaque, uint32_t addr, uint32_t val) +{ + struct gpe_regs *g = opaque; + switch (addr) { + case GPE_BASE: + g->sts = (g->sts & ~0xFFFF) | (val & 0xFFFF); + break; + case GPE_BASE + 1: + g->sts = (g->sts & 0xFFFF) | (val << 8); + break; + case GPE_BASE + 2: + g->en = (g->en & ~0xFFFF) | (val & 0xFFFF); + break; + case GPE_BASE + 3: + g->en = (g->en & 0xFFFF) | (val << 8); + break; + default: + break; + } + +#if defined(DEBUG) + printf("gpe write %lx <== %d\n", addr, val); +#endif +} + +void qemu_system_hot_add_init(void) +{ + register_ioport_write(GPE_BASE, 4, 1, gpe_writeb, &gpe); + register_ioport_read(GPE_BASE, 4, 1, gpe_readb, &gpe); + +} Modified: trunk/hw/pc.c =================================================================== --- trunk/hw/pc.c 2009-02-11 15:21:29 UTC (rev 6606) +++ trunk/hw/pc.c 2009-02-11 15:21:35 UTC (rev 6607) @@ -1010,6 +1010,8 @@ pci_nic_init(pci_bus, nd, -1, "ne2k_pci"); } + qemu_system_hot_add_init(); + if (drive_get_max_bus(IF_IDE) >= MAX_IDE_BUS) { fprintf(stderr, "qemu: too many IDE bus\n"); exit(1); Modified: trunk/sysemu.h =================================================================== --- trunk/sysemu.h 2009-02-11 15:21:29 UTC (rev 6606) +++ trunk/sysemu.h 2009-02-11 15:21:35 UTC (rev 6607) @@ -166,6 +166,9 @@ extern int drive_add(const char *file, const char *fmt, ...); extern int drive_init(struct drive_opt *arg, int snapshot, void *machine); +/* acpi */ +void qemu_system_hot_add_init(void); + /* serial ports */ #define MAX_SERIAL_PORTS 4