From patchwork Tue Jan 5 06:27:44 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Isaku Yamahata X-Patchwork-Id: 42173 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 3A1E6B6EE9 for ; Wed, 6 Jan 2010 07:24:17 +1100 (EST) Received: from localhost ([127.0.0.1]:52061 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NSFwi-0005no-Mv for incoming@patchwork.ozlabs.org; Tue, 05 Jan 2010 15:24:04 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NSF7c-0001hU-98 for qemu-devel@nongnu.org; Tue, 05 Jan 2010 14:31:16 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NSF7X-0001bi-Fi for qemu-devel@nongnu.org; Tue, 05 Jan 2010 14:31:15 -0500 Received: from [199.232.76.173] (port=60500 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NSF7X-0001bQ-9R for qemu-devel@nongnu.org; Tue, 05 Jan 2010 14:31:11 -0500 Received: from mx20.gnu.org ([199.232.41.8]:35659) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NSF7W-0004dR-WD for qemu-devel@nongnu.org; Tue, 05 Jan 2010 14:31:11 -0500 Received: from mail.valinux.co.jp ([210.128.90.3]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NS6EL-0007OH-FR for qemu-devel@nongnu.org; Tue, 05 Jan 2010 05:01:38 -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 EC6801828B; Tue, 5 Jan 2010 15:27:43 +0900 (JST) Received: (nullmailer pid 22686 invoked by uid 1000); Tue, 05 Jan 2010 06:27:50 -0000 From: Isaku Yamahata To: qemu-devel@nongnu.org, kraxel@redhat.com Date: Tue, 5 Jan 2010 15:27:44 +0900 Message-Id: <1262672870-22607-22-git-send-email-yamahata@valinux.co.jp> X-Mailer: git-send-email 1.6.5.4 In-Reply-To: <1262672870-22607-1-git-send-email-yamahata@valinux.co.jp> References: <1262672870-22607-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 mx20.gnu.org: GNU/Linux 2.6 (newer, 3) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) Cc: yamahata@valinux.co.jp Subject: [Qemu-devel] [PATCH V11 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 --- changes v10 -> v11: - pass DeviceState of piix4-pm to pc_smbus_init(). Now info qtree shows smbus. --- 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 c24e358..6f26600 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->dev.qdev, &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); - pc_smbus_init(NULL, &s->smb); + 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