From c34ebfdc8715f03d53e154758423c902324fee06 Mon Sep 17 00:00:00 2001 From: Anthony Liguori Date: Fri, 4 Sep 2009 10:13:29 -0500 Subject: [PATCH] Bring pcbios, seabios, and vgabios into the tree as git submodules. Right now, they aren't integrated into the build but we can do that incrementally. Signed-off-by: Anthony Liguori --- .gitmodules | 9 + configure | 16 + pc-bios/README | 30 +- pc-bios/bios-pq/0001_bx-qemu.patch | 11 - ...bios-table-to-report-memory-above-4g.patch | 55 -- ...ios-generate-mptable-unconditionally.patch | 25 - ...er-reporting--issues-with-32g-guests.patch | 184 ------- ...ry-device-length-boundary--condition.patch | 23 - ...se-preprocessor-for-pci-link-routing.patch | 73 --- ...-pci-slots,-bringing-the-total-to-32.patch | 49 -- ...8_qemu-bios-provide-gpe-_l0x-methods.patch | 92 ---- .../0009_qemu-bios-pci-hotplug-support.patch | 128 ----- ...-sci-interrupt-as-connected-to-irq-9.patch | 26 - ...ead-additional-acpi-tables-from-a-vm.patch | 150 ------ ...d-smbios-entries-and-files-from-qemu.patch | 470 ------------------ ...fix-non-acpi-timer-interrupt-routing.patch | 60 --- .../0014_add-srat-acpi-table-support.patch | 305 ------------ ..._enable-power-button-even-generation.patch | 20 - ...rect-mask-to-size-pci-option-rom-bar.patch | 33 -- ...Move-QEMU_CFG-constants-to-rombios.h.patch | 59 --- ...bochs-bios-Make-boot-prompt-optional.patch | 68 --- .../0019-bios-fix-multiple-calls.patch | 35 -- .../bios-pq/0020-qemu-kvm-cfg-maxcpus.patch | 62 --- pc-bios/bios-pq/0021-qemu-madt-maxcpus.patch | 117 ----- pc-bios/bios-pq/HEAD | 1 - pc-bios/bios-pq/series | 21 - pc-bios/vgabios-pq/HEAD | 1 - pc-bios/vgabios-pq/series | 0 roms/pcbios | 1 + roms/seabios | 1 + roms/vgabios | 1 + 31 files changed, 29 insertions(+), 2097 deletions(-) create mode 100644 .gitmodules delete mode 100644 pc-bios/bios-pq/0001_bx-qemu.patch delete mode 100644 pc-bios/bios-pq/0002_kvm-bios-update-smbios-table-to-report-memory-above-4g.patch delete mode 100644 pc-bios/bios-pq/0003_kvm-bios-generate-mptable-unconditionally.patch delete mode 100644 pc-bios/bios-pq/0004_kvm-bios-resolve-memory-device-roll-over-reporting--issues-with-32g-guests.patch delete mode 100644 pc-bios/bios-pq/0005_kvm-bios-fix-smbios-memory-device-length-boundary--condition.patch delete mode 100644 pc-bios/bios-pq/0006_qemu-bios-use-preprocessor-for-pci-link-routing.patch delete mode 100644 pc-bios/bios-pq/0007_bios-add-26-pci-slots,-bringing-the-total-to-32.patch delete mode 100644 pc-bios/bios-pq/0008_qemu-bios-provide-gpe-_l0x-methods.patch delete mode 100644 pc-bios/bios-pq/0009_qemu-bios-pci-hotplug-support.patch delete mode 100644 pc-bios/bios-pq/0010_bios-mark-the-acpi-sci-interrupt-as-connected-to-irq-9.patch delete mode 100644 pc-bios/bios-pq/0011_read-additional-acpi-tables-from-a-vm.patch delete mode 100644 pc-bios/bios-pq/0012-load-smbios-entries-and-files-from-qemu.patch delete mode 100644 pc-bios/bios-pq/0013_fix-non-acpi-timer-interrupt-routing.patch delete mode 100644 pc-bios/bios-pq/0014_add-srat-acpi-table-support.patch delete mode 100644 pc-bios/bios-pq/0015_enable-power-button-even-generation.patch delete mode 100644 pc-bios/bios-pq/0016-use-correct-mask-to-size-pci-option-rom-bar.patch delete mode 100644 pc-bios/bios-pq/0017-bochs-bios-Move-QEMU_CFG-constants-to-rombios.h.patch delete mode 100644 pc-bios/bios-pq/0018-bochs-bios-Make-boot-prompt-optional.patch delete mode 100644 pc-bios/bios-pq/0019-bios-fix-multiple-calls.patch delete mode 100644 pc-bios/bios-pq/0020-qemu-kvm-cfg-maxcpus.patch delete mode 100644 pc-bios/bios-pq/0021-qemu-madt-maxcpus.patch delete mode 100644 pc-bios/bios-pq/HEAD delete mode 100644 pc-bios/bios-pq/series delete mode 100644 pc-bios/vgabios-pq/HEAD delete mode 100644 pc-bios/vgabios-pq/series create mode 160000 roms/pcbios create mode 160000 roms/seabios create mode 160000 roms/vgabios diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..71494ea488 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule "roms/vgabios"] + path = roms/vgabios + url = ../vgabios.git +[submodule "roms/seabios"] + path = roms/seabios + url = ../seabios.git +[submodule "roms/pcbios"] + path = roms/pcbios + url = ../pcbios.git diff --git a/configure b/configure index 64a0391394..b78341ccc2 100755 --- a/configure +++ b/configure @@ -2405,10 +2405,12 @@ done # for target in $targets # build tree in object directory if source path is different from current one if test "$source_path_used" = "yes" ; then DIRS="tests tests/cris slirp audio block pc-bios/optionrom" + DIRS="$DIRS roms/pcbios roms/seabios roms/vgabios" FILES="Makefile tests/Makefile" FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit" FILES="$FILES tests/test-mmap.c" FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps pc-bios/video.x" + FILES="$FILES roms/pcbios/Makefile roms/seabios/Makefile roms/vgabios/Makefile" for bios_file in $source_path/pc-bios/*.bin $source_path/pc-bios/*.dtb $source_path/pc-bios/openbios-*; do FILES="$FILES pc-bios/`basename $bios_file`" done @@ -2422,6 +2424,20 @@ if test "$source_path_used" = "yes" ; then done fi +# temporary config to build submodules +for rom in seabios vgabios pcbios; do + config_mak=roms/$rom/config.mak + echo "# Automatically generated by configure - do not modify" >> $config_mak + echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak + echo "CC=$cc" >> $config_mak + echo "BCC=bcc" >> $config_mak + echo "CPP=${cross_prefix}cpp" >> $config_mak + echo "OBJCOPY=objcopy" >> $config_mak + echo "IASL=iasl" >> $config_mak + echo "HOST_CC=$host_cc" >> $config_mak + echo "LD=$ld" >> $config_mak +done + for hwlib in 32 64; do d=libhw$hwlib mkdir -p $d diff --git a/pc-bios/README b/pc-bios/README index f6276d7887..ddd91f49ef 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -1,35 +1,7 @@ - The PC BIOS comes from the Bochs project (http://bochs.sourceforge.net/). - The patches in bios-pq have been applied. The binary is based on the revision - in bios-pq/HEAD with the patches in bios-pq/series applied. The git repo - that HEAD refers to is located at - git://git.kernel.org/pub/scm/virt/bochs/bochs.git - - To build these use the following instructions: - using guilt: - $ export QEMUSRC=/path/to/qemu/svn - $ git clone git://git.kernel.org/pub/scm/virt/bochs/bochs.git - $ cd bochs - $ git checkout -b qemu-bios $(cat $QEMUSRC/pc-bios/bios-pq/HEAD) - - $ mkdir -p .git/patches - $ ln -s $QEMUSRC/pc-bios/bios-pq .git/patches/qemu-bios - $ touch .git/patches/qemu-bios/status - $ guilt push -a - $ ./configure - $ cd bios - $ make - $ cp BIOS-bochs-latest $QEMUSRC/pc-bios/bios.bin - - or alternatively (after the git checkout): - $ for p in $(cat $QEMUSRC/pc-bios/bios-pq/series); do git am $p; done - $ ./configure - $ make bios - The VGA BIOS and the Cirrus VGA BIOS come from the LGPL VGA bios - project (http://www.nongnu.org/vgabios/). The binary is based on the revision - in vgabios-pq/HEAD with the patches in vgabios-pq/series applied. The git - repo that HEAD refers to is located at - git://git.kernel.org/pub/scm/virt/vgabios/vgabios.git + project (http://www.nongnu.org/vgabios/). - The PowerPC Open Hack'Ware Open Firmware Compatible BIOS is available at http://perso.magic.fr/l_indien/OpenHackWare/index.htm. diff --git a/pc-bios/bios-pq/0001_bx-qemu.patch b/pc-bios/bios-pq/0001_bx-qemu.patch deleted file mode 100644 index ffca6b9ae5..0000000000 --- a/pc-bios/bios-pq/0001_bx-qemu.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- bochs-2.3.7.orig/bios/rombios.h -+++ bochs-2.3.7/bios/rombios.h -@@ -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 - - #ifndef LEGACY - # define BX_ROMBIOS32 1 diff --git a/pc-bios/bios-pq/0002_kvm-bios-update-smbios-table-to-report-memory-above-4g.patch b/pc-bios/bios-pq/0002_kvm-bios-update-smbios-table-to-report-memory-above-4g.patch deleted file mode 100644 index 3c1b921856..0000000000 --- a/pc-bios/bios-pq/0002_kvm-bios-update-smbios-table-to-report-memory-above-4g.patch +++ /dev/null @@ -1,55 +0,0 @@ -update SMBIOS table to report memory above 4G (Alex Williamson) - -Signed-off-by: Alex Williamson -Signed-off-by: Avi Kivity -Signed-off-by: Anthony Liguori - -Index: bochs/bios/rombios32.c -=================================================================== -diff --git a/bios/rombios32.c b/bios/rombios32.c -index 3269be5..9587288 100644 ---- a/bios/rombios32.c -+++ b/bios/rombios32.c -@@ -429,6 +429,7 @@ uint32_t cpuid_signature; - uint32_t cpuid_features; - uint32_t cpuid_ext_features; - unsigned long ram_size; -+uint64_t ram_end; - uint8_t bios_uuid[16]; - #ifdef BX_USE_EBDA_TABLES - unsigned long ebda_cur_addr; -@@ -571,6 +572,13 @@ void ram_probe(void) - ram_size = (cmos_readb(0x30) | (cmos_readb(0x31) << 8)) * 1024 + - 1 * 1024 * 1024; - BX_INFO("ram_size=0x%08lx\n", ram_size); -+ if (cmos_readb(0x5b) | cmos_readb(0x5c) | cmos_readb(0x5d)) -+ ram_end = (((uint64_t)cmos_readb(0x5b) << 16) | -+ ((uint64_t)cmos_readb(0x5c) << 24) | -+ ((uint64_t)cmos_readb(0x5d) << 32)) + (1ull << 32); -+ else -+ ram_end = ram_size; -+ BX_INFO("end of ram=%ldMB\n", ram_end >> 20); - #ifdef BX_USE_EBDA_TABLES - ebda_cur_addr = ((*(uint16_t *)(0x40e)) << 4) + 0x380; - BX_INFO("ebda_cur_addr: 0x%08lx\n", ebda_cur_addr); -@@ -2174,7 +2182,8 @@ void smbios_init(void) - { - unsigned cpu_num, nr_structs = 0, max_struct_size = 0; - char *start, *p, *q; -- int memsize = ram_size / (1024 * 1024); -+ int memsize = (ram_end == ram_size) ? ram_size / (1024 * 1024) : -+ (ram_end - (1ull << 32) + ram_size) / (1024 * 1024); - - #ifdef BX_USE_EBDA_TABLES - ebda_cur_addr = align(ebda_cur_addr, 16); -@@ -2201,8 +2210,8 @@ void smbios_init(void) - add_struct(smbios_type_4_init(p, cpu_num)); - add_struct(smbios_type_16_init(p, memsize)); - add_struct(smbios_type_17_init(p, memsize)); -- add_struct(smbios_type_19_init(p, memsize)); -- add_struct(smbios_type_20_init(p, memsize)); -+ add_struct(smbios_type_19_init(p, ram_end / (1024 * 1024))); -+ add_struct(smbios_type_20_init(p, ram_end / (1024 * 1024))); - add_struct(smbios_type_32_init(p)); - add_struct(smbios_type_127_init(p)); - diff --git a/pc-bios/bios-pq/0003_kvm-bios-generate-mptable-unconditionally.patch b/pc-bios/bios-pq/0003_kvm-bios-generate-mptable-unconditionally.patch deleted file mode 100644 index 7826a86d0e..0000000000 --- a/pc-bios/bios-pq/0003_kvm-bios-generate-mptable-unconditionally.patch +++ /dev/null @@ -1,25 +0,0 @@ -generate mptable unconditionally (Avi Kivity) - -VMware ESX requires an mptable even for uniprocessor guests. - -Signed-off-by: Avi Kivity -Signed-off-by: Anthony Liguori - -Index: bochs/bios/rombios32.c -=================================================================== ---- bochs.orig/bios/rombios32.c -+++ bochs/bios/rombios32.c -@@ -970,11 +970,6 @@ static void mptable_init(void) - 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 - - diff --git a/pc-bios/bios-pq/0004_kvm-bios-resolve-memory-device-roll-over-reporting--issues-with-32g-guests.patch b/pc-bios/bios-pq/0004_kvm-bios-resolve-memory-device-roll-over-reporting--issues-with-32g-guests.patch deleted file mode 100644 index 070d610d36..0000000000 --- a/pc-bios/bios-pq/0004_kvm-bios-resolve-memory-device-roll-over-reporting--issues-with-32g-guests.patch +++ /dev/null @@ -1,184 +0,0 @@ -resolve memory device roll over reporting issues with >32G guests (Bill Rieske) - -The field within the Memory Device type 17 is only a word with the MSB being -used to report MB/KB. Thereby, a guest with 32G and greater would report -incorrect memory device information rolling over to 0. - -This presents more than one memory device and associated memory structures -if the memory is larger than 16G - -Signed-off-by: Bill Rieske -Signed-off-by: Avi Kivity -Signed-off-by: Anthony Liguori - -Index: bochs/bios/rombios32.c -=================================================================== ---- bochs.orig/bios/rombios32.c -+++ bochs/bios/rombios32.c -@@ -381,6 +381,17 @@ int vsnprintf(char *buf, int buflen, con - return buf - buf0; - } - -+int snprintf(char * buf, size_t size, const char *fmt, ...) -+{ -+ va_list args; -+ int i; -+ -+ va_start(args, fmt); -+ i=vsnprintf(buf,size,fmt,args); -+ va_end(args); -+ return i; -+} -+ - void bios_printf(int flags, const char *fmt, ...) - { - va_list ap; -@@ -2039,7 +2050,7 @@ smbios_type_4_init(void *start, unsigned - - /* Type 16 -- Physical Memory Array */ - static void * --smbios_type_16_init(void *start, uint32_t memsize) -+smbios_type_16_init(void *start, uint32_t memsize, int nr_mem_devs) - { - struct smbios_type_16 *p = (struct smbios_type_16*)start; - -@@ -2052,7 +2063,7 @@ smbios_type_16_init(void *start, uint32_ - p->error_correction = 0x01; /* other */ - p->maximum_capacity = memsize * 1024; - p->memory_error_information_handle = 0xfffe; /* none provided */ -- p->number_of_memory_devices = 1; -+ p->number_of_memory_devices = nr_mem_devs; - - start += sizeof(struct smbios_type_16); - *((uint16_t *)start) = 0; -@@ -2062,20 +2073,19 @@ smbios_type_16_init(void *start, uint32_ - - /* Type 17 -- Memory Device */ - static void * --smbios_type_17_init(void *start, uint32_t memory_size_mb) -+smbios_type_17_init(void *start, uint32_t memory_size_mb, int instance) - { - struct smbios_type_17 *p = (struct smbios_type_17 *)start; - - p->header.type = 17; - p->header.length = sizeof(struct smbios_type_17); -- p->header.handle = 0x1100; -+ p->header.handle = 0x1100 + instance; - - p->physical_memory_array_handle = 0x1000; - p->total_width = 64; - p->data_width = 64; -- /* truncate memory_size_mb to 16 bits and clear most significant -- bit [indicates size in MB] */ -- p->size = (uint16_t) memory_size_mb & 0x7fff; -+/* TODO: should assert in case something is wrong ASSERT((memory_size_mb & ~0x7fff) == 0); */ -+ p->size = memory_size_mb; - p->form_factor = 0x09; /* DIMM */ - p->device_set = 0; - p->device_locator_str = 1; -@@ -2084,8 +2094,8 @@ smbios_type_17_init(void *start, uint32_ - p->type_detail = 0; - - start += sizeof(struct smbios_type_17); -- memcpy((char *)start, "DIMM 1", 7); -- start += 7; -+ snprintf(start, 8, "DIMM %d", instance); -+ start += strlen(start) + 1; - *((uint8_t *)start) = 0; - - return start+1; -@@ -2093,16 +2103,16 @@ smbios_type_17_init(void *start, uint32_ - - /* Type 19 -- Memory Array Mapped Address */ - static void * --smbios_type_19_init(void *start, uint32_t memory_size_mb) -+smbios_type_19_init(void *start, uint32_t memory_size_mb, int instance) - { - struct smbios_type_19 *p = (struct smbios_type_19 *)start; - - p->header.type = 19; - p->header.length = sizeof(struct smbios_type_19); -- p->header.handle = 0x1300; -+ p->header.handle = 0x1300 + instance; - -- p->starting_address = 0; -- p->ending_address = (memory_size_mb * 1024) - 1; -+ p->starting_address = instance << 24; -+ p->ending_address = p->starting_address + (memory_size_mb << 10) - 1; - p->memory_array_handle = 0x1000; - p->partition_width = 1; - -@@ -2114,18 +2124,18 @@ smbios_type_19_init(void *start, uint32_ - - /* Type 20 -- Memory Device Mapped Address */ - static void * --smbios_type_20_init(void *start, uint32_t memory_size_mb) -+smbios_type_20_init(void *start, uint32_t memory_size_mb, int instance) - { - struct smbios_type_20 *p = (struct smbios_type_20 *)start; - - p->header.type = 20; - p->header.length = sizeof(struct smbios_type_20); -- p->header.handle = 0x1400; -+ p->header.handle = 0x1400 + instance; - -- p->starting_address = 0; -- p->ending_address = (memory_size_mb * 1024) - 1; -- p->memory_device_handle = 0x1100; -- p->memory_array_mapped_address_handle = 0x1300; -+ p->starting_address = instance << 24; -+ p->ending_address = p->starting_address + (memory_size_mb << 10) - 1; -+ p->memory_device_handle = 0x1100 + instance; -+ p->memory_array_mapped_address_handle = 0x1300 + instance; - p->partition_row_position = 1; - p->interleave_position = 0; - p->interleaved_data_depth = 0; -@@ -2176,6 +2186,7 @@ void smbios_init(void) - char *start, *p, *q; - int memsize = (ram_end == ram_size) ? ram_size / (1024 * 1024) : - (ram_end - (1ull << 32) + ram_size) / (1024 * 1024); -+ int i, nr_mem_devs; - - #ifdef BX_USE_EBDA_TABLES - ebda_cur_addr = align(ebda_cur_addr, 16); -@@ -2187,23 +2198,32 @@ void smbios_init(void) - - p = (char *)start + sizeof(struct smbios_entry_point); - --#define add_struct(fn) { \ -+#define add_struct(fn) do{ \ - q = (fn); \ - nr_structs++; \ - if ((q - p) > max_struct_size) \ - max_struct_size = q - p; \ - p = q; \ --} -+}while (0) - - add_struct(smbios_type_0_init(p)); - add_struct(smbios_type_1_init(p)); - add_struct(smbios_type_3_init(p)); - for (cpu_num = 1; cpu_num <= smp_cpus; cpu_num++) - add_struct(smbios_type_4_init(p, cpu_num)); -- add_struct(smbios_type_16_init(p, memsize)); -- add_struct(smbios_type_17_init(p, memsize)); -- add_struct(smbios_type_19_init(p, ram_end / (1024 * 1024))); -- add_struct(smbios_type_20_init(p, ram_end / (1024 * 1024))); -+ -+ /* Each 'memory device' covers up to 16GB of address space. */ -+ nr_mem_devs = (memsize + 0x3fff) >> 14; -+ add_struct(smbios_type_16_init(p, memsize, nr_mem_devs)); -+ for ( i = 0; i < nr_mem_devs; i++ ) -+ { -+ uint32_t dev_memsize = ((i == (nr_mem_devs - 1)) -+ ? (memsize & 0x3fff) : 0x4000); -+ add_struct(smbios_type_17_init(p, dev_memsize, i)); -+ add_struct(smbios_type_19_init(p, dev_memsize, i)); -+ add_struct(smbios_type_20_init(p, dev_memsize, i)); -+ } -+ - add_struct(smbios_type_32_init(p)); - add_struct(smbios_type_127_init(p)); - - - diff --git a/pc-bios/bios-pq/0005_kvm-bios-fix-smbios-memory-device-length-boundary--condition.patch b/pc-bios/bios-pq/0005_kvm-bios-fix-smbios-memory-device-length-boundary--condition.patch deleted file mode 100644 index e4ec229bae..0000000000 --- a/pc-bios/bios-pq/0005_kvm-bios-fix-smbios-memory-device-length-boundary--condition.patch +++ /dev/null @@ -1,23 +0,0 @@ -fix smbios memory device length boundary condition (Bill Rieske) - -dev_memsize ends up 0 when it shouldn't be on 16G boundary conditions. - -Signed-off-by: Bill Rieske -Signed-off-by: Avi Kivity -Signed-off-by: Anthony Liguori - -Index: bochs/bios/rombios32.c -=================================================================== ---- bochs.orig/bios/rombios32.c -+++ bochs/bios/rombios32.c -@@ -2218,7 +2218,7 @@ void smbios_init(void) - for ( i = 0; i < nr_mem_devs; i++ ) - { - uint32_t dev_memsize = ((i == (nr_mem_devs - 1)) -- ? (memsize & 0x3fff) : 0x4000); -+ ? (((memsize-1) & 0x3fff)+1) : 0x4000); - add_struct(smbios_type_17_init(p, dev_memsize, i)); - add_struct(smbios_type_19_init(p, dev_memsize, i)); - add_struct(smbios_type_20_init(p, dev_memsize, i)); - - diff --git a/pc-bios/bios-pq/0006_qemu-bios-use-preprocessor-for-pci-link-routing.patch b/pc-bios/bios-pq/0006_qemu-bios-use-preprocessor-for-pci-link-routing.patch deleted file mode 100644 index 9a2eef4c60..0000000000 --- a/pc-bios/bios-pq/0006_qemu-bios-use-preprocessor-for-pci-link-routing.patch +++ /dev/null @@ -1,73 +0,0 @@ -qemu: bios: use preprocessor for pci link routing (Avi Kivity) - -Signed-off-by: Avi Kivity -Signed-off-by: Anthony Liguori - -Index: bochs/bios/acpi-dsdt.dsl -=================================================================== ---- bochs.orig/bios/acpi-dsdt.dsl -+++ bochs/bios/acpi-dsdt.dsl -@@ -47,42 +47,22 @@ DefinitionBlock ( - section 6.2.8.1 */ - /* Note: we provide the same info as the PCI routing - table of the Bochs BIOS */ -- -- // PCI Slot 0 -- Package() {0x0000ffff, 0, LNKD, 0}, -- Package() {0x0000ffff, 1, LNKA, 0}, -- Package() {0x0000ffff, 2, LNKB, 0}, -- Package() {0x0000ffff, 3, LNKC, 0}, -- -- // PCI Slot 1 -- Package() {0x0001ffff, 0, LNKA, 0}, -- Package() {0x0001ffff, 1, LNKB, 0}, -- Package() {0x0001ffff, 2, LNKC, 0}, -- Package() {0x0001ffff, 3, LNKD, 0}, -- -- // PCI Slot 2 -- Package() {0x0002ffff, 0, LNKB, 0}, -- Package() {0x0002ffff, 1, LNKC, 0}, -- Package() {0x0002ffff, 2, LNKD, 0}, -- Package() {0x0002ffff, 3, LNKA, 0}, -- -- // PCI Slot 3 -- Package() {0x0003ffff, 0, LNKC, 0}, -- Package() {0x0003ffff, 1, LNKD, 0}, -- Package() {0x0003ffff, 2, LNKA, 0}, -- Package() {0x0003ffff, 3, LNKB, 0}, -- -- // PCI Slot 4 -- Package() {0x0004ffff, 0, LNKD, 0}, -- Package() {0x0004ffff, 1, LNKA, 0}, -- Package() {0x0004ffff, 2, LNKB, 0}, -- Package() {0x0004ffff, 3, LNKC, 0}, -- -- // PCI Slot 5 -- Package() {0x0005ffff, 0, LNKA, 0}, -- Package() {0x0005ffff, 1, LNKB, 0}, -- Package() {0x0005ffff, 2, LNKC, 0}, -- Package() {0x0005ffff, 3, LNKD, 0}, -+#define prt_slot(nr, lnk0, lnk1, lnk2, lnk3) \ -+ Package() { nr##ffff, 0, lnk0, 0 }, \ -+ Package() { nr##ffff, 1, lnk1, 0 }, \ -+ Package() { nr##ffff, 2, lnk2, 0 }, \ -+ Package() { nr##ffff, 3, lnk3, 0 } -+ -+#define prt_slot0(nr) prt_slot(nr, LNKD, LNKA, LNKB, LNKC) -+#define prt_slot1(nr) prt_slot(nr, LNKA, LNKB, LNKC, LNKD) -+#define prt_slot2(nr) prt_slot(nr, LNKB, LNKC, LNKD, LNKA) -+#define prt_slot3(nr) prt_slot(nr, LNKC, LNKD, LNKA, LNKB) -+ prt_slot0(0x0000), -+ prt_slot1(0x0001), -+ prt_slot2(0x0002), -+ prt_slot3(0x0003), -+ prt_slot0(0x0004), -+ prt_slot1(0x0005), - }) - - Name (_CRS, ResourceTemplate () - --- - - - diff --git a/pc-bios/bios-pq/0007_bios-add-26-pci-slots,-bringing-the-total-to-32.patch b/pc-bios/bios-pq/0007_bios-add-26-pci-slots,-bringing-the-total-to-32.patch deleted file mode 100644 index 7cdc3d8b28..0000000000 --- a/pc-bios/bios-pq/0007_bios-add-26-pci-slots,-bringing-the-total-to-32.patch +++ /dev/null @@ -1,49 +0,0 @@ -bios: add 26 pci slots, bringing the total to 32 (Avi Kivity) - -lack of pci slots causes Windows to complain when installing too many devices. - -Signed-off-by: Avi Kivity -Signed-off-by: Anthony Liguori - -Index: bochs/bios/acpi-dsdt.dsl -=================================================================== ---- bochs.orig/bios/acpi-dsdt.dsl -+++ bochs/bios/acpi-dsdt.dsl -@@ -63,6 +63,32 @@ DefinitionBlock ( - prt_slot3(0x0003), - prt_slot0(0x0004), - prt_slot1(0x0005), -+ prt_slot2(0x0006), -+ prt_slot3(0x0007), -+ prt_slot0(0x0008), -+ prt_slot1(0x0009), -+ prt_slot2(0x000a), -+ prt_slot3(0x000b), -+ prt_slot0(0x000c), -+ prt_slot1(0x000d), -+ prt_slot2(0x000e), -+ prt_slot3(0x000f), -+ prt_slot0(0x0010), -+ prt_slot1(0x0011), -+ prt_slot2(0x0012), -+ prt_slot3(0x0013), -+ prt_slot0(0x0014), -+ prt_slot1(0x0015), -+ prt_slot2(0x0016), -+ prt_slot3(0x0017), -+ prt_slot0(0x0018), -+ prt_slot1(0x0019), -+ prt_slot2(0x001a), -+ prt_slot3(0x001b), -+ prt_slot0(0x001c), -+ prt_slot1(0x001d), -+ prt_slot2(0x001e), -+ prt_slot3(0x001f), - }) - - Name (_CRS, ResourceTemplate () - --- - - - diff --git a/pc-bios/bios-pq/0008_qemu-bios-provide-gpe-_l0x-methods.patch b/pc-bios/bios-pq/0008_qemu-bios-provide-gpe-_l0x-methods.patch deleted file mode 100644 index 554a3dbbc3..0000000000 --- a/pc-bios/bios-pq/0008_qemu-bios-provide-gpe-_l0x-methods.patch +++ /dev/null @@ -1,92 +0,0 @@ -qemu: bios: provide gpe _L0x methods (Glauber Costa) - -provide methods for gpe blk 0, even though they do nothing atm - -Signed-off-by: Glauber Costa -Signed-off-by: Avi Kivity -Signed-off-by: Anthony Liguori - -Index: bochs/bios/acpi-dsdt.dsl -=================================================================== ---- bochs.orig/bios/acpi-dsdt.dsl -+++ bochs/bios/acpi-dsdt.dsl -@@ -597,4 +597,59 @@ DefinitionBlock ( - Zero, /* reserved */ - Zero /* reserved */ - }) -+ -+ Scope (\_GPE) -+ { -+ Name(_HID, "ACPI0006") -+ -+ Method(_L00) { -+ Return(0x01) -+ } -+ Method(_L01) { -+ Return(0x01) -+ } -+ Method(_L02) { -+ Return(0x01) -+ } -+ Method(_L03) { -+ Return(0x01) -+ } -+ Method(_L04) { -+ Return(0x01) -+ } -+ Method(_L05) { -+ Return(0x01) -+ } -+ Method(_L06) { -+ Return(0x01) -+ } -+ Method(_L07) { -+ Return(0x01) -+ } -+ Method(_L08) { -+ Return(0x01) -+ } -+ Method(_L09) { -+ Return(0x01) -+ } -+ Method(_L0A) { -+ Return(0x01) -+ } -+ Method(_L0B) { -+ Return(0x01) -+ } -+ Method(_L0C) { -+ Return(0x01) -+ } -+ Method(_L0D) { -+ Return(0x01) -+ } -+ Method(_L0E) { -+ Return(0x01) -+ } -+ Method(_L0F) { -+ Return(0x01) -+ } -+ } -+ - } -Index: bochs/bios/rombios32.c -=================================================================== ---- bochs.orig/bios/rombios32.c -+++ bochs/bios/rombios32.c -@@ -1647,6 +1647,8 @@ void acpi_bios_init(void) - fadt->pm_tmr_len = 4; - fadt->plvl2_lat = cpu_to_le16(0xfff); // C2 state not supported - fadt->plvl3_lat = cpu_to_le16(0xfff); // C3 state not supported -+ fadt->gpe0_blk = cpu_to_le32(0xafe0); -+ fadt->gpe0_blk_len = 4; - /* WBINVD + PROC_C1 + PWR_BUTTON + SLP_BUTTON + FIX_RTC */ - fadt->flags = cpu_to_le32((1 << 0) | (1 << 2) | (1 << 4) | (1 << 5) | (1 << 6)); - acpi_build_table_header((struct acpi_table_header *)fadt, "FACP", - --- - - - - - diff --git a/pc-bios/bios-pq/0009_qemu-bios-pci-hotplug-support.patch b/pc-bios/bios-pq/0009_qemu-bios-pci-hotplug-support.patch deleted file mode 100644 index f55a335b32..0000000000 --- a/pc-bios/bios-pq/0009_qemu-bios-pci-hotplug-support.patch +++ /dev/null @@ -1,128 +0,0 @@ -qemu: bios: pci hotplug support (Marcelo Tosatti) - -Signed-off-by: Marcelo Tosatti -Signed-off-by: Anthony Liguori - -Index: bochs/bios/acpi-dsdt.dsl -=================================================================== ---- bochs.orig/bios/acpi-dsdt.dsl -+++ bochs/bios/acpi-dsdt.dsl -@@ -91,6 +91,61 @@ DefinitionBlock ( - prt_slot3(0x001f), - }) - -+ OperationRegion(PCST, SystemIO, 0xae00, 0x08) -+ Field (PCST, DWordAcc, NoLock, WriteAsZeros) -+ { -+ PCIU, 32, -+ PCID, 32, -+ } -+ -+ OperationRegion(SEJ, SystemIO, 0xae08, 0x04) -+ Field (SEJ, DWordAcc, NoLock, WriteAsZeros) -+ { -+ B0EJ, 32, -+ } -+ -+#define hotplug_slot(name, nr) \ -+ Device (S##name) { \ -+ Name (_ADR, nr##0000) \ -+ Method (_EJ0,1) { \ -+ Store(ShiftLeft(1, nr), B0EJ) \ -+ Return (0x0) \ -+ } \ -+ Name (_SUN, name) \ -+ } -+ -+ hotplug_slot(1, 0x0001) -+ hotplug_slot(2, 0x0002) -+ hotplug_slot(3, 0x0003) -+ hotplug_slot(4, 0x0004) -+ hotplug_slot(5, 0x0005) -+ hotplug_slot(6, 0x0006) -+ hotplug_slot(7, 0x0007) -+ hotplug_slot(8, 0x0008) -+ hotplug_slot(9, 0x0009) -+ hotplug_slot(10, 0x000a) -+ hotplug_slot(11, 0x000b) -+ hotplug_slot(12, 0x000c) -+ hotplug_slot(13, 0x000d) -+ hotplug_slot(14, 0x000e) -+ hotplug_slot(15, 0x000f) -+ hotplug_slot(16, 0x0010) -+ hotplug_slot(17, 0x0011) -+ hotplug_slot(18, 0x0012) -+ hotplug_slot(19, 0x0013) -+ hotplug_slot(20, 0x0014) -+ hotplug_slot(21, 0x0015) -+ hotplug_slot(22, 0x0016) -+ hotplug_slot(23, 0x0017) -+ hotplug_slot(24, 0x0018) -+ hotplug_slot(25, 0x0019) -+ hotplug_slot(26, 0x001a) -+ hotplug_slot(27, 0x001b) -+ hotplug_slot(28, 0x001c) -+ hotplug_slot(29, 0x001d) -+ hotplug_slot(30, 0x001e) -+ hotplug_slot(31, 0x001f) -+ - Name (_CRS, ResourceTemplate () - { - WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode, -@@ -605,8 +660,50 @@ DefinitionBlock ( - Method(_L00) { - Return(0x01) - } -+ -+#define gen_pci_hotplug(nr) \ -+ If (And(\_SB.PCI0.PCIU, ShiftLeft(1, nr))) { \ -+ Notify(\_SB.PCI0.S##nr, 1) \ -+ } \ -+ If (And(\_SB.PCI0.PCID, ShiftLeft(1, nr))) { \ -+ Notify(\_SB.PCI0.S##nr, 3) \ -+ } -+ - Method(_L01) { -- Return(0x01) -+ gen_pci_hotplug(1) -+ gen_pci_hotplug(2) -+ gen_pci_hotplug(3) -+ gen_pci_hotplug(4) -+ gen_pci_hotplug(5) -+ gen_pci_hotplug(6) -+ gen_pci_hotplug(7) -+ gen_pci_hotplug(8) -+ gen_pci_hotplug(9) -+ gen_pci_hotplug(10) -+ gen_pci_hotplug(11) -+ gen_pci_hotplug(12) -+ gen_pci_hotplug(13) -+ gen_pci_hotplug(14) -+ gen_pci_hotplug(15) -+ gen_pci_hotplug(16) -+ gen_pci_hotplug(17) -+ gen_pci_hotplug(18) -+ gen_pci_hotplug(19) -+ gen_pci_hotplug(20) -+ gen_pci_hotplug(21) -+ gen_pci_hotplug(22) -+ gen_pci_hotplug(23) -+ gen_pci_hotplug(24) -+ gen_pci_hotplug(25) -+ gen_pci_hotplug(26) -+ gen_pci_hotplug(27) -+ gen_pci_hotplug(28) -+ gen_pci_hotplug(29) -+ gen_pci_hotplug(30) -+ gen_pci_hotplug(31) -+ -+ Return (0x01) -+ - } - Method(_L02) { - Return(0x01) - --- - - - diff --git a/pc-bios/bios-pq/0010_bios-mark-the-acpi-sci-interrupt-as-connected-to-irq-9.patch b/pc-bios/bios-pq/0010_bios-mark-the-acpi-sci-interrupt-as-connected-to-irq-9.patch deleted file mode 100644 index bd7403f88c..0000000000 --- a/pc-bios/bios-pq/0010_bios-mark-the-acpi-sci-interrupt-as-connected-to-irq-9.patch +++ /dev/null @@ -1,26 +0,0 @@ -bios: mark the acpi sci interrupt as connected to irq 9 (Avi Kivity) - -Due to a chipset bug, the sci interrupt is hardwired to irq 9. Set the -pci interrupt line register accordingly. - -Signed-off-by: Avi Kivity -Signed-off-by: Anthony Liguori - -Index: bochs/bios/rombios32.c -=================================================================== ---- bochs.orig/bios/rombios32.c -+++ bochs/bios/rombios32.c -@@ -981,6 +981,8 @@ static void pci_bios_init_device(PCIDevi - /* PIIX4 Power Management device (for ACPI) */ - pm_io_base = PM_IO_BASE; - smb_io_base = SMB_IO_BASE; -+ // acpi sci is hardwired to 9 -+ pci_config_writeb(d, PCI_INTERRUPT_LINE, 9); - pm_sci_int = pci_config_readb(d, PCI_INTERRUPT_LINE); - piix4_pm_enable(d); - acpi_enabled = 1; - --- - - - diff --git a/pc-bios/bios-pq/0011_read-additional-acpi-tables-from-a-vm.patch b/pc-bios/bios-pq/0011_read-additional-acpi-tables-from-a-vm.patch deleted file mode 100644 index 1aa09fdd2a..0000000000 --- a/pc-bios/bios-pq/0011_read-additional-acpi-tables-from-a-vm.patch +++ /dev/null @@ -1,150 +0,0 @@ -Read additional ACPI tables from a VM (Gleb Natapov) - -Signed-off-by: Gleb Natapov -Signed-off-by: Anthony Liguori - -diff --git a/bios/rombios32.c b/bios/rombios32.c -index 27c5952..7be4216 100644 ---- a/bios/rombios32.c -+++ b/bios/rombios32.c -@@ -469,6 +469,8 @@ void wrmsr_smp(uint32_t index, uint64_t val) - #define QEMU_CFG_SIGNATURE 0x00 - #define QEMU_CFG_ID 0x01 - #define QEMU_CFG_UUID 0x02 -+#define QEMU_CFG_ARCH_LOCAL 0x8000 -+#define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0) - - int qemu_cfg_port; - -@@ -496,6 +498,27 @@ void qemu_cfg_read(uint8_t *buf, int len) - while (len--) - *(buf++) = inb(QEMU_CFG_DATA_PORT); - } -+ -+static uint16_t acpi_additional_tables(void) -+{ -+ uint16_t cnt; -+ -+ qemu_cfg_select(QEMU_CFG_ACPI_TABLES); -+ qemu_cfg_read((uint8_t*)&cnt, sizeof(cnt)); -+ -+ return cnt; -+} -+ -+static int acpi_load_table(int i, uint32_t addr, uint16_t *len) -+{ -+ qemu_cfg_read((uint8_t*)len, sizeof(*len)); -+ -+ if (!*len) -+ return -1; -+ -+ qemu_cfg_read((uint8_t*)addr, *len); -+ return 0; -+} - #endif - - void uuid_probe(void) -@@ -1550,8 +1573,8 @@ void acpi_bios_init(void) - 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; -+ uint32_t acpi_tables_size, madt_addr, madt_size, rsdt_size; -+ uint16_t i, external_tables; - - /* reserve memory space for tables */ - #ifdef BX_USE_EBDA_TABLES -@@ -1564,10 +1587,17 @@ void acpi_bios_init(void) - bios_table_cur_addr += sizeof(*rsdp); - #endif - -+#ifdef BX_QEMU -+ external_tables = acpi_additional_tables(); -+#else -+ external_tables = 0; -+#endif -+ - addr = base_addr = ram_size - ACPI_DATA_SIZE; - rsdt_addr = addr; - rsdt = (void *)(addr); -- addr += sizeof(*rsdt); -+ rsdt_size = sizeof(*rsdt) + external_tables * 4; -+ addr += rsdt_size; - - fadt_addr = addr; - fadt = (void *)(addr); -@@ -1606,12 +1636,6 @@ void acpi_bios_init(void) - 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", -- (unsigned long)rsdp, -- (unsigned long)rsdt, acpi_tables_size); -- - /* RSDP */ - memset(rsdp, 0, sizeof(*rsdp)); - memcpy(rsdp->signature, "RSD PTR ", 8); -@@ -1623,17 +1647,6 @@ void acpi_bios_init(void) - rsdp->rsdt_physical_address = cpu_to_le32(rsdt_addr); - rsdp->checksum = acpi_checksum((void *)rsdp, 20); - -- /* RSDT */ -- memset(rsdt, 0, sizeof(*rsdt)); -- 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); -- - /* FADT */ - memset(fadt, 0, sizeof(*fadt)); - fadt->firmware_ctrl = cpu_to_le32(facs_addr); -@@ -1710,6 +1723,7 @@ void acpi_bios_init(void) - "APIC", madt_size, 1); - } - -+ memset(rsdt, 0, rsdt_size); - #ifdef BX_QEMU - /* HPET */ - memset(hpet, 0, sizeof(*hpet)); -@@ -1720,7 +1734,34 @@ void acpi_bios_init(void) - hpet->addr.address = cpu_to_le32(ACPI_HPET_ADDRESS); - acpi_build_table_header((struct acpi_table_header *)hpet, - "HPET", sizeof(*hpet), 1); -+ -+ acpi_additional_tables(); /* resets cfg to required entry */ -+ for(i = 0; i < external_tables; i++) { -+ uint16_t len; -+ if(acpi_load_table(i, addr, &len) < 0) -+ BX_PANIC("Failed to load ACPI table from QEMU\n"); -+ rsdt->table_offset_entry[i+4] = cpu_to_le32(addr); -+ addr += len; -+ if(addr >= ram_size) -+ BX_PANIC("ACPI table overflow\n"); -+ } -+#endif -+ -+ /* RSDT */ -+ 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", rsdt_size, 1); -+ -+ acpi_tables_size = addr - base_addr; -+ -+ BX_INFO("ACPI tables: RSDP addr=0x%08lx ACPI DATA addr=0x%08lx size=0x%x\n", -+ (unsigned long)rsdp, -+ (unsigned long)rsdt, acpi_tables_size); - - } - diff --git a/pc-bios/bios-pq/0012-load-smbios-entries-and-files-from-qemu.patch b/pc-bios/bios-pq/0012-load-smbios-entries-and-files-from-qemu.patch deleted file mode 100644 index e7a1204116..0000000000 --- a/pc-bios/bios-pq/0012-load-smbios-entries-and-files-from-qemu.patch +++ /dev/null @@ -1,470 +0,0 @@ -qemu:bios: Load SMBIOS entries and files from qemu (Alex Williamson) - -Allow SMBIOS fields to be overridden and entries replaced by those -read from qemu. - -Signed-off-by: Alex Williamson -Signed-off-by: Anthony Liguori - -diff --git a/bios/rombios32.c b/bios/rombios32.c -index 7be4216..1a1ed64 100644 ---- a/bios/rombios32.c -+++ b/bios/rombios32.c -@@ -441,7 +441,6 @@ uint32_t cpuid_features; - uint32_t cpuid_ext_features; - unsigned long ram_size; - uint64_t ram_end; --uint8_t bios_uuid[16]; - #ifdef BX_USE_EBDA_TABLES - unsigned long ebda_cur_addr; - #endif -@@ -471,6 +470,7 @@ void wrmsr_smp(uint32_t index, uint64_t val) - #define QEMU_CFG_UUID 0x02 - #define QEMU_CFG_ARCH_LOCAL 0x8000 - #define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0) -+#define QEMU_CFG_SMBIOS_ENTRIES (QEMU_CFG_ARCH_LOCAL + 1) - - int qemu_cfg_port; - -@@ -519,19 +519,17 @@ static int acpi_load_table(int i, uint32_t addr, uint16_t *len) - qemu_cfg_read((uint8_t*)addr, *len); - return 0; - } --#endif - --void uuid_probe(void) -+static uint16_t smbios_entries(void) - { --#ifdef BX_QEMU -- if(qemu_cfg_port) { -- qemu_cfg_select(QEMU_CFG_UUID); -- qemu_cfg_read(bios_uuid, 16); -- return; -- } --#endif -- memset(bios_uuid, 0, 16); -+ uint16_t cnt; -+ -+ qemu_cfg_select(QEMU_CFG_SMBIOS_ENTRIES); -+ qemu_cfg_read((uint8_t*)&cnt, sizeof(cnt)); -+ -+ return cnt; - } -+#endif - - void cpu_probe(void) - { -@@ -1963,21 +1961,105 @@ smbios_entry_point_init(void *start, - ep->intermediate_checksum = -sum; - } - -+struct smbios_header { -+ uint16_t length; -+ uint8_t type; -+} __attribute__((__packed__)); -+ -+struct smbios_field { -+ struct smbios_header header; -+ uint8_t type; -+ uint16_t offset; -+ uint8_t data[]; -+} __attribute__((__packed__)); -+ -+struct smbios_table { -+ struct smbios_header header; -+ uint8_t data[]; -+} __attribute__((__packed__)); -+ -+#define SMBIOS_FIELD_ENTRY 0 -+#define SMBIOS_TABLE_ENTRY 1 -+ -+static size_t -+smbios_load_field(int type, size_t offset, void *addr) -+{ -+#ifdef BX_QEMU -+ int i; -+ -+ for (i = smbios_entries(); i > 0; i--) { -+ struct smbios_field field; -+ -+ qemu_cfg_read((uint8_t *)&field, sizeof(struct smbios_header)); -+ field.header.length -= sizeof(struct smbios_header); -+ -+ if (field.header.type != SMBIOS_FIELD_ENTRY) { -+ while (field.header.length--) -+ inb(QEMU_CFG_DATA_PORT); -+ continue; -+ } -+ -+ qemu_cfg_read((uint8_t *)&field.type, -+ sizeof(field) - sizeof(struct smbios_header)); -+ field.header.length -= sizeof(field) - sizeof(struct smbios_header); -+ -+ if (field.type != type || field.offset != offset) { -+ while (field.header.length--) -+ inb(QEMU_CFG_DATA_PORT); -+ continue; -+ } -+ -+ qemu_cfg_read(addr, field.header.length); -+ return (size_t)field.header.length; -+ } -+#endif -+ return 0; -+} -+ -+#define load_str_field_with_default(type, field, def) do { \ -+ size = smbios_load_field(type, offsetof(struct smbios_type_##type, \ -+ field), end); \ -+ if (size > 0) { \ -+ end += size; \ -+ } else { \ -+ memcpy(end, def, sizeof(def)); \ -+ end += sizeof(def); \ -+ } \ -+ p->field = ++str_index; \ -+} while (0) -+ -+#define load_str_field_or_skip(type, field) do { \ -+ size = smbios_load_field(type, offsetof(struct smbios_type_##type, \ -+ field), end); \ -+ if (size > 0) { \ -+ end += size; \ -+ p->field = ++str_index; \ -+ } else { \ -+ p->field = 0; \ -+ } \ -+} while (0) -+ - /* Type 0 -- BIOS Information */ - #define RELEASE_DATE_STR "01/01/2007" - static void * --smbios_type_0_init(void *start) -+smbios_init_type_0(void *start) - { - struct smbios_type_0 *p = (struct smbios_type_0 *)start; -+ char *end = (char *)start + sizeof(struct smbios_type_0); -+ size_t size; -+ int str_index = 0; - - p->header.type = 0; - p->header.length = sizeof(struct smbios_type_0); - p->header.handle = 0; - -- p->vendor_str = 1; -- p->bios_version_str = 1; -+ load_str_field_with_default(0, vendor_str, BX_APPNAME); -+ load_str_field_with_default(0, bios_version_str, BX_APPNAME); -+ - p->bios_starting_address_segment = 0xe800; -- p->bios_release_date_str = 2; -+ -+ load_str_field_with_default(0, bios_release_date_str, RELEASE_DATE_STR); -+ - p->bios_rom_size = 0; /* FIXME */ - - memset(p->bios_characteristics, 0, 8); -@@ -1985,50 +2067,66 @@ smbios_type_0_init(void *start) - p->bios_characteristics_extension_bytes[0] = 0; - p->bios_characteristics_extension_bytes[1] = 0; - -- p->system_bios_major_release = 1; -- p->system_bios_minor_release = 0; -+ if (!smbios_load_field(0, offsetof(struct smbios_type_0, -+ system_bios_major_release), -+ &p->system_bios_major_release)) -+ p->system_bios_major_release = 1; -+ -+ if (!smbios_load_field(0, offsetof(struct smbios_type_0, -+ system_bios_minor_release), -+ &p->system_bios_minor_release)) -+ p->system_bios_minor_release = 0; -+ - p->embedded_controller_major_release = 0xff; - p->embedded_controller_minor_release = 0xff; - -- start += sizeof(struct smbios_type_0); -- memcpy((char *)start, BX_APPNAME, sizeof(BX_APPNAME)); -- start += sizeof(BX_APPNAME); -- memcpy((char *)start, RELEASE_DATE_STR, sizeof(RELEASE_DATE_STR)); -- start += sizeof(RELEASE_DATE_STR); -- *((uint8_t *)start) = 0; -+ *end = 0; -+ end++; - -- return start+1; -+ return end; - } - - /* Type 1 -- System Information */ - static void * --smbios_type_1_init(void *start) -+smbios_init_type_1(void *start) - { - struct smbios_type_1 *p = (struct smbios_type_1 *)start; -+ char *end = (char *)start + sizeof(struct smbios_type_1); -+ size_t size; -+ int str_index = 0; -+ - p->header.type = 1; - p->header.length = sizeof(struct smbios_type_1); - p->header.handle = 0x100; - -- p->manufacturer_str = 0; -- p->product_name_str = 0; -- p->version_str = 0; -- p->serial_number_str = 0; -+ load_str_field_or_skip(1, manufacturer_str); -+ load_str_field_or_skip(1, product_name_str); -+ load_str_field_or_skip(1, version_str); -+ load_str_field_or_skip(1, serial_number_str); - -- memcpy(p->uuid, bios_uuid, 16); -+ size = smbios_load_field(1, offsetof(struct smbios_type_1, -+ uuid), &p->uuid); -+ if (size == 0) -+ memset(p->uuid, 0, 16); - - p->wake_up_type = 0x06; /* power switch */ -- p->sku_number_str = 0; -- p->family_str = 0; - -- start += sizeof(struct smbios_type_1); -- *((uint16_t *)start) = 0; -+ load_str_field_or_skip(1, sku_number_str); -+ load_str_field_or_skip(1, family_str); - -- return start+2; -+ *end = 0; -+ end++; -+ if (!str_index) { -+ *end = 0; -+ end++; -+ } -+ -+ return end; - } - - /* Type 3 -- System Enclosure */ - static void * --smbios_type_3_init(void *start) -+smbios_init_type_3(void *start) - { - struct smbios_type_3 *p = (struct smbios_type_3 *)start; - -@@ -2058,7 +2156,7 @@ smbios_type_3_init(void *start) - - /* Type 4 -- Processor Information */ - static void * --smbios_type_4_init(void *start, unsigned int cpu_number) -+smbios_init_type_4(void *start, unsigned int cpu_number) - { - struct smbios_type_4 *p = (struct smbios_type_4 *)start; - -@@ -2098,7 +2196,7 @@ smbios_type_4_init(void *start, unsigned int cpu_number) - - /* Type 16 -- Physical Memory Array */ - static void * --smbios_type_16_init(void *start, uint32_t memsize, int nr_mem_devs) -+smbios_init_type_16(void *start, uint32_t memsize, int nr_mem_devs) - { - struct smbios_type_16 *p = (struct smbios_type_16*)start; - -@@ -2121,7 +2219,7 @@ smbios_type_16_init(void *start, uint32_t memsize, int nr_mem_devs) - - /* Type 17 -- Memory Device */ - static void * --smbios_type_17_init(void *start, uint32_t memory_size_mb, int instance) -+smbios_init_type_17(void *start, uint32_t memory_size_mb, int instance) - { - struct smbios_type_17 *p = (struct smbios_type_17 *)start; - -@@ -2151,7 +2249,7 @@ smbios_type_17_init(void *start, uint32_t memory_size_mb, int instance) - - /* Type 19 -- Memory Array Mapped Address */ - static void * --smbios_type_19_init(void *start, uint32_t memory_size_mb, int instance) -+smbios_init_type_19(void *start, uint32_t memory_size_mb, int instance) - { - struct smbios_type_19 *p = (struct smbios_type_19 *)start; - -@@ -2172,7 +2270,7 @@ smbios_type_19_init(void *start, uint32_t memory_size_mb, int instance) - - /* Type 20 -- Memory Device Mapped Address */ - static void * --smbios_type_20_init(void *start, uint32_t memory_size_mb, int instance) -+smbios_init_type_20(void *start, uint32_t memory_size_mb, int instance) - { - struct smbios_type_20 *p = (struct smbios_type_20 *)start; - -@@ -2196,7 +2294,7 @@ smbios_type_20_init(void *start, uint32_t memory_size_mb, int instance) - - /* Type 32 -- System Boot Information */ - static void * --smbios_type_32_init(void *start) -+smbios_init_type_32(void *start) - { - struct smbios_type_32 *p = (struct smbios_type_32 *)start; - -@@ -2214,7 +2312,7 @@ smbios_type_32_init(void *start) - - /* Type 127 -- End of Table */ - static void * --smbios_type_127_init(void *start) -+smbios_init_type_127(void *start) - { - struct smbios_type_127 *p = (struct smbios_type_127 *)start; - -@@ -2228,6 +2326,78 @@ smbios_type_127_init(void *start) - return start + 2; - } - -+static int -+smbios_load_external(int type, char **p, unsigned *nr_structs, -+ unsigned *max_struct_size) -+{ -+#ifdef BX_QEMU -+ static uint64_t used_bitmap[4] = { 0 }; -+ char *start = *p; -+ int i; -+ -+ /* Check if we've already reported these tables */ -+ if (used_bitmap[(type >> 6) & 0x3] & (1ULL << (type & 0x3f))) -+ return 1; -+ -+ /* Don't introduce spurious end markers */ -+ if (type == 127) -+ return 0; -+ -+ for (i = smbios_entries(); i > 0; i--) { -+ struct smbios_table table; -+ struct smbios_structure_header *header = (void *)*p; -+ int string; -+ -+ qemu_cfg_read((uint8_t *)&table, sizeof(struct smbios_header)); -+ table.header.length -= sizeof(struct smbios_header); -+ -+ if (table.header.type != SMBIOS_TABLE_ENTRY) { -+ while (table.header.length--) -+ inb(QEMU_CFG_DATA_PORT); -+ continue; -+ } -+ -+ qemu_cfg_read((uint8_t *)*p, sizeof(struct smbios_structure_header)); -+ table.header.length -= sizeof(struct smbios_structure_header); -+ -+ if (header->type != type) { -+ while (table.header.length--) -+ inb(QEMU_CFG_DATA_PORT); -+ continue; -+ } -+ -+ *p += sizeof(struct smbios_structure_header); -+ -+ /* Entries end with a double NULL char, if there's a string at -+ * the end (length is greater than formatted length), the string -+ * terminator provides the first NULL. */ -+ string = header->length < table.header.length + -+ sizeof(struct smbios_structure_header); -+ -+ /* Read the rest and terminate the entry */ -+ qemu_cfg_read((uint8_t *)*p, table.header.length); -+ *p += table.header.length; -+ *((uint8_t*)*p) = 0; -+ (*p)++; -+ if (!string) { -+ *((uint8_t*)*p) = 0; -+ (*p)++; -+ } -+ -+ (*nr_structs)++; -+ if (*p - (char *)header > *max_struct_size) -+ *max_struct_size = *p - (char *)header; -+ } -+ -+ /* Mark that we've reported on this type */ -+ used_bitmap[(type >> 6) & 0x3] |= (1ULL << (type & 0x3f)); -+ -+ return (start != *p); -+#else /* !BX_QEMU */ -+ return 0; -+#endif -+} -+ - void smbios_init(void) - { - unsigned cpu_num, nr_structs = 0, max_struct_size = 0; -@@ -2246,34 +2416,39 @@ void smbios_init(void) - - p = (char *)start + sizeof(struct smbios_entry_point); - --#define add_struct(fn) do{ \ -- q = (fn); \ -- nr_structs++; \ -- if ((q - p) > max_struct_size) \ -- max_struct_size = q - p; \ -- p = q; \ --}while (0) -- -- add_struct(smbios_type_0_init(p)); -- add_struct(smbios_type_1_init(p)); -- add_struct(smbios_type_3_init(p)); -+#define add_struct(type, args...) do { \ -+ if (!smbios_load_external(type, &p, &nr_structs, &max_struct_size)) { \ -+ q = smbios_init_type_##type(args); \ -+ nr_structs++; \ -+ if ((q - p) > max_struct_size) \ -+ max_struct_size = q - p; \ -+ p = q; \ -+ } \ -+} while (0) -+ -+ add_struct(0, p); -+ add_struct(1, p); -+ add_struct(3, p); - for (cpu_num = 1; cpu_num <= smp_cpus; cpu_num++) -- add_struct(smbios_type_4_init(p, cpu_num)); -+ add_struct(4, p, cpu_num); - - /* Each 'memory device' covers up to 16GB of address space. */ - nr_mem_devs = (memsize + 0x3fff) >> 14; -- add_struct(smbios_type_16_init(p, memsize, nr_mem_devs)); -+ add_struct(16, p, memsize, nr_mem_devs); - for ( i = 0; i < nr_mem_devs; i++ ) - { - uint32_t dev_memsize = ((i == (nr_mem_devs - 1)) - ? (((memsize-1) & 0x3fff)+1) : 0x4000); -- add_struct(smbios_type_17_init(p, dev_memsize, i)); -- add_struct(smbios_type_19_init(p, dev_memsize, i)); -- add_struct(smbios_type_20_init(p, dev_memsize, i)); -+ add_struct(17, p, dev_memsize, i); -+ add_struct(19, p, dev_memsize, i); -+ add_struct(20, p, dev_memsize, i); - } - -- add_struct(smbios_type_32_init(p)); -- add_struct(smbios_type_127_init(p)); -+ add_struct(32, p); -+ /* Add any remaining provided entries before the end marker */ -+ for (i = 0; i < 256; i++) -+ smbios_load_external(i, &p, &nr_structs, &max_struct_size); -+ add_struct(127, p); - - #undef add_struct - -@@ -2380,8 +2555,6 @@ void rombios32_init(uint32_t *s3_resume_vector, uint8_t *shutdown_flag) - - mptable_init(); - -- uuid_probe(); -- - smbios_init(); - - if (acpi_enabled) - - --- -To unsubscribe from this list: send the line "unsubscribe kvm" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html - diff --git a/pc-bios/bios-pq/0013_fix-non-acpi-timer-interrupt-routing.patch b/pc-bios/bios-pq/0013_fix-non-acpi-timer-interrupt-routing.patch deleted file mode 100644 index 80e7716c6b..0000000000 --- a/pc-bios/bios-pq/0013_fix-non-acpi-timer-interrupt-routing.patch +++ /dev/null @@ -1,60 +0,0 @@ -From c09142004a409bf27070939f470c5e0b37595a5a Mon Sep 17 00:00:00 2001 -From: Beth Kon -Date: Fri, 19 Jun 2009 14:22:00 -0400 -Subject: [PATCH] Fix non-ACPI Timer Interrupt Routing - v3 - -Replicate ACPI irq0->inti2 override in mp table for non-acpi case. - -v1 -> v2 adds comment suggested by Ryan. -v2 -> v3 clarifies comment and corrects entry count - -Signed-off-by: Beth Kon -Signed-off-by: Anthony Liguori ---- - bios/rombios32.c | 14 ++++++++++++++ - 1 files changed, 14 insertions(+), 0 deletions(-) - -diff --git a/bios/rombios32.c b/bios/rombios32.c -index 1a1ed64..d789e20 100644 ---- a/bios/rombios32.c -+++ b/bios/rombios32.c -@@ -1124,7 +1124,11 @@ static void mptable_init(void) - putstr(&q, "0.1 "); /* vendor id */ - putle32(&q, 0); /* OEM table ptr */ - putle16(&q, 0); /* OEM table size */ -+#ifdef BX_QEMU -+ putle16(&q, smp_cpus + 17); /* entry count */ -+#else - putle16(&q, smp_cpus + 18); /* entry count */ -+#endif - putle32(&q, 0xfee00000); /* local APIC addr */ - putle16(&q, 0); /* ext table length */ - putb(&q, 0); /* ext table checksum */ -@@ -1166,6 +1170,12 @@ static void mptable_init(void) - - /* irqs */ - for(i = 0; i < 16; i++) { -+#ifdef BX_QEMU -+ /* One entry per ioapic interrupt destination. Destination 2 is covered -+ by irq0->inti2 override (i == 0). Source IRQ 2 is unused */ -+ if (i == 2) -+ continue; -+#endif - putb(&q, 3); /* entry type = I/O interrupt */ - putb(&q, 0); /* interrupt type = vectored interrupt */ - putb(&q, 0); /* flags: po=0, el=0 */ -@@ -1173,7 +1183,11 @@ static void mptable_init(void) - putb(&q, 0); /* source bus ID = ISA */ - putb(&q, i); /* source bus IRQ */ - putb(&q, ioapic_id); /* dest I/O APIC ID */ -+#ifdef BX_QEMU -+ putb(&q, i == 0 ? 2 : i); /* dest I/O APIC interrupt in */ -+#else - putb(&q, i); /* dest I/O APIC interrupt in */ -+#endif - } - /* patch length */ - len = q - mp_config_table; --- -1.6.2.5 - diff --git a/pc-bios/bios-pq/0014_add-srat-acpi-table-support.patch b/pc-bios/bios-pq/0014_add-srat-acpi-table-support.patch deleted file mode 100644 index a5227df259..0000000000 --- a/pc-bios/bios-pq/0014_add-srat-acpi-table-support.patch +++ /dev/null @@ -1,305 +0,0 @@ -add SRAT ACPI table support (Andre Przywara) - -Take NUMA topology info from the QEMU firmware configuration interface -(number of nodes, node for each (V)CPU and amount of memory) and build -a SRAT table describing this topology for the guest OS. Handles more than -4 GB of RAM by including a hole for 32bit PCI memory mapping. - -Signed-off-by: Andre Przywara -Signed-off-by: Anthony Liguori - -diff --git a/bios/rombios32.c b/bios/rombios32.c -index 49dfd62..d8f6d4e 100644 ---- a/bios/rombios32.c -+++ b/bios/rombios32.c -@@ -450,6 +450,11 @@ int pm_sci_int; - unsigned long bios_table_cur_addr; - unsigned long bios_table_end_addr; - -+static inline uint64_t le64_to_cpu(uint64_t x) -+{ -+ return x; -+} -+ - void wrmsr_smp(uint32_t index, uint64_t val) - { - static struct { uint32_t ecx, eax, edx; } *p = (void *)SMP_MSR_ADDR; -@@ -468,6 +473,7 @@ void wrmsr_smp(uint32_t index, uint64_t val) - #define QEMU_CFG_SIGNATURE 0x00 - #define QEMU_CFG_ID 0x01 - #define QEMU_CFG_UUID 0x02 -+#define QEMU_CFG_NUMA 0x0D - #define QEMU_CFG_ARCH_LOCAL 0x8000 - #define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0) - #define QEMU_CFG_SMBIOS_ENTRIES (QEMU_CFG_ARCH_LOCAL + 1) -@@ -529,6 +535,14 @@ static uint16_t smbios_entries(void) - - return cnt; - } -+ -+uint64_t qemu_cfg_get64 (void) -+{ -+ uint64_t ret; -+ -+ qemu_cfg_read((uint8_t*)&ret, 8); -+ return le64_to_cpu(ret); -+} - #endif - - void cpu_probe(void) -@@ -1281,7 +1295,7 @@ 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 */ -+ uint32_t table_offset_entry [5]; /* Array of pointers to other */ - #else - uint32_t table_offset_entry [3]; /* Array of pointers to other */ - #endif -@@ -1389,7 +1403,7 @@ struct multiple_apic_table - } __attribute__((__packed__)); - - --/* Values for Type in APIC_HEADER_DEF */ -+/* Values for Type in APIC sub-headers */ - - #define APIC_PROCESSOR 0 - #define APIC_IO 1 -@@ -1402,18 +1416,18 @@ struct multiple_apic_table - #define APIC_XRUPT_SOURCE 8 - #define APIC_RESERVED 9 /* 9 and greater are reserved */ - --/* -- * MADT sub-structures (Follow MULTIPLE_APIC_DESCRIPTION_TABLE) -- */ --#define APIC_HEADER_DEF /* Common APIC sub-structure header */\ -+#define ACPI_SUB_HEADER_DEF /* Common ACPI sub-structure header */\ - uint8_t type; \ - uint8_t length; - -+/* -+ * MADT sub-structures (Follow MULTIPLE_APIC_DESCRIPTION_TABLE) -+ */ - /* Sub-structures for MADT */ - - struct madt_processor_apic - { -- APIC_HEADER_DEF -+ ACPI_SUB_HEADER_DEF - uint8_t processor_id; /* ACPI processor id */ - uint8_t local_apic_id; /* Processor's local APIC id */ - #if 0 -@@ -1424,6 +1438,43 @@ struct madt_processor_apic - #endif - } __attribute__((__packed__)); - -+/* -+ * SRAT (NUMA topology description) table -+ */ -+ -+#define SRAT_PROCESSOR 0 -+#define SRAT_MEMORY 1 -+ -+struct system_resource_affinity_table -+{ -+ ACPI_TABLE_HEADER_DEF -+ uint32_t reserved1; -+ uint32_t reserved2[2]; -+}; -+ -+struct srat_processor_affinity -+{ -+ ACPI_SUB_HEADER_DEF -+ uint8_t proximity_lo; -+ uint8_t local_apic_id; -+ uint32_t flags; -+ uint8_t local_sapic_eid; -+ uint8_t proximity_hi[3]; -+ uint32_t reserved; -+}; -+ -+struct srat_memory_affinity -+{ -+ ACPI_SUB_HEADER_DEF -+ uint8_t proximity[4]; -+ uint16_t reserved1; -+ uint32_t base_addr_low,base_addr_high; -+ uint32_t length_low,length_high; -+ uint32_t reserved2; -+ uint32_t flags; -+ uint32_t reserved3[2]; -+}; -+ - #ifdef BX_QEMU - /* - * * ACPI 2.0 Generic Address Space definition. -@@ -1452,7 +1503,7 @@ struct acpi_20_hpet { - - struct madt_io_apic - { -- APIC_HEADER_DEF -+ ACPI_SUB_HEADER_DEF - uint8_t io_apic_id; /* I/O APIC ID */ - uint8_t reserved; /* Reserved - must be zero */ - uint32_t address; /* APIC physical address */ -@@ -1463,7 +1514,7 @@ struct madt_io_apic - #ifdef BX_QEMU - struct madt_int_override - { -- APIC_HEADER_DEF -+ ACPI_SUB_HEADER_DEF - uint8_t bus; /* Identifies ISA Bus */ - uint8_t source; /* Bus-relative interrupt source */ - uint32_t gsi; /* GSI that source will signal */ -@@ -1567,6 +1618,21 @@ int acpi_build_processor_ssdt(uint8_t *ssdt) - return ssdt_ptr - ssdt; - } - -+static void acpi_build_srat_memory(struct srat_memory_affinity *numamem, -+ uint64_t base, uint64_t len, int node, int enabled) -+{ -+ numamem->type = SRAT_MEMORY; -+ numamem->length = sizeof(*numamem); -+ memset (numamem->proximity, 0 ,4); -+ numamem->proximity[0] = node; -+ numamem->flags = cpu_to_le32(!!enabled); -+ numamem->base_addr_low = base & 0xFFFFFFFF; -+ numamem->base_addr_high = base >> 32; -+ numamem->length_low = len & 0xFFFFFFFF; -+ numamem->length_high = len >> 32; -+ return; -+} -+ - /* base_addr must be a multiple of 4KB */ - void acpi_bios_init(void) - { -@@ -1577,12 +1643,15 @@ void acpi_bios_init(void) - struct multiple_apic_table *madt; - uint8_t *dsdt, *ssdt; - #ifdef BX_QEMU -+ struct system_resource_affinity_table *srat; - 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, rsdt_size; -+ uint32_t srat_addr,srat_size; - uint16_t i, external_tables; -+ int nb_numa_nodes; - - /* reserve memory space for tables */ - #ifdef BX_USE_EBDA_TABLES -@@ -1624,6 +1693,25 @@ void acpi_bios_init(void) - ssdt_addr = addr; - ssdt = (void *)(addr); - addr += acpi_build_processor_ssdt(ssdt); -+#ifdef BX_QEMU -+ qemu_cfg_select(QEMU_CFG_NUMA); -+ nb_numa_nodes = qemu_cfg_get64(); -+#else -+ nb_numa_nodes = 0; -+#endif -+ if (nb_numa_nodes > 0) { -+ addr = (addr + 7) & ~7; -+ srat_addr = addr; -+ srat_size = sizeof(*srat) + -+ sizeof(struct srat_processor_affinity) * smp_cpus + -+ sizeof(struct srat_memory_affinity) * (nb_numa_nodes + 2); -+ srat = (void *)(addr); -+ addr += srat_size; -+ } else { -+ srat_addr = addr; -+ srat = (void*)(addr); -+ srat_size = 0; -+ } - - addr = (addr + 7) & ~7; - madt_addr = addr; -@@ -1733,6 +1821,69 @@ void acpi_bios_init(void) - - memset(rsdt, 0, rsdt_size); - #ifdef BX_QEMU -+ /* SRAT */ -+ if (nb_numa_nodes > 0) { -+ struct srat_processor_affinity *core; -+ struct srat_memory_affinity *numamem; -+ int slots; -+ uint64_t mem_len, mem_base, next_base = 0, curnode; -+ -+ qemu_cfg_select(QEMU_CFG_NUMA); -+ qemu_cfg_get64(); -+ memset (srat, 0 , srat_size); -+ srat->reserved1=1; -+ -+ core = (void*)(srat + 1); -+ for (i = 0; i < smp_cpus; ++i) { -+ core->type = SRAT_PROCESSOR; -+ core->length = sizeof(*core); -+ core->local_apic_id = i; -+ curnode = qemu_cfg_get64(); -+ core->proximity_lo = curnode; -+ memset (core->proximity_hi, 0, 3); -+ core->local_sapic_eid = 0; -+ if (i < smp_cpus) -+ core->flags = cpu_to_le32(1); -+ else -+ core->flags = 0; -+ core++; -+ } -+ -+ /* the memory map is a bit tricky, it contains at least one hole -+ * from 640k-1M and possibly another one from 3.5G-4G. -+ */ -+ numamem = (void*)core; slots = 0; -+ acpi_build_srat_memory(numamem, 0, 640*1024, 0, 1); -+ next_base = 1024 * 1024; numamem++;slots++; -+ for (i = 1; i < nb_numa_nodes + 1; ++i) { -+ mem_base = next_base; -+ mem_len = qemu_cfg_get64(); -+ if (i == 1) mem_len -= 1024 * 1024; -+ next_base = mem_base + mem_len; -+ -+ /* Cut out the PCI hole */ -+ if (mem_base <= ram_size && next_base > ram_size) { -+ mem_len -= next_base - ram_size; -+ if (mem_len > 0) { -+ acpi_build_srat_memory(numamem, mem_base, mem_len, i-1, 1); -+ numamem++; slots++; -+ } -+ mem_base = 1ULL << 32; -+ mem_len = next_base - ram_size; -+ next_base += (1ULL << 32) - ram_size; -+ } -+ acpi_build_srat_memory(numamem, mem_base, mem_len, i-1, 1); -+ numamem++; slots++; -+ } -+ for (; slots < nb_numa_nodes + 2; slots++) { -+ acpi_build_srat_memory(numamem, 0, 0, 0, 0); -+ numamem++; -+ } -+ -+ acpi_build_table_header((struct acpi_table_header *)srat, -+ "SRAT", srat_size, 1); -+ } -+ - /* HPET */ - memset(hpet, 0, sizeof(*hpet)); - /* Note timer_block_id value must be kept in sync with value advertised by -@@ -1761,9 +1912,11 @@ void acpi_bios_init(void) - rsdt->table_offset_entry[2] = cpu_to_le32(ssdt_addr); - #ifdef BX_QEMU - rsdt->table_offset_entry[3] = cpu_to_le32(hpet_addr); -+ if (nb_numa_nodes > 0) -+ rsdt->table_offset_entry[4] = cpu_to_le32(srat_addr); - #endif -- acpi_build_table_header((struct acpi_table_header *)rsdt, -- "RSDT", rsdt_size, 1); -+ acpi_build_table_header((struct acpi_table_header *)rsdt, "RSDT", -+ rsdt_size - (nb_numa_nodes > 0? 0: sizeof(uint32_t)), 1); - - acpi_tables_size = addr - base_addr; - --- -1.6.1.3 - - diff --git a/pc-bios/bios-pq/0015_enable-power-button-even-generation.patch b/pc-bios/bios-pq/0015_enable-power-button-even-generation.patch deleted file mode 100644 index fb5880280e..0000000000 --- a/pc-bios/bios-pq/0015_enable-power-button-even-generation.patch +++ /dev/null @@ -1,20 +0,0 @@ -Enable power button event generation. - -Signed-off-by: Gleb Natapov -Signed-off-by: Anthony Liguori - -diff --git a/bios/rombios32.c b/bios/rombios32.c -index 81e3bad..9986531 100644 ---- a/bios/rombios32.c -+++ b/bios/rombios32.c -@@ -1767,8 +1767,8 @@ void acpi_bios_init(void) - fadt->plvl3_lat = cpu_to_le16(0xfff); // C3 state not supported - fadt->gpe0_blk = cpu_to_le32(0xafe0); - fadt->gpe0_blk_len = 4; -- /* WBINVD + PROC_C1 + PWR_BUTTON + SLP_BUTTON + FIX_RTC */ -- fadt->flags = cpu_to_le32((1 << 0) | (1 << 2) | (1 << 4) | (1 << 5) | (1 << 6)); -+ /* WBINVD + PROC_C1 + SLP_BUTTON + FIX_RTC */ -+ fadt->flags = cpu_to_le32((1 << 0) | (1 << 2) | (1 << 5) | (1 << 6)); - acpi_build_table_header((struct acpi_table_header *)fadt, "FACP", - sizeof(*fadt), 1); - diff --git a/pc-bios/bios-pq/0016-use-correct-mask-to-size-pci-option-rom-bar.patch b/pc-bios/bios-pq/0016-use-correct-mask-to-size-pci-option-rom-bar.patch deleted file mode 100644 index 556a0bda79..0000000000 --- a/pc-bios/bios-pq/0016-use-correct-mask-to-size-pci-option-rom-bar.patch +++ /dev/null @@ -1,33 +0,0 @@ -Subject: [PATCH] bios: Use the correct mask to size the PCI option ROM BAR -From: Alex Williamson - -Bit 0 is the enable bit, which we not only don't want to set, but -it will stick and make us think it's an I/O port resource. - -Signed-off-by: Alex Williamson -Signed-off-by: Anthony Liguori ---- - -diff --git a/bios/rombios32.c b/bios/rombios32.c -index d7e18e9..f861f81 100644 ---- a/bios/rombios32.c -+++ b/bios/rombios32.c -@@ -985,11 +985,13 @@ static void pci_bios_init_device(PCIDevice *d) - int ofs; - uint32_t val, size ; - -- if (i == PCI_ROM_SLOT) -+ if (i == PCI_ROM_SLOT) { - ofs = 0x30; -- else -+ pci_config_writel(d, ofs, 0xfffffffe); -+ } else { - ofs = 0x10 + i * 4; -- pci_config_writel(d, ofs, 0xffffffff); -+ pci_config_writel(d, ofs, 0xffffffff); -+ } - val = pci_config_readl(d, ofs); - if (val != 0) { - size = (~(val & ~0xf)) + 1; - - diff --git a/pc-bios/bios-pq/0017-bochs-bios-Move-QEMU_CFG-constants-to-rombios.h.patch b/pc-bios/bios-pq/0017-bochs-bios-Move-QEMU_CFG-constants-to-rombios.h.patch deleted file mode 100644 index f6a1788a65..0000000000 --- a/pc-bios/bios-pq/0017-bochs-bios-Move-QEMU_CFG-constants-to-rombios.h.patch +++ /dev/null @@ -1,59 +0,0 @@ -From f371c480cb93f3516f34af5e3a4524ee6ba43c24 Mon Sep 17 00:00:00 2001 -From: Jan Kiszka -Date: Thu, 2 Jul 2009 00:11:38 +0200 -Subject: [PATCH 1/2] bochs-bios: Move QEMU_CFG constants to rombios.h - -We will need them outside of rombios32.c. - -Signed-off-by: Jan Kiszka -Signed-off-by: Anthony Liguori ---- - bios/rombios.h | 10 ++++++++++ - bios/rombios32.c | 10 ---------- - 2 files changed, 10 insertions(+), 10 deletions(-) - -diff --git a/bios/rombios.h b/bios/rombios.h -index 6f9cbb1..59ce19d 100644 ---- a/bios/rombios.h -+++ b/bios/rombios.h -@@ -58,6 +58,16 @@ - #define SMB_IO_BASE 0xb100 - #define SMP_MSR_ADDR 0x0510 - -+#define QEMU_CFG_CTL_PORT 0x510 -+#define QEMU_CFG_DATA_PORT 0x511 -+#define QEMU_CFG_SIGNATURE 0x00 -+#define QEMU_CFG_ID 0x01 -+#define QEMU_CFG_UUID 0x02 -+#define QEMU_CFG_NUMA 0x0d -+#define QEMU_CFG_ARCH_LOCAL 0x8000 -+#define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0) -+#define QEMU_CFG_SMBIOS_ENTRIES (QEMU_CFG_ARCH_LOCAL + 1) -+ - // Define the application NAME - #if defined(BX_QEMU) - # define BX_APPNAME "QEMU" -diff --git a/bios/rombios32.c b/bios/rombios32.c -index f861f81..3fe4e48 100644 ---- a/bios/rombios32.c -+++ b/bios/rombios32.c -@@ -468,16 +468,6 @@ void wrmsr_smp(uint32_t index, uint64_t val) - } - - #ifdef BX_QEMU --#define QEMU_CFG_CTL_PORT 0x510 --#define QEMU_CFG_DATA_PORT 0x511 --#define QEMU_CFG_SIGNATURE 0x00 --#define QEMU_CFG_ID 0x01 --#define QEMU_CFG_UUID 0x02 --#define QEMU_CFG_NUMA 0x0D --#define QEMU_CFG_ARCH_LOCAL 0x8000 --#define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0) --#define QEMU_CFG_SMBIOS_ENTRIES (QEMU_CFG_ARCH_LOCAL + 1) -- - int qemu_cfg_port; - - void qemu_cfg_select(int f) --- -1.6.2.5 - diff --git a/pc-bios/bios-pq/0018-bochs-bios-Make-boot-prompt-optional.patch b/pc-bios/bios-pq/0018-bochs-bios-Make-boot-prompt-optional.patch deleted file mode 100644 index cda97572d1..0000000000 --- a/pc-bios/bios-pq/0018-bochs-bios-Make-boot-prompt-optional.patch +++ /dev/null @@ -1,68 +0,0 @@ -From fff8ffe1c92474ee58ebd6da82fede0ab7929214 Mon Sep 17 00:00:00 2001 -From: Jan Kiszka -Date: Thu, 2 Jul 2009 00:11:44 +0200 -Subject: [PATCH 2/2] bochs-bios: Make boot prompt optional - -Check via QEMU's firmware configuration interface if the boot prompt -should be given. This allows to disable the prompt with its several -seconds long delay, speeding up the common boot case. - -Signed-off-by: Jan Kiszka -Signed-off-by: Anthony Liguori ---- - bios/rombios.c | 19 +++++++++++++++++++ - bios/rombios.h | 1 + - 2 files changed, 20 insertions(+), 0 deletions(-) - -diff --git a/bios/rombios.c b/bios/rombios.c -index 0f13b53..560e6d5 100644 ---- a/bios/rombios.c -+++ b/bios/rombios.c -@@ -2015,6 +2015,21 @@ Bit16u i; ipl_entry_t *e; - } - - #if BX_ELTORITO_BOOT -+#ifdef BX_QEMU -+int -+qemu_cfg_probe_bootkey() -+{ -+ outw(QEMU_CFG_CTL_PORT, QEMU_CFG_SIGNATURE); -+ if (inb(QEMU_CFG_DATA_PORT) != 'Q' || -+ inb(QEMU_CFG_DATA_PORT) != 'E' || -+ inb(QEMU_CFG_DATA_PORT) != 'M' || -+ inb(QEMU_CFG_DATA_PORT) != 'U') return 1; -+ -+ outw(QEMU_CFG_CTL_PORT, QEMU_CFG_BOOT_MENU); -+ return inb(QEMU_CFG_DATA_PORT); -+} -+#endif // BX_QEMU -+ - void - interactive_bootkey() - { -@@ -2026,6 +2041,10 @@ interactive_bootkey() - Bit16u ss = get_SS(); - Bit16u valid_choice = 0; - -+#ifdef BX_QEMU -+ if (!qemu_cfg_probe_bootkey()) return; -+#endif -+ - while (check_for_keystroke()) - get_keystroke(); - -diff --git a/bios/rombios.h b/bios/rombios.h -index 59ce19d..8ece2ee 100644 ---- a/bios/rombios.h -+++ b/bios/rombios.h -@@ -64,6 +64,7 @@ - #define QEMU_CFG_ID 0x01 - #define QEMU_CFG_UUID 0x02 - #define QEMU_CFG_NUMA 0x0d -+#define QEMU_CFG_BOOT_MENU 0x0e - #define QEMU_CFG_ARCH_LOCAL 0x8000 - #define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0) - #define QEMU_CFG_SMBIOS_ENTRIES (QEMU_CFG_ARCH_LOCAL + 1) --- -1.6.2.5 - diff --git a/pc-bios/bios-pq/0019-bios-fix-multiple-calls.patch b/pc-bios/bios-pq/0019-bios-fix-multiple-calls.patch deleted file mode 100644 index cfa4c13093..0000000000 --- a/pc-bios/bios-pq/0019-bios-fix-multiple-calls.patch +++ /dev/null @@ -1,35 +0,0 @@ -bios: Fix multiple calls into smbios_load_ex - -We're marking the used entry bitmap in smbios_load_external() for each -type we check, regardless of whether we loaded anything. This makes -subsequent calls behave as if we've already loaded the tables from qemu -and can result in missing tables (ex. multiple type4 entries on an SMP -guest). Only mark the bitmap if we actually load something. - -Signed-off-by: Alex Williamson -Signed-off-by: Anthony Liguori - -diff --git a/bios/rombios32.c b/bios/rombios32.c -index f861f81..c869798 100644 ---- a/bios/rombios32.c -+++ b/bios/rombios32.c -@@ -2554,13 +2554,14 @@ smbios_load_external(int type, char **p, unsigned *nr_structs, - *max_struct_size = *p - (char *)header; - } - -- /* Mark that we've reported on this type */ -- used_bitmap[(type >> 6) & 0x3] |= (1ULL << (type & 0x3f)); -+ if (start != *p) { -+ /* Mark that we've reported on this type */ -+ used_bitmap[(type >> 6) & 0x3] |= (1ULL << (type & 0x3f)); -+ return 1; -+ } - -- return (start != *p); --#else /* !BX_QEMU */ -+#endif /* !BX_QEMU */ - return 0; --#endif - } - - void smbios_init(void) diff --git a/pc-bios/bios-pq/0020-qemu-kvm-cfg-maxcpus.patch b/pc-bios/bios-pq/0020-qemu-kvm-cfg-maxcpus.patch deleted file mode 100644 index 50e9b8c714..0000000000 --- a/pc-bios/bios-pq/0020-qemu-kvm-cfg-maxcpus.patch +++ /dev/null @@ -1,62 +0,0 @@ -Read max_cpus variable from QEMU_CFG. If not provided, use value of -smp_cpus. - -Signed-off-by: Jes Sorensen - -diff --git a/bios/rombios.h b/bios/rombios.h -index 8ece2ee..dbf3bd3 100644 ---- a/bios/rombios.h -+++ b/bios/rombios.h -@@ -65,6 +65,7 @@ - #define QEMU_CFG_UUID 0x02 - #define QEMU_CFG_NUMA 0x0d - #define QEMU_CFG_BOOT_MENU 0x0e -+#define QEMU_CFG_MAX_CPUS 0x0f - #define QEMU_CFG_ARCH_LOCAL 0x8000 - #define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0) - #define QEMU_CFG_SMBIOS_ENTRIES (QEMU_CFG_ARCH_LOCAL + 1) -diff --git a/bios/rombios32.c b/bios/rombios32.c -index 69e82b1..610fc1f 100644 ---- a/bios/rombios32.c -+++ b/bios/rombios32.c -@@ -436,6 +436,7 @@ void delay_ms(int n) - } - - uint16_t smp_cpus; -+uint16_t max_cpus; - uint32_t cpuid_signature; - uint32_t cpuid_features; - uint32_t cpuid_ext_features; -@@ -526,6 +527,19 @@ static uint16_t smbios_entries(void) - return cnt; - } - -+static uint16_t get_max_cpus(void) -+{ -+ uint16_t cnt; -+ -+ qemu_cfg_select(QEMU_CFG_MAX_CPUS); -+ qemu_cfg_read((uint8_t*)&cnt, sizeof(cnt)); -+ -+ if (!cnt) -+ cnt = smp_cpus; -+ -+ return cnt; -+} -+ - uint64_t qemu_cfg_get64 (void) - { - uint64_t ret; -@@ -2689,6 +2703,12 @@ void rombios32_init(uint32_t *s3_resume_vector, uint8_t *shutdown_flag) - - smp_probe(); - -+#ifdef BX_QEMU -+ max_cpus = get_max_cpus(); -+#else -+ max_cpus = smp_cpus; -+#endif -+ - find_bios_table_area(); - - if (*shutdown_flag == 0xfe) { diff --git a/pc-bios/bios-pq/0021-qemu-madt-maxcpus.patch b/pc-bios/bios-pq/0021-qemu-madt-maxcpus.patch deleted file mode 100644 index 49a0fdd7a5..0000000000 --- a/pc-bios/bios-pq/0021-qemu-madt-maxcpus.patch +++ /dev/null @@ -1,117 +0,0 @@ -Use max_cpus when building bios tables. - -Signed-off-by: Jes Sorensen - -diff --git a/bios/rombios32.c b/bios/rombios32.c -index e6bb164..3d15283 100644 ---- a/bios/rombios32.c -+++ b/bios/rombios32.c -@@ -1145,23 +1145,25 @@ static void mptable_init(void) - putle32(&q, 0); /* OEM table ptr */ - putle16(&q, 0); /* OEM table size */ - #ifdef BX_QEMU -- putle16(&q, smp_cpus + 17); /* entry count */ -+ putle16(&q, max_cpus + 17); /* entry count */ - #else -- putle16(&q, smp_cpus + 18); /* entry count */ -+ putle16(&q, max_cpus + 18); /* entry count */ - #endif - putle32(&q, 0xfee00000); /* local APIC addr */ - putle16(&q, 0); /* ext table length */ - putb(&q, 0); /* ext table checksum */ - putb(&q, 0); /* reserved */ - -- for(i = 0; i < smp_cpus; i++) { -+ for(i = 0; i < max_cpus; i++) { - putb(&q, 0); /* entry type = processor */ - putb(&q, i); /* APIC id */ - putb(&q, 0x11); /* local APIC version number */ - if (i == 0) - putb(&q, 3); /* cpu flags: enabled, bootstrap cpu */ -- else -+ else if (i < smp_cpus) - putb(&q, 1); /* cpu flags: enabled */ -+ else -+ putb(&q, 0); /* cpu flags: disabled */ - putb(&q, 0); /* cpu signature */ - putb(&q, 6); - putb(&q, 0); -@@ -1181,7 +1183,7 @@ static void mptable_init(void) - putstr(&q, "ISA "); - - /* ioapic */ -- ioapic_id = smp_cpus; -+ ioapic_id = max_cpus; - putb(&q, 2); /* entry type = I/O APIC */ - putb(&q, ioapic_id); /* apic ID */ - putb(&q, 0x11); /* I/O APIC version number */ -@@ -1581,7 +1583,7 @@ int acpi_build_processor_ssdt(uint8_t *ssdt) - { - uint8_t *ssdt_ptr = ssdt; - int i, length; -- int acpi_cpus = smp_cpus > 0xff ? 0xff : smp_cpus; -+ int acpi_cpus = max_cpus > 0xff ? 0xff : max_cpus; - - ssdt_ptr[9] = 0; // checksum; - ssdt_ptr += sizeof(struct acpi_table_header); -@@ -1713,7 +1715,7 @@ void acpi_bios_init(void) - addr = (addr + 7) & ~7; - srat_addr = addr; - srat_size = sizeof(*srat) + -- sizeof(struct srat_processor_affinity) * smp_cpus + -+ sizeof(struct srat_processor_affinity) * max_cpus + - sizeof(struct srat_memory_affinity) * (nb_numa_nodes + 2); - srat = (void *)(addr); - addr += srat_size; -@@ -1726,7 +1728,7 @@ void acpi_bios_init(void) - addr = (addr + 7) & ~7; - madt_addr = addr; - madt_size = sizeof(*madt) + -- sizeof(struct madt_processor_apic) * smp_cpus + -+ sizeof(struct madt_processor_apic) * max_cpus + - #ifdef BX_QEMU - sizeof(struct madt_io_apic) + sizeof(struct madt_int_override); - #else -@@ -1799,18 +1801,21 @@ void acpi_bios_init(void) - madt->local_apic_address = cpu_to_le32(0xfee00000); - madt->flags = cpu_to_le32(1); - apic = (void *)(madt + 1); -- for(i=0;itype = APIC_PROCESSOR; - apic->length = sizeof(*apic); - apic->processor_id = i; - apic->local_apic_id = i; -- apic->flags = cpu_to_le32(1); -+ if (i < smp_cpus) -+ apic->flags = cpu_to_le32(1); -+ else -+ apic->flags = 0; - apic++; - } - io_apic = (void *)apic; - io_apic->type = APIC_IO; - io_apic->length = sizeof(*io_apic); -- io_apic->io_apic_id = smp_cpus; -+ io_apic->io_apic_id = max_cpus; - io_apic->address = cpu_to_le32(0xfec00000); - io_apic->interrupt = cpu_to_le32(0); - #ifdef BX_QEMU -@@ -1844,7 +1849,7 @@ void acpi_bios_init(void) - srat->reserved1=1; - - core = (void*)(srat + 1); -- for (i = 0; i < smp_cpus; ++i) { -+ for (i = 0; i < max_cpus; ++i) { - core->type = SRAT_PROCESSOR; - core->length = sizeof(*core); - core->local_apic_id = i; -@@ -2603,7 +2608,7 @@ void smbios_init(void) - add_struct(0, p); - add_struct(1, p); - add_struct(3, p); -- for (cpu_num = 1; cpu_num <= smp_cpus; cpu_num++) -+ for (cpu_num = 1; cpu_num <= max_cpus; cpu_num++) - add_struct(4, p, cpu_num); - - /* Each 'memory device' covers up to 16GB of address space. */ diff --git a/pc-bios/bios-pq/HEAD b/pc-bios/bios-pq/HEAD deleted file mode 100644 index 3a849d8ffa..0000000000 --- a/pc-bios/bios-pq/HEAD +++ /dev/null @@ -1 +0,0 @@ -04387139e3b5ac97b5633cd40b3d87cdf45efd6c diff --git a/pc-bios/bios-pq/series b/pc-bios/bios-pq/series deleted file mode 100644 index 0422dec96e..0000000000 --- a/pc-bios/bios-pq/series +++ /dev/null @@ -1,21 +0,0 @@ -0001_bx-qemu.patch -0002_kvm-bios-update-smbios-table-to-report-memory-above-4g.patch -0003_kvm-bios-generate-mptable-unconditionally.patch -0004_kvm-bios-resolve-memory-device-roll-over-reporting--issues-with-32g-guests.patch -0005_kvm-bios-fix-smbios-memory-device-length-boundary--condition.patch -0006_qemu-bios-use-preprocessor-for-pci-link-routing.patch -0007_bios-add-26-pci-slots,-bringing-the-total-to-32.patch -0008_qemu-bios-provide-gpe-_l0x-methods.patch -0009_qemu-bios-pci-hotplug-support.patch -0010_bios-mark-the-acpi-sci-interrupt-as-connected-to-irq-9.patch -0011_read-additional-acpi-tables-from-a-vm.patch -0012-load-smbios-entries-and-files-from-qemu.patch -0013_fix-non-acpi-timer-interrupt-routing.patch -0014_add-srat-acpi-table-support.patch -0015_enable-power-button-even-generation.patch -0016-use-correct-mask-to-size-pci-option-rom-bar.patch -0017-bochs-bios-Move-QEMU_CFG-constants-to-rombios.h.patch -0018-bochs-bios-Make-boot-prompt-optional.patch -0019-bios-fix-multiple-calls.patch -0020-qemu-kvm-cfg-maxcpus.patch -0021-qemu-madt-maxcpus.patch diff --git a/pc-bios/vgabios-pq/HEAD b/pc-bios/vgabios-pq/HEAD deleted file mode 100644 index 83fa6f79d4..0000000000 --- a/pc-bios/vgabios-pq/HEAD +++ /dev/null @@ -1 +0,0 @@ -86ccbd96bf82d046d219141ac56cd4b26256889b diff --git a/pc-bios/vgabios-pq/series b/pc-bios/vgabios-pq/series deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/roms/pcbios b/roms/pcbios new file mode 160000 index 0000000000..c658541caa --- /dev/null +++ b/roms/pcbios @@ -0,0 +1 @@ +Subproject commit c658541caaec566c58a8afccc1ed8b56e0e0fbd9 diff --git a/roms/seabios b/roms/seabios new file mode 160000 index 0000000000..5c3f5dde21 --- /dev/null +++ b/roms/seabios @@ -0,0 +1 @@ +Subproject commit 5c3f5dde217f382b02350973a38f50941904473d diff --git a/roms/vgabios b/roms/vgabios new file mode 160000 index 0000000000..6e62666cfc --- /dev/null +++ b/roms/vgabios @@ -0,0 +1 @@ +Subproject commit 6e62666cfc19e7fd45dd0d7c3ad62fd8d0b5f67a -- GitLab