410
410
.read = { PPC_prep_io_readb, PPC_prep_io_readw, PPC_prep_io_readl },
411
411
.write = { PPC_prep_io_writeb, PPC_prep_io_writew, PPC_prep_io_writel },
413
.endianness = DEVICE_LITTLE_ENDIAN,
413
.endianness = DEVICE_NATIVE_ENDIAN,
416
416
#define NVRAM_SIZE 0x2000
418
418
static void cpu_request_exit(void *opaque, int irq, int level)
420
CPUPPCState *env = cpu_single_env;
420
CPUState *cpu = current_cpu;
434
434
cpu->env.nip = 0xfffffffc;
437
static const MemoryRegionPortio prep_portio_list[] = {
438
/* System control ports */
439
{ 0x0092, 1, 1, .read = PREP_io_800_readb, .write = PREP_io_800_writeb, },
441
.read = PREP_io_800_readb, .write = PREP_io_800_writeb, },
442
/* Special port to get debug messages from Open-Firmware */
443
{ 0x0F00, 4, 1, .write = PPC_debug_write, },
444
PORTIO_END_OF_LIST(),
437
447
/* PowerPC PREP hardware initialisation */
438
448
static void ppc_prep_init(QEMUMachineInitArgs *args)
496
507
/* allocate RAM */
497
memory_region_init_ram(ram, "ppc_prep.ram", ram_size);
508
memory_region_init_ram(ram, NULL, "ppc_prep.ram", ram_size);
498
509
vmstate_register_ram_global(ram);
499
510
memory_region_add_subregion(sysmem, 0, ram);
501
512
/* allocate and load BIOS */
502
memory_region_init_ram(bios, "ppc_prep.bios", BIOS_SIZE);
513
memory_region_init_ram(bios, NULL, "ppc_prep.bios", BIOS_SIZE);
503
514
memory_region_set_readonly(bios, true);
504
515
memory_region_add_subregion(sysmem, (uint32_t)(-BIOS_SIZE), bios);
505
516
vmstate_register_ram_global(bios);
594
605
/* PCI -> ISA bridge */
595
606
pci = pci_create_simple(pci_bus, PCI_DEVFN(1, 0), "i82378");
596
607
cpu_exit_irq = qemu_allocate_irqs(cpu_request_exit, NULL, 1);
608
cpu = POWERPC_CPU(first_cpu);
597
609
qdev_connect_gpio_out(&pci->qdev, 0,
598
first_cpu->irq_inputs[PPC6xx_INPUT_INT]);
610
cpu->env.irq_inputs[PPC6xx_INPUT_INT]);
599
611
qdev_connect_gpio_out(&pci->qdev, 1, *cpu_exit_irq);
600
612
sysbus_connect_irq(&pcihost->busdev, 0, qdev_get_gpio_in(&pci->qdev, 9));
601
613
sysbus_connect_irq(&pcihost->busdev, 1, qdev_get_gpio_in(&pci->qdev, 11));
602
614
sysbus_connect_irq(&pcihost->busdev, 2, qdev_get_gpio_in(&pci->qdev, 9));
603
615
sysbus_connect_irq(&pcihost->busdev, 3, qdev_get_gpio_in(&pci->qdev, 11));
604
isa_bus = DO_UPCAST(ISABus, qbus, qdev_get_child_bus(&pci->qdev, "isa.0"));
616
isa_bus = ISA_BUS(qdev_get_child_bus(DEVICE(pci), "isa.0"));
606
618
/* Super I/O (parallel + serial ports) */
607
619
isa = isa_create(isa_bus, TYPE_PC87312);
608
qdev_prop_set_uint8(&isa->qdev, "config", 13); /* fdc, ser0, ser1, par0 */
609
qdev_init_nofail(&isa->qdev);
621
qdev_prop_set_uint8(dev, "config", 13); /* fdc, ser0, ser1, par0 */
622
qdev_init_nofail(dev);
611
624
/* Register 8 MB of ISA IO space (needed for non-contiguous map) */
612
memory_region_init_io(PPC_io_memory, &PPC_prep_io_ops, sysctrl,
625
memory_region_init_io(PPC_io_memory, NULL, &PPC_prep_io_ops, sysctrl,
613
626
"ppc-io", 0x00800000);
614
627
memory_region_add_subregion(sysmem, 0x80000000, PPC_io_memory);
627
640
isa_ne2000_init(isa_bus, ne2000_io[i], ne2000_irq[i],
630
pci_nic_init_nofail(&nd_table[i], "ne2k_pci", NULL);
643
pci_nic_init_nofail(&nd_table[i], pci_bus, "ne2k_pci", NULL);
640
653
isa_create_simple(isa_bus, "i8042");
642
sysctrl->reset_irq = first_cpu->irq_inputs[PPC6xx_INPUT_HRESET];
643
/* System control ports */
644
register_ioport_read(0x0092, 0x01, 1, &PREP_io_800_readb, sysctrl);
645
register_ioport_write(0x0092, 0x01, 1, &PREP_io_800_writeb, sysctrl);
646
register_ioport_read(0x0800, 0x52, 1, &PREP_io_800_readb, sysctrl);
647
register_ioport_write(0x0800, 0x52, 1, &PREP_io_800_writeb, sysctrl);
655
cpu = POWERPC_CPU(first_cpu);
656
sysctrl->reset_irq = cpu->env.irq_inputs[PPC6xx_INPUT_HRESET];
658
portio_list_init(port_list, NULL, prep_portio_list, sysctrl, "prep");
659
portio_list_add(port_list, get_system_io(), 0x0);
648
661
/* PowerPC control and status register group */
650
memory_region_init_io(xcsr, &PPC_XCSR_ops, NULL, "ppc-xcsr", 0x1000);
663
memory_region_init_io(xcsr, NULL, &PPC_XCSR_ops, NULL, "ppc-xcsr", 0x1000);
651
664
memory_region_add_subregion(sysmem, 0xFEFF0000, xcsr);
671
684
/* XXX: need an option to load a NVRAM image */
673
686
graphic_width, graphic_height, graphic_depth);
675
/* Special port to get debug messages from Open-Firmware */
676
register_ioport_write(0x0F00, 4, 1, &PPC_debug_write, NULL);
679
689
static QEMUMachine prep_machine = {