From 0d913fdb62765554d613e2fe99b7812ed1c95122 Mon Sep 17 00:00:00 2001 From: j_mayer Date: Sun, 11 Nov 2007 14:44:28 +0000 Subject: Fix PowerPC boot device selection. Fix gcc warning in PowerPC PreP machine init routine. Add second IDE channel to Heathrow Mac machine (still not handled by OHW). git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3586 c046a42c-6fe2-441c-8c8c-71466251a162 --- hw/ppc_chrp.c | 7 ++++--- hw/ppc_oldworld.c | 22 +++++++++++++++------- hw/ppc_prep.c | 9 +++++---- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/hw/ppc_chrp.c b/hw/ppc_chrp.c index a2d07c8..8fb8e5d 100644 --- a/hw/ppc_chrp.c +++ b/hw/ppc_chrp.c @@ -179,10 +179,11 @@ static void ppc_core99_init (int ram_size, int vga_ram_size, /* We consider that NewWorld PowerMac never have any floppy drive * For now, OHW cannot boot from the network. */ - for (i = 0; i < boot_device[i] != '\0'; i++) { - ppc_boot_device = boot_device[i]; - if (ppc_boot_device >= 'c' && ppc_boot_device <= 'f') + for (i = 0; boot_device[i] != '\0'; i++) { + if (boot_device[i] >= 'c' && boot_device[i] <= 'f') { + ppc_boot_device = boot_device[i]; break; + } } if (ppc_boot_device == '\0') { fprintf(stderr, "No valid boot device for Mac99 machine\n"); diff --git a/hw/ppc_oldworld.c b/hw/ppc_oldworld.c index b6ce58b..ef63876 100644 --- a/hw/ppc_oldworld.c +++ b/hw/ppc_oldworld.c @@ -113,6 +113,7 @@ static void ppc_heathrow_init (int ram_size, int vga_ram_size, int vga_bios_size, bios_size; qemu_irq *dummy_irq; int pic_mem_index, nvram_mem_index, dbdma_mem_index, cuda_mem_index; + int ide_mem_index[2]; int ppc_boot_device; linux_boot = (kernel_filename != NULL); @@ -213,18 +214,21 @@ static void ppc_heathrow_init (int ram_size, int vga_ram_size, initrd_base = 0; initrd_size = 0; ppc_boot_device = '\0'; - for (i = 0; i < boot_device[i] != '\0'; i++) { - ppc_boot_device = boot_device[i]; + for (i = 0; boot_device[i] != '\0'; i++) { /* TOFIX: for now, the second IDE channel is not properly - * emulated. The Mac floppy disk are not emulated. + * used by OHW. The Mac floppy disk are not emulated. * For now, OHW cannot boot from the network. */ #if 0 - if (ppc_boot_device >= 'a' && ppc_boot_device <= 'f') + if (boot_device[i] >= 'a' && boot_device[i] <= 'f') { + ppc_boot_device = boot_device[i]; break; + } #else - if (ppc_boot_device >= 'c' && ppc_boot_device <= 'd') + if (boot_device[i] >= 'c' && boot_device[i] <= 'd') { + ppc_boot_device = boot_device[i]; break; + } #endif } if (ppc_boot_device == '\0') { @@ -278,8 +282,12 @@ static void ppc_heathrow_init (int ram_size, int vga_ram_size, nd_table[i].model = "ne2k_pci"; pci_nic_init(pci_bus, &nd_table[i], -1); } - + + /* First IDE channel is a CMD646 on the PCI bus */ pci_cmd646_ide_init(pci_bus, &bs_table[0], 0); + /* Second IDE channel is a MAC IDE on the MacIO bus */ + ide_mem_index[0] = -1; + ide_mem_index[1] = pmac_ide_init(&bs_table[2], pic[0x0D]); /* cuda also initialize ADB */ cuda_init(&cuda_mem_index, pic[0x12]); @@ -293,7 +301,7 @@ static void ppc_heathrow_init (int ram_size, int vga_ram_size, dbdma_init(&dbdma_mem_index); macio_init(pci_bus, 0x0017, 1, pic_mem_index, dbdma_mem_index, - cuda_mem_index, nvr, 0, NULL); + cuda_mem_index, nvr, 2, ide_mem_index); if (usb_enabled) { usb_ohci_init_pci(pci_bus, 3, -1); diff --git a/hw/ppc_prep.c b/hw/ppc_prep.c index 60b6956..1d2a85d 100644 --- a/hw/ppc_prep.c +++ b/hw/ppc_prep.c @@ -529,7 +529,7 @@ static void ppc_prep_init (int ram_size, int vga_ram_size, const char *initrd_filename, const char *cpu_model) { - CPUState *env, *envs[MAX_CPUS]; + CPUState *env = NULL, *envs[MAX_CPUS]; char buf[1024]; nvram_t nvram; m48t59_t *m48t59; @@ -614,10 +614,11 @@ static void ppc_prep_init (int ram_size, int vga_ram_size, initrd_size = 0; ppc_boot_device = '\0'; /* For now, OHW cannot boot from the network. */ - for (i = 0; i < boot_device[i] != '\0'; i++) { - ppc_boot_device = boot_device[i]; - if (ppc_boot_device >= 'a' && ppc_boot_device <= 'f') + for (i = 0; boot_device[i] != '\0'; i++) { + if (boot_device[i] >= 'a' && boot_device[i] <= 'f') { + ppc_boot_device = boot_device[i]; break; + } } if (ppc_boot_device == '\0') { fprintf(stderr, "No valid boot device for Mac99 machine\n"); -- cgit v1.1