From patchwork Fri Aug 21 17:36:16 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juan Quintela X-Patchwork-Id: 31842 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 bilbo.ozlabs.org (Postfix) with ESMTPS id 978BCB7099 for ; Sat, 22 Aug 2009 03:45:22 +1000 (EST) Received: from localhost ([127.0.0.1]:39793 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MeYAx-0002RG-Ej for incoming@patchwork.ozlabs.org; Fri, 21 Aug 2009 13:45:19 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MeY4b-0006DS-GF for qemu-devel@nongnu.org; Fri, 21 Aug 2009 13:38:45 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MeY4V-00060w-4U for qemu-devel@nongnu.org; Fri, 21 Aug 2009 13:38:43 -0400 Received: from [199.232.76.173] (port=56025 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MeY4U-00060T-Sv for qemu-devel@nongnu.org; Fri, 21 Aug 2009 13:38:38 -0400 Received: from mx1.redhat.com ([209.132.183.28]:17546) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MeY4U-0004cY-8x for qemu-devel@nongnu.org; Fri, 21 Aug 2009 13:38:38 -0400 Received: from int-mx04.intmail.prod.int.phx2.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.17]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n7LHcboE029046 for ; Fri, 21 Aug 2009 13:38:37 -0400 Received: from localhost.localdomain (vpn2-8-162.ams2.redhat.com [10.36.8.162]) by int-mx04.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n7LHcXjX021006; Fri, 21 Aug 2009 13:38:36 -0400 From: Juan Quintela To: qemu-devel@nongnu.org Date: Fri, 21 Aug 2009 19:36:16 +0200 Message-Id: <41fbd1811b43945047a4680c51cb9a3be42f4742.1250875331.git.quintela@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.67 on 10.5.11.17 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Subject: [Qemu-devel] [PATCH 2/5] Split piix4 support from piix_pci.c 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 Now mips_malta uses piix4 and pc's use piix_pci definitions Signed-off-by: Juan Quintela --- Makefile.target | 2 +- hw/pc.h | 1 + hw/piix4.c | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ hw/piix_pci.c | 71 ------------------------------- 4 files changed, 129 insertions(+), 72 deletions(-) create mode 100644 hw/piix4.c diff --git a/Makefile.target b/Makefile.target index 066af8d..4a5d917 100644 --- a/Makefile.target +++ b/Makefile.target @@ -217,7 +217,7 @@ obj-mips-y = mips_r4k.o mips_jazz.o mips_malta.o mips_mipssim.o obj-mips-y += mips_timer.o mips_int.o dma.o vga.o serial.o i8254.o i8259.o rc4030.o obj-mips-y += g364fb.o jazz_led.o dp8393x.o obj-mips-y += ide.o gt64xxx.o pckbd.o fdc.o mc146818rtc.o usb-uhci.o acpi.o ds1225y.o -obj-mips-y += piix_pci.o parallel.o cirrus_vga.o isa-bus.o pcspk.o $(sound-obj-y) +obj-mips-y += piix4.o parallel.o cirrus_vga.o isa-bus.o pcspk.o $(sound-obj-y) obj-mips-y += mipsnet.o obj-mips-y += pflash_cfi01.o obj-mips-y += vmware_vga.o diff --git a/hw/pc.h b/hw/pc.h index 58d569b..bfa52d6 100644 --- a/hw/pc.h +++ b/hw/pc.h @@ -124,6 +124,7 @@ void i440fx_set_smm(PCIDevice *d, int val); int piix3_init(PCIBus *bus, int devfn); void i440fx_init_memory_mappings(PCIDevice *d); +/* piix4.c */ extern PCIDevice *piix4_dev; int piix4_init(PCIBus *bus, int devfn); diff --git a/hw/piix4.c b/hw/piix4.c new file mode 100644 index 0000000..c489f13 --- /dev/null +++ b/hw/piix4.c @@ -0,0 +1,127 @@ +/* + * QEMU PIIX4 PCI Bridge Emulation + * + * Copyright (c) 2006 Fabrice Bellard + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "hw.h" +#include "pc.h" +#include "pci.h" +#include "isa.h" +#include "sysbus.h" + +PCIDevice *piix4_dev; + +static void piix4_reset(void *opaque) +{ + PCIDevice *d = opaque; + uint8_t *pci_conf = d->config; + + pci_conf[0x04] = 0x07; // master, memory and I/O + pci_conf[0x05] = 0x00; + pci_conf[0x06] = 0x00; + pci_conf[0x07] = 0x02; // PCI_status_devsel_medium + pci_conf[0x4c] = 0x4d; + pci_conf[0x4e] = 0x03; + pci_conf[0x4f] = 0x00; + pci_conf[0x60] = 0x0a; // PCI A -> IRQ 10 + pci_conf[0x61] = 0x0a; // PCI B -> IRQ 10 + pci_conf[0x62] = 0x0b; // PCI C -> IRQ 11 + pci_conf[0x63] = 0x0b; // PCI D -> IRQ 11 + pci_conf[0x69] = 0x02; + pci_conf[0x70] = 0x80; + pci_conf[0x76] = 0x0c; + pci_conf[0x77] = 0x0c; + pci_conf[0x78] = 0x02; + pci_conf[0x79] = 0x00; + pci_conf[0x80] = 0x00; + pci_conf[0x82] = 0x00; + pci_conf[0xa0] = 0x08; + pci_conf[0xa2] = 0x00; + pci_conf[0xa3] = 0x00; + pci_conf[0xa4] = 0x00; + pci_conf[0xa5] = 0x00; + pci_conf[0xa6] = 0x00; + pci_conf[0xa7] = 0x00; + pci_conf[0xa8] = 0x0f; + pci_conf[0xaa] = 0x00; + pci_conf[0xab] = 0x00; + pci_conf[0xac] = 0x00; + pci_conf[0xae] = 0x00; +} + +static void piix_save(QEMUFile* f, void *opaque) +{ + PCIDevice *d = opaque; + pci_device_save(d, f); +} + +static int piix_load(QEMUFile* f, void *opaque, int version_id) +{ + PCIDevice *d = opaque; + if (version_id != 2) + return -EINVAL; + return pci_device_load(d, f); +} + +static void piix4_initfn(PCIDevice *d) +{ + uint8_t *pci_conf; + + register_savevm("PIIX4", 0, 2, piix_save, piix_load, d); + + pci_conf = d->config; + pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL); + pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371AB_0); // 82371AB/EB/MB PIIX4 PCI-to-ISA bridge + pci_config_set_class(pci_conf, PCI_CLASS_BRIDGE_ISA); + pci_conf[PCI_HEADER_TYPE] = + PCI_HEADER_TYPE_NORMAL | PCI_HEADER_TYPE_MULTI_FUNCTION; // header_type = PCI_multifunction, generic + + piix4_dev = d; + piix4_reset(d); + qemu_register_reset(piix4_reset, d); +} + +int piix4_init(PCIBus *bus, int devfn) +{ + PCIDevice *d; + + d = pci_create_simple(bus, devfn, "PIIX4"); + return d->devfn; +} + +static PCIDeviceInfo piix4_info[] = { + { + .qdev.name = "PIIX4", + .qdev.desc = "ISA bridge", + .qdev.size = sizeof(PCIDevice), + .qdev.no_user = 1, + .init = piix4_initfn, + },{ + /* end of list */ + } +}; + +static void piix4_register(void) +{ + pci_qdev_register_many(piix4_info); +} +device_init(piix4_register); diff --git a/hw/piix_pci.c b/hw/piix_pci.c index 7cf1d99..86db2fc 100644 --- a/hw/piix_pci.c +++ b/hw/piix_pci.c @@ -222,7 +222,6 @@ PCIBus *i440fx_init(PCIDevice **pi440fx_state, qemu_irq *pic) /* PIIX3 PCI to ISA bridge */ static PCIDevice *piix3_dev; -PCIDevice *piix4_dev; static void piix3_set_irq(qemu_irq *pic, int irq_num, int level) { @@ -285,44 +284,6 @@ static void piix3_reset(void *opaque) memset(pci_irq_levels, 0, sizeof(pci_irq_levels)); } -static void piix4_reset(void *opaque) -{ - PCIDevice *d = opaque; - uint8_t *pci_conf = d->config; - - pci_conf[0x04] = 0x07; // master, memory and I/O - pci_conf[0x05] = 0x00; - pci_conf[0x06] = 0x00; - pci_conf[0x07] = 0x02; // PCI_status_devsel_medium - pci_conf[0x4c] = 0x4d; - pci_conf[0x4e] = 0x03; - pci_conf[0x4f] = 0x00; - pci_conf[0x60] = 0x0a; // PCI A -> IRQ 10 - pci_conf[0x61] = 0x0a; // PCI B -> IRQ 10 - pci_conf[0x62] = 0x0b; // PCI C -> IRQ 11 - pci_conf[0x63] = 0x0b; // PCI D -> IRQ 11 - pci_conf[0x69] = 0x02; - pci_conf[0x70] = 0x80; - pci_conf[0x76] = 0x0c; - pci_conf[0x77] = 0x0c; - pci_conf[0x78] = 0x02; - pci_conf[0x79] = 0x00; - pci_conf[0x80] = 0x00; - pci_conf[0x82] = 0x00; - pci_conf[0xa0] = 0x08; - pci_conf[0xa2] = 0x00; - pci_conf[0xa3] = 0x00; - pci_conf[0xa4] = 0x00; - pci_conf[0xa5] = 0x00; - pci_conf[0xa6] = 0x00; - pci_conf[0xa7] = 0x00; - pci_conf[0xa8] = 0x0f; - pci_conf[0xaa] = 0x00; - pci_conf[0xab] = 0x00; - pci_conf[0xac] = 0x00; - pci_conf[0xae] = 0x00; -} - static void piix_save(QEMUFile* f, void *opaque) { PCIDevice *d = opaque; @@ -356,24 +317,6 @@ static void piix3_initfn(PCIDevice *d) qemu_register_reset(piix3_reset, d); } -static void piix4_initfn(PCIDevice *d) -{ - uint8_t *pci_conf; - - register_savevm("PIIX4", 0, 2, piix_save, piix_load, d); - - pci_conf = d->config; - pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL); - pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371AB_0); // 82371AB/EB/MB PIIX4 PCI-to-ISA bridge - pci_config_set_class(pci_conf, PCI_CLASS_BRIDGE_ISA); - pci_conf[PCI_HEADER_TYPE] = - PCI_HEADER_TYPE_NORMAL | PCI_HEADER_TYPE_MULTI_FUNCTION; // header_type = PCI_multifunction, generic - - piix4_dev = d; - piix4_reset(d); - qemu_register_reset(piix4_reset, d); -} - int piix3_init(PCIBus *bus, int devfn) { PCIDevice *d; @@ -382,14 +325,6 @@ int piix3_init(PCIBus *bus, int devfn) return d->devfn; } -int piix4_init(PCIBus *bus, int devfn) -{ - PCIDevice *d; - - d = pci_create_simple(bus, devfn, "PIIX4"); - return d->devfn; -} - static PCIDeviceInfo i440fx_info[] = { { .qdev.name = "i440FX", @@ -405,12 +340,6 @@ static PCIDeviceInfo i440fx_info[] = { .qdev.no_user = 1, .init = piix3_initfn, },{ - .qdev.name = "PIIX4", - .qdev.desc = "ISA bridge", - .qdev.size = sizeof(PCIDevice), - .qdev.no_user = 1, - .init = piix4_initfn, - },{ /* end of list */ } };