Commit 71ac3b08ae5d60d9f21879691dc54633b9d88294
1 parent
429d0a3d
Update bochs bios
They have applied all of our patches and they have an additional HPET fix. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6289 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
6 changed files
with
1 additions
and
344 deletions
pc-bios/bios-pq/0002_e820-high-mem.patch deleted
100644 → 0
| 1 | -From: Izik Eidus <izike@qumranet.com> | |
| 2 | - | |
| 3 | -add support to memory above the pci hole | |
| 4 | - | |
| 5 | -the new memory region is mapped after address 0x100000000, | |
| 6 | -the bios take the size of the memory after the 0x100000000 from | |
| 7 | -three new cmos bytes. | |
| 8 | - | |
| 9 | -diff --git a/bios/rombios.c b/bios/rombios.c | |
| 10 | -index 1be0816..b70f249 100644 | |
| 11 | ---- a/bios/rombios.c | |
| 12 | -+++ b/bios/rombios.c | |
| 13 | -@@ -4442,22 +4442,25 @@ BX_DEBUG_INT15("case default:\n"); | |
| 14 | - #endif // BX_USE_PS2_MOUSE | |
| 15 | - | |
| 16 | - | |
| 17 | --void set_e820_range(ES, DI, start, end, type) | |
| 18 | -+void set_e820_range(ES, DI, start, end, extra_start, extra_end, type) | |
| 19 | - Bit16u ES; | |
| 20 | - Bit16u DI; | |
| 21 | - Bit32u start; | |
| 22 | - Bit32u end; | |
| 23 | -+ Bit8u extra_start; | |
| 24 | -+ Bit8u extra_end; | |
| 25 | - Bit16u type; | |
| 26 | - { | |
| 27 | - write_word(ES, DI, start); | |
| 28 | - write_word(ES, DI+2, start >> 16); | |
| 29 | -- write_word(ES, DI+4, 0x00); | |
| 30 | -+ write_word(ES, DI+4, extra_start); | |
| 31 | - write_word(ES, DI+6, 0x00); | |
| 32 | - | |
| 33 | - end -= start; | |
| 34 | -+ extra_end -= extra_start; | |
| 35 | - write_word(ES, DI+8, end); | |
| 36 | - write_word(ES, DI+10, end >> 16); | |
| 37 | -- write_word(ES, DI+12, 0x0000); | |
| 38 | -+ write_word(ES, DI+12, extra_end); | |
| 39 | - write_word(ES, DI+14, 0x0000); | |
| 40 | - | |
| 41 | - write_word(ES, DI+16, type); | |
| 42 | -@@ -4470,7 +4473,9 @@ int15_function32(regs, ES, DS, FLAGS) | |
| 43 | - Bit16u ES, DS, FLAGS; | |
| 44 | - { | |
| 45 | - Bit32u extended_memory_size=0; // 64bits long | |
| 46 | -+ Bit32u extra_lowbits_memory_size=0; | |
| 47 | - Bit16u CX,DX; | |
| 48 | -+ Bit8u extra_highbits_memory_size=0; | |
| 49 | - | |
| 50 | - BX_DEBUG_INT15("int15 AX=%04x\n",regs.u.r16.ax); | |
| 51 | - | |
| 52 | -@@ -4544,11 +4549,18 @@ ASM_END | |
| 53 | - extended_memory_size += (1L * 1024 * 1024); | |
| 54 | - } | |
| 55 | - | |
| 56 | -+ extra_lowbits_memory_size = inb_cmos(0x5c); | |
| 57 | -+ extra_lowbits_memory_size <<= 8; | |
| 58 | -+ extra_lowbits_memory_size |= inb_cmos(0x5b); | |
| 59 | -+ extra_lowbits_memory_size *= 64; | |
| 60 | -+ extra_lowbits_memory_size *= 1024; | |
| 61 | -+ extra_highbits_memory_size = inb_cmos(0x5d); | |
| 62 | -+ | |
| 63 | - switch(regs.u.r16.bx) | |
| 64 | - { | |
| 65 | - case 0: | |
| 66 | - set_e820_range(ES, regs.u.r16.di, | |
| 67 | -- 0x0000000L, 0x0009f000L, 1); | |
| 68 | -+ 0x0000000L, 0x0009f000L, 0, 0, 1); | |
| 69 | - regs.u.r32.ebx = 1; | |
| 70 | - regs.u.r32.eax = 0x534D4150; | |
| 71 | - regs.u.r32.ecx = 0x14; | |
| 72 | -@@ -4557,7 +4569,7 @@ ASM_END | |
| 73 | - break; | |
| 74 | - case 1: | |
| 75 | - set_e820_range(ES, regs.u.r16.di, | |
| 76 | -- 0x0009f000L, 0x000a0000L, 2); | |
| 77 | -+ 0x0009f000L, 0x000a0000L, 0, 0, 2); | |
| 78 | - regs.u.r32.ebx = 2; | |
| 79 | - regs.u.r32.eax = 0x534D4150; | |
| 80 | - regs.u.r32.ecx = 0x14; | |
| 81 | -@@ -4566,7 +4578,7 @@ ASM_END | |
| 82 | - break; | |
| 83 | - case 2: | |
| 84 | - set_e820_range(ES, regs.u.r16.di, | |
| 85 | -- 0x000e8000L, 0x00100000L, 2); | |
| 86 | -+ 0x000e8000L, 0x00100000L, 0, 0, 2); | |
| 87 | - regs.u.r32.ebx = 3; | |
| 88 | - regs.u.r32.eax = 0x534D4150; | |
| 89 | - regs.u.r32.ecx = 0x14; | |
| 90 | -@@ -4577,7 +4589,7 @@ ASM_END | |
| 91 | - #if BX_ROMBIOS32 | |
| 92 | - set_e820_range(ES, regs.u.r16.di, | |
| 93 | - 0x00100000L, | |
| 94 | -- extended_memory_size - ACPI_DATA_SIZE, 1); | |
| 95 | -+ extended_memory_size - ACPI_DATA_SIZE ,0, 0, 1); | |
| 96 | - regs.u.r32.ebx = 4; | |
| 97 | - #else | |
| 98 | - set_e820_range(ES, regs.u.r16.di, | |
| 99 | -@@ -4593,7 +4605,7 @@ ASM_END | |
| 100 | - case 4: | |
| 101 | - set_e820_range(ES, regs.u.r16.di, | |
| 102 | - extended_memory_size - ACPI_DATA_SIZE, | |
| 103 | -- extended_memory_size, 3); // ACPI RAM | |
| 104 | -+ extended_memory_size ,0, 0, 3); // ACPI RAM | |
| 105 | - regs.u.r32.ebx = 5; | |
| 106 | - regs.u.r32.eax = 0x534D4150; | |
| 107 | - regs.u.r32.ecx = 0x14; | |
| 108 | -@@ -4603,7 +4615,20 @@ ASM_END | |
| 109 | - case 5: | |
| 110 | - /* 256KB BIOS area at the end of 4 GB */ | |
| 111 | - set_e820_range(ES, regs.u.r16.di, | |
| 112 | -- 0xfffc0000L, 0x00000000L, 2); | |
| 113 | -+ 0xfffc0000L, 0x00000000L ,0, 0, 2); | |
| 114 | -+ if (extra_highbits_memory_size || extra_lowbits_memory_size) | |
| 115 | -+ regs.u.r32.ebx = 6; | |
| 116 | -+ else | |
| 117 | -+ regs.u.r32.ebx = 0; | |
| 118 | -+ regs.u.r32.eax = 0x534D4150; | |
| 119 | -+ regs.u.r32.ecx = 0x14; | |
| 120 | -+ CLEAR_CF(); | |
| 121 | -+ return; | |
| 122 | -+ case 6: | |
| 123 | -+ /* Maping of memory above 4 GB */ | |
| 124 | -+ set_e820_range(ES, regs.u.r16.di, 0x00000000L, | |
| 125 | -+ extra_lowbits_memory_size, 1, extra_highbits_memory_size | |
| 126 | -+ + 1, 1); | |
| 127 | - regs.u.r32.ebx = 0; | |
| 128 | - regs.u.r32.eax = 0x534D4150; | |
| 129 | - regs.u.r32.ecx = 0x14; |
pc-bios/bios-pq/0003_smp-startup-poll.patch deleted
100644 → 0
| 1 | -From: Avi Kivity <avi@qumranet.com> | |
| 2 | - | |
| 3 | -instead of timing out, wait until all cpus are up | |
| 4 | - | |
| 5 | -diff --git a/bios/rombios32.c b/bios/rombios32.c | |
| 6 | -index ef98a41..05ba40d 100644 | |
| 7 | ---- a/bios/rombios32.c | |
| 8 | -+++ b/bios/rombios32.c | |
| 9 | -@@ -512,7 +512,12 @@ void smp_probe(void) | |
| 10 | - sipi_vector = AP_BOOT_ADDR >> 12; | |
| 11 | - writel(APIC_BASE + APIC_ICR_LOW, 0x000C4600 | sipi_vector); | |
| 12 | - | |
| 13 | -+#ifndef BX_QEMU | |
| 14 | - delay_ms(10); | |
| 15 | -+#else | |
| 16 | -+ while (cmos_readb(0x5f) + 1 != readw(&smp_cpus)) | |
| 17 | -+ ; | |
| 18 | -+#endif | |
| 19 | - } | |
| 20 | - BX_INFO("Found %d cpu(s)\n", readw(&smp_cpus)); | |
| 21 | - } |
pc-bios/bios-pq/0005_hpet.patch deleted
100644 → 0
| 1 | -BOCHS BIOS changes to support HPET in QEMU. | |
| 2 | - | |
| 3 | -Signed-off-by Beth Kon <eak@us.ibm.com> | |
| 4 | - | |
| 5 | -Index: bochs-2.3.7/bios/acpi-dsdt.dsl | |
| 6 | -=================================================================== | |
| 7 | ---- bochs-2.3.7.orig/bios/acpi-dsdt.dsl 2008-10-15 12:39:14.000000000 -0500 | |
| 8 | -+++ bochs-2.3.7/bios/acpi-dsdt.dsl 2008-10-28 07:58:40.000000000 -0500 | |
| 9 | -@@ -159,6 +159,26 @@ | |
| 10 | - Return (MEMP) | |
| 11 | - } | |
| 12 | - } | |
| 13 | -+#ifdef BX_QEMU | |
| 14 | -+ Device(HPET) { | |
| 15 | -+ Name(_HID, EISAID("PNP0103")) | |
| 16 | -+ Name(_UID, 0) | |
| 17 | -+ Method (_STA, 0, NotSerialized) { | |
| 18 | -+ Return(0x0F) | |
| 19 | -+ } | |
| 20 | -+ Name(_CRS, ResourceTemplate() { | |
| 21 | -+ DWordMemory( | |
| 22 | -+ ResourceConsumer, PosDecode, MinFixed, MaxFixed, | |
| 23 | -+ NonCacheable, ReadWrite, | |
| 24 | -+ 0x00000000, | |
| 25 | -+ 0xFED00000, | |
| 26 | -+ 0xFED003FF, | |
| 27 | -+ 0x00000000, | |
| 28 | -+ 0x00000400 /* 1K memory: FED00000 - FED003FF */ | |
| 29 | -+ ) | |
| 30 | -+ }) | |
| 31 | -+ } | |
| 32 | -+#endif | |
| 33 | - } | |
| 34 | - | |
| 35 | - Scope(\_SB.PCI0) { | |
| 36 | -Index: bochs-2.3.7/bios/rombios32.c | |
| 37 | -=================================================================== | |
| 38 | ---- bochs-2.3.7.orig/bios/rombios32.c 2008-10-15 12:39:36.000000000 -0500 | |
| 39 | -+++ bochs-2.3.7/bios/rombios32.c 2008-11-12 14:41:41.000000000 -0600 | |
| 40 | -@@ -1087,7 +1087,11 @@ | |
| 41 | - struct rsdt_descriptor_rev1 | |
| 42 | - { | |
| 43 | - ACPI_TABLE_HEADER_DEF /* ACPI common table header */ | |
| 44 | -+#ifdef BX_QEMU | |
| 45 | -+ uint32_t table_offset_entry [4]; /* Array of pointers to other */ | |
| 46 | -+#else | |
| 47 | - uint32_t table_offset_entry [3]; /* Array of pointers to other */ | |
| 48 | -+#endif | |
| 49 | - /* ACPI tables */ | |
| 50 | - }; | |
| 51 | - | |
| 52 | -@@ -1227,6 +1231,32 @@ | |
| 53 | - #endif | |
| 54 | - }; | |
| 55 | - | |
| 56 | -+#ifdef BX_QEMU | |
| 57 | -+/* | |
| 58 | -+ * * ACPI 2.0 Generic Address Space definition. | |
| 59 | -+ * */ | |
| 60 | -+struct acpi_20_generic_address { | |
| 61 | -+ uint8_t address_space_id; | |
| 62 | -+ uint8_t register_bit_width; | |
| 63 | -+ uint8_t register_bit_offset; | |
| 64 | -+ uint8_t reserved; | |
| 65 | -+ uint64_t address; | |
| 66 | -+}; | |
| 67 | -+ | |
| 68 | -+/* | |
| 69 | -+ * * HPET Description Table | |
| 70 | -+ * */ | |
| 71 | -+struct acpi_20_hpet { | |
| 72 | -+ ACPI_TABLE_HEADER_DEF /* ACPI common table header */ | |
| 73 | -+ uint32_t timer_block_id; | |
| 74 | -+ struct acpi_20_generic_address addr; | |
| 75 | -+ uint8_t hpet_number; | |
| 76 | -+ uint16_t min_tick; | |
| 77 | -+ uint8_t page_protect; | |
| 78 | -+}; | |
| 79 | -+#define ACPI_HPET_ADDRESS 0xFED00000UL | |
| 80 | -+#endif | |
| 81 | -+ | |
| 82 | - struct madt_io_apic | |
| 83 | - { | |
| 84 | - APIC_HEADER_DEF | |
| 85 | -@@ -1237,6 +1267,17 @@ | |
| 86 | - * lines start */ | |
| 87 | - }; | |
| 88 | - | |
| 89 | -+#ifdef BX_QEMU | |
| 90 | -+struct madt_int_override | |
| 91 | -+{ | |
| 92 | -+ APIC_HEADER_DEF | |
| 93 | -+ uint8_t bus; /* Identifies ISA Bus */ | |
| 94 | -+ uint8_t source; /* Bus-relative interrupt source */ | |
| 95 | -+ uint32_t gsi; /* GSI that source will signal */ | |
| 96 | -+ uint16_t flags; /* MPS INTI flags */ | |
| 97 | -+}; | |
| 98 | -+#endif | |
| 99 | -+ | |
| 100 | - #include "acpi-dsdt.hex" | |
| 101 | - | |
| 102 | - static inline uint16_t cpu_to_le16(uint16_t x) | |
| 103 | -@@ -1342,6 +1383,10 @@ | |
| 104 | - struct facs_descriptor_rev1 *facs; | |
| 105 | - struct multiple_apic_table *madt; | |
| 106 | - uint8_t *dsdt, *ssdt; | |
| 107 | -+#ifdef BX_QEMU | |
| 108 | -+ struct acpi_20_hpet *hpet; | |
| 109 | -+ uint32_t hpet_addr; | |
| 110 | -+#endif | |
| 111 | - uint32_t base_addr, rsdt_addr, fadt_addr, addr, facs_addr, dsdt_addr, ssdt_addr; | |
| 112 | - uint32_t acpi_tables_size, madt_addr, madt_size; | |
| 113 | - int i; | |
| 114 | -@@ -1384,10 +1429,21 @@ | |
| 115 | - madt_addr = addr; | |
| 116 | - madt_size = sizeof(*madt) + | |
| 117 | - sizeof(struct madt_processor_apic) * smp_cpus + | |
| 118 | -+#ifdef BX_QEMU | |
| 119 | -+ sizeof(struct madt_io_apic) + sizeof(struct madt_int_override); | |
| 120 | -+#else | |
| 121 | - sizeof(struct madt_io_apic); | |
| 122 | -+#endif | |
| 123 | - madt = (void *)(addr); | |
| 124 | - addr += madt_size; | |
| 125 | - | |
| 126 | -+#ifdef BX_QEMU | |
| 127 | -+ addr = (addr + 7) & ~7; | |
| 128 | -+ hpet_addr = addr; | |
| 129 | -+ hpet = (void *)(addr); | |
| 130 | -+ addr += sizeof(*hpet); | |
| 131 | -+#endif | |
| 132 | -+ | |
| 133 | - acpi_tables_size = addr - base_addr; | |
| 134 | - | |
| 135 | - BX_INFO("ACPI tables: RSDP addr=0x%08lx ACPI DATA addr=0x%08lx size=0x%x\n", | |
| 136 | -@@ -1410,6 +1466,9 @@ | |
| 137 | - rsdt->table_offset_entry[0] = cpu_to_le32(fadt_addr); | |
| 138 | - rsdt->table_offset_entry[1] = cpu_to_le32(madt_addr); | |
| 139 | - rsdt->table_offset_entry[2] = cpu_to_le32(ssdt_addr); | |
| 140 | -+#ifdef BX_QEMU | |
| 141 | -+ rsdt->table_offset_entry[3] = cpu_to_le32(hpet_addr); | |
| 142 | -+#endif | |
| 143 | - acpi_build_table_header((struct acpi_table_header *)rsdt, | |
| 144 | - "RSDT", sizeof(*rsdt), 1); | |
| 145 | - | |
| 146 | -@@ -1448,6 +1507,9 @@ | |
| 147 | - { | |
| 148 | - struct madt_processor_apic *apic; | |
| 149 | - struct madt_io_apic *io_apic; | |
| 150 | -+#ifdef BX_QEMU | |
| 151 | -+ struct madt_int_override *int_override; | |
| 152 | -+#endif | |
| 153 | - | |
| 154 | - memset(madt, 0, madt_size); | |
| 155 | - madt->local_apic_address = cpu_to_le32(0xfee00000); | |
| 156 | -@@ -1467,10 +1529,34 @@ | |
| 157 | - io_apic->io_apic_id = smp_cpus; | |
| 158 | - io_apic->address = cpu_to_le32(0xfec00000); | |
| 159 | - io_apic->interrupt = cpu_to_le32(0); | |
| 160 | -+#ifdef BX_QEMU | |
| 161 | -+ io_apic++; | |
| 162 | -+ | |
| 163 | -+ int_override = (void *)io_apic; | |
| 164 | -+ int_override->type = APIC_XRUPT_OVERRIDE; | |
| 165 | -+ int_override->length = sizeof(*int_override); | |
| 166 | -+ int_override->bus = cpu_to_le32(0); | |
| 167 | -+ int_override->source = cpu_to_le32(0); | |
| 168 | -+ int_override->gsi = cpu_to_le32(2); | |
| 169 | -+ int_override->flags = cpu_to_le32(0); | |
| 170 | -+#endif | |
| 171 | - | |
| 172 | - acpi_build_table_header((struct acpi_table_header *)madt, | |
| 173 | - "APIC", madt_size, 1); | |
| 174 | - } | |
| 175 | -+ | |
| 176 | -+#ifdef BX_QEMU | |
| 177 | -+ /* HPET */ | |
| 178 | -+ memset(hpet, 0, sizeof(*hpet)); | |
| 179 | -+ /* Note timer_block_id value must be kept in sync with value advertised by | |
| 180 | -+ * emulated hpet | |
| 181 | -+ */ | |
| 182 | -+ hpet->timer_block_id = cpu_to_le32(0x8086a201); | |
| 183 | -+ hpet->addr.address = cpu_to_le32(ACPI_HPET_ADDRESS); | |
| 184 | -+ acpi_build_table_header((struct acpi_table_header *)hpet, | |
| 185 | -+ "HPET", sizeof(*hpet), 1); | |
| 186 | -+#endif | |
| 187 | -+ | |
| 188 | - } | |
| 189 | - | |
| 190 | - /* SMBIOS entry point -- must be written to a 16-bit aligned address |
pc-bios/bios-pq/HEAD
pc-bios/bios-pq/series
pc-bios/bios.bin
No preview for this file type