From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JCG6m-0007zr-JS for qemu-devel@nongnu.org; Tue, 08 Jan 2008 10:11:16 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JCG6l-0007y4-Fr for qemu-devel@nongnu.org; Tue, 08 Jan 2008 10:11:16 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JCG6l-0007xf-8J for qemu-devel@nongnu.org; Tue, 08 Jan 2008 10:11:15 -0500 Received: from kassel160.server4you.de ([62.75.246.160] helo=csgraf.de) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1JCG6k-0007ny-Eh for qemu-devel@nongnu.org; Tue, 08 Jan 2008 10:11:15 -0500 Received: from [10.10.102.8] (charybdis-ext.suse.de [195.135.221.2]) by csgraf.de (Postfix) with ESMTP id 236F43A8A for ; Tue, 8 Jan 2008 16:11:13 +0100 (CET) Message-ID: <47839551.2070804@csgraf.de> Date: Tue, 08 Jan 2008 16:22:57 +0100 From: Alexander Graf MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------030404000604000400050502" Subject: [Qemu-devel] [PATCH 7/9] Intel Mac machine Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------030404000604000400050502 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit To leave the default behavior unchanged, this adds a "mac" machine definition for x86 that automatically chooses the right hardware for an emulated Intel Mac. As x86 did not really know about models, the also adds a simple model interface. --------------030404000604000400050502 Content-Type: text/x-patch; name="qemu-intelmac.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="qemu-intelmac.patch" Index: qemu-snapshot-2008-01-08_05/hw/boards.h =================================================================== --- qemu-snapshot-2008-01-08_05.orig/hw/boards.h +++ qemu-snapshot-2008-01-08_05/hw/boards.h @@ -23,6 +23,7 @@ int qemu_register_machine(QEMUMachine *m extern QEMUMachine bareetraxfs_machine; /* pc.c */ +extern QEMUMachine mac_machine; extern QEMUMachine pc_machine; extern QEMUMachine isapc_machine; Index: qemu-snapshot-2008-01-08_05/hw/pc.c =================================================================== --- qemu-snapshot-2008-01-08_05.orig/hw/pc.c +++ qemu-snapshot-2008-01-08_05/hw/pc.c @@ -57,6 +57,12 @@ static PITState *pit; static IOAPICState *ioapic; static PCIDevice *i440fx_state; +enum pc_model { + MODEL_ISA = 0, + MODEL_PCI = 1, + MODEL_MAC = 2 +}; + static void ioport80_write(void *opaque, uint32_t addr, uint32_t data) { } @@ -708,7 +714,7 @@ static void pc_init1(int ram_size, int v const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, - int pci_enabled, const char *cpu_model) + int model, const char *cpu_model) { char buf[1024]; int ret, linux_boot, i; @@ -730,11 +736,15 @@ static void pc_init1(int ram_size, int v /* init CPUs */ if (cpu_model == NULL) { + if(model == MODEL_MAC) { + cpu_model = "coreduo"; + } else { #ifdef TARGET_X86_64 - cpu_model = "qemu64"; + cpu_model = "qemu64"; #else - cpu_model = "qemu32"; + cpu_model = "qemu32"; #endif + } } for(i = 0; i < smp_cpus; i++) { @@ -751,7 +761,7 @@ static void pc_init1(int ram_size, int v } register_savevm("cpu", i, 4, cpu_save, cpu_load, env); qemu_register_reset(main_cpu_reset, env); - if (pci_enabled) { + if (model > MODEL_ISA) { apic_init(env); } vmport_init(env); @@ -888,7 +898,7 @@ static void pc_init1(int ram_size, int v i8259 = i8259_init(cpu_irq[0]); ferr_irq = i8259[13]; - if (pci_enabled) { + if (model > MODEL_ISA) { pci_bus = i440fx_init(&i440fx_state, i8259); piix3_devfn = piix3_init(pci_bus, -1); } else { @@ -901,7 +911,7 @@ static void pc_init1(int ram_size, int v register_ioport_write(0xf0, 1, 1, ioportF0_write, NULL); if (cirrus_vga_enabled) { - if (pci_enabled) { + if (model > MODEL_ISA) { pci_cirrus_vga_init(pci_bus, ds, phys_ram_base + vga_ram_addr, vga_ram_addr, vga_ram_size); @@ -910,13 +920,13 @@ static void pc_init1(int ram_size, int v vga_ram_addr, vga_ram_size); } } else if (vmsvga_enabled) { - if (pci_enabled) + if (model > MODEL_ISA) pci_vmsvga_init(pci_bus, ds, phys_ram_base + ram_size, ram_size, vga_ram_size); else fprintf(stderr, "%s: vmware_vga: no PCI bus\n", __FUNCTION__); } else { - if (pci_enabled) { + if (model > MODEL_ISA) { pci_vga_init(pci_bus, ds, phys_ram_base + vga_ram_addr, vga_ram_addr, vga_ram_size, 0, 0); } else { @@ -930,12 +940,18 @@ static void pc_init1(int ram_size, int v register_ioport_read(0x92, 1, 1, ioport92_read, NULL); register_ioport_write(0x92, 1, 1, ioport92_write, NULL); - if (pci_enabled) { - ioapic = ioapic_init(); + + switch(model) { + case MODEL_MAC: + applesmc_init(); + lpc_init(pci_bus, piix3_devfn, i8259); + case MODEL_PCI: + ioapic = ioapic_init(); + break; } pit = pit_init(0x40, i8259[0]); pcspk_init(pit); - if (pci_enabled) { + if (model > MODEL_ISA) { pic_set_alt_irq_func(isa_pic, ioapic_set_irq, ioapic); } @@ -955,15 +971,21 @@ static void pc_init1(int ram_size, int v for(i = 0; i < nb_nics; i++) { nd = &nd_table[i]; if (!nd->model) { - if (pci_enabled) { - nd->model = "ne2k_pci"; - } else { - nd->model = "ne2k_isa"; + switch(model) { + case MODEL_ISA: + nd->model = "ne2k_isa"; + break; + case MODEL_MAC: + nd->model = "rtl8139"; + break; + default: + nd->model = "ne2k_pci"; + break; } } if (strcmp(nd->model, "ne2k_isa") == 0) { pc_init_ne2k_isa(nd, i8259); - } else if (pci_enabled) { + } else if (model > MODEL_ISA) { if (strcmp(nd->model, "?") == 0) fprintf(stderr, "qemu: Supported ISA NICs: ne2k_isa\n"); pci_nic_init(pci_bus, nd, -1); @@ -989,19 +1011,25 @@ static void pc_init1(int ram_size, int v hd[i] = NULL; } - if (pci_enabled) { - pci_piix3_ide_init(pci_bus, hd, piix3_devfn + 1, i8259); - } else { - for(i = 0; i < MAX_IDE_BUS; i++) { - isa_ide_init(ide_iobase[i], ide_iobase2[i], i8259[ide_irq[i]], - hd[MAX_IDE_DEVS * i], hd[MAX_IDE_DEVS * i + 1]); - } + switch(model) { + case MODEL_MAC: + pci_ich6_ide_init(pci_bus, hd, piix3_devfn + 1, i8259); + break; + case MODEL_PCI: + pci_piix3_ide_init(pci_bus, hd, piix3_devfn + 1, i8259); + break; + default: + for(i = 0; i < 2; i++) { + isa_ide_init(ide_iobase[i], ide_iobase2[i], i8259[ide_irq[i]], + hd[MAX_IDE_DEVS * i], hd[MAX_IDE_DEVS * i + 1]); + } + break; } i8042_init(i8259[1], i8259[12], 0x60); DMA_init(0); #ifdef HAS_AUDIO - audio_init(pci_enabled ? pci_bus : NULL, i8259); + audio_init((model > MODEL_ISA) ? pci_bus : NULL, i8259); #endif for(i = 0; i < MAX_FD; i++) { @@ -1015,11 +1043,11 @@ static void pc_init1(int ram_size, int v cmos_init(ram_size, boot_device, hd); - if (pci_enabled && usb_enabled) { + if ((model > MODEL_ISA) && usb_enabled) { usb_uhci_piix3_init(pci_bus, piix3_devfn + 2); } - if (pci_enabled && acpi_enabled) { + if ((model > MODEL_ISA) && acpi_enabled) { uint8_t *eeprom_buf = qemu_mallocz(8 * 256); /* XXX: make this persistent */ i2c_bus *smbus; @@ -1034,7 +1062,7 @@ static void pc_init1(int ram_size, int v i440fx_init_memory_mappings(i440fx_state); } - if (pci_enabled) { + if (model > MODEL_ISA) { int max_bus; int bus, unit; void *scsi; @@ -1053,6 +1081,18 @@ static void pc_init1(int ram_size, int v } } +static void pc_init_mac(int ram_size, int vga_ram_size, + const char *boot_device, DisplayState *ds, + const char *kernel_filename, + const char *kernel_cmdline, + const char *initrd_filename, + const char *cpu_model) +{ + pc_init1(ram_size, vga_ram_size, boot_device, ds, + kernel_filename, kernel_cmdline, + initrd_filename, MODEL_MAC, cpu_model); +} + static void pc_init_pci(int ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, @@ -1062,7 +1102,7 @@ static void pc_init_pci(int ram_size, in { pc_init1(ram_size, vga_ram_size, boot_device, ds, kernel_filename, kernel_cmdline, - initrd_filename, 1, cpu_model); + initrd_filename, MODEL_PCI, cpu_model); } static void pc_init_isa(int ram_size, int vga_ram_size, @@ -1074,7 +1114,7 @@ static void pc_init_isa(int ram_size, in { pc_init1(ram_size, vga_ram_size, boot_device, ds, kernel_filename, kernel_cmdline, - initrd_filename, 0, cpu_model); + initrd_filename, MODEL_ISA, cpu_model); } QEMUMachine pc_machine = { @@ -1083,6 +1123,12 @@ QEMUMachine pc_machine = { pc_init_pci, }; +QEMUMachine mac_machine = { + "mac", + "Intel-Mac", + pc_init_mac, +}; + QEMUMachine isapc_machine = { "isapc", "ISA-only PC", Index: qemu-snapshot-2008-01-08_05/vl.c =================================================================== --- qemu-snapshot-2008-01-08_05.orig/vl.c +++ qemu-snapshot-2008-01-08_05/vl.c @@ -7881,6 +7881,7 @@ static void register_machines(void) { #if defined(TARGET_I386) qemu_register_machine(&pc_machine); + qemu_register_machine(&mac_machine); qemu_register_machine(&isapc_machine); #elif defined(TARGET_PPC) qemu_register_machine(&heathrow_machine); --------------030404000604000400050502--