Re: [Xen-devel] [PATCH 30/32] hw/pci-host/piix: Extract PIIX3 functions to hw/isa/piix3.c
On Tuesday, October 15, 2019, Philippe Mathieu-Daudé wrote: > From: Philippe Mathieu-Daudé > > Move all the PIIX3 functions to a new file: hw/isa/piix3.c. > > Signed-off-by: Philippe Mathieu-Daudé > --- > Checkpatch warning: > > ERROR: spaces required around that '*' (ctx:VxV) > #312: FILE: hw/isa/piix3.c:248: > +.subsections = (const VMStateDescription*[]) { > ^ > --- > MAINTAINERS | 1 + > hw/i386/Kconfig | 1 + > hw/isa/Kconfig| 4 + > hw/isa/Makefile.objs | 1 + > hw/isa/piix3.c| 399 + > hw/pci-host/Kconfig | 1 - > hw/pci-host/piix.c| 402 -- > include/hw/southbridge/piix.h | 36 +++ > 8 files changed, 442 insertions(+), 403 deletions(-) > create mode 100644 hw/isa/piix3.c > > Reviewed-by: Aleksandar Markovic > diff --git a/MAINTAINERS b/MAINTAINERS > index adf059a164..4845f47d93 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -1231,6 +1231,7 @@ F: hw/pci-host/pam.c > F: include/hw/pci-host/i440fx.h > F: include/hw/pci-host/q35.h > F: include/hw/pci-host/pam.h > +F: hw/isa/piix3.c > F: hw/isa/lpc_ich9.c > F: hw/i2c/smbus_ich9.c > F: hw/acpi/piix4.c > diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig > index c5c9d4900e..589d75e26a 100644 > --- a/hw/i386/Kconfig > +++ b/hw/i386/Kconfig > @@ -61,6 +61,7 @@ config I440FX > select PC_ACPI > select ACPI_SMBUS > select PCI_PIIX > +select PIIX3 > select IDE_PIIX > select DIMM > select SMBIOS > diff --git a/hw/isa/Kconfig b/hw/isa/Kconfig > index 98a289957e..8a38813cc1 100644 > --- a/hw/isa/Kconfig > +++ b/hw/isa/Kconfig > @@ -29,6 +29,10 @@ config PC87312 > select FDC > select IDE_ISA > > +config PIIX3 > +bool > +select ISA_BUS > + > config PIIX4 > bool > # For historical reasons, SuperIO devices are created in the board > diff --git a/hw/isa/Makefile.objs b/hw/isa/Makefile.objs > index ff97485504..8e73960a75 100644 > --- a/hw/isa/Makefile.objs > +++ b/hw/isa/Makefile.objs > @@ -3,6 +3,7 @@ common-obj-$(CONFIG_ISA_SUPERIO) += isa-superio.o > common-obj-$(CONFIG_APM) += apm.o > common-obj-$(CONFIG_I82378) += i82378.o > common-obj-$(CONFIG_PC87312) += pc87312.o > +common-obj-$(CONFIG_PIIX3) += piix3.o > common-obj-$(CONFIG_PIIX4) += piix4.o > common-obj-$(CONFIG_VT82C686) += vt82c686.o > common-obj-$(CONFIG_SMC37C669) += smc37c669-superio.o > diff --git a/hw/isa/piix3.c b/hw/isa/piix3.c > new file mode 100644 > index 00..05146447ef > --- /dev/null > +++ b/hw/isa/piix3.c > @@ -0,0 +1,399 @@ > +/* > + * QEMU PIIX PCI ISA 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 "qemu/osdep.h" > +#include "qemu/range.h" > +#include "hw/southbridge/piix.h" > +#include "hw/irq.h" > +#include "hw/isa/isa.h" > +#include "hw/xen/xen.h" > +#include "sysemu/sysemu.h" > +#include "sysemu/reset.h" > +#include "sysemu/runstate.h" > +#include "migration/vmstate.h" > + > +#define XEN_PIIX_NUM_PIRQS 128ULL > + > +#define TYPE_PIIX3_PCI_DEVICE "pci-piix3" > +#define PIIX3_PCI_DEVICE(obj) \ > +OBJECT_CHECK(PIIX3State, (obj), TYPE_PIIX3_PCI_DEVICE) > + > +#define TYPE_PIIX3_DEVICE "PIIX3" > +#define TYPE_PIIX3_XEN_DEVICE "PIIX3-xen" > + > +static void piix3_set_irq_pic(PIIX3State *piix3, int pic_irq) > +{ > +qemu_set_irq(piix3->pic[pic_irq], > + !!(piix3->pic_levels & > +(((1ULL << PIIX_NUM_PIRQS) - 1) << > + (pic_irq * PIIX_NUM_PIRQS; > +} > + > +static void piix3_set_irq_level_internal(PIIX3State *piix3, int pirq, > int level) > +{ > +int pic_irq; > +uint64_t mask; > + > +pic_irq = piix3->dev.config[PIIX_PIRQCA + pirq]; > +
[Xen-devel] [PATCH 30/32] hw/pci-host/piix: Extract PIIX3 functions to hw/isa/piix3.c
From: Philippe Mathieu-Daudé Move all the PIIX3 functions to a new file: hw/isa/piix3.c. Signed-off-by: Philippe Mathieu-Daudé --- Checkpatch warning: ERROR: spaces required around that '*' (ctx:VxV) #312: FILE: hw/isa/piix3.c:248: +.subsections = (const VMStateDescription*[]) { ^ --- MAINTAINERS | 1 + hw/i386/Kconfig | 1 + hw/isa/Kconfig| 4 + hw/isa/Makefile.objs | 1 + hw/isa/piix3.c| 399 + hw/pci-host/Kconfig | 1 - hw/pci-host/piix.c| 402 -- include/hw/southbridge/piix.h | 36 +++ 8 files changed, 442 insertions(+), 403 deletions(-) create mode 100644 hw/isa/piix3.c diff --git a/MAINTAINERS b/MAINTAINERS index adf059a164..4845f47d93 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1231,6 +1231,7 @@ F: hw/pci-host/pam.c F: include/hw/pci-host/i440fx.h F: include/hw/pci-host/q35.h F: include/hw/pci-host/pam.h +F: hw/isa/piix3.c F: hw/isa/lpc_ich9.c F: hw/i2c/smbus_ich9.c F: hw/acpi/piix4.c diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig index c5c9d4900e..589d75e26a 100644 --- a/hw/i386/Kconfig +++ b/hw/i386/Kconfig @@ -61,6 +61,7 @@ config I440FX select PC_ACPI select ACPI_SMBUS select PCI_PIIX +select PIIX3 select IDE_PIIX select DIMM select SMBIOS diff --git a/hw/isa/Kconfig b/hw/isa/Kconfig index 98a289957e..8a38813cc1 100644 --- a/hw/isa/Kconfig +++ b/hw/isa/Kconfig @@ -29,6 +29,10 @@ config PC87312 select FDC select IDE_ISA +config PIIX3 +bool +select ISA_BUS + config PIIX4 bool # For historical reasons, SuperIO devices are created in the board diff --git a/hw/isa/Makefile.objs b/hw/isa/Makefile.objs index ff97485504..8e73960a75 100644 --- a/hw/isa/Makefile.objs +++ b/hw/isa/Makefile.objs @@ -3,6 +3,7 @@ common-obj-$(CONFIG_ISA_SUPERIO) += isa-superio.o common-obj-$(CONFIG_APM) += apm.o common-obj-$(CONFIG_I82378) += i82378.o common-obj-$(CONFIG_PC87312) += pc87312.o +common-obj-$(CONFIG_PIIX3) += piix3.o common-obj-$(CONFIG_PIIX4) += piix4.o common-obj-$(CONFIG_VT82C686) += vt82c686.o common-obj-$(CONFIG_SMC37C669) += smc37c669-superio.o diff --git a/hw/isa/piix3.c b/hw/isa/piix3.c new file mode 100644 index 00..05146447ef --- /dev/null +++ b/hw/isa/piix3.c @@ -0,0 +1,399 @@ +/* + * QEMU PIIX PCI ISA 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 "qemu/osdep.h" +#include "qemu/range.h" +#include "hw/southbridge/piix.h" +#include "hw/irq.h" +#include "hw/isa/isa.h" +#include "hw/xen/xen.h" +#include "sysemu/sysemu.h" +#include "sysemu/reset.h" +#include "sysemu/runstate.h" +#include "migration/vmstate.h" + +#define XEN_PIIX_NUM_PIRQS 128ULL + +#define TYPE_PIIX3_PCI_DEVICE "pci-piix3" +#define PIIX3_PCI_DEVICE(obj) \ +OBJECT_CHECK(PIIX3State, (obj), TYPE_PIIX3_PCI_DEVICE) + +#define TYPE_PIIX3_DEVICE "PIIX3" +#define TYPE_PIIX3_XEN_DEVICE "PIIX3-xen" + +static void piix3_set_irq_pic(PIIX3State *piix3, int pic_irq) +{ +qemu_set_irq(piix3->pic[pic_irq], + !!(piix3->pic_levels & +(((1ULL << PIIX_NUM_PIRQS) - 1) << + (pic_irq * PIIX_NUM_PIRQS; +} + +static void piix3_set_irq_level_internal(PIIX3State *piix3, int pirq, int level) +{ +int pic_irq; +uint64_t mask; + +pic_irq = piix3->dev.config[PIIX_PIRQCA + pirq]; +if (pic_irq >= PIIX_NUM_PIC_IRQS) { +return; +} + +mask = 1ULL << ((pic_irq * PIIX_NUM_PIRQS) + pirq); +piix3->pic_levels &= ~mask; +piix3->pic_levels |= mask * !!level; +} + +static void piix3_set_irq_level(PIIX3State *piix3, int pirq, int level) +{ +int pic_irq; + +pic_irq = piix3->dev.config[PIIX_PIRQCA + pirq]; +if (pic_irq >= PIIX_NUM_PIC_IRQS) { +