diff --git a/bios/BIOS-bochs-latest b/bios/BIOS-bochs-latest index 4388ff2..c10ae62 100644 Binary files a/bios/BIOS-bochs-latest and b/bios/BIOS-bochs-latest differ diff --git a/bios/BIOS-bochs-legacy b/bios/BIOS-bochs-legacy index a720312..131e62b 100644 Binary files a/bios/BIOS-bochs-legacy and b/bios/BIOS-bochs-legacy differ diff --git a/bios/rombios32.c b/bios/rombios32.c index 816e5cc..1917b1c 100755 --- a/bios/rombios32.c +++ b/bios/rombios32.c @@ -441,7 +441,12 @@ void smp_probe(void) sipi_vector = AP_BOOT_ADDR >> 12; writel(APIC_BASE + APIC_ICR_LOW, 0x000C4600 | sipi_vector); +#ifndef BX_QEMU delay_ms(10); +#else + while (cmos_readb(0x5f) + 1 != readw((void *)CPU_COUNT_ADDR)) + ; +#endif smp_cpus = readw((void *)CPU_COUNT_ADDR); } diff --git a/qemu/hw/pc.c b/qemu/hw/pc.c index d3b8786..7c6ceb1 100644 --- a/qemu/hw/pc.c +++ b/qemu/hw/pc.c @@ -163,7 +163,7 @@ static void cmos_init_hd(int type_ofs, int info_ofs, BlockDriverState *hd) } /* hd_table must contain 4 block drivers */ -static void cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size, int boot_device, BlockDriverState **hd_table) +static void cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size, int boot_device, BlockDriverState **hd_table, int smp_cpus) { RTCState *s = rtc_state; int val; @@ -190,6 +190,7 @@ static void cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size, int boo rtc_set_memory(s, 0x5c, (unsigned int)above_4g_mem_size >> 24); rtc_set_memory(s, 0x5d, above_4g_mem_size >> 32); } + rtc_set_memory(s, 0x5f, smp_cpus - 1); if (ram_size > (16 * 1024 * 1024)) val = (ram_size / 65536) - ((16 * 1024 * 1024) / 65536); @@ -778,7 +779,7 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, int boot_device, floppy_controller = fdctrl_init(6, 2, 0, 0x3f0, fd_table); - cmos_init(ram_size, above_4g_mem_size, boot_device, bs_table); + cmos_init(ram_size, above_4g_mem_size, boot_device, bs_table, smp_cpus); if (pci_enabled && usb_enabled) { usb_uhci_init(pci_bus, piix3_devfn + 2); diff --git a/qemu/pc-bios/bios.bin b/qemu/pc-bios/bios.bin index 4388ff2..c10ae62 100644 Binary files a/qemu/pc-bios/bios.bin and b/qemu/pc-bios/bios.bin differ