| Index: rombios.h |
| =================================================================== |
| RCS file: /cvsroot/bochs/bochs/bios/rombios.h,v |
| retrieving revision 1.2 |
| diff -u -w -r1.2 rombios.h |
| --- rombios.h 1 Oct 2006 16:39:18 -0000 1.2 |
| +++ rombios.h 2 Oct 2006 18:31:41 -0000 |
| @@ -19,7 +19,7 @@ |
| // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| |
| /* define it to include QEMU specific code */ |
| -//#define BX_QEMU |
| +#define BX_QEMU |
| |
| #define BX_ROMBIOS32 1 |
| #define DEBUG_ROMBIOS 0 |
| Index: rombios32.c |
| =================================================================== |
| RCS file: /cvsroot/bochs/bochs/bios/rombios32.c,v |
| retrieving revision 1.6 |
| diff -u -w -r1.6 rombios32.c |
| --- rombios32.c 2 Oct 2006 06:29:37 -0000 1.6 |
| +++ rombios32.c 2 Oct 2006 18:31:41 -0000 |
| @@ -45,6 +45,8 @@ |
| : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) \ |
| : "0" (index)) |
| |
| +#define wbinvd() asm volatile("wbinvd") |
| + |
| #define CPUID_APIC (1 << 9) |
| |
| #define APIC_BASE ((uint8_t *)0xfee00000) |
| @@ -591,6 +593,7 @@ |
| PCIDevice *d = &i440_pcidev; |
| int v; |
| |
| + wbinvd(); |
| v = pci_config_readb(d, 0x59); |
| v = (v & 0x0f) | (0x10); |
| pci_config_writeb(d, 0x59, v); |
| @@ -645,7 +648,7 @@ |
| outb(0xb3, 0x01); |
| |
| /* raise an SMI interrupt */ |
| - outb(0xb2, 0x01); |
| + outb(0xb2, 0x00); |
| |
| /* wait until SMM code executed */ |
| while (inb(0xb3) != 0x00); |
| @@ -656,6 +659,7 @@ |
| /* copy the SMM code */ |
| memcpy((void *)0xa8000, &smm_code_start, |
| &smm_code_end - &smm_code_start); |
| + wbinvd(); |
| |
| /* close the SMM memory window and enable normal SMM */ |
| pci_config_writeb(&i440_pcidev, 0x72, 0x02 | 0x08); |
| @@ -848,6 +852,11 @@ |
| int ioapic_id, i, len; |
| int mp_config_table_size; |
| |
| +#ifdef BX_QEMU |
| + if (smp_cpus <= 1) |
| + return; |
| +#endif |
| + |
| #ifdef BX_USE_EBDA_TABLES |
| mp_config_table = (uint8_t *)(ram_size - ACPI_DATA_SIZE - MPTABLE_MAX_SIZE); |
| #else |