From patchwork Thu Dec 24 08:09:14 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Isaku Yamahata X-Patchwork-Id: 41746 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 939F0B7BF4 for ; Thu, 24 Dec 2009 19:34:28 +1100 (EST) Received: from localhost ([127.0.0.1]:47342 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NNj9N-0000sr-LI for incoming@patchwork.ozlabs.org; Thu, 24 Dec 2009 03:34:25 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NNilQ-000239-AW for qemu-devel@nongnu.org; Thu, 24 Dec 2009 03:09:40 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NNilE-0001vZ-Fv for qemu-devel@nongnu.org; Thu, 24 Dec 2009 03:09:32 -0500 Received: from [199.232.76.173] (port=42917 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NNilE-0001us-0D for qemu-devel@nongnu.org; Thu, 24 Dec 2009 03:09:28 -0500 Received: from mail.valinux.co.jp ([210.128.90.3]:39715) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NNilD-0004Ub-3B for qemu-devel@nongnu.org; Thu, 24 Dec 2009 03:09:27 -0500 Received: from ps.local.valinux.co.jp (vagw.valinux.co.jp [210.128.90.14]) by mail.valinux.co.jp (Postfix) with SMTP id ABAF0106AB6; Thu, 24 Dec 2009 17:09:21 +0900 (JST) Received: (nullmailer pid 22825 invoked by uid 1000); Thu, 24 Dec 2009 08:09:20 -0000 From: Isaku Yamahata To: qemu-devel@nongnu.org, kraxel@redhat.com Date: Thu, 24 Dec 2009 17:09:14 +0900 Message-Id: <1261642160-22754-22-git-send-email-yamahata@valinux.co.jp> X-Mailer: git-send-email 1.6.5.4 In-Reply-To: <1261642160-22754-1-git-send-email-yamahata@valinux.co.jp> References: <1261642160-22754-1-git-send-email-yamahata@valinux.co.jp> X-Virus-Scanned: clamav-milter 0.95.2 at va-mail.local.valinux.co.jp X-Virus-Status: Clean X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) Cc: yamahata@valinux.co.jp Subject: [Qemu-devel] [PATCH V10 21/27] acpi_piix4: qdevfy. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org qdevfy acpi_piix4. Signed-off-by: Isaku Yamahata --- hw/acpi_piix4.c | 56 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 43 insertions(+), 13 deletions(-) diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c index 2d12da7..0083731 100644 --- a/hw/acpi_piix4.c +++ b/hw/acpi_piix4.c @@ -43,6 +43,7 @@ typedef struct PIIX4PMState { int64_t tmr_overflow_time; PCSMBus smb; + uint32_t smb_io_base; qemu_irq irq; qemu_irq cmos_s3_resume; @@ -317,15 +318,11 @@ static void piix4_powerdown(void *opaque, int irq, int power_failing) #endif } -i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base, - qemu_irq sci_irq, qemu_irq cmos_s3_resume) +static int piix4_pm_initfn(PCIDevice *dev) { - PIIX4PMState *s; + PIIX4PMState *s = DO_UPCAST(PIIX4PMState, dev, dev); uint8_t *pci_conf; - s = (PIIX4PMState *)pci_register_device(bus, - "PM", sizeof(PIIX4PMState), - devfn, NULL, pm_write_config); pm_state = s; pci_conf = s->dev.config; pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL); @@ -358,26 +355,59 @@ i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base, pci_conf[0x67] = (serial_hds[0] != NULL ? 0x08 : 0) | (serial_hds[1] != NULL ? 0x90 : 0); - pci_conf[0x90] = smb_io_base | 1; - pci_conf[0x91] = smb_io_base >> 8; + pci_conf[0x90] = s->smb_io_base | 1; + pci_conf[0x91] = s->smb_io_base >> 8; pci_conf[0xd2] = 0x09; - register_ioport_write(smb_io_base, 64, 1, smb_ioport_writeb, &s->smb); - register_ioport_read(smb_io_base, 64, 1, smb_ioport_readb, &s->smb); + register_ioport_write(s->smb_io_base, 64, 1, smb_ioport_writeb, &s->smb); + register_ioport_read(s->smb_io_base, 64, 1, smb_ioport_readb, &s->smb); s->tmr_timer = qemu_new_timer(vm_clock, pm_tmr_timer, s); qemu_system_powerdown = *qemu_allocate_irqs(piix4_powerdown, s, 1); - vmstate_register(0, &vmstate_acpi, s); - pc_smbus_init(&s->smb); + qemu_register_reset(piix4_reset, s); + + return 0; +} + +i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base, + qemu_irq sci_irq, qemu_irq cmos_s3_resume) +{ + PCIDevice *dev; + PIIX4PMState *s; + + dev = pci_create(bus, devfn, "PIIX4_PM"); + qdev_prop_set_uint32(&dev->qdev, "smb_io_base", smb_io_base); + qdev_init_nofail(&dev->qdev); + + s = DO_UPCAST(PIIX4PMState, dev, dev); s->irq = sci_irq; s->cmos_s3_resume = cmos_s3_resume; - qemu_register_reset(piix4_reset, s); return s->smb.smbus; } +static PCIDeviceInfo piix4_pm_info = { + .qdev.name = "PIIX4_PM", + .qdev.desc = "PM", + .qdev.size = sizeof(PIIX4PMState), + .qdev.vmsd = &vmstate_acpi, + .init = piix4_pm_initfn, + .config_write = pm_write_config, + .qdev.props = (Property[]) { + DEFINE_PROP_UINT32("smb_io_base", PIIX4PMState, smb_io_base, 0), + DEFINE_PROP_END_OF_LIST(), + } +}; + +static void piix4_pm_register(void) +{ + pci_qdev_register(&piix4_pm_info); +} + +device_init(piix4_pm_register); + #define GPE_BASE 0xafe0 #define PCI_BASE 0xae00 #define PCI_EJ_BASE 0xae08