From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:41980) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S8uo1-0002cs-N8 for qemu-devel@nongnu.org; Sat, 17 Mar 2012 10:40:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S8unz-00041k-IM for qemu-devel@nongnu.org; Sat, 17 Mar 2012 10:40:29 -0400 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 17 Mar 2012 15:39:46 +0100 Message-Id: <1331995186-18507-7-git-send-email-hpoussin@reactos.org> In-Reply-To: <1331995186-18507-1-git-send-email-hpoussin@reactos.org> References: <1331995186-18507-1-git-send-email-hpoussin@reactos.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 6/6] prep: use pc87312 Super I/O chip instead of collection of random ISA devices List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: qemu-ppc@nongnu.org, =?UTF-8?q?Andreas=20F=C3=A4rber?= , =?UTF-8?q?Herv=C3=A9=20Poussineau?= We can't however replace the built-in IDE controller, as the one in pc873= 12 is only single-channel and can use only IRQ 14. Cc: Andreas F=C3=A4rber Signed-off-by: Herv=C3=A9 Poussineau --- default-configs/ppc-softmmu.mak | 2 + hw/ppc_prep.c | 50 ++++++++++++++-------------------= ------ 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/default-configs/ppc-softmmu.mak b/default-configs/ppc-softmm= u.mak index 1a768fc..14568b3 100644 --- a/default-configs/ppc-softmmu.mak +++ b/default-configs/ppc-softmmu.mak @@ -8,6 +8,7 @@ CONFIG_M48T59=3Dy CONFIG_VGA=3Dy CONFIG_VGA_PCI=3Dy CONFIG_SERIAL=3Dy +CONFIG_PARALLEL=3Dy CONFIG_I8254=3Dy CONFIG_PCKBD=3Dy CONFIG_FDC=3Dy @@ -16,6 +17,7 @@ CONFIG_I82374=3Dy CONFIG_OPENPIC=3Dy CONFIG_PREP_PCI=3Dy CONFIG_I82378=3Dy +CONFIG_PC87312=3Dy CONFIG_MACIO=3Dy CONFIG_PCSPK=3Dy CONFIG_CUDA=3Dy diff --git a/hw/ppc_prep.c b/hw/ppc_prep.c index 19a674f..acb7cc5 100644 --- a/hw/ppc_prep.c +++ b/hw/ppc_prep.c @@ -211,7 +211,6 @@ typedef struct sysctrl_t { M48t59State *nvram; uint8_t state; uint8_t syscontrol; - uint8_t fake_io[2]; int contiguous_map; int endian; } sysctrl_t; @@ -222,24 +221,6 @@ enum { =20 static sysctrl_t *sysctrl; =20 -static void PREP_io_write (void *opaque, uint32_t addr, uint32_t val) -{ - sysctrl_t *sysctrl =3D opaque; - - PPC_IO_DPRINTF("0x%08" PRIx32 " =3D> 0x%02" PRIx32 "\n", addr - PPC_= IO_BASE, - val); - sysctrl->fake_io[addr - 0x0398] =3D val; -} - -static uint32_t PREP_io_read (void *opaque, uint32_t addr) -{ - sysctrl_t *sysctrl =3D opaque; - - PPC_IO_DPRINTF("0x%08" PRIx32 " <=3D 0x%02" PRIx32 "\n", addr - PPC_= IO_BASE, - sysctrl->fake_io[addr - 0x0398]); - return sysctrl->fake_io[addr - 0x0398]; -} - static void PREP_io_800_writeb (void *opaque, uint32_t addr, uint32_t va= l) { sysctrl_t *sysctrl =3D opaque; @@ -506,10 +487,11 @@ static void ppc_prep_init (ram_addr_t ram_size, PCIBus *pci_bus; PCIDevice *pci; ISABus *isa_bus; + ISADevice *isa; qemu_irq *cpu_exit_irq; int ppc_boot_device; DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; - DriveInfo *fd[MAX_FD]; + DriveInfo *drive; =20 sysctrl =3D g_malloc0(sizeof(sysctrl_t)); =20 @@ -635,6 +617,22 @@ static void ppc_prep_init (ram_addr_t ram_size, sysbus_connect_irq(&pcihost->busdev, 3, qdev_get_gpio_in(&pci->qdev,= 11)); isa_bus =3D DO_UPCAST(ISABus, qbus, qdev_get_child_bus(&pci->qdev, "= isa.0")); =20 + /* Super I/O (parallel + serial ports) */ + isa =3D isa_create(isa_bus, "pc87312"); + qdev_prop_set_uint8(&isa->qdev, "config", 13); /* fdc, ser0, ser1, p= ar0 */ + qdev_prop_set_chr(&isa->qdev, "parallel", parallel_hds[0]); + qdev_prop_set_chr(&isa->qdev, "uart1", serial_hds[0]); + qdev_prop_set_chr(&isa->qdev, "uart2", serial_hds[1]); + drive =3D drive_get(IF_FLOPPY, 0, 0); + if (drive) { + qdev_prop_set_drive_nofail(&isa->qdev, "floppyA", drive->bdrv); + } + drive =3D drive_get(IF_FLOPPY, 0, 1); + if (drive) { + qdev_prop_set_drive_nofail(&isa->qdev, "floppyB", drive->bdrv); + } + qdev_init_nofail(&isa->qdev); + /* Register 8 MB of ISA IO space (needed for non-contiguous map) */ memory_region_init_io(PPC_io_memory, &PPC_prep_io_ops, sysctrl, "ppc-io", 0x00800000); @@ -643,8 +641,6 @@ static void ppc_prep_init (ram_addr_t ram_size, /* init basic PC hardware */ pci_vga_init(pci_bus); =20 - if (serial_hds[0]) - serial_isa_init(isa_bus, 0, serial_hds[0]); nb_nics1 =3D nb_nics; if (nb_nics1 > NE2000_NB_MAX) nb_nics1 =3D NE2000_NB_MAX; @@ -668,17 +664,7 @@ static void ppc_prep_init (ram_addr_t ram_size, } isa_create_simple(isa_bus, "i8042"); =20 - // SB16_init(); - - for(i =3D 0; i < MAX_FD; i++) { - fd[i] =3D drive_get(IF_FLOPPY, 0, i); - } - fdctrl_init_isa(isa_bus, fd); - - /* Register fake IO ports for PREP */ sysctrl->reset_irq =3D first_cpu->irq_inputs[PPC6xx_INPUT_HRESET]; - register_ioport_read(0x398, 2, 1, &PREP_io_read, sysctrl); - register_ioport_write(0x398, 2, 1, &PREP_io_write, sysctrl); /* System control ports */ register_ioport_read(0x0092, 0x01, 1, &PREP_io_800_readb, sysctrl); register_ioport_write(0x0092, 0x01, 1, &PREP_io_800_writeb, sysctrl)= ; --=20 1.7.9.1