From 71ac3b08ae5d60d9f21879691dc54633b9d88294 Mon Sep 17 00:00:00 2001
From: aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>
Date: Tue, 13 Jan 2009 20:06:26 +0000
Subject: [PATCH] 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
---
 pc-bios/bios-pq/0002_e820-high-mem.patch    | 129 -------------
 pc-bios/bios-pq/0003_smp-startup-poll.patch |  21 ---
 pc-bios/bios-pq/0005_hpet.patch             | 190 --------------------
 pc-bios/bios-pq/HEAD                        |   2 +-
 pc-bios/bios-pq/series                      |   3 -
 pc-bios/bios.bin                            | Bin 131072 -> 131072 bytes
 6 files changed, 1 insertion(+), 344 deletions(-)
 delete mode 100644 pc-bios/bios-pq/0002_e820-high-mem.patch
 delete mode 100644 pc-bios/bios-pq/0003_smp-startup-poll.patch
 delete mode 100644 pc-bios/bios-pq/0005_hpet.patch

diff --git a/pc-bios/bios-pq/0002_e820-high-mem.patch b/pc-bios/bios-pq/0002_e820-high-mem.patch
deleted file mode 100644
index 2886e85669..0000000000
--- a/pc-bios/bios-pq/0002_e820-high-mem.patch
+++ /dev/null
@@ -1,129 +0,0 @@
-From: Izik Eidus <izike@qumranet.com>
-
-add support to memory above the pci hole
-    
-the new memory region is mapped after address 0x100000000,
-the bios take the size of the memory after the 0x100000000 from
-three new cmos bytes.
-
-diff --git a/bios/rombios.c b/bios/rombios.c
-index 1be0816..b70f249 100644
---- a/bios/rombios.c
-+++ b/bios/rombios.c
-@@ -4442,22 +4442,25 @@ BX_DEBUG_INT15("case default:\n");
- #endif // BX_USE_PS2_MOUSE
- 
- 
--void set_e820_range(ES, DI, start, end, type)
-+void set_e820_range(ES, DI, start, end, extra_start, extra_end, type)
-      Bit16u ES;
-      Bit16u DI;
-      Bit32u start;
-      Bit32u end;
-+     Bit8u extra_start;
-+     Bit8u extra_end;
-      Bit16u type;
- {
-     write_word(ES, DI, start);
-     write_word(ES, DI+2, start >> 16);
--    write_word(ES, DI+4, 0x00);
-+    write_word(ES, DI+4, extra_start);
-     write_word(ES, DI+6, 0x00);
- 
-     end -= start;
-+    extra_end -= extra_start;
-     write_word(ES, DI+8, end);
-     write_word(ES, DI+10, end >> 16);
--    write_word(ES, DI+12, 0x0000);
-+    write_word(ES, DI+12, extra_end);
-     write_word(ES, DI+14, 0x0000);
- 
-     write_word(ES, DI+16, type);
-@@ -4470,7 +4473,9 @@ int15_function32(regs, ES, DS, FLAGS)
-   Bit16u ES, DS, FLAGS;
- {
-   Bit32u  extended_memory_size=0; // 64bits long
-+  Bit32u  extra_lowbits_memory_size=0;
-   Bit16u  CX,DX;
-+  Bit8u   extra_highbits_memory_size=0;
- 
- BX_DEBUG_INT15("int15 AX=%04x\n",regs.u.r16.ax);
- 
-@@ -4544,11 +4549,18 @@ ASM_END
-                     extended_memory_size += (1L * 1024 * 1024);
-                 }
- 
-+                extra_lowbits_memory_size = inb_cmos(0x5c);
-+                extra_lowbits_memory_size <<= 8;
-+                extra_lowbits_memory_size |= inb_cmos(0x5b);
-+                extra_lowbits_memory_size *= 64;
-+                extra_lowbits_memory_size *= 1024;
-+                extra_highbits_memory_size = inb_cmos(0x5d);
-+
-                 switch(regs.u.r16.bx)
-                 {
-                     case 0:
-                         set_e820_range(ES, regs.u.r16.di,
--                                       0x0000000L, 0x0009f000L, 1);
-+                                       0x0000000L, 0x0009f000L, 0, 0, 1);
-                         regs.u.r32.ebx = 1;
-                         regs.u.r32.eax = 0x534D4150;
-                         regs.u.r32.ecx = 0x14;
-@@ -4557,7 +4569,7 @@ ASM_END
-                         break;
-                     case 1:
-                         set_e820_range(ES, regs.u.r16.di,
--                                       0x0009f000L, 0x000a0000L, 2);
-+                                       0x0009f000L, 0x000a0000L, 0, 0, 2);
-                         regs.u.r32.ebx = 2;
-                         regs.u.r32.eax = 0x534D4150;
-                         regs.u.r32.ecx = 0x14;
-@@ -4566,7 +4578,7 @@ ASM_END
-                         break;
-                     case 2:
-                         set_e820_range(ES, regs.u.r16.di,
--                                       0x000e8000L, 0x00100000L, 2);
-+                                       0x000e8000L, 0x00100000L, 0, 0, 2);
-                         regs.u.r32.ebx = 3;
-                         regs.u.r32.eax = 0x534D4150;
-                         regs.u.r32.ecx = 0x14;
-@@ -4577,7 +4589,7 @@ ASM_END
- #if BX_ROMBIOS32
-                         set_e820_range(ES, regs.u.r16.di,
-                                        0x00100000L,
--                                       extended_memory_size - ACPI_DATA_SIZE, 1);
-+                                       extended_memory_size - ACPI_DATA_SIZE ,0, 0, 1);
-                         regs.u.r32.ebx = 4;
- #else
-                         set_e820_range(ES, regs.u.r16.di,
-@@ -4593,7 +4605,7 @@ ASM_END
-                     case 4:
-                         set_e820_range(ES, regs.u.r16.di,
-                                        extended_memory_size - ACPI_DATA_SIZE,
--                                       extended_memory_size, 3); // ACPI RAM
-+                                       extended_memory_size ,0, 0, 3); // ACPI RAM
-                         regs.u.r32.ebx = 5;
-                         regs.u.r32.eax = 0x534D4150;
-                         regs.u.r32.ecx = 0x14;
-@@ -4603,7 +4615,20 @@ ASM_END
-                     case 5:
-                         /* 256KB BIOS area at the end of 4 GB */
-                         set_e820_range(ES, regs.u.r16.di,
--                                       0xfffc0000L, 0x00000000L, 2);
-+                                       0xfffc0000L, 0x00000000L ,0, 0, 2);
-+                        if (extra_highbits_memory_size || extra_lowbits_memory_size)
-+                            regs.u.r32.ebx = 6;
-+                        else
-+                            regs.u.r32.ebx = 0;
-+                        regs.u.r32.eax = 0x534D4150;
-+                        regs.u.r32.ecx = 0x14;
-+                        CLEAR_CF();
-+                        return;
-+                    case 6:
-+                        /* Maping of memory above 4 GB */
-+                        set_e820_range(ES, regs.u.r16.di, 0x00000000L,
-+                        extra_lowbits_memory_size, 1, extra_highbits_memory_size
-+                                       + 1, 1);
-                         regs.u.r32.ebx = 0;
-                         regs.u.r32.eax = 0x534D4150;
-                         regs.u.r32.ecx = 0x14;
diff --git a/pc-bios/bios-pq/0003_smp-startup-poll.patch b/pc-bios/bios-pq/0003_smp-startup-poll.patch
deleted file mode 100644
index cd1a3ff034..0000000000
--- a/pc-bios/bios-pq/0003_smp-startup-poll.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-From: Avi Kivity <avi@qumranet.com>
-
-instead of timing out, wait until all cpus are up
-
-diff --git a/bios/rombios32.c b/bios/rombios32.c
-index ef98a41..05ba40d 100644
---- a/bios/rombios32.c
-+++ b/bios/rombios32.c
-@@ -512,7 +512,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(&smp_cpus))
-+            ;
-+#endif
-     }
-     BX_INFO("Found %d cpu(s)\n", readw(&smp_cpus));
- }
diff --git a/pc-bios/bios-pq/0005_hpet.patch b/pc-bios/bios-pq/0005_hpet.patch
deleted file mode 100644
index 9347cb501e..0000000000
--- a/pc-bios/bios-pq/0005_hpet.patch
+++ /dev/null
@@ -1,190 +0,0 @@
-BOCHS BIOS changes to support HPET in QEMU.
-
-Signed-off-by Beth Kon <eak@us.ibm.com>
-
-Index: bochs-2.3.7/bios/acpi-dsdt.dsl
-===================================================================
---- bochs-2.3.7.orig/bios/acpi-dsdt.dsl	2008-10-15 12:39:14.000000000 -0500
-+++ bochs-2.3.7/bios/acpi-dsdt.dsl	2008-10-28 07:58:40.000000000 -0500
-@@ -159,6 +159,26 @@
-                 Return (MEMP)
-             }
-         }
-+#ifdef BX_QEMU
-+        Device(HPET) {
-+            Name(_HID,  EISAID("PNP0103"))
-+            Name(_UID, 0)
-+            Method (_STA, 0, NotSerialized) {
-+                    Return(0x0F)
-+            }
-+            Name(_CRS, ResourceTemplate() {
-+                DWordMemory(
-+                    ResourceConsumer, PosDecode, MinFixed, MaxFixed,
-+                    NonCacheable, ReadWrite,
-+                    0x00000000,
-+                    0xFED00000,
-+                    0xFED003FF,
-+                    0x00000000,
-+                    0x00000400 /* 1K memory: FED00000 - FED003FF */
-+                )
-+            })
-+        }
-+#endif
-     }
- 
-     Scope(\_SB.PCI0) {
-Index: bochs-2.3.7/bios/rombios32.c
-===================================================================
---- bochs-2.3.7.orig/bios/rombios32.c	2008-10-15 12:39:36.000000000 -0500
-+++ bochs-2.3.7/bios/rombios32.c	2008-11-12 14:41:41.000000000 -0600
-@@ -1087,7 +1087,11 @@
- struct rsdt_descriptor_rev1
- {
- 	ACPI_TABLE_HEADER_DEF                           /* ACPI common table header */
-+#ifdef BX_QEMU
-+	uint32_t                             table_offset_entry [4]; /* Array of pointers to other */
-+#else
- 	uint32_t                             table_offset_entry [3]; /* Array of pointers to other */
-+#endif
- 			 /* ACPI tables */
- };
- 
-@@ -1227,6 +1231,32 @@
- #endif
- };
- 
-+#ifdef BX_QEMU
-+/*
-+ *  * ACPI 2.0 Generic Address Space definition.
-+ *   */
-+struct acpi_20_generic_address {
-+    uint8_t  address_space_id;
-+    uint8_t  register_bit_width;
-+    uint8_t  register_bit_offset;
-+    uint8_t  reserved;
-+    uint64_t address;
-+};
-+
-+/*
-+ *  * HPET Description Table
-+ *   */
-+struct acpi_20_hpet {
-+    ACPI_TABLE_HEADER_DEF                           /* ACPI common table header */
-+    uint32_t           timer_block_id;
-+    struct acpi_20_generic_address addr;
-+    uint8_t            hpet_number;
-+    uint16_t           min_tick;
-+    uint8_t            page_protect;
-+};
-+#define ACPI_HPET_ADDRESS 0xFED00000UL
-+#endif
-+
- struct madt_io_apic
- {
- 	APIC_HEADER_DEF
-@@ -1237,6 +1267,17 @@
- 			  * lines start */
- };
- 
-+#ifdef BX_QEMU
-+struct madt_int_override
-+{
-+	APIC_HEADER_DEF
-+	uint8_t                bus;     /* Identifies ISA Bus */
-+	uint8_t                source;  /* Bus-relative interrupt source */
-+	uint32_t               gsi;     /* GSI that source will signal */
-+	uint16_t               flags;   /* MPS INTI flags */
-+};
-+#endif
-+
- #include "acpi-dsdt.hex"
- 
- static inline uint16_t cpu_to_le16(uint16_t x)
-@@ -1342,6 +1383,10 @@
-     struct facs_descriptor_rev1 *facs;
-     struct multiple_apic_table *madt;
-     uint8_t *dsdt, *ssdt;
-+#ifdef BX_QEMU
-+    struct acpi_20_hpet *hpet;
-+    uint32_t hpet_addr;
-+#endif
-     uint32_t base_addr, rsdt_addr, fadt_addr, addr, facs_addr, dsdt_addr, ssdt_addr;
-     uint32_t acpi_tables_size, madt_addr, madt_size;
-     int i;
-@@ -1384,10 +1429,21 @@
-     madt_addr = addr;
-     madt_size = sizeof(*madt) +
-         sizeof(struct madt_processor_apic) * smp_cpus +
-+#ifdef BX_QEMU
-+        sizeof(struct madt_io_apic) + sizeof(struct madt_int_override);
-+#else
-         sizeof(struct madt_io_apic);
-+#endif
-     madt = (void *)(addr);
-     addr += madt_size;
- 
-+#ifdef BX_QEMU
-+    addr = (addr + 7) & ~7;
-+    hpet_addr = addr;
-+    hpet = (void *)(addr);
-+    addr += sizeof(*hpet);
-+#endif
-+
-     acpi_tables_size = addr - base_addr;
- 
-     BX_INFO("ACPI tables: RSDP addr=0x%08lx ACPI DATA addr=0x%08lx size=0x%x\n",
-@@ -1410,6 +1466,9 @@
-     rsdt->table_offset_entry[0] = cpu_to_le32(fadt_addr);
-     rsdt->table_offset_entry[1] = cpu_to_le32(madt_addr);
-     rsdt->table_offset_entry[2] = cpu_to_le32(ssdt_addr);
-+#ifdef BX_QEMU
-+    rsdt->table_offset_entry[3] = cpu_to_le32(hpet_addr);
-+#endif
-     acpi_build_table_header((struct acpi_table_header *)rsdt,
-                             "RSDT", sizeof(*rsdt), 1);
- 
-@@ -1448,6 +1507,9 @@
-     {
-         struct madt_processor_apic *apic;
-         struct madt_io_apic *io_apic;
-+#ifdef BX_QEMU
-+        struct madt_int_override *int_override;
-+#endif
- 
-         memset(madt, 0, madt_size);
-         madt->local_apic_address = cpu_to_le32(0xfee00000);
-@@ -1467,10 +1529,34 @@
-         io_apic->io_apic_id = smp_cpus;
-         io_apic->address = cpu_to_le32(0xfec00000);
-         io_apic->interrupt = cpu_to_le32(0);
-+#ifdef BX_QEMU
-+        io_apic++;
-+
-+        int_override = (void *)io_apic;
-+        int_override->type = APIC_XRUPT_OVERRIDE;
-+        int_override->length = sizeof(*int_override);
-+        int_override->bus = cpu_to_le32(0);
-+        int_override->source = cpu_to_le32(0);
-+        int_override->gsi = cpu_to_le32(2);
-+        int_override->flags = cpu_to_le32(0);
-+#endif
- 
-         acpi_build_table_header((struct acpi_table_header *)madt,
-                                 "APIC", madt_size, 1);
-     }
-+
-+#ifdef BX_QEMU
-+    /* HPET */
-+    memset(hpet, 0, sizeof(*hpet));
-+    /* Note timer_block_id value must be kept in sync with value advertised by
-+     * emulated hpet
-+     */
-+    hpet->timer_block_id = cpu_to_le32(0x8086a201);
-+    hpet->addr.address = cpu_to_le32(ACPI_HPET_ADDRESS);
-+    acpi_build_table_header((struct  acpi_table_header *)hpet,
-+                             "HPET", sizeof(*hpet), 1);
-+#endif
-+
- }
- 
- /* SMBIOS entry point -- must be written to a 16-bit aligned address
diff --git a/pc-bios/bios-pq/HEAD b/pc-bios/bios-pq/HEAD
index 928a2334bb..1f604ae821 100644
--- a/pc-bios/bios-pq/HEAD
+++ b/pc-bios/bios-pq/HEAD
@@ -1 +1 @@
-370a7e0d8419bc05192d766c11b7221e5ffc0f75
+7342176bb0fa9d6cc63b37f6ac239e3f70b74219
diff --git a/pc-bios/bios-pq/series b/pc-bios/bios-pq/series
index 0e7558c47b..556c0e48dc 100644
--- a/pc-bios/bios-pq/series
+++ b/pc-bios/bios-pq/series
@@ -1,4 +1 @@
 0001_bx-qemu.patch
-0002_e820-high-mem.patch
-0003_smp-startup-poll.patch
-0005_hpet.patch
diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin
index 5120192dede8b85dbba691716b7de006a069e6b6..ac444c1492d7993d0ae5bc64cbbf6bf2cd2ac39e 100644
GIT binary patch
delta 12275
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
G!T$%K+I1EH

delta 12451
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