diff --git a/.gitignore b/.gitignore index 8d27ae2..e859e52 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/seabios-1.9.1.tar.gz +SOURCES/seabios-1.10.2.tar.gz diff --git a/.seabios.metadata b/.seabios.metadata index 80981d9..e89212d 100644 --- a/.seabios.metadata +++ b/.seabios.metadata @@ -1 +1 @@ -f56011d5d942fc600ad9cd1cc38b9542b257f6bc SOURCES/seabios-1.9.1.tar.gz +a0d4c4ed618919c7dd7bcef9757dab74b4df819c SOURCES/seabios-1.10.2.tar.gz diff --git a/SOURCES/0002-allow-1TB-of-RAM.patch b/SOURCES/0002-allow-1TB-of-RAM.patch index b16acf8..0eac29f 100644 --- a/SOURCES/0002-allow-1TB-of-RAM.patch +++ b/SOURCES/0002-allow-1TB-of-RAM.patch @@ -1,4 +1,4 @@ -From 4fee214c41b11b72b3427fda18e9eac1ee647746 Mon Sep 17 00:00:00 2001 +From 771b0509836828093091cfcf9bae8954928b6a02 Mon Sep 17 00:00:00 2001 From: Andrea Arcangeli Date: Tue, 8 Oct 2013 17:07:23 +0200 Subject: allow >1TB of RAM @@ -21,16 +21,17 @@ Signed-off-by: Andrea Arcangeli 2 files changed, 8 insertions(+), 6 deletions(-) Signed-off-by: Miroslav Rezanina +(cherry picked from commit 4fee214c41b11b72b3427fda18e9eac1ee647746) --- src/fw/paravirt.c | 7 ++++--- src/hw/rtc.h | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/fw/paravirt.c b/src/fw/paravirt.c -index 3fae13a..0ad2bd6 100644 +index 707502d..5df3e00 100644 --- a/src/fw/paravirt.c +++ b/src/fw/paravirt.c -@@ -387,9 +387,10 @@ qemu_cfg_e820(void) +@@ -481,9 +481,10 @@ qemu_cfg_e820(void) } // Check for memory over 4Gig in cmos diff --git a/SOURCES/0003-smbios-set-bios-vendor-version-fields-to-Seabios-0.5.patch b/SOURCES/0003-smbios-set-bios-vendor-version-fields-to-Seabios-0.5.patch index 9d5656b..ed32750 100644 --- a/SOURCES/0003-smbios-set-bios-vendor-version-fields-to-Seabios-0.5.patch +++ b/SOURCES/0003-smbios-set-bios-vendor-version-fields-to-Seabios-0.5.patch @@ -1,4 +1,4 @@ -From bf361def4623ac1942512f255e5c1450970b5092 Mon Sep 17 00:00:00 2001 +From 2bcdafa98a14ac600bde1e4e9cb5bc07c01fd366 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Mon, 28 Jul 2014 12:14:11 +0200 Subject: smbios: set bios vendor/version fields to Seabios/0.5.1 @@ -21,6 +21,7 @@ which we are using here for backward compatibility reasons. Signed-off-by: Gerd Hoffmann Signed-off-by: Miroslav Rezanina +(cherry picked from commit bf361def4623ac1942512f255e5c1450970b5092) --- src/fw/smbios.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SOURCES/0004-Workaround-for-a-win8.1-32-S4-resume-bug.patch b/SOURCES/0004-Workaround-for-a-win8.1-32-S4-resume-bug.patch index 1346099..0075979 100644 --- a/SOURCES/0004-Workaround-for-a-win8.1-32-S4-resume-bug.patch +++ b/SOURCES/0004-Workaround-for-a-win8.1-32-S4-resume-bug.patch @@ -1,4 +1,4 @@ -From aa1c26538deecfd820b7da9b3be09ebc20b7fef9 Mon Sep 17 00:00:00 2001 +From 18be18890b42ad842b421bc82af75a86eae5580a Mon Sep 17 00:00:00 2001 From: Radim Krcmar Date: Mon, 10 Mar 2014 15:14:27 +0100 Subject: Workaround for a win8.1-32 S4 resume bug @@ -45,6 +45,7 @@ Signed-off-by: Radim Krčmář 1 file changed, 7 insertions(+), 1 deletion(-) Signed-off-by: Miroslav Rezanina +(cherry picked from commit aa1c26538deecfd820b7da9b3be09ebc20b7fef9) --- src/clock.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/SOURCES/0005-redhat-reserve-more-memory-on-fseg.patch b/SOURCES/0005-redhat-reserve-more-memory-on-fseg.patch new file mode 100644 index 0000000..fba32da --- /dev/null +++ b/SOURCES/0005-redhat-reserve-more-memory-on-fseg.patch @@ -0,0 +1,44 @@ +From 4dcafd1a32949713abe7b5842cfebf851934ecb7 Mon Sep 17 00:00:00 2001 +From: Gerd Hoffmann +Date: Tue, 19 Apr 2016 11:27:50 +0200 +Subject: redhat: reserve more memory on fseg + +RH-Author: Gerd Hoffmann +Message-id: <1461065271-22039-2-git-send-email-kraxel@redhat.com> +Patchwork-id: 70213 +O-Subject: [RHEL-7.1 seabios PATCH 1/2] redhat: reserve more memory on fseg +Bugzilla: 1327060 +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Marcel Apfelbaum +RH-Acked-by: Laszlo Ersek + +seabios 1.7.5 has about 8k free space in fseg. + +configure 1.9.1 to keep the same amout space in fseg, so the amout of +disks we are able to handle stays roughly the same. ahci + scsi are +slightly below the 1.7.5 numbers but stay above the documented limits. +virtio-block numbers are higher than the 1.7.5 numbers. + +Signed-off-by: Gerd Hoffmann +Signed-off-by: Miroslav Rezanina +(cherry picked from commit 0561b82b0470679505d62f49eec83adb01eec0ab) +--- + scripts/layoutrom.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/scripts/layoutrom.py b/scripts/layoutrom.py +index 6616721..71841aa 100755 +--- a/scripts/layoutrom.py ++++ b/scripts/layoutrom.py +@@ -66,7 +66,7 @@ BUILD_BIOS_SIZE = 0x10000 + BUILD_ROM_START = 0xc0000 + BUILD_LOWRAM_END = 0xa0000 + # Space to reserve in f-segment for dynamic allocations +-BUILD_MIN_BIOSTABLE = 2048 ++BUILD_MIN_BIOSTABLE = 8192 + + # Layout the 16bit code. This ensures sections with fixed offset + # requirements are placed in the correct location. It also places the +-- +1.8.3.1 + diff --git a/SOURCES/0006-vgabios-Reorder-video-modes-to-work-around-a-Windows.patch b/SOURCES/0006-vgabios-Reorder-video-modes-to-work-around-a-Windows.patch new file mode 100644 index 0000000..88e9277 --- /dev/null +++ b/SOURCES/0006-vgabios-Reorder-video-modes-to-work-around-a-Windows.patch @@ -0,0 +1,124 @@ +From 2857f5445ef55ece7011d49937e6c3fd7444a1dc Mon Sep 17 00:00:00 2001 +From: Ladi Prosek +Date: Mon, 31 Oct 2016 19:33:05 +0100 +Subject: vgabios: Reorder video modes to work around a Windows bug + +RH-Author: Ladi Prosek +Message-id: <1477924385-6169-1-git-send-email-lprosek@redhat.com> +Patchwork-id: 72677 +O-Subject: [RHEL-7.4/7.3.z seabios PATCH] vgabios: Reorder video modes to work around a Windows bug +Bugzilla: 1392028 +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Gerd Hoffmann +RH-Acked-by: vrozenfe + +Windows Server 2016 and Windows 10 RS1 come with a bug in its blue screen +of death rendering logic which prevents it from generating crash dumps. + +The bug does not manifest if Windows sees a suitable 32 bpp video mode +before a suitable 24 bpp video mode in the list of modes returned from +vgabios. This commit moves all 32 bpp modes to the front of the list to +make sure that this is always the case. + +Upstream patch: +https://www.coreboot.org/pipermail/seabios/2016-October/010963.html + +There are valid concerns upstream about the breaking nature of the fix +but for the limited set of operating systems supported by RHEL/RHEV we +can easily verify that they are unaffected. So as things stand now, this +is a downstream-only patch which will be reverted in the near future; +the exact time will depend on Windows 10 RS2 schedule and other factors. +The goal is to make sure that our customers running Windows 10 VMs can +generate crash dumps. + +Signed-off-by: Ladi Prosek +Signed-off-by: Miroslav Rezanina +--- + vgasrc/bochsvga.c | 39 ++++++++++++++++++++------------------- + 1 file changed, 20 insertions(+), 19 deletions(-) + +diff --git a/vgasrc/bochsvga.c b/vgasrc/bochsvga.c +index ec5d101..c5d1511 100644 +--- a/vgasrc/bochsvga.c ++++ b/vgasrc/bochsvga.c +@@ -28,6 +28,25 @@ static struct bochsvga_mode + u16 mode; + struct vgamode_s info; + } bochsvga_modes[] VAR16 = { ++ /* 32 bpp BOCHS modes */ ++ { 0x140, { MM_DIRECT, 320, 200, 32, 8, 16, SEG_GRAPH } }, ++ { 0x141, { MM_DIRECT, 640, 400, 32, 8, 16, SEG_GRAPH } }, ++ { 0x142, { MM_DIRECT, 640, 480, 32, 8, 16, SEG_GRAPH } }, ++ { 0x143, { MM_DIRECT, 800, 600, 32, 8, 16, SEG_GRAPH } }, ++ { 0x144, { MM_DIRECT, 1024, 768, 32, 8, 16, SEG_GRAPH } }, ++ { 0x145, { MM_DIRECT, 1280, 1024, 32, 8, 16, SEG_GRAPH } }, ++ { 0x147, { MM_DIRECT, 1600, 1200, 32, 8, 16, SEG_GRAPH } }, ++ { 0x14c, { MM_DIRECT, 1152, 864, 32, 8, 16, SEG_GRAPH } }, ++ { 0x177, { MM_DIRECT, 1280, 768, 32, 8, 16, SEG_GRAPH } }, ++ { 0x17a, { MM_DIRECT, 1280, 800, 32, 8, 16, SEG_GRAPH } }, ++ { 0x17d, { MM_DIRECT, 1280, 960, 32, 8, 16, SEG_GRAPH } }, ++ { 0x180, { MM_DIRECT, 1440, 900, 32, 8, 16, SEG_GRAPH } }, ++ { 0x183, { MM_DIRECT, 1400, 1050, 32, 8, 16, SEG_GRAPH } }, ++ { 0x186, { MM_DIRECT, 1680, 1050, 32, 8, 16, SEG_GRAPH } }, ++ { 0x189, { MM_DIRECT, 1920, 1200, 32, 8, 16, SEG_GRAPH } }, ++ { 0x18c, { MM_DIRECT, 2560, 1600, 32, 8, 16, SEG_GRAPH } }, ++ { 0x18f, { MM_DIRECT, 1280, 720, 32, 8, 16, SEG_GRAPH } }, ++ { 0x192, { MM_DIRECT, 1920, 1080, 32, 8, 16, SEG_GRAPH } }, + /* standard modes */ + { 0x100, { MM_PACKED, 640, 400, 8, 8, 16, SEG_GRAPH } }, + { 0x101, { MM_PACKED, 640, 480, 8, 8, 16, SEG_GRAPH } }, +@@ -56,50 +75,32 @@ static struct bochsvga_mode + { 0x11D, { MM_DIRECT, 1600, 1200, 15, 8, 16, SEG_GRAPH } }, + { 0x11E, { MM_DIRECT, 1600, 1200, 16, 8, 16, SEG_GRAPH } }, + { 0x11F, { MM_DIRECT, 1600, 1200, 24, 8, 16, SEG_GRAPH } }, +- /* BOCHS modes */ +- { 0x140, { MM_DIRECT, 320, 200, 32, 8, 16, SEG_GRAPH } }, +- { 0x141, { MM_DIRECT, 640, 400, 32, 8, 16, SEG_GRAPH } }, +- { 0x142, { MM_DIRECT, 640, 480, 32, 8, 16, SEG_GRAPH } }, +- { 0x143, { MM_DIRECT, 800, 600, 32, 8, 16, SEG_GRAPH } }, +- { 0x144, { MM_DIRECT, 1024, 768, 32, 8, 16, SEG_GRAPH } }, +- { 0x145, { MM_DIRECT, 1280, 1024, 32, 8, 16, SEG_GRAPH } }, ++ /* 8, 15, 16, and 24 bpp BOCHS modes */ + { 0x146, { MM_PACKED, 320, 200, 8, 8, 16, SEG_GRAPH } }, +- { 0x147, { MM_DIRECT, 1600, 1200, 32, 8, 16, SEG_GRAPH } }, + { 0x148, { MM_PACKED, 1152, 864, 8, 8, 16, SEG_GRAPH } }, + { 0x149, { MM_DIRECT, 1152, 864, 15, 8, 16, SEG_GRAPH } }, + { 0x14a, { MM_DIRECT, 1152, 864, 16, 8, 16, SEG_GRAPH } }, + { 0x14b, { MM_DIRECT, 1152, 864, 24, 8, 16, SEG_GRAPH } }, +- { 0x14c, { MM_DIRECT, 1152, 864, 32, 8, 16, SEG_GRAPH } }, + { 0x175, { MM_DIRECT, 1280, 768, 16, 8, 16, SEG_GRAPH } }, + { 0x176, { MM_DIRECT, 1280, 768, 24, 8, 16, SEG_GRAPH } }, +- { 0x177, { MM_DIRECT, 1280, 768, 32, 8, 16, SEG_GRAPH } }, + { 0x178, { MM_DIRECT, 1280, 800, 16, 8, 16, SEG_GRAPH } }, + { 0x179, { MM_DIRECT, 1280, 800, 24, 8, 16, SEG_GRAPH } }, +- { 0x17a, { MM_DIRECT, 1280, 800, 32, 8, 16, SEG_GRAPH } }, + { 0x17b, { MM_DIRECT, 1280, 960, 16, 8, 16, SEG_GRAPH } }, + { 0x17c, { MM_DIRECT, 1280, 960, 24, 8, 16, SEG_GRAPH } }, +- { 0x17d, { MM_DIRECT, 1280, 960, 32, 8, 16, SEG_GRAPH } }, + { 0x17e, { MM_DIRECT, 1440, 900, 16, 8, 16, SEG_GRAPH } }, + { 0x17f, { MM_DIRECT, 1440, 900, 24, 8, 16, SEG_GRAPH } }, +- { 0x180, { MM_DIRECT, 1440, 900, 32, 8, 16, SEG_GRAPH } }, + { 0x181, { MM_DIRECT, 1400, 1050, 16, 8, 16, SEG_GRAPH } }, + { 0x182, { MM_DIRECT, 1400, 1050, 24, 8, 16, SEG_GRAPH } }, +- { 0x183, { MM_DIRECT, 1400, 1050, 32, 8, 16, SEG_GRAPH } }, + { 0x184, { MM_DIRECT, 1680, 1050, 16, 8, 16, SEG_GRAPH } }, + { 0x185, { MM_DIRECT, 1680, 1050, 24, 8, 16, SEG_GRAPH } }, +- { 0x186, { MM_DIRECT, 1680, 1050, 32, 8, 16, SEG_GRAPH } }, + { 0x187, { MM_DIRECT, 1920, 1200, 16, 8, 16, SEG_GRAPH } }, + { 0x188, { MM_DIRECT, 1920, 1200, 24, 8, 16, SEG_GRAPH } }, +- { 0x189, { MM_DIRECT, 1920, 1200, 32, 8, 16, SEG_GRAPH } }, + { 0x18a, { MM_DIRECT, 2560, 1600, 16, 8, 16, SEG_GRAPH } }, + { 0x18b, { MM_DIRECT, 2560, 1600, 24, 8, 16, SEG_GRAPH } }, +- { 0x18c, { MM_DIRECT, 2560, 1600, 32, 8, 16, SEG_GRAPH } }, + { 0x18d, { MM_DIRECT, 1280, 720, 16, 8, 16, SEG_GRAPH } }, + { 0x18e, { MM_DIRECT, 1280, 720, 24, 8, 16, SEG_GRAPH } }, +- { 0x18f, { MM_DIRECT, 1280, 720, 32, 8, 16, SEG_GRAPH } }, + { 0x190, { MM_DIRECT, 1920, 1080, 16, 8, 16, SEG_GRAPH } }, + { 0x191, { MM_DIRECT, 1920, 1080, 24, 8, 16, SEG_GRAPH } }, +- { 0x192, { MM_DIRECT, 1920, 1080, 32, 8, 16, SEG_GRAPH } }, + }; + + static int dispi_found VAR16 = 0; +-- +1.8.3.1 + diff --git a/SOURCES/config.base b/SOURCES/config.base index f7ff3fa..e06bba6 100644 --- a/SOURCES/config.base +++ b/SOURCES/config.base @@ -10,3 +10,4 @@ CONFIG_USB_OHCI=n CONFIG_USB_XHCI=n CONFIG_USB_UAS=n CONFIG_TCGBIOS=n +CONFIG_USE_SMM=n diff --git a/SOURCES/config.base-256k b/SOURCES/config.base-256k index 59b3036..f1910a7 100644 --- a/SOURCES/config.base-256k +++ b/SOURCES/config.base-256k @@ -5,3 +5,4 @@ CONFIG_USB_OHCI=n CONFIG_BOOTSPLASH=n CONFIG_MEGASAS=n CONFIG_ROM_SIZE=256 +CONFIG_USE_SMM=n diff --git a/SOURCES/seabios-acpi-Don-t-build-SSDT-files-on-every-build-store-the.patch b/SOURCES/seabios-acpi-Don-t-build-SSDT-files-on-every-build-store-the.patch deleted file mode 100644 index e25c212..0000000 --- a/SOURCES/seabios-acpi-Don-t-build-SSDT-files-on-every-build-store-the.patch +++ /dev/null @@ -1,837 +0,0 @@ -From 5cd49fd2d2c32d93fa02716b5736c02aa0e5a4eb Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Tue, 24 Jan 2017 11:41:11 +0100 -Subject: [PATCH 4/4] acpi: Don't build SSDT files on every build; store them - in git - -RH-Author: Gerd Hoffmann -Message-id: <1485258071-13209-5-git-send-email-kraxel@redhat.com> -Patchwork-id: 73328 -O-Subject: [RHEL-7.3.z seabios PATCH 4/4] acpi: Don't build SSDT files on every build; store them in git -Bugzilla: 1400102 -RH-Acked-by: Laszlo Ersek -RH-Acked-by: Igor Mammedov -RH-Acked-by: Miroslav Rezanina - -From: Kevin O'Connor - -The SSDT files are rarely modified - recent QEMU versions don't use -them at all and adding features to them in SeaBIOS has been -deprecated. It no longer makes sense to generate them on every build. -The content will remain (for use on old machine types in QEMU) in -static files committed to the SeaBIOS git repo. If the contents do -need to be generated a new build target (make iasl) is available. - -Signed-off-by: Kevin O'Connor -(cherry picked from commit 4373afaef34a76733638edc4e98f355b13c52f10) -Signed-off-by: Miroslav Rezanina ---- - Makefile | 4 +- - src/fw/acpi-dsdt.hex | 554 ++++++++++++++++++++++++++++++++++++++++++++++++++ - src/fw/acpi.c | 8 +- - src/fw/ssdt-misc.hex | 88 ++++++++ - src/fw/ssdt-pcihp.hex | 38 ++++ - src/fw/ssdt-proc.hex | 35 ++++ - 6 files changed, 721 insertions(+), 6 deletions(-) - create mode 100644 src/fw/acpi-dsdt.hex - create mode 100644 src/fw/ssdt-misc.hex - create mode 100644 src/fw/ssdt-pcihp.hex - create mode 100644 src/fw/ssdt-proc.hex - -diff --git a/Makefile b/Makefile -index 6f1bb68..cbe9454 100644 ---- a/Makefile -+++ b/Makefile -@@ -248,7 +248,7 @@ $(OUT)vgabios.bin: $(OUT)vgabios.bin.raw scripts/buildrom.py - iasl-option=$(shell if test -z "`$(1) $(2) 2>&1 > /dev/null`" \ - ; then echo "$(2)"; else echo "$(3)"; fi ;) - --$(OUT)%.hex: %.dsl ./scripts/acpi_extract_preprocess.py ./scripts/acpi_extract.py -+%.hex: %.dsl ./scripts/acpi_extract_preprocess.py ./scripts/acpi_extract.py - @echo " Compiling IASL $@" - $(Q)$(CPP) $(CPPFLAGS) $< -o $(OUT)$*.dsl.i.orig - $(Q)$(PYTHON) ./scripts/acpi_extract_preprocess.py $(OUT)$*.dsl.i.orig > $(OUT)$*.dsl.i -@@ -256,7 +256,7 @@ $(OUT)%.hex: %.dsl ./scripts/acpi_extract_preprocess.py ./scripts/acpi_extract.p - $(Q)$(PYTHON) ./scripts/acpi_extract.py $(OUT)$*.lst > $(OUT)$*.off - $(Q)cat $(OUT)$*.off > $@ - --$(OUT)src/fw/acpi.o: $(OUT)src/fw/acpi-dsdt.hex $(OUT)src/fw/ssdt-proc.hex $(OUT)src/fw/ssdt-pcihp.hex $(OUT)src/fw/ssdt-misc.hex -+iasl: src/fw/acpi-dsdt.hex src/fw/ssdt-proc.hex src/fw/ssdt-pcihp.hex src/fw/ssdt-misc.hex - - ################ Kconfig rules - -diff --git a/src/fw/acpi-dsdt.hex b/src/fw/acpi-dsdt.hex -new file mode 100644 -index 0000000..6a113cd ---- /dev/null -+++ b/src/fw/acpi-dsdt.hex -@@ -0,0 +1,554 @@ -+/* DO NOT EDIT! This is an autogenerated file. See scripts/acpi_extract.py. */ -+static unsigned char AmlCode[] = { -+ 0x44, 0x53, 0x44, 0x54, 0x35, 0x11, 0x00, 0x00, -+ 0x01, 0x8b, 0x42, 0x58, 0x50, 0x43, 0x00, 0x00, -+ 0x42, 0x58, 0x44, 0x53, 0x44, 0x54, 0x00, 0x00, -+ 0x01, 0x00, 0x00, 0x00, 0x49, 0x4e, 0x54, 0x4c, -+ 0x18, 0x08, 0x15, 0x20, 0x10, 0x49, 0x04, 0x5c, -+ 0x00, 0x5b, 0x80, 0x44, 0x42, 0x47, 0x5f, 0x01, -+ 0x0b, 0x02, 0x04, 0x01, 0x5b, 0x81, 0x0b, 0x44, -+ 0x42, 0x47, 0x5f, 0x01, 0x44, 0x42, 0x47, 0x42, -+ 0x08, 0x14, 0x2c, 0x44, 0x42, 0x55, 0x47, 0x01, -+ 0x98, 0x68, 0x60, 0x96, 0x60, 0x60, 0x74, 0x87, -+ 0x60, 0x01, 0x61, 0x70, 0x00, 0x62, 0xa2, 0x10, -+ 0x95, 0x62, 0x61, 0x70, 0x83, 0x88, 0x60, 0x62, -+ 0x00, 0x44, 0x42, 0x47, 0x42, 0x75, 0x62, 0x70, -+ 0x0a, 0x0a, 0x44, 0x42, 0x47, 0x42, 0x10, 0x22, -+ 0x5f, 0x53, 0x42, 0x5f, 0x5b, 0x82, 0x1b, 0x50, -+ 0x43, 0x49, 0x30, 0x08, 0x5f, 0x48, 0x49, 0x44, -+ 0x0c, 0x41, 0xd0, 0x0a, 0x03, 0x08, 0x5f, 0x41, -+ 0x44, 0x52, 0x00, 0x08, 0x5f, 0x55, 0x49, 0x44, -+ 0x01, 0x10, 0x4e, 0x15, 0x2e, 0x5f, 0x53, 0x42, -+ 0x5f, 0x50, 0x43, 0x49, 0x30, 0x08, 0x43, 0x52, -+ 0x45, 0x53, 0x11, 0x42, 0x07, 0x0a, 0x6e, 0x88, -+ 0x0d, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x47, -+ 0x01, 0xf8, 0x0c, 0xf8, 0x0c, 0x01, 0x08, 0x88, -+ 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00, 0x00, -+ 0x00, 0xf7, 0x0c, 0x00, 0x00, 0xf8, 0x0c, 0x88, -+ 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00, 0x00, -+ 0x0d, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf3, 0x87, -+ 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x0a, 0x00, 0xff, 0xff, 0x0b, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, -+ 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x01, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, -+ 0xff, 0xbf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0xc0, 0x1e, 0x79, 0x00, 0x08, 0x43, 0x52, -+ 0x36, 0x34, 0x11, 0x33, 0x0a, 0x30, 0x8a, 0x2b, -+ 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, -+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x80, 0x00, 0x00, 0x00, 0x79, 0x00, 0x14, 0x41, -+ 0x0a, 0x5f, 0x43, 0x52, 0x53, 0x00, 0x8a, 0x43, -+ 0x52, 0x45, 0x53, 0x0a, 0x5c, 0x50, 0x53, 0x33, -+ 0x32, 0x8a, 0x43, 0x52, 0x45, 0x53, 0x0a, 0x60, -+ 0x50, 0x45, 0x33, 0x32, 0x8a, 0x43, 0x52, 0x45, -+ 0x53, 0x0a, 0x68, 0x50, 0x4c, 0x33, 0x32, 0x70, -+ 0x50, 0x30, 0x53, 0x5f, 0x50, 0x53, 0x33, 0x32, -+ 0x70, 0x50, 0x30, 0x45, 0x5f, 0x50, 0x45, 0x33, -+ 0x32, 0x70, 0x72, 0x74, 0x50, 0x30, 0x45, 0x5f, -+ 0x50, 0x30, 0x53, 0x5f, 0x00, 0x01, 0x00, 0x50, -+ 0x4c, 0x33, 0x32, 0xa0, 0x0c, 0x93, 0x50, 0x31, -+ 0x56, 0x5f, 0x00, 0xa4, 0x43, 0x52, 0x45, 0x53, -+ 0x8f, 0x43, 0x52, 0x36, 0x34, 0x0a, 0x0e, 0x50, -+ 0x53, 0x36, 0x34, 0x8f, 0x43, 0x52, 0x36, 0x34, -+ 0x0a, 0x16, 0x50, 0x45, 0x36, 0x34, 0x8f, 0x43, -+ 0x52, 0x36, 0x34, 0x0a, 0x26, 0x50, 0x4c, 0x36, -+ 0x34, 0x70, 0x50, 0x31, 0x53, 0x5f, 0x50, 0x53, -+ 0x36, 0x34, 0x70, 0x50, 0x31, 0x45, 0x5f, 0x50, -+ 0x45, 0x36, 0x34, 0x70, 0x50, 0x31, 0x4c, 0x5f, -+ 0x50, 0x4c, 0x36, 0x34, 0x84, 0x43, 0x52, 0x45, -+ 0x53, 0x43, 0x52, 0x36, 0x34, 0x60, 0xa4, 0x60, -+ 0x10, 0x4d, 0x08, 0x5f, 0x53, 0x42, 0x5f, 0x5b, -+ 0x82, 0x45, 0x08, 0x48, 0x50, 0x45, 0x54, 0x08, -+ 0x5f, 0x48, 0x49, 0x44, 0x0c, 0x41, 0xd0, 0x01, -+ 0x03, 0x08, 0x5f, 0x55, 0x49, 0x44, 0x00, 0x5b, -+ 0x80, 0x48, 0x50, 0x54, 0x4d, 0x00, 0x0c, 0x00, -+ 0x00, 0xd0, 0xfe, 0x0b, 0x00, 0x04, 0x5b, 0x81, -+ 0x10, 0x48, 0x50, 0x54, 0x4d, 0x13, 0x56, 0x45, -+ 0x4e, 0x44, 0x20, 0x50, 0x52, 0x44, 0x5f, 0x20, -+ 0x14, 0x36, 0x5f, 0x53, 0x54, 0x41, 0x00, 0x70, -+ 0x56, 0x45, 0x4e, 0x44, 0x60, 0x70, 0x50, 0x52, -+ 0x44, 0x5f, 0x61, 0x7a, 0x60, 0x0a, 0x10, 0x60, -+ 0xa0, 0x0c, 0x91, 0x93, 0x60, 0x00, 0x93, 0x60, -+ 0x0b, 0xff, 0xff, 0xa4, 0x00, 0xa0, 0x0e, 0x91, -+ 0x93, 0x61, 0x00, 0x94, 0x61, 0x0c, 0x00, 0xe1, -+ 0xf5, 0x05, 0xa4, 0x00, 0xa4, 0x0a, 0x0f, 0x08, -+ 0x5f, 0x43, 0x52, 0x53, 0x11, 0x11, 0x0a, 0x0e, -+ 0x86, 0x09, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xfe, -+ 0x00, 0x04, 0x00, 0x00, 0x79, 0x00, 0x10, 0x40, -+ 0x06, 0x2e, 0x5f, 0x53, 0x42, 0x5f, 0x50, 0x43, -+ 0x49, 0x30, 0x5b, 0x82, 0x43, 0x05, 0x56, 0x47, -+ 0x41, 0x5f, 0x08, 0x5f, 0x41, 0x44, 0x52, 0x0c, -+ 0x00, 0x00, 0x02, 0x00, 0x5b, 0x80, 0x50, 0x43, -+ 0x49, 0x43, 0x02, 0x00, 0x0a, 0x04, 0x5b, 0x81, -+ 0x0b, 0x50, 0x43, 0x49, 0x43, 0x03, 0x56, 0x45, -+ 0x4e, 0x44, 0x20, 0x14, 0x08, 0x5f, 0x53, 0x31, -+ 0x44, 0x00, 0xa4, 0x00, 0x14, 0x08, 0x5f, 0x53, -+ 0x32, 0x44, 0x00, 0xa4, 0x00, 0x14, 0x19, 0x5f, -+ 0x53, 0x33, 0x44, 0x00, 0xa0, 0x0e, 0x93, 0x56, -+ 0x45, 0x4e, 0x44, 0x0c, 0x36, 0x1b, 0x00, 0x01, -+ 0xa4, 0x0a, 0x03, 0xa1, 0x03, 0xa4, 0x00, 0x10, -+ 0x25, 0x2e, 0x5f, 0x53, 0x42, 0x5f, 0x50, 0x43, -+ 0x49, 0x30, 0x5b, 0x82, 0x19, 0x50, 0x58, 0x31, -+ 0x33, 0x08, 0x5f, 0x41, 0x44, 0x52, 0x0c, 0x03, -+ 0x00, 0x01, 0x00, 0x5b, 0x80, 0x50, 0x31, 0x33, -+ 0x43, 0x02, 0x00, 0x0a, 0xff, 0x10, 0x46, 0x05, -+ 0x2e, 0x5f, 0x53, 0x42, 0x5f, 0x50, 0x43, 0x49, -+ 0x30, 0x5b, 0x82, 0x49, 0x04, 0x49, 0x53, 0x41, -+ 0x5f, 0x08, 0x5f, 0x41, 0x44, 0x52, 0x0c, 0x00, -+ 0x00, 0x01, 0x00, 0x5b, 0x80, 0x50, 0x34, 0x30, -+ 0x43, 0x02, 0x0a, 0x60, 0x0a, 0x04, 0x5b, 0x81, -+ 0x26, 0x5e, 0x2e, 0x50, 0x58, 0x31, 0x33, 0x50, -+ 0x31, 0x33, 0x43, 0x00, 0x00, 0x48, 0x2f, 0x00, -+ 0x07, 0x4c, 0x50, 0x45, 0x4e, 0x01, 0x00, 0x38, -+ 0x00, 0x03, 0x43, 0x41, 0x45, 0x4e, 0x01, 0x00, -+ 0x03, 0x43, 0x42, 0x45, 0x4e, 0x01, 0x08, 0x46, -+ 0x44, 0x45, 0x4e, 0x01, 0x10, 0x4c, 0x1b, 0x2f, -+ 0x03, 0x5f, 0x53, 0x42, 0x5f, 0x50, 0x43, 0x49, -+ 0x30, 0x49, 0x53, 0x41, 0x5f, 0x5b, 0x82, 0x2d, -+ 0x52, 0x54, 0x43, 0x5f, 0x08, 0x5f, 0x48, 0x49, -+ 0x44, 0x0c, 0x41, 0xd0, 0x0b, 0x00, 0x08, 0x5f, -+ 0x43, 0x52, 0x53, 0x11, 0x18, 0x0a, 0x15, 0x47, -+ 0x01, 0x70, 0x00, 0x70, 0x00, 0x10, 0x02, 0x22, -+ 0x00, 0x01, 0x47, 0x01, 0x72, 0x00, 0x72, 0x00, -+ 0x02, 0x06, 0x79, 0x00, 0x5b, 0x82, 0x37, 0x4b, -+ 0x42, 0x44, 0x5f, 0x08, 0x5f, 0x48, 0x49, 0x44, -+ 0x0c, 0x41, 0xd0, 0x03, 0x03, 0x14, 0x09, 0x5f, -+ 0x53, 0x54, 0x41, 0x00, 0xa4, 0x0a, 0x0f, 0x08, -+ 0x5f, 0x43, 0x52, 0x53, 0x11, 0x18, 0x0a, 0x15, -+ 0x47, 0x01, 0x60, 0x00, 0x60, 0x00, 0x01, 0x01, -+ 0x47, 0x01, 0x64, 0x00, 0x64, 0x00, 0x01, 0x01, -+ 0x22, 0x02, 0x00, 0x79, 0x00, 0x5b, 0x82, 0x27, -+ 0x4d, 0x4f, 0x55, 0x5f, 0x08, 0x5f, 0x48, 0x49, -+ 0x44, 0x0c, 0x41, 0xd0, 0x0f, 0x13, 0x14, 0x09, -+ 0x5f, 0x53, 0x54, 0x41, 0x00, 0xa4, 0x0a, 0x0f, -+ 0x08, 0x5f, 0x43, 0x52, 0x53, 0x11, 0x08, 0x0a, -+ 0x05, 0x22, 0x00, 0x10, 0x79, 0x00, 0x5b, 0x82, -+ 0x4a, 0x04, 0x46, 0x44, 0x43, 0x30, 0x08, 0x5f, -+ 0x48, 0x49, 0x44, 0x0c, 0x41, 0xd0, 0x07, 0x00, -+ 0x14, 0x18, 0x5f, 0x53, 0x54, 0x41, 0x00, 0x70, -+ 0x46, 0x44, 0x45, 0x4e, 0x60, 0xa0, 0x06, 0x93, -+ 0x60, 0x00, 0xa4, 0x00, 0xa1, 0x04, 0xa4, 0x0a, -+ 0x0f, 0x08, 0x5f, 0x43, 0x52, 0x53, 0x11, 0x1b, -+ 0x0a, 0x18, 0x47, 0x01, 0xf2, 0x03, 0xf2, 0x03, -+ 0x00, 0x04, 0x47, 0x01, 0xf7, 0x03, 0xf7, 0x03, -+ 0x00, 0x01, 0x22, 0x40, 0x00, 0x2a, 0x04, 0x00, -+ 0x79, 0x00, 0x5b, 0x82, 0x3e, 0x4c, 0x50, 0x54, -+ 0x5f, 0x08, 0x5f, 0x48, 0x49, 0x44, 0x0c, 0x41, -+ 0xd0, 0x04, 0x00, 0x14, 0x18, 0x5f, 0x53, 0x54, -+ 0x41, 0x00, 0x70, 0x4c, 0x50, 0x45, 0x4e, 0x60, -+ 0xa0, 0x06, 0x93, 0x60, 0x00, 0xa4, 0x00, 0xa1, -+ 0x04, 0xa4, 0x0a, 0x0f, 0x08, 0x5f, 0x43, 0x52, -+ 0x53, 0x11, 0x10, 0x0a, 0x0d, 0x47, 0x01, 0x78, -+ 0x03, 0x78, 0x03, 0x08, 0x08, 0x22, 0x80, 0x00, -+ 0x79, 0x00, 0x5b, 0x82, 0x45, 0x04, 0x43, 0x4f, -+ 0x4d, 0x31, 0x08, 0x5f, 0x48, 0x49, 0x44, 0x0c, -+ 0x41, 0xd0, 0x05, 0x01, 0x08, 0x5f, 0x55, 0x49, -+ 0x44, 0x01, 0x14, 0x18, 0x5f, 0x53, 0x54, 0x41, -+ 0x00, 0x70, 0x43, 0x41, 0x45, 0x4e, 0x60, 0xa0, -+ 0x06, 0x93, 0x60, 0x00, 0xa4, 0x00, 0xa1, 0x04, -+ 0xa4, 0x0a, 0x0f, 0x08, 0x5f, 0x43, 0x52, 0x53, -+ 0x11, 0x10, 0x0a, 0x0d, 0x47, 0x01, 0xf8, 0x03, -+ 0xf8, 0x03, 0x00, 0x08, 0x22, 0x10, 0x00, 0x79, -+ 0x00, 0x5b, 0x82, 0x46, 0x04, 0x43, 0x4f, 0x4d, -+ 0x32, 0x08, 0x5f, 0x48, 0x49, 0x44, 0x0c, 0x41, -+ 0xd0, 0x05, 0x01, 0x08, 0x5f, 0x55, 0x49, 0x44, -+ 0x0a, 0x02, 0x14, 0x18, 0x5f, 0x53, 0x54, 0x41, -+ 0x00, 0x70, 0x43, 0x42, 0x45, 0x4e, 0x60, 0xa0, -+ 0x06, 0x93, 0x60, 0x00, 0xa4, 0x00, 0xa1, 0x04, -+ 0xa4, 0x0a, 0x0f, 0x08, 0x5f, 0x43, 0x52, 0x53, -+ 0x11, 0x10, 0x0a, 0x0d, 0x47, 0x01, 0xf8, 0x02, -+ 0xf8, 0x02, 0x00, 0x08, 0x22, 0x08, 0x00, 0x79, -+ 0x00, 0x10, 0x49, 0x08, 0x2e, 0x5f, 0x53, 0x42, -+ 0x5f, 0x50, 0x43, 0x49, 0x30, 0x5b, 0x80, 0x50, -+ 0x43, 0x53, 0x54, 0x01, 0x0b, 0x00, 0xae, 0x0a, -+ 0x08, 0x5b, 0x81, 0x10, 0x50, 0x43, 0x53, 0x54, -+ 0x43, 0x50, 0x43, 0x49, 0x55, 0x20, 0x50, 0x43, -+ 0x49, 0x44, 0x20, 0x5b, 0x80, 0x53, 0x45, 0x4a, -+ 0x5f, 0x01, 0x0b, 0x08, 0xae, 0x0a, 0x04, 0x5b, -+ 0x81, 0x0b, 0x53, 0x45, 0x4a, 0x5f, 0x43, 0x42, -+ 0x30, 0x45, 0x4a, 0x20, 0x14, 0x0f, 0x50, 0x43, -+ 0x45, 0x4a, 0x01, 0x70, 0x79, 0x01, 0x68, 0x00, -+ 0x42, 0x30, 0x45, 0x4a, 0x14, 0x36, 0x50, 0x43, -+ 0x4e, 0x46, 0x00, 0x70, 0x00, 0x60, 0xa2, 0x2c, -+ 0x95, 0x60, 0x0a, 0x1f, 0x75, 0x60, 0xa0, 0x11, -+ 0x7b, 0x50, 0x43, 0x49, 0x55, 0x79, 0x01, 0x60, -+ 0x00, 0x00, 0x50, 0x43, 0x4e, 0x54, 0x60, 0x01, -+ 0xa0, 0x12, 0x7b, 0x50, 0x43, 0x49, 0x44, 0x79, -+ 0x01, 0x60, 0x00, 0x00, 0x50, 0x43, 0x4e, 0x54, -+ 0x60, 0x0a, 0x03, 0x10, 0x4a, 0xa0, 0x5f, 0x53, -+ 0x42, 0x5f, 0x10, 0x47, 0x74, 0x50, 0x43, 0x49, -+ 0x30, 0x08, 0x5f, 0x50, 0x52, 0x54, 0x12, 0x4b, -+ 0x73, 0x80, 0x12, 0x0b, 0x04, 0x0b, 0xff, 0xff, -+ 0x00, 0x4c, 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0b, -+ 0x04, 0x0b, 0xff, 0xff, 0x01, 0x4c, 0x4e, 0x4b, -+ 0x41, 0x00, 0x12, 0x0c, 0x04, 0x0b, 0xff, 0xff, -+ 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x42, 0x00, 0x12, -+ 0x0c, 0x04, 0x0b, 0xff, 0xff, 0x0a, 0x03, 0x4c, -+ 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x01, 0x00, 0x00, 0x4c, 0x4e, 0x4b, -+ 0x53, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x01, 0x00, 0x01, 0x4c, 0x4e, 0x4b, 0x42, 0x00, -+ 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x01, 0x00, -+ 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, -+ 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x01, 0x00, 0x0a, -+ 0x03, 0x4c, 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x02, 0x00, 0x00, 0x4c, -+ 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x02, 0x00, 0x01, 0x4c, 0x4e, 0x4b, -+ 0x43, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, -+ 0x02, 0x00, 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x44, -+ 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x02, -+ 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, 0x41, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x03, 0x00, -+ 0x00, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x03, 0x00, 0x01, 0x4c, -+ 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0e, 0x04, 0x0c, -+ 0xff, 0xff, 0x03, 0x00, 0x0a, 0x02, 0x4c, 0x4e, -+ 0x4b, 0x41, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, -+ 0xff, 0x03, 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, -+ 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x04, 0x00, 0x00, 0x4c, 0x4e, 0x4b, 0x44, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x04, 0x00, -+ 0x01, 0x4c, 0x4e, 0x4b, 0x41, 0x00, 0x12, 0x0e, -+ 0x04, 0x0c, 0xff, 0xff, 0x04, 0x00, 0x0a, 0x02, -+ 0x4c, 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0e, 0x04, -+ 0x0c, 0xff, 0xff, 0x04, 0x00, 0x0a, 0x03, 0x4c, -+ 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x05, 0x00, 0x00, 0x4c, 0x4e, 0x4b, -+ 0x41, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x05, 0x00, 0x01, 0x4c, 0x4e, 0x4b, 0x42, 0x00, -+ 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x05, 0x00, -+ 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, -+ 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x05, 0x00, 0x0a, -+ 0x03, 0x4c, 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x06, 0x00, 0x00, 0x4c, -+ 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x06, 0x00, 0x01, 0x4c, 0x4e, 0x4b, -+ 0x43, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, -+ 0x06, 0x00, 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x44, -+ 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x06, -+ 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, 0x41, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x07, 0x00, -+ 0x00, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x07, 0x00, 0x01, 0x4c, -+ 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0e, 0x04, 0x0c, -+ 0xff, 0xff, 0x07, 0x00, 0x0a, 0x02, 0x4c, 0x4e, -+ 0x4b, 0x41, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, -+ 0xff, 0x07, 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, -+ 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x08, 0x00, 0x00, 0x4c, 0x4e, 0x4b, 0x44, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x08, 0x00, -+ 0x01, 0x4c, 0x4e, 0x4b, 0x41, 0x00, 0x12, 0x0e, -+ 0x04, 0x0c, 0xff, 0xff, 0x08, 0x00, 0x0a, 0x02, -+ 0x4c, 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0e, 0x04, -+ 0x0c, 0xff, 0xff, 0x08, 0x00, 0x0a, 0x03, 0x4c, -+ 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x09, 0x00, 0x00, 0x4c, 0x4e, 0x4b, -+ 0x41, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x09, 0x00, 0x01, 0x4c, 0x4e, 0x4b, 0x42, 0x00, -+ 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x09, 0x00, -+ 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, -+ 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x09, 0x00, 0x0a, -+ 0x03, 0x4c, 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x4c, -+ 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x0a, 0x00, 0x01, 0x4c, 0x4e, 0x4b, -+ 0x43, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, -+ 0x0a, 0x00, 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x44, -+ 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x0a, -+ 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, 0x41, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x0b, 0x00, -+ 0x00, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x0b, 0x00, 0x01, 0x4c, -+ 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0e, 0x04, 0x0c, -+ 0xff, 0xff, 0x0b, 0x00, 0x0a, 0x02, 0x4c, 0x4e, -+ 0x4b, 0x41, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, -+ 0xff, 0x0b, 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, -+ 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x0c, 0x00, 0x00, 0x4c, 0x4e, 0x4b, 0x44, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x0c, 0x00, -+ 0x01, 0x4c, 0x4e, 0x4b, 0x41, 0x00, 0x12, 0x0e, -+ 0x04, 0x0c, 0xff, 0xff, 0x0c, 0x00, 0x0a, 0x02, -+ 0x4c, 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0e, 0x04, -+ 0x0c, 0xff, 0xff, 0x0c, 0x00, 0x0a, 0x03, 0x4c, -+ 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x0d, 0x00, 0x00, 0x4c, 0x4e, 0x4b, -+ 0x41, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x0d, 0x00, 0x01, 0x4c, 0x4e, 0x4b, 0x42, 0x00, -+ 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x0d, 0x00, -+ 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, -+ 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x0d, 0x00, 0x0a, -+ 0x03, 0x4c, 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x4c, -+ 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x0e, 0x00, 0x01, 0x4c, 0x4e, 0x4b, -+ 0x43, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, -+ 0x0e, 0x00, 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x44, -+ 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x0e, -+ 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, 0x41, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x0f, 0x00, -+ 0x00, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x0f, 0x00, 0x01, 0x4c, -+ 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0e, 0x04, 0x0c, -+ 0xff, 0xff, 0x0f, 0x00, 0x0a, 0x02, 0x4c, 0x4e, -+ 0x4b, 0x41, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, -+ 0xff, 0x0f, 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, -+ 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x10, 0x00, 0x00, 0x4c, 0x4e, 0x4b, 0x44, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x10, 0x00, -+ 0x01, 0x4c, 0x4e, 0x4b, 0x41, 0x00, 0x12, 0x0e, -+ 0x04, 0x0c, 0xff, 0xff, 0x10, 0x00, 0x0a, 0x02, -+ 0x4c, 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0e, 0x04, -+ 0x0c, 0xff, 0xff, 0x10, 0x00, 0x0a, 0x03, 0x4c, -+ 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x11, 0x00, 0x00, 0x4c, 0x4e, 0x4b, -+ 0x41, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x11, 0x00, 0x01, 0x4c, 0x4e, 0x4b, 0x42, 0x00, -+ 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x11, 0x00, -+ 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, -+ 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x11, 0x00, 0x0a, -+ 0x03, 0x4c, 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x12, 0x00, 0x00, 0x4c, -+ 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x12, 0x00, 0x01, 0x4c, 0x4e, 0x4b, -+ 0x43, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, -+ 0x12, 0x00, 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x44, -+ 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x12, -+ 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, 0x41, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x13, 0x00, -+ 0x00, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x13, 0x00, 0x01, 0x4c, -+ 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0e, 0x04, 0x0c, -+ 0xff, 0xff, 0x13, 0x00, 0x0a, 0x02, 0x4c, 0x4e, -+ 0x4b, 0x41, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, -+ 0xff, 0x13, 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, -+ 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x14, 0x00, 0x00, 0x4c, 0x4e, 0x4b, 0x44, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x14, 0x00, -+ 0x01, 0x4c, 0x4e, 0x4b, 0x41, 0x00, 0x12, 0x0e, -+ 0x04, 0x0c, 0xff, 0xff, 0x14, 0x00, 0x0a, 0x02, -+ 0x4c, 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0e, 0x04, -+ 0x0c, 0xff, 0xff, 0x14, 0x00, 0x0a, 0x03, 0x4c, -+ 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x15, 0x00, 0x00, 0x4c, 0x4e, 0x4b, -+ 0x41, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x15, 0x00, 0x01, 0x4c, 0x4e, 0x4b, 0x42, 0x00, -+ 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x15, 0x00, -+ 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, -+ 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x15, 0x00, 0x0a, -+ 0x03, 0x4c, 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x16, 0x00, 0x00, 0x4c, -+ 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x16, 0x00, 0x01, 0x4c, 0x4e, 0x4b, -+ 0x43, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, -+ 0x16, 0x00, 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x44, -+ 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x16, -+ 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, 0x41, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x17, 0x00, -+ 0x00, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x17, 0x00, 0x01, 0x4c, -+ 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0e, 0x04, 0x0c, -+ 0xff, 0xff, 0x17, 0x00, 0x0a, 0x02, 0x4c, 0x4e, -+ 0x4b, 0x41, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, -+ 0xff, 0x17, 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, -+ 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x18, 0x00, 0x00, 0x4c, 0x4e, 0x4b, 0x44, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x18, 0x00, -+ 0x01, 0x4c, 0x4e, 0x4b, 0x41, 0x00, 0x12, 0x0e, -+ 0x04, 0x0c, 0xff, 0xff, 0x18, 0x00, 0x0a, 0x02, -+ 0x4c, 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0e, 0x04, -+ 0x0c, 0xff, 0xff, 0x18, 0x00, 0x0a, 0x03, 0x4c, -+ 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x19, 0x00, 0x00, 0x4c, 0x4e, 0x4b, -+ 0x41, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x19, 0x00, 0x01, 0x4c, 0x4e, 0x4b, 0x42, 0x00, -+ 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x19, 0x00, -+ 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, -+ 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x19, 0x00, 0x0a, -+ 0x03, 0x4c, 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x1a, 0x00, 0x00, 0x4c, -+ 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x1a, 0x00, 0x01, 0x4c, 0x4e, 0x4b, -+ 0x43, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, -+ 0x1a, 0x00, 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x44, -+ 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x1a, -+ 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, 0x41, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x1b, 0x00, -+ 0x00, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x1b, 0x00, 0x01, 0x4c, -+ 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0e, 0x04, 0x0c, -+ 0xff, 0xff, 0x1b, 0x00, 0x0a, 0x02, 0x4c, 0x4e, -+ 0x4b, 0x41, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, -+ 0xff, 0x1b, 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, -+ 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x1c, 0x00, 0x00, 0x4c, 0x4e, 0x4b, 0x44, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x1c, 0x00, -+ 0x01, 0x4c, 0x4e, 0x4b, 0x41, 0x00, 0x12, 0x0e, -+ 0x04, 0x0c, 0xff, 0xff, 0x1c, 0x00, 0x0a, 0x02, -+ 0x4c, 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0e, 0x04, -+ 0x0c, 0xff, 0xff, 0x1c, 0x00, 0x0a, 0x03, 0x4c, -+ 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x1d, 0x00, 0x00, 0x4c, 0x4e, 0x4b, -+ 0x41, 0x00, 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, -+ 0x1d, 0x00, 0x01, 0x4c, 0x4e, 0x4b, 0x42, 0x00, -+ 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x1d, 0x00, -+ 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, -+ 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x1d, 0x00, 0x0a, -+ 0x03, 0x4c, 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x1e, 0x00, 0x00, 0x4c, -+ 0x4e, 0x4b, 0x42, 0x00, 0x12, 0x0d, 0x04, 0x0c, -+ 0xff, 0xff, 0x1e, 0x00, 0x01, 0x4c, 0x4e, 0x4b, -+ 0x43, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, -+ 0x1e, 0x00, 0x0a, 0x02, 0x4c, 0x4e, 0x4b, 0x44, -+ 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, 0xff, 0x1e, -+ 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, 0x41, 0x00, -+ 0x12, 0x0d, 0x04, 0x0c, 0xff, 0xff, 0x1f, 0x00, -+ 0x00, 0x4c, 0x4e, 0x4b, 0x43, 0x00, 0x12, 0x0d, -+ 0x04, 0x0c, 0xff, 0xff, 0x1f, 0x00, 0x01, 0x4c, -+ 0x4e, 0x4b, 0x44, 0x00, 0x12, 0x0e, 0x04, 0x0c, -+ 0xff, 0xff, 0x1f, 0x00, 0x0a, 0x02, 0x4c, 0x4e, -+ 0x4b, 0x41, 0x00, 0x12, 0x0e, 0x04, 0x0c, 0xff, -+ 0xff, 0x1f, 0x00, 0x0a, 0x03, 0x4c, 0x4e, 0x4b, -+ 0x42, 0x00, 0x5b, 0x81, 0x24, 0x2f, 0x03, 0x50, -+ 0x43, 0x49, 0x30, 0x49, 0x53, 0x41, 0x5f, 0x50, -+ 0x34, 0x30, 0x43, 0x01, 0x50, 0x52, 0x51, 0x30, -+ 0x08, 0x50, 0x52, 0x51, 0x31, 0x08, 0x50, 0x52, -+ 0x51, 0x32, 0x08, 0x50, 0x52, 0x51, 0x33, 0x08, -+ 0x14, 0x13, 0x49, 0x51, 0x53, 0x54, 0x01, 0xa0, -+ 0x09, 0x7b, 0x0a, 0x80, 0x68, 0x00, 0xa4, 0x0a, -+ 0x09, 0xa4, 0x0a, 0x0b, 0x14, 0x36, 0x49, 0x51, -+ 0x43, 0x52, 0x09, 0x08, 0x50, 0x52, 0x52, 0x30, -+ 0x11, 0x0e, 0x0a, 0x0b, 0x89, 0x06, 0x00, 0x09, -+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x8a, -+ 0x50, 0x52, 0x52, 0x30, 0x0a, 0x05, 0x50, 0x52, -+ 0x52, 0x49, 0xa0, 0x0b, 0x95, 0x68, 0x0a, 0x80, -+ 0x70, 0x68, 0x50, 0x52, 0x52, 0x49, 0xa4, 0x50, -+ 0x52, 0x52, 0x30, 0x5b, 0x82, 0x4c, 0x07, 0x4c, -+ 0x4e, 0x4b, 0x41, 0x08, 0x5f, 0x48, 0x49, 0x44, -+ 0x0c, 0x41, 0xd0, 0x0c, 0x0f, 0x08, 0x5f, 0x55, -+ 0x49, 0x44, 0x00, 0x08, 0x5f, 0x50, 0x52, 0x53, -+ 0x11, 0x16, 0x0a, 0x13, 0x89, 0x0e, 0x00, 0x09, -+ 0x03, 0x05, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, -+ 0x00, 0x0b, 0x00, 0x00, 0x00, 0x79, 0x00, 0x14, -+ 0x0f, 0x5f, 0x53, 0x54, 0x41, 0x00, 0xa4, 0x49, -+ 0x51, 0x53, 0x54, 0x50, 0x52, 0x51, 0x30, 0x14, -+ 0x11, 0x5f, 0x44, 0x49, 0x53, 0x00, 0x7d, 0x50, -+ 0x52, 0x51, 0x30, 0x0a, 0x80, 0x50, 0x52, 0x51, -+ 0x30, 0x14, 0x0f, 0x5f, 0x43, 0x52, 0x53, 0x00, -+ 0xa4, 0x49, 0x51, 0x43, 0x52, 0x50, 0x52, 0x51, -+ 0x30, 0x14, 0x17, 0x5f, 0x53, 0x52, 0x53, 0x01, -+ 0x8a, 0x68, 0x0a, 0x05, 0x50, 0x52, 0x52, 0x49, -+ 0x70, 0x50, 0x52, 0x52, 0x49, 0x50, 0x52, 0x51, -+ 0x30, 0x5b, 0x82, 0x4c, 0x07, 0x4c, 0x4e, 0x4b, -+ 0x42, 0x08, 0x5f, 0x48, 0x49, 0x44, 0x0c, 0x41, -+ 0xd0, 0x0c, 0x0f, 0x08, 0x5f, 0x55, 0x49, 0x44, -+ 0x01, 0x08, 0x5f, 0x50, 0x52, 0x53, 0x11, 0x16, -+ 0x0a, 0x13, 0x89, 0x0e, 0x00, 0x09, 0x03, 0x05, -+ 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, -+ 0x00, 0x00, 0x00, 0x79, 0x00, 0x14, 0x0f, 0x5f, -+ 0x53, 0x54, 0x41, 0x00, 0xa4, 0x49, 0x51, 0x53, -+ 0x54, 0x50, 0x52, 0x51, 0x31, 0x14, 0x11, 0x5f, -+ 0x44, 0x49, 0x53, 0x00, 0x7d, 0x50, 0x52, 0x51, -+ 0x31, 0x0a, 0x80, 0x50, 0x52, 0x51, 0x31, 0x14, -+ 0x0f, 0x5f, 0x43, 0x52, 0x53, 0x00, 0xa4, 0x49, -+ 0x51, 0x43, 0x52, 0x50, 0x52, 0x51, 0x31, 0x14, -+ 0x17, 0x5f, 0x53, 0x52, 0x53, 0x01, 0x8a, 0x68, -+ 0x0a, 0x05, 0x50, 0x52, 0x52, 0x49, 0x70, 0x50, -+ 0x52, 0x52, 0x49, 0x50, 0x52, 0x51, 0x31, 0x5b, -+ 0x82, 0x4d, 0x07, 0x4c, 0x4e, 0x4b, 0x43, 0x08, -+ 0x5f, 0x48, 0x49, 0x44, 0x0c, 0x41, 0xd0, 0x0c, -+ 0x0f, 0x08, 0x5f, 0x55, 0x49, 0x44, 0x0a, 0x02, -+ 0x08, 0x5f, 0x50, 0x52, 0x53, 0x11, 0x16, 0x0a, -+ 0x13, 0x89, 0x0e, 0x00, 0x09, 0x03, 0x05, 0x00, -+ 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, -+ 0x00, 0x00, 0x79, 0x00, 0x14, 0x0f, 0x5f, 0x53, -+ 0x54, 0x41, 0x00, 0xa4, 0x49, 0x51, 0x53, 0x54, -+ 0x50, 0x52, 0x51, 0x32, 0x14, 0x11, 0x5f, 0x44, -+ 0x49, 0x53, 0x00, 0x7d, 0x50, 0x52, 0x51, 0x32, -+ 0x0a, 0x80, 0x50, 0x52, 0x51, 0x32, 0x14, 0x0f, -+ 0x5f, 0x43, 0x52, 0x53, 0x00, 0xa4, 0x49, 0x51, -+ 0x43, 0x52, 0x50, 0x52, 0x51, 0x32, 0x14, 0x17, -+ 0x5f, 0x53, 0x52, 0x53, 0x01, 0x8a, 0x68, 0x0a, -+ 0x05, 0x50, 0x52, 0x52, 0x49, 0x70, 0x50, 0x52, -+ 0x52, 0x49, 0x50, 0x52, 0x51, 0x32, 0x5b, 0x82, -+ 0x4d, 0x07, 0x4c, 0x4e, 0x4b, 0x44, 0x08, 0x5f, -+ 0x48, 0x49, 0x44, 0x0c, 0x41, 0xd0, 0x0c, 0x0f, -+ 0x08, 0x5f, 0x55, 0x49, 0x44, 0x0a, 0x03, 0x08, -+ 0x5f, 0x50, 0x52, 0x53, 0x11, 0x16, 0x0a, 0x13, -+ 0x89, 0x0e, 0x00, 0x09, 0x03, 0x05, 0x00, 0x00, -+ 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, -+ 0x00, 0x79, 0x00, 0x14, 0x0f, 0x5f, 0x53, 0x54, -+ 0x41, 0x00, 0xa4, 0x49, 0x51, 0x53, 0x54, 0x50, -+ 0x52, 0x51, 0x33, 0x14, 0x11, 0x5f, 0x44, 0x49, -+ 0x53, 0x00, 0x7d, 0x50, 0x52, 0x51, 0x33, 0x0a, -+ 0x80, 0x50, 0x52, 0x51, 0x33, 0x14, 0x0f, 0x5f, -+ 0x43, 0x52, 0x53, 0x00, 0xa4, 0x49, 0x51, 0x43, -+ 0x52, 0x50, 0x52, 0x51, 0x33, 0x14, 0x17, 0x5f, -+ 0x53, 0x52, 0x53, 0x01, 0x8a, 0x68, 0x0a, 0x05, -+ 0x50, 0x52, 0x52, 0x49, 0x70, 0x50, 0x52, 0x52, -+ 0x49, 0x50, 0x52, 0x51, 0x33, 0x5b, 0x82, 0x4f, -+ 0x04, 0x4c, 0x4e, 0x4b, 0x53, 0x08, 0x5f, 0x48, -+ 0x49, 0x44, 0x0c, 0x41, 0xd0, 0x0c, 0x0f, 0x08, -+ 0x5f, 0x55, 0x49, 0x44, 0x0a, 0x04, 0x08, 0x5f, -+ 0x50, 0x52, 0x53, 0x11, 0x0e, 0x0a, 0x0b, 0x89, -+ 0x06, 0x00, 0x09, 0x01, 0x09, 0x00, 0x00, 0x00, -+ 0x79, 0x00, 0x14, 0x09, 0x5f, 0x53, 0x54, 0x41, -+ 0x00, 0xa4, 0x0a, 0x0b, 0x14, 0x06, 0x5f, 0x44, -+ 0x49, 0x53, 0x00, 0x14, 0x0b, 0x5f, 0x43, 0x52, -+ 0x53, 0x00, 0xa4, 0x5f, 0x50, 0x52, 0x53, 0x14, -+ 0x06, 0x5f, 0x53, 0x52, 0x53, 0x01, 0x10, 0x47, -+ 0x0e, 0x5f, 0x53, 0x42, 0x5f, 0x14, 0x35, 0x43, -+ 0x50, 0x4d, 0x41, 0x01, 0x70, 0x83, 0x88, 0x43, -+ 0x50, 0x4f, 0x4e, 0x68, 0x00, 0x60, 0x70, 0x11, -+ 0x0b, 0x0a, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x61, 0x70, 0x68, 0x88, 0x61, -+ 0x0a, 0x02, 0x00, 0x70, 0x68, 0x88, 0x61, 0x0a, -+ 0x03, 0x00, 0x70, 0x60, 0x88, 0x61, 0x0a, 0x04, -+ 0x00, 0xa4, 0x61, 0x14, 0x1a, 0x43, 0x50, 0x53, -+ 0x54, 0x01, 0x70, 0x83, 0x88, 0x43, 0x50, 0x4f, -+ 0x4e, 0x68, 0x00, 0x60, 0xa0, 0x05, 0x60, 0xa4, -+ 0x0a, 0x0f, 0xa1, 0x03, 0xa4, 0x00, 0x14, 0x0a, -+ 0x43, 0x50, 0x45, 0x4a, 0x02, 0x5b, 0x22, 0x0a, -+ 0xc8, 0x5b, 0x80, 0x50, 0x52, 0x53, 0x54, 0x01, -+ 0x0b, 0x00, 0xaf, 0x0a, 0x20, 0x5b, 0x81, 0x0c, -+ 0x50, 0x52, 0x53, 0x54, 0x01, 0x50, 0x52, 0x53, -+ 0x5f, 0x40, 0x10, 0x14, 0x4a, 0x06, 0x50, 0x52, -+ 0x53, 0x43, 0x00, 0x70, 0x50, 0x52, 0x53, 0x5f, -+ 0x65, 0x70, 0x00, 0x62, 0x70, 0x00, 0x60, 0xa2, -+ 0x46, 0x05, 0x95, 0x60, 0x87, 0x43, 0x50, 0x4f, -+ 0x4e, 0x70, 0x83, 0x88, 0x43, 0x50, 0x4f, 0x4e, -+ 0x60, 0x00, 0x61, 0xa0, 0x0a, 0x7b, 0x60, 0x0a, -+ 0x07, 0x00, 0x7a, 0x62, 0x01, 0x62, 0xa1, 0x0c, -+ 0x70, 0x83, 0x88, 0x65, 0x7a, 0x60, 0x0a, 0x03, -+ 0x00, 0x00, 0x62, 0x70, 0x7b, 0x62, 0x01, 0x00, -+ 0x63, 0xa0, 0x22, 0x92, 0x93, 0x61, 0x63, 0x70, -+ 0x63, 0x88, 0x43, 0x50, 0x4f, 0x4e, 0x60, 0x00, -+ 0xa0, 0x0a, 0x93, 0x63, 0x01, 0x4e, 0x54, 0x46, -+ 0x59, 0x60, 0x01, 0xa1, 0x08, 0x4e, 0x54, 0x46, -+ 0x59, 0x60, 0x0a, 0x03, 0x75, 0x60, 0x10, 0x4e, -+ 0x09, 0x5f, 0x47, 0x50, 0x45, 0x08, 0x5f, 0x48, -+ 0x49, 0x44, 0x0d, 0x41, 0x43, 0x50, 0x49, 0x30, -+ 0x30, 0x30, 0x36, 0x00, 0x14, 0x06, 0x5f, 0x4c, -+ 0x30, 0x30, 0x00, 0x14, 0x15, 0x5f, 0x45, 0x30, -+ 0x31, 0x00, 0x5c, 0x2f, 0x03, 0x5f, 0x53, 0x42, -+ 0x5f, 0x50, 0x43, 0x49, 0x30, 0x50, 0x43, 0x4e, -+ 0x46, 0x14, 0x10, 0x5f, 0x45, 0x30, 0x32, 0x00, -+ 0x5c, 0x2e, 0x5f, 0x53, 0x42, 0x5f, 0x50, 0x52, -+ 0x53, 0x43, 0x14, 0x06, 0x5f, 0x4c, 0x30, 0x33, -+ 0x00, 0x14, 0x06, 0x5f, 0x4c, 0x30, 0x34, 0x00, -+ 0x14, 0x06, 0x5f, 0x4c, 0x30, 0x35, 0x00, 0x14, -+ 0x06, 0x5f, 0x4c, 0x30, 0x36, 0x00, 0x14, 0x06, -+ 0x5f, 0x4c, 0x30, 0x37, 0x00, 0x14, 0x06, 0x5f, -+ 0x4c, 0x30, 0x38, 0x00, 0x14, 0x06, 0x5f, 0x4c, -+ 0x30, 0x39, 0x00, 0x14, 0x06, 0x5f, 0x4c, 0x30, -+ 0x41, 0x00, 0x14, 0x06, 0x5f, 0x4c, 0x30, 0x42, -+ 0x00, 0x14, 0x06, 0x5f, 0x4c, 0x30, 0x43, 0x00, -+ 0x14, 0x06, 0x5f, 0x4c, 0x30, 0x44, 0x00, 0x14, -+ 0x06, 0x5f, 0x4c, 0x30, 0x45, 0x00, 0x14, 0x06, -+ 0x5f, 0x4c, 0x30, 0x46, 0x00 -+}; -diff --git a/src/fw/acpi.c b/src/fw/acpi.c -index ecd1adc..b805b44 100644 ---- a/src/fw/acpi.c -+++ b/src/fw/acpi.c -@@ -22,7 +22,7 @@ - #include "util.h" // MaxCountCPUs - #include "x86.h" // readl - --#include "src/fw/acpi-dsdt.hex" -+#include "fw/acpi-dsdt.hex" - - static void - build_header(struct acpi_table_header *h, u32 sig, int len, u8 rev) -@@ -235,7 +235,7 @@ encodeLen(u8 *ssdt_ptr, int length, int bytes) - return ssdt_ptr + bytes; - } - --#include "src/fw/ssdt-proc.hex" -+#include "fw/ssdt-proc.hex" - - /* 0x5B 0x83 ProcessorOp PkgLength NameString ProcID */ - #define PROC_OFFSET_CPUHEX (*ssdt_proc_name - *ssdt_proc_start + 2) -@@ -256,8 +256,8 @@ encodeLen(u8 *ssdt_ptr, int length, int bytes) - #define SSDT_SIGNATURE 0x54445353 // SSDT - #define SSDT_HEADER_LENGTH 36 - --#include "src/fw/ssdt-misc.hex" --#include "src/fw/ssdt-pcihp.hex" -+#include "fw/ssdt-misc.hex" -+#include "fw/ssdt-pcihp.hex" - - #define PCI_RMV_BASE 0xae0c - -diff --git a/src/fw/ssdt-misc.hex b/src/fw/ssdt-misc.hex -new file mode 100644 -index 0000000..6eb1c6d ---- /dev/null -+++ b/src/fw/ssdt-misc.hex -@@ -0,0 +1,88 @@ -+/* DO NOT EDIT! This is an autogenerated file. See scripts/acpi_extract.py. */ -+static unsigned char acpi_pci64_length[] = { -+ 0x6f -+}; -+ -+static unsigned char acpi_s4_pkg[] = { -+ 0x8f -+}; -+ -+static unsigned char acpi_s3_name[] = { -+ 0x7c -+}; -+ -+static unsigned char acpi_pci32_start[] = { -+ 0x2f -+}; -+ -+static unsigned char acpi_pci64_valid[] = { -+ 0x43 -+}; -+ -+static unsigned char ssdp_misc_aml[] = { -+ 0x53, 0x53, 0x44, 0x54, 0x62, 0x01, 0x00, 0x00, -+ 0x01, 0x7f, 0x42, 0x58, 0x50, 0x43, 0x00, 0x00, -+ 0x42, 0x58, 0x53, 0x53, 0x44, 0x54, 0x53, 0x55, -+ 0x01, 0x00, 0x00, 0x00, 0x49, 0x4e, 0x54, 0x4c, -+ 0x18, 0x08, 0x15, 0x20, 0x10, 0x42, 0x05, 0x5c, -+ 0x00, 0x08, 0x50, 0x30, 0x53, 0x5f, 0x0c, 0x78, -+ 0x56, 0x34, 0x12, 0x08, 0x50, 0x30, 0x45, 0x5f, -+ 0x0c, 0x78, 0x56, 0x34, 0x12, 0x08, 0x50, 0x31, -+ 0x56, 0x5f, 0x0a, 0x12, 0x08, 0x50, 0x31, 0x53, -+ 0x5f, 0x11, 0x0b, 0x0a, 0x08, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x50, 0x31, -+ 0x45, 0x5f, 0x11, 0x0b, 0x0a, 0x08, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x50, -+ 0x31, 0x4c, 0x5f, 0x11, 0x0b, 0x0a, 0x08, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, -+ 0x29, 0x5c, 0x00, 0x08, 0x5f, 0x53, 0x33, 0x5f, -+ 0x12, 0x06, 0x04, 0x01, 0x01, 0x00, 0x00, 0x08, -+ 0x5f, 0x53, 0x34, 0x5f, 0x12, 0x08, 0x04, 0x0a, -+ 0x02, 0x0a, 0x02, 0x00, 0x00, 0x08, 0x5f, 0x53, -+ 0x35, 0x5f, 0x12, 0x06, 0x04, 0x00, 0x00, 0x00, -+ 0x00, 0x10, 0x40, 0x0c, 0x5c, 0x2f, 0x03, 0x5f, -+ 0x53, 0x42, 0x5f, 0x50, 0x43, 0x49, 0x30, 0x49, -+ 0x53, 0x41, 0x5f, 0x5b, 0x82, 0x4d, 0x0a, 0x50, -+ 0x45, 0x56, 0x54, 0x08, 0x5f, 0x48, 0x49, 0x44, -+ 0x0d, 0x51, 0x45, 0x4d, 0x55, 0x30, 0x30, 0x30, -+ 0x31, 0x00, 0x08, 0x50, 0x45, 0x53, 0x54, 0x0b, -+ 0xff, 0xff, 0x5b, 0x80, 0x50, 0x45, 0x4f, 0x52, -+ 0x01, 0x50, 0x45, 0x53, 0x54, 0x01, 0x5b, 0x81, -+ 0x0b, 0x50, 0x45, 0x4f, 0x52, 0x01, 0x50, 0x45, -+ 0x50, 0x54, 0x08, 0x14, 0x18, 0x5f, 0x53, 0x54, -+ 0x41, 0x00, 0x70, 0x50, 0x45, 0x53, 0x54, 0x60, -+ 0xa0, 0x06, 0x93, 0x60, 0x00, 0xa4, 0x00, 0xa1, -+ 0x04, 0xa4, 0x0a, 0x0f, 0x14, 0x0e, 0x52, 0x44, -+ 0x50, 0x54, 0x00, 0x70, 0x50, 0x45, 0x50, 0x54, -+ 0x60, 0xa4, 0x60, 0x14, 0x0c, 0x57, 0x52, 0x50, -+ 0x54, 0x01, 0x70, 0x68, 0x50, 0x45, 0x50, 0x54, -+ 0x08, 0x5f, 0x43, 0x52, 0x53, 0x11, 0x0d, 0x0a, -+ 0x0a, 0x47, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, -+ 0x01, 0x79, 0x00, 0x8b, 0x5f, 0x43, 0x52, 0x53, -+ 0x0a, 0x02, 0x49, 0x4f, 0x4d, 0x4e, 0x8b, 0x5f, -+ 0x43, 0x52, 0x53, 0x0a, 0x04, 0x49, 0x4f, 0x4d, -+ 0x58, 0x14, 0x18, 0x5f, 0x49, 0x4e, 0x49, 0x00, -+ 0x70, 0x50, 0x45, 0x53, 0x54, 0x49, 0x4f, 0x4d, -+ 0x4e, 0x70, 0x50, 0x45, 0x53, 0x54, 0x49, 0x4f, -+ 0x4d, 0x58 -+}; -+ -+static unsigned char ssdt_isa_pest[] = { -+ 0xd0 -+}; -+ -+static unsigned char acpi_s4_name[] = { -+ 0x88 -+}; -+ -+static unsigned char acpi_pci64_start[] = { -+ 0x4d -+}; -+ -+static unsigned char acpi_pci64_end[] = { -+ 0x5e -+}; -+ -+static unsigned char acpi_pci32_end[] = { -+ 0x39 -+}; -diff --git a/src/fw/ssdt-pcihp.hex b/src/fw/ssdt-pcihp.hex -new file mode 100644 -index 0000000..79b67f7 ---- /dev/null -+++ b/src/fw/ssdt-pcihp.hex -@@ -0,0 +1,38 @@ -+/* DO NOT EDIT! This is an autogenerated file. See scripts/acpi_extract.py. */ -+static unsigned char ssdt_pcihp_name[] = { -+ 0x33 -+}; -+ -+static unsigned char ssdt_pcihp_adr[] = { -+ 0x44 -+}; -+ -+static unsigned char ssdt_pcihp_end[] = { -+ 0x57 -+}; -+ -+static unsigned char ssdp_pcihp_aml[] = { -+ 0x53, 0x53, 0x44, 0x54, 0x57, 0x00, 0x00, 0x00, -+ 0x01, 0x27, 0x42, 0x58, 0x50, 0x43, 0x00, 0x00, -+ 0x42, 0x58, 0x53, 0x53, 0x44, 0x54, 0x50, 0x43, -+ 0x01, 0x00, 0x00, 0x00, 0x49, 0x4e, 0x54, 0x4c, -+ 0x18, 0x08, 0x15, 0x20, 0x10, 0x32, 0x5c, 0x2e, -+ 0x5f, 0x53, 0x42, 0x5f, 0x50, 0x43, 0x49, 0x30, -+ 0x5b, 0x82, 0x25, 0x53, 0x41, 0x41, 0x5f, 0x08, -+ 0x5f, 0x53, 0x55, 0x4e, 0x0a, 0xaa, 0x08, 0x5f, -+ 0x41, 0x44, 0x52, 0x0c, 0x00, 0x00, 0xaa, 0x00, -+ 0x14, 0x0e, 0x5f, 0x45, 0x4a, 0x30, 0x01, 0x50, -+ 0x43, 0x45, 0x4a, 0x5f, 0x53, 0x55, 0x4e -+}; -+ -+static unsigned char ssdt_pcihp_start[] = { -+ 0x30 -+}; -+ -+static unsigned char ssdt_pcihp_id[] = { -+ 0x3d -+}; -+ -+static unsigned char ssdt_pcihp_ej0[] = { -+ 0x4a -+}; -diff --git a/src/fw/ssdt-proc.hex b/src/fw/ssdt-proc.hex -new file mode 100644 -index 0000000..b6a5778 ---- /dev/null -+++ b/src/fw/ssdt-proc.hex -@@ -0,0 +1,35 @@ -+/* DO NOT EDIT! This is an autogenerated file. See scripts/acpi_extract.py. */ -+static unsigned char ssdt_proc_name[] = { -+ 0x28 -+}; -+ -+static unsigned char ssdp_proc_aml[] = { -+ 0x53, 0x53, 0x44, 0x54, 0x78, 0x00, 0x00, 0x00, -+ 0x01, 0xbb, 0x42, 0x58, 0x50, 0x43, 0x00, 0x00, -+ 0x42, 0x58, 0x53, 0x53, 0x44, 0x54, 0x00, 0x00, -+ 0x01, 0x00, 0x00, 0x00, 0x49, 0x4e, 0x54, 0x4c, -+ 0x18, 0x08, 0x15, 0x20, 0x5b, 0x83, 0x42, 0x05, -+ 0x43, 0x50, 0x41, 0x41, 0xaa, 0x10, 0xb0, 0x00, -+ 0x00, 0x06, 0x08, 0x49, 0x44, 0x5f, 0x5f, 0x0a, -+ 0xaa, 0x08, 0x5f, 0x48, 0x49, 0x44, 0x0d, 0x41, -+ 0x43, 0x50, 0x49, 0x30, 0x30, 0x30, 0x37, 0x00, -+ 0x14, 0x0f, 0x5f, 0x4d, 0x41, 0x54, 0x00, 0xa4, -+ 0x43, 0x50, 0x4d, 0x41, 0x49, 0x44, 0x5f, 0x5f, -+ 0x14, 0x0f, 0x5f, 0x53, 0x54, 0x41, 0x00, 0xa4, -+ 0x43, 0x50, 0x53, 0x54, 0x49, 0x44, 0x5f, 0x5f, -+ 0x14, 0x0f, 0x5f, 0x45, 0x4a, 0x30, 0x01, 0x43, -+ 0x50, 0x45, 0x4a, 0x49, 0x44, 0x5f, 0x5f, 0x68, -+ -+}; -+ -+static unsigned char ssdt_proc_id[] = { -+ 0x38 -+}; -+ -+static unsigned char ssdt_proc_end[] = { -+ 0x78 -+}; -+ -+static unsigned char ssdt_proc_start[] = { -+ 0x24 -+}; --- -1.8.3.1 - diff --git a/SOURCES/seabios-acpi_extract-Don-t-generate-unused-and-empty-q35-acp.patch b/SOURCES/seabios-acpi_extract-Don-t-generate-unused-and-empty-q35-acp.patch deleted file mode 100644 index af6d19b..0000000 --- a/SOURCES/seabios-acpi_extract-Don-t-generate-unused-and-empty-q35-acp.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 8d46a40440ca9a8ea718b9938c82b1848866e0c3 Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Tue, 24 Jan 2017 11:41:10 +0100 -Subject: [PATCH 3/4] acpi_extract: Don't generate unused (and empty) - q35-acpi-dsdt.hex file - -RH-Author: Gerd Hoffmann -Message-id: <1485258071-13209-4-git-send-email-kraxel@redhat.com> -Patchwork-id: 73324 -O-Subject: [RHEL-7.3.z seabios PATCH 3/4] acpi_extract: Don't generate unused (and empty) q35-acpi-dsdt.hex file -Bugzilla: 1400102 -RH-Acked-by: Laszlo Ersek -RH-Acked-by: Igor Mammedov -RH-Acked-by: Miroslav Rezanina - -From: Kevin O'Connor - -Signed-off-by: Kevin O'Connor -(cherry picked from commit b0d3cc36667b68e41ac816caa22802922400e5af) -Signed-off-by: Miroslav Rezanina ---- - Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index 4e4092d..6f1bb68 100644 ---- a/Makefile -+++ b/Makefile -@@ -256,7 +256,7 @@ $(OUT)%.hex: %.dsl ./scripts/acpi_extract_preprocess.py ./scripts/acpi_extract.p - $(Q)$(PYTHON) ./scripts/acpi_extract.py $(OUT)$*.lst > $(OUT)$*.off - $(Q)cat $(OUT)$*.off > $@ - --$(OUT)src/fw/acpi.o: $(OUT)src/fw/acpi-dsdt.hex $(OUT)src/fw/ssdt-proc.hex $(OUT)src/fw/ssdt-pcihp.hex $(OUT)src/fw/ssdt-misc.hex $(OUT)src/fw/q35-acpi-dsdt.hex -+$(OUT)src/fw/acpi.o: $(OUT)src/fw/acpi-dsdt.hex $(OUT)src/fw/ssdt-proc.hex $(OUT)src/fw/ssdt-pcihp.hex $(OUT)src/fw/ssdt-misc.hex - - ################ Kconfig rules - --- -1.8.3.1 - diff --git a/SOURCES/seabios-acpi_extract-Make-the-generated-.hex-files-more-huma.patch b/SOURCES/seabios-acpi_extract-Make-the-generated-.hex-files-more-huma.patch deleted file mode 100644 index 47eca0e..0000000 --- a/SOURCES/seabios-acpi_extract-Make-the-generated-.hex-files-more-huma.patch +++ /dev/null @@ -1,61 +0,0 @@ -From dd0155d32ec0077505faa757fc7e05339400021b Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Tue, 24 Jan 2017 11:41:09 +0100 -Subject: [PATCH 2/4] acpi_extract: Make the generated .hex files more human - readable - -RH-Author: Gerd Hoffmann -Message-id: <1485258071-13209-3-git-send-email-kraxel@redhat.com> -Patchwork-id: 73326 -O-Subject: [RHEL-7.3.z seabios PATCH 2/4] acpi_extract: Make the generated .hex files more human readable -Bugzilla: 1400102 -RH-Acked-by: Laszlo Ersek -RH-Acked-by: Igor Mammedov -RH-Acked-by: Miroslav Rezanina - -From: Kevin O'Connor - -Add a comment to the top of the generated file indicating that is is -an automatically generated file. Compress output so that up to eight -hex values are placed on a single line. - -Signed-off-by: Kevin O'Connor -(cherry picked from commit 7fdd2fda3fc3ff46b0919e9fd47fcd19561bbb37) -Signed-off-by: Miroslav Rezanina ---- - scripts/acpi_extract.py | 15 +++++++++++---- - 1 file changed, 11 insertions(+), 4 deletions(-) - -diff --git a/scripts/acpi_extract.py b/scripts/acpi_extract.py -index 24ff0d1..3ed863b 100755 ---- a/scripts/acpi_extract.py -+++ b/scripts/acpi_extract.py -@@ -346,14 +346,21 @@ def main(): - debug = "at end of file" - - # Pretty print output -+ outstrs = ["/* DO NOT EDIT! This is an autogenerated file." -+ " See scripts/acpi_extract.py. */"] - for array in output.keys(): - otype = get_value_type(max(output[array])) -+ outstrs.append("static unsigned %s %s[] = {" % (otype, array)) - odata = [] - for value in output[array]: -- odata.append("0x%x" % value) -- sys.stdout.write("static unsigned %s %s[] = {\n" % (otype, array)) -- sys.stdout.write(",\n".join(odata)) -- sys.stdout.write('\n};\n') -+ odata.append("0x%02x" % value) -+ if len(odata) >= 8: -+ outstrs.append(" %s," % (', '.join(odata),)) -+ del odata[:] -+ outstrs.append(" %s" % (', '.join(odata),)) -+ outstrs.append('};') -+ outstrs.append('') -+ sys.stdout.write('\n'.join(outstrs)) - - if __name__ == '__main__': - main() --- -1.8.3.1 - diff --git a/SOURCES/seabios-acpi_extract-Move-main-code-to-new-function-main.patch b/SOURCES/seabios-acpi_extract-Move-main-code-to-new-function-main.patch deleted file mode 100644 index c7d07e2..0000000 --- a/SOURCES/seabios-acpi_extract-Move-main-code-to-new-function-main.patch +++ /dev/null @@ -1,266 +0,0 @@ -From ebd7700ccd3b4cc8344aefd57e1f6114848cc964 Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Tue, 24 Jan 2017 11:41:08 +0100 -Subject: [PATCH 1/4] acpi_extract: Move main code to new function main() - -RH-Author: Gerd Hoffmann -Message-id: <1485258071-13209-2-git-send-email-kraxel@redhat.com> -Patchwork-id: 73327 -O-Subject: [RHEL-7.3.z seabios PATCH 1/4] acpi_extract: Move main code to new function main() -Bugzilla: 1400102 -RH-Acked-by: Laszlo Ersek -RH-Acked-by: Igor Mammedov -RH-Acked-by: Miroslav Rezanina - -From: Kevin O'Connor - -Signed-off-by: Kevin O'Connor -(cherry picked from commit 1e7d2edab4bd24452fb45c60e8821569ff29c8fa) -Signed-off-by: Miroslav Rezanina ---- - scripts/acpi_extract.py | 225 +++++++++++++++++++++++++----------------------- - 1 file changed, 115 insertions(+), 110 deletions(-) - -diff --git a/scripts/acpi_extract.py b/scripts/acpi_extract.py -index 60bbac3..24ff0d1 100755 ---- a/scripts/acpi_extract.py -+++ b/scripts/acpi_extract.py -@@ -233,107 +233,6 @@ def aml_package_start(offset): - offset += 1 - return offset + aml_pkglen_bytes(offset) + 1 - --lineno = 0 --for line in fileinput.input(): -- # Strip trailing newline -- line = line.rstrip() -- # line number and debug string to output in case of errors -- lineno = lineno + 1 -- debug = "input line %d: %s" % (lineno, line) -- #ASL listing: space, then line#, then ...., then code -- pasl = re.compile('^\s+([0-9]+)(:\s\s|\.\.\.\.)\s*') -- m = pasl.search(line) -- if (m): -- add_asl(lineno, pasl.sub("", line)) -- # AML listing: offset in hex, then ...., then code -- paml = re.compile('^([0-9A-Fa-f]+)(:\s\s|\.\.\.\.)\s*') -- m = paml.search(line) -- if (m): -- add_aml(m.group(1), paml.sub("", line)) -- --# Now go over code --# Track AML offset of a previous non-empty ASL command --prev_aml_offset = -1 --for i in range(len(asl)): -- debug = "input line %d: %s" % (asl[i].lineno, asl[i].line) -- -- l = asl[i].line -- -- # skip if not an extract directive -- a = len(re.findall(r'ACPI_EXTRACT', l)) -- if (not a): -- # If not empty, store AML offset. Will be used for sanity checks -- # IASL seems to put {}. at random places in the listing. -- # Ignore any non-words for the purpose of this test. -- m = re.search(r'\w+', l) -- if (m): -- prev_aml_offset = asl[i].aml_offset -- continue -- -- if (a > 1): -- die("Expected at most one ACPI_EXTRACT per line, actual %d" % a) -- -- mext = re.search(r''' -- ^\s* # leading whitespace -- /\*\s* # start C comment -- (ACPI_EXTRACT_\w+) # directive: group(1) -- \s+ # whitspace separates directive from array name -- (\w+) # array name: group(2) -- \s*\*/ # end of C comment -- \s*$ # trailing whitespace -- ''', l, re.VERBOSE) -- if (not mext): -- die("Stray ACPI_EXTRACT in input") -- -- # previous command must have produced some AML, -- # otherwise we are in a middle of a block -- if (prev_aml_offset == asl[i].aml_offset): -- die("ACPI_EXTRACT directive in the middle of a block") -- -- directive = mext.group(1) -- array = mext.group(2) -- offset = asl[i].aml_offset -- -- if (directive == "ACPI_EXTRACT_ALL_CODE"): -- if array in output: -- die("%s directive used more than once" % directive) -- output[array] = aml -- continue -- if (directive == "ACPI_EXTRACT_NAME_BUFFER8"): -- offset = aml_name_buffer8(offset) -- elif (directive == "ACPI_EXTRACT_NAME_DWORD_CONST"): -- offset = aml_name_dword_const(offset) -- elif (directive == "ACPI_EXTRACT_NAME_WORD_CONST"): -- offset = aml_name_word_const(offset) -- elif (directive == "ACPI_EXTRACT_NAME_BYTE_CONST"): -- offset = aml_name_byte_const(offset) -- elif (directive == "ACPI_EXTRACT_NAME_STRING"): -- offset = aml_name_string(offset) -- elif (directive == "ACPI_EXTRACT_METHOD_STRING"): -- offset = aml_method_string(offset) -- elif (directive == "ACPI_EXTRACT_DEVICE_START"): -- offset = aml_device_start(offset) -- elif (directive == "ACPI_EXTRACT_DEVICE_STRING"): -- offset = aml_device_string(offset) -- elif (directive == "ACPI_EXTRACT_DEVICE_END"): -- offset = aml_device_end(offset) -- elif (directive == "ACPI_EXTRACT_PROCESSOR_START"): -- offset = aml_processor_start(offset) -- elif (directive == "ACPI_EXTRACT_PROCESSOR_STRING"): -- offset = aml_processor_string(offset) -- elif (directive == "ACPI_EXTRACT_PROCESSOR_END"): -- offset = aml_processor_end(offset) -- elif (directive == "ACPI_EXTRACT_PKG_START"): -- offset = aml_package_start(offset) -- else: -- die("Unsupported directive %s" % directive) -- -- if array not in output: -- output[array] = [] -- output[array].append(offset) -- --debug = "at end of file" -- - def get_value_type(maxvalue): - #Use type large enough to fit the table - if (maxvalue >= 0x10000): -@@ -343,12 +242,118 @@ def get_value_type(maxvalue): - else: - return "char" - --# Pretty print output --for array in output.keys(): -- otype = get_value_type(max(output[array])) -- odata = [] -- for value in output[array]: -- odata.append("0x%x" % value) -- sys.stdout.write("static unsigned %s %s[] = {\n" % (otype, array)) -- sys.stdout.write(",\n".join(odata)) -- sys.stdout.write('\n};\n') -+def main(): -+ global debug -+ lineno = 0 -+ for line in fileinput.input(): -+ # Strip trailing newline -+ line = line.rstrip() -+ # line number and debug string to output in case of errors -+ lineno = lineno + 1 -+ debug = "input line %d: %s" % (lineno, line) -+ #ASL listing: space, then line#, then ...., then code -+ pasl = re.compile('^\s+([0-9]+)(:\s\s|\.\.\.\.)\s*') -+ m = pasl.search(line) -+ if (m): -+ add_asl(lineno, pasl.sub("", line)) -+ # AML listing: offset in hex, then ...., then code -+ paml = re.compile('^([0-9A-Fa-f]+)(:\s\s|\.\.\.\.)\s*') -+ m = paml.search(line) -+ if (m): -+ add_aml(m.group(1), paml.sub("", line)) -+ -+ # Now go over code -+ # Track AML offset of a previous non-empty ASL command -+ prev_aml_offset = -1 -+ for i in range(len(asl)): -+ debug = "input line %d: %s" % (asl[i].lineno, asl[i].line) -+ -+ l = asl[i].line -+ -+ # skip if not an extract directive -+ a = len(re.findall(r'ACPI_EXTRACT', l)) -+ if (not a): -+ # If not empty, store AML offset. Will be used for sanity checks -+ # IASL seems to put {}. at random places in the listing. -+ # Ignore any non-words for the purpose of this test. -+ m = re.search(r'\w+', l) -+ if (m): -+ prev_aml_offset = asl[i].aml_offset -+ continue -+ -+ if (a > 1): -+ die("Expected at most one ACPI_EXTRACT per line, actual %d" % a) -+ -+ mext = re.search(r''' -+ ^\s* # leading whitespace -+ /\*\s* # start C comment -+ (ACPI_EXTRACT_\w+) # directive: group(1) -+ \s+ # whitspace separates directive from array name -+ (\w+) # array name: group(2) -+ \s*\*/ # end of C comment -+ \s*$ # trailing whitespace -+ ''', l, re.VERBOSE) -+ if (not mext): -+ die("Stray ACPI_EXTRACT in input") -+ -+ # previous command must have produced some AML, -+ # otherwise we are in a middle of a block -+ if (prev_aml_offset == asl[i].aml_offset): -+ die("ACPI_EXTRACT directive in the middle of a block") -+ -+ directive = mext.group(1) -+ array = mext.group(2) -+ offset = asl[i].aml_offset -+ -+ if (directive == "ACPI_EXTRACT_ALL_CODE"): -+ if array in output: -+ die("%s directive used more than once" % directive) -+ output[array] = aml -+ continue -+ if (directive == "ACPI_EXTRACT_NAME_BUFFER8"): -+ offset = aml_name_buffer8(offset) -+ elif (directive == "ACPI_EXTRACT_NAME_DWORD_CONST"): -+ offset = aml_name_dword_const(offset) -+ elif (directive == "ACPI_EXTRACT_NAME_WORD_CONST"): -+ offset = aml_name_word_const(offset) -+ elif (directive == "ACPI_EXTRACT_NAME_BYTE_CONST"): -+ offset = aml_name_byte_const(offset) -+ elif (directive == "ACPI_EXTRACT_NAME_STRING"): -+ offset = aml_name_string(offset) -+ elif (directive == "ACPI_EXTRACT_METHOD_STRING"): -+ offset = aml_method_string(offset) -+ elif (directive == "ACPI_EXTRACT_DEVICE_START"): -+ offset = aml_device_start(offset) -+ elif (directive == "ACPI_EXTRACT_DEVICE_STRING"): -+ offset = aml_device_string(offset) -+ elif (directive == "ACPI_EXTRACT_DEVICE_END"): -+ offset = aml_device_end(offset) -+ elif (directive == "ACPI_EXTRACT_PROCESSOR_START"): -+ offset = aml_processor_start(offset) -+ elif (directive == "ACPI_EXTRACT_PROCESSOR_STRING"): -+ offset = aml_processor_string(offset) -+ elif (directive == "ACPI_EXTRACT_PROCESSOR_END"): -+ offset = aml_processor_end(offset) -+ elif (directive == "ACPI_EXTRACT_PKG_START"): -+ offset = aml_package_start(offset) -+ else: -+ die("Unsupported directive %s" % directive) -+ -+ if array not in output: -+ output[array] = [] -+ output[array].append(offset) -+ -+ debug = "at end of file" -+ -+ # Pretty print output -+ for array in output.keys(): -+ otype = get_value_type(max(output[array])) -+ odata = [] -+ for value in output[array]: -+ odata.append("0x%x" % value) -+ sys.stdout.write("static unsigned %s %s[] = {\n" % (otype, array)) -+ sys.stdout.write(",\n".join(odata)) -+ sys.stdout.write('\n};\n') -+ -+if __name__ == '__main__': -+ main() --- -1.8.3.1 - diff --git a/SOURCES/seabios-blockcmd-accept-only-disks-and-CD-ROMs.patch b/SOURCES/seabios-blockcmd-accept-only-disks-and-CD-ROMs.patch new file mode 100644 index 0000000..3367a56 --- /dev/null +++ b/SOURCES/seabios-blockcmd-accept-only-disks-and-CD-ROMs.patch @@ -0,0 +1,47 @@ +From a40b8bfb775945aa62510f0a3f4a3301aa3d65fc Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Tue, 9 May 2017 11:24:34 +0200 +Subject: [PATCH 1/4] blockcmd: accept only disks and CD-ROMs + +RH-Author: Paolo Bonzini +Message-id: <20170509112437.30666-2-pbonzini@redhat.com> +Patchwork-id: 75050 +O-Subject: [RHEL7.4 seabios PATCH 1/4] blockcmd: accept only disks and CD-ROMs +Bugzilla: 1020622 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng + +From: Roman Kagan + +Luns that report to INQUIRY with a type other than CD-ROM are considered +disks. This isn't necessarily the case; working with such luns as disks +may lead to unpredictable results. + +So bail out if the lun is neither CD-ROM nor disk. + +Signed-off-by: Roman Kagan +Signed-off-by: Paolo Bonzini +(cherry picked from commit 177aecfcf4161c53f503782e68608284b198c0f9) +Signed-off-by: Miroslav Rezanina +--- + src/hw/blockcmd.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/hw/blockcmd.c b/src/hw/blockcmd.c +index f147100..5ad128e 100644 +--- a/src/hw/blockcmd.c ++++ b/src/hw/blockcmd.c +@@ -217,6 +217,9 @@ scsi_drive_setup(struct drive_s *drive, const char *s, int prio) + return 0; + } + ++ if (pdt != SCSI_TYPE_DISK) ++ return -1; ++ + ret = scsi_is_ready(&dop); + if (ret) { + dprintf(1, "scsi_is_ready returned %d\n", ret); +-- +1.8.3.1 + diff --git a/SOURCES/seabios-blockcmd-generic-SCSI-luns-enumeration.patch b/SOURCES/seabios-blockcmd-generic-SCSI-luns-enumeration.patch new file mode 100644 index 0000000..ab97951 --- /dev/null +++ b/SOURCES/seabios-blockcmd-generic-SCSI-luns-enumeration.patch @@ -0,0 +1,169 @@ +From 456d0bab4f280e3fe4b8041a89385547b02454e0 Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Tue, 9 May 2017 11:24:35 +0200 +Subject: [PATCH 2/4] blockcmd: generic SCSI luns enumeration + +RH-Author: Paolo Bonzini +Message-id: <20170509112437.30666-3-pbonzini@redhat.com> +Patchwork-id: 75051 +O-Subject: [RHEL7.4 seabios PATCH 2/4] blockcmd: generic SCSI luns enumeration +Bugzilla: 1020622 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng + +From: Roman Kagan + +Add two generic functions to discover active LUNs on a SCSI target. + +The functions take a temporary drive descriptor on the target, and a +callback to create a new drive descriptor with a new LUN using the +temporary one as a template. + +One of the functions performs REPORT LUNS on the temporary drive to +obtain the list of candidate luns; the other sequentially iterates the +lun numbers up to the given maximum, and is meant as a fallback. Both +functions return the number of successfully created drive descriptors, +or a negative number if an error occured. + +This will allow to lift the limitation of most of the SCSI drivers that +support booting off the LUN #0 only. + +Signed-off-by: Roman Kagan +Signed-off-by: Paolo Bonzini +(cherry picked from commit 750188dfb35f61f1533f1138d6972b19f36f1a2c) +Signed-off-by: Miroslav Rezanina +--- + src/hw/blockcmd.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + src/hw/blockcmd.h | 4 +++ + 2 files changed, 98 insertions(+) + +diff --git a/src/hw/blockcmd.c b/src/hw/blockcmd.c +index 5ad128e..324188d 100644 +--- a/src/hw/blockcmd.c ++++ b/src/hw/blockcmd.c +@@ -13,6 +13,7 @@ + #include "std/disk.h" // DISK_RET_EPARAM + #include "string.h" // memset + #include "util.h" // timer_calc ++#include "malloc.h" + + + /**************************************************************** +@@ -181,6 +182,99 @@ scsi_is_ready(struct disk_op_s *op) + return 0; + } + ++#define CDB_CMD_REPORT_LUNS 0xA0 ++ ++struct cdb_report_luns { ++ u8 command; ++ u8 reserved_01[5]; ++ u32 length; ++ u8 pad[6]; ++} PACKED; ++ ++struct scsi_lun { ++ u16 lun[4]; ++}; ++ ++struct cdbres_report_luns { ++ u32 length; ++ u32 reserved; ++ struct scsi_lun luns[]; ++}; ++ ++static u64 scsilun2u64(struct scsi_lun *scsi_lun) ++{ ++ int i; ++ u64 ret = 0; ++ for (i = 0; i < ARRAY_SIZE(scsi_lun->lun); i++) ++ ret |= be16_to_cpu(scsi_lun->lun[i]) << (16 * i); ++ return ret; ++} ++ ++// Issue REPORT LUNS on a temporary drive and iterate reported luns calling ++// @add_lun for each ++int scsi_rep_luns_scan(struct drive_s *tmp_drive, scsi_add_lun add_lun) ++{ ++ int ret = -1; ++ u32 maxluns = 511; ++ u32 nluns, i; ++ struct cdb_report_luns cdb = { ++ .command = CDB_CMD_REPORT_LUNS, ++ }; ++ struct disk_op_s op = { ++ .drive_gf = tmp_drive, ++ .command = CMD_SCSI, ++ .count = 1, ++ .cdbcmd = &cdb, ++ }; ++ struct cdbres_report_luns *resp; ++ ++ ASSERT32FLAT(); ++ ++ while (1) { ++ op.blocksize = sizeof(struct cdbres_report_luns) + ++ maxluns * sizeof(struct scsi_lun); ++ op.buf_fl = malloc_tmp(op.blocksize); ++ if (!op.buf_fl) { ++ warn_noalloc(); ++ return -1; ++ } ++ ++ cdb.length = cpu_to_be32(op.blocksize); ++ if (process_op(&op) != DISK_RET_SUCCESS) ++ goto out; ++ ++ resp = op.buf_fl; ++ nluns = be32_to_cpu(resp->length) / sizeof(struct scsi_lun); ++ if (nluns <= maxluns) ++ break; ++ ++ free(op.buf_fl); ++ maxluns = nluns; ++ } ++ ++ for (i = 0, ret = 0; i < nluns; i++) { ++ u64 lun = scsilun2u64(&resp->luns[i]); ++ if (lun >> 32) ++ continue; ++ ret += !add_lun((u32)lun, tmp_drive); ++ } ++out: ++ free(op.buf_fl); ++ return ret; ++} ++ ++// Iterate LUNs on the target and call @add_lun for each ++int scsi_sequential_scan(struct drive_s *tmp_drive, u32 maxluns, ++ scsi_add_lun add_lun) ++{ ++ int ret; ++ u32 lun; ++ ++ for (lun = 0, ret = 0; lun < maxluns; lun++) ++ ret += !add_lun(lun, tmp_drive); ++ return ret; ++} ++ + // Validate drive, find block size / sector count, and register drive. + int + scsi_drive_setup(struct drive_s *drive, const char *s, int prio) +diff --git a/src/hw/blockcmd.h b/src/hw/blockcmd.h +index b543f85..f18543e 100644 +--- a/src/hw/blockcmd.h ++++ b/src/hw/blockcmd.h +@@ -106,5 +106,9 @@ int scsi_is_read(struct disk_op_s *op); + int scsi_is_ready(struct disk_op_s *op); + struct drive_s; + int scsi_drive_setup(struct drive_s *drive, const char *s, int prio); ++typedef int (*scsi_add_lun)(u32 lun, struct drive_s *tmpl_drv); ++int scsi_rep_luns_scan(struct drive_s *tmp_drive, scsi_add_lun add_lun); ++int scsi_sequential_scan(struct drive_s *tmp_drive, u32 maxluns, ++ scsi_add_lun add_lun); + + #endif // blockcmd.h +-- +1.8.3.1 + diff --git a/SOURCES/seabios-fw-pci-add-Q35-S3-support.patch b/SOURCES/seabios-fw-pci-add-Q35-S3-support.patch deleted file mode 100644 index 902e4ef..0000000 --- a/SOURCES/seabios-fw-pci-add-Q35-S3-support.patch +++ /dev/null @@ -1,167 +0,0 @@ -From 64181e8938e1ebb31375bfb5372190a2f3f1ad60 Mon Sep 17 00:00:00 2001 -From: Marcel Apfelbaum -Date: Thu, 31 Mar 2016 16:19:03 +0200 -Subject: [PATCH] fw/pci: add Q35 S3 support - -RH-Author: Marcel Apfelbaum -Message-id: <1459441143-24378-1-git-send-email-marcel@redhat.com> -Patchwork-id: 69965 -O-Subject: [RHEL-7.3 seabios PATCH] fw/pci: add Q35 S3 support -Bugzilla: 1185721 -RH-Acked-by: Paolo Bonzini -RH-Acked-by: Laszlo Ersek -RH-Acked-by: Gerd Hoffmann - -Following the i440fx example, save the LPC, SMBUS and PCIEXBAR bdfs -between OS sleeps and use them to re-configure the -corresponding registers. - -Tested-by: Gal Hammer -Reviewed-by: Laszlo Ersek -Signed-off-by: Marcel Apfelbaum -(cherry picked from commit dce99e01b6bfc51175bdf32612fd4f2738e5c3c8) -Signed-off-by: Marcel Apfelbaum -Signed-off-by: Miroslav Rezanina ---- - src/fw/pciinit.c | 73 +++++++++++++++++++++++++++++++++++++++++++------------- - 1 file changed, 56 insertions(+), 17 deletions(-) - -diff --git a/src/fw/pciinit.c b/src/fw/pciinit.c -index c31c2fa..7896600 100644 ---- a/src/fw/pciinit.c -+++ b/src/fw/pciinit.c -@@ -149,6 +149,22 @@ static void piix_isa_bridge_setup(struct pci_device *pci, void *arg) - dprintf(1, "PIIX3/PIIX4 init: elcr=%02x %02x\n", elcr[0], elcr[1]); - } - -+static void mch_isa_lpc_setup(u16 bdf) -+{ -+ /* pm io base */ -+ pci_config_writel(bdf, ICH9_LPC_PMBASE, -+ acpi_pm_base | ICH9_LPC_PMBASE_RTE); -+ -+ /* acpi enable, SCI: IRQ9 000b = irq9*/ -+ pci_config_writeb(bdf, ICH9_LPC_ACPI_CTRL, ICH9_LPC_ACPI_CTRL_ACPI_EN); -+ -+ /* set root complex register block BAR */ -+ pci_config_writel(bdf, ICH9_LPC_RCBA, -+ ICH9_LPC_RCBA_ADDR | ICH9_LPC_RCBA_EN); -+} -+ -+static int ICH9LpcBDF = -1; -+ - /* ICH9 LPC PCI to ISA bridge */ - /* PCI_VENDOR_ID_INTEL && PCI_DEVICE_ID_INTEL_ICH9_LPC */ - static void mch_isa_bridge_setup(struct pci_device *dev, void *arg) -@@ -176,16 +192,10 @@ static void mch_isa_bridge_setup(struct pci_device *dev, void *arg) - outb(elcr[1], ICH9_LPC_PORT_ELCR2); - dprintf(1, "Q35 LPC init: elcr=%02x %02x\n", elcr[0], elcr[1]); - -- /* pm io base */ -- pci_config_writel(bdf, ICH9_LPC_PMBASE, -- acpi_pm_base | ICH9_LPC_PMBASE_RTE); -+ ICH9LpcBDF = bdf; - -- /* acpi enable, SCI: IRQ9 000b = irq9*/ -- pci_config_writeb(bdf, ICH9_LPC_ACPI_CTRL, ICH9_LPC_ACPI_CTRL_ACPI_EN); -+ mch_isa_lpc_setup(bdf); - -- /* set root complex register block BAR */ -- pci_config_writel(bdf, ICH9_LPC_RCBA, -- ICH9_LPC_RCBA_ADDR | ICH9_LPC_RCBA_EN); - e820_add(ICH9_LPC_RCBA_ADDR, 16*1024, E820_RESERVED); - - acpi_pm1a_cnt = acpi_pm_base + 0x04; -@@ -244,11 +254,8 @@ static void piix4_pm_setup(struct pci_device *pci, void *arg) - pmtimer_setup(acpi_pm_base + 0x08); - } - --/* ICH9 SMBUS */ --/* PCI_VENDOR_ID_INTEL && PCI_DEVICE_ID_INTEL_ICH9_SMBUS */ --static void ich9_smbus_setup(struct pci_device *dev, void *arg) -+static void ich9_smbus_enable(u16 bdf) - { -- u16 bdf = dev->bdf; - /* map smbus into io space */ - pci_config_writel(bdf, ICH9_SMB_SMB_BASE, - (acpi_pm_base + 0x100) | PCI_BASE_ADDRESS_SPACE_IO); -@@ -257,6 +264,17 @@ static void ich9_smbus_setup(struct pci_device *dev, void *arg) - pci_config_writeb(bdf, ICH9_SMB_HOSTC, ICH9_SMB_HOSTC_HST_EN); - } - -+static int ICH9SmbusBDF = -1; -+ -+/* ICH9 SMBUS */ -+/* PCI_VENDOR_ID_INTEL && PCI_DEVICE_ID_INTEL_ICH9_SMBUS */ -+static void ich9_smbus_setup(struct pci_device *dev, void *arg) -+{ -+ ICH9SmbusBDF = dev->bdf; -+ -+ ich9_smbus_enable(dev->bdf); -+} -+ - static const struct pci_device_id pci_device_tbl[] = { - /* PIIX3/PIIX4 PCI to ISA bridge */ - PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_0, -@@ -293,6 +311,9 @@ static const struct pci_device_id pci_device_tbl[] = { - PCI_DEVICE_END, - }; - -+static int MCHMmcfgBDF = -1; -+static void mch_mmconfig_setup(u16 bdf); -+ - void pci_resume(void) - { - if (!CONFIG_QEMU) { -@@ -302,6 +323,18 @@ void pci_resume(void) - if (PiixPmBDF >= 0) { - piix4_pm_config_setup(PiixPmBDF); - } -+ -+ if (ICH9LpcBDF >= 0) { -+ mch_isa_lpc_setup(ICH9LpcBDF); -+ } -+ -+ if (ICH9SmbusBDF >= 0) { -+ ich9_smbus_enable(ICH9SmbusBDF); -+ } -+ -+ if(MCHMmcfgBDF >= 0) { -+ mch_mmconfig_setup(MCHMmcfgBDF); -+ } - } - - static void pci_bios_init_device(struct pci_device *pci) -@@ -388,18 +421,24 @@ static void i440fx_mem_addr_setup(struct pci_device *dev, void *arg) - pci_slot_get_irq = piix_pci_slot_get_irq; - } - --static void mch_mem_addr_setup(struct pci_device *dev, void *arg) -+static void mch_mmconfig_setup(u16 bdf) - { - u64 addr = Q35_HOST_BRIDGE_PCIEXBAR_ADDR; -- u32 size = Q35_HOST_BRIDGE_PCIEXBAR_SIZE; -- -- /* setup mmconfig */ -- u16 bdf = dev->bdf; - u32 upper = addr >> 32; - u32 lower = (addr & 0xffffffff) | Q35_HOST_BRIDGE_PCIEXBAREN; - pci_config_writel(bdf, Q35_HOST_BRIDGE_PCIEXBAR, 0); - pci_config_writel(bdf, Q35_HOST_BRIDGE_PCIEXBAR + 4, upper); - pci_config_writel(bdf, Q35_HOST_BRIDGE_PCIEXBAR, lower); -+} -+ -+static void mch_mem_addr_setup(struct pci_device *dev, void *arg) -+{ -+ u64 addr = Q35_HOST_BRIDGE_PCIEXBAR_ADDR; -+ u32 size = Q35_HOST_BRIDGE_PCIEXBAR_SIZE; -+ -+ /* setup mmconfig */ -+ MCHMmcfgBDF = dev->bdf; -+ mch_mmconfig_setup(dev->bdf); - e820_add(addr, size, E820_RESERVED); - - /* setup pci i/o window (above mmconfig) */ --- -1.8.3.1 - diff --git a/SOURCES/seabios-pci-don-t-map-virtio-1.0-storage-devices-above-4G.patch b/SOURCES/seabios-pci-don-t-map-virtio-1.0-storage-devices-above-4G.patch deleted file mode 100644 index 1497d8d..0000000 --- a/SOURCES/seabios-pci-don-t-map-virtio-1.0-storage-devices-above-4G.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 01549028733315a513b1b5fcc1951fd271e8a531 Mon Sep 17 00:00:00 2001 -From: Marcel Apfelbaum -Date: Tue, 13 Sep 2016 13:20:45 +0200 -Subject: [PATCH] pci: don't map virtio 1.0 storage devices above 4G - -RH-Author: Marcel Apfelbaum -Message-id: <1473772845-913-1-git-send-email-marcel@redhat.com> -Patchwork-id: 72292 -O-Subject: [RHEL-7.3 seabios PATCH V2] pci: don't map virtio 1.0 storage devices above 4G -Bugzilla: 1373154 -RH-Acked-by: Maxime Coquelin -RH-Acked-by: Gerd Hoffmann -RH-Acked-by: Laszlo Ersek -RH-Acked-by: Michael S. Tsirkin - -v1->v2: - - add the note to the commit message (Gerd) - -BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1373154 -Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=11741451 -Upstream: Fixed upstream by commit: 0e21548b15 (virtio: pci cfg access) -Tests: Checked the virtio BARs are placed in the 32-bit range and - the guest boots successfully. - -Otherwise SeaBIOS can't access virtio's modern BAR. - -Note: It works in the master branch but can't be merged easily -into 1.9 branch, so use this as an interim solution -until we'll rebase to 1.10. - -Signed-off-by: Marcel Apfelbaum -Signed-off-by: Miroslav Rezanina ---- - src/fw/pciinit.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/src/fw/pciinit.c b/src/fw/pciinit.c -index 7896600..4ff1262 100644 ---- a/src/fw/pciinit.c -+++ b/src/fw/pciinit.c -@@ -650,6 +650,13 @@ static void pci_region_migrate_64bit_entries(struct pci_region *from, - continue; - if (entry->dev->class == PCI_CLASS_SERIAL_USB) - continue; -+ if (entry->dev->vendor == PCI_VENDOR_ID_REDHAT_QUMRANET && -+ (entry->dev->device == PCI_DEVICE_ID_VIRTIO_BLK_09 || -+ entry->dev->device == PCI_DEVICE_ID_VIRTIO_BLK_10 || -+ entry->dev->device == PCI_DEVICE_ID_VIRTIO_SCSI_09 || -+ entry->dev->device == PCI_DEVICE_ID_VIRTIO_SCSI_10)) -+ continue; -+ - // Move from source list to destination list. - hlist_del(&entry->node); - hlist_add(&entry->node, last); --- -1.8.3.1 - diff --git a/SOURCES/seabios-redhat-reserve-more-memory-on-fseg.patch b/SOURCES/seabios-redhat-reserve-more-memory-on-fseg.patch deleted file mode 100644 index 03cad29..0000000 --- a/SOURCES/seabios-redhat-reserve-more-memory-on-fseg.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 0561b82b0470679505d62f49eec83adb01eec0ab Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Tue, 19 Apr 2016 11:27:50 +0200 -Subject: [PATCH 1/2] redhat: reserve more memory on fseg - -RH-Author: Gerd Hoffmann -Message-id: <1461065271-22039-2-git-send-email-kraxel@redhat.com> -Patchwork-id: 70213 -O-Subject: [RHEL-7.1 seabios PATCH 1/2] redhat: reserve more memory on fseg -Bugzilla: 1327060 -RH-Acked-by: Miroslav Rezanina -RH-Acked-by: Marcel Apfelbaum -RH-Acked-by: Laszlo Ersek - -seabios 1.7.5 has about 8k free space in fseg. - -configure 1.9.1 to keep the same amout space in fseg, so the amout of -disks we are able to handle stays roughly the same. ahci + scsi are -slightly below the 1.7.5 numbers but stay above the documented limits. -virtio-block numbers are higher than the 1.7.5 numbers. - -Signed-off-by: Gerd Hoffmann -Signed-off-by: Miroslav Rezanina ---- - scripts/layoutrom.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/scripts/layoutrom.py b/scripts/layoutrom.py -index b976fb0..f1cee6b 100755 ---- a/scripts/layoutrom.py -+++ b/scripts/layoutrom.py -@@ -62,7 +62,7 @@ BUILD_BIOS_SIZE = 0x10000 - BUILD_ROM_START = 0xc0000 - BUILD_LOWRAM_END = 0xa0000 - # Space to reserve in f-segment for dynamic allocations --BUILD_MIN_BIOSTABLE = 2048 -+BUILD_MIN_BIOSTABLE = 8192 - - # Layout the 16bit code. This ensures sections with fixed offset - # requirements are placed in the correct location. It also places the --- -1.8.3.1 - diff --git a/SOURCES/seabios-resume-Don-t-attempt-to-use-generic-reboot-mechanism.patch b/SOURCES/seabios-resume-Don-t-attempt-to-use-generic-reboot-mechanism.patch index f5b86d3..a1b7b2e 100644 --- a/SOURCES/seabios-resume-Don-t-attempt-to-use-generic-reboot-mechanism.patch +++ b/SOURCES/seabios-resume-Don-t-attempt-to-use-generic-reboot-mechanism.patch @@ -1,17 +1,17 @@ -From 18b770a509ef5d3404f1ddfae74c019d7029445e Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Wed, 12 Apr 2017 06:36:21 +0200 -Subject: [PATCH 2/2] resume: Don't attempt to use generic reboot mechanisms on +From adb570cb9034f647c0be5d1161be0e8699688cfa Mon Sep 17 00:00:00 2001 +From: "Dr. David Alan Gilbert" +Date: Wed, 29 Mar 2017 17:22:07 +0200 +Subject: [PATCH] resume: Don't attempt to use generic reboot mechanisms on QEMU -RH-Author: Gerd Hoffmann -Message-id: <20170412063621.25904-3-kraxel@redhat.com> -Patchwork-id: 74683 -O-Subject: [RHEL-7.3.z seabios PATCH 2/2] resume: Don't attempt to use generic reboot mechanisms on QEMU -Bugzilla: 1440706 -RH-Acked-by: Laszlo Ersek +RH-Author: Dr. David Alan Gilbert +Message-id: <20170329172207.15471-2-dgilbert@redhat.com> +Patchwork-id: 74584 +O-Subject: [RHEL-7.4 seabios PATCH 1/1] resume: Don't attempt to use generic reboot mechanisms on QEMU +Bugzilla: 1428347 RH-Acked-by: Paolo Bonzini -RH-Acked-by: Dr. David Alan Gilbert +RH-Acked-by: Michael S. Tsirkin +RH-Acked-by: Laszlo Ersek From: Kevin O'Connor @@ -25,10 +25,6 @@ This fixes a bug that could cause code corruption on reboots - calling the udelay() function (as invoked by i8042_reboot and/or pci_reboot) was not valid after the BIOS was memcpy'd. -RHEL-7.3.z note: no need to move PORT_PCI_REBOOT around, we don't -have upstream 4d8510cdcca0 ("pci: Split low-level pci code from -higher-level 'struct pci_device' code", 2016-02-03). - Reported-by: "Dr. David Alan Gilbert" Tested-by: Dr. David Alan Gilbert Signed-off-by: Kevin O'Connor @@ -36,15 +32,17 @@ Signed-off-by: Kevin O'Connor Signed-off-by: Miroslav Rezanina --- src/fw/shadow.c | 14 +++++++++++++- + src/hw/pci.c | 1 - + src/hw/pci.h | 2 ++ src/resume.c | 4 ++-- src/util.h | 2 +- - 3 files changed, 16 insertions(+), 4 deletions(-) + 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/fw/shadow.c b/src/fw/shadow.c -index 4486884..e91202a 100644 +index cd02d3a..c80b266 100644 --- a/src/fw/shadow.c +++ b/src/fw/shadow.c -@@ -157,7 +157,7 @@ make_bios_readonly(void) +@@ -167,7 +167,7 @@ make_bios_readonly(void) } void @@ -53,7 +51,7 @@ index 4486884..e91202a 100644 { if (!CONFIG_QEMU || runningOnXen()) return; -@@ -177,4 +177,16 @@ qemu_prep_reset(void) +@@ -187,4 +187,16 @@ qemu_prep_reset(void) memcpy(hrp + 4, hrp + 4 + BIOS_SRC_OFFSET, cend - (hrp + 4)); barrier(); HaveRunPost = 0; @@ -70,11 +68,36 @@ index 4486884..e91202a 100644 + // Next try triple faulting the CPU to force a reset + asm volatile("int3"); } +diff --git a/src/hw/pci.c b/src/hw/pci.c +index 506ee56..8e3d617 100644 +--- a/src/hw/pci.c ++++ b/src/hw/pci.c +@@ -12,7 +12,6 @@ + #include "x86.h" // outl + + #define PORT_PCI_CMD 0x0cf8 +-#define PORT_PCI_REBOOT 0x0cf9 + #define PORT_PCI_DATA 0x0cfc + + void pci_config_writel(u16 bdf, u32 addr, u32 val) +diff --git a/src/hw/pci.h b/src/hw/pci.h +index bf50430..ee6e196 100644 +--- a/src/hw/pci.h ++++ b/src/hw/pci.h +@@ -3,6 +3,8 @@ + + #include "types.h" // u32 + ++#define PORT_PCI_REBOOT 0x0cf9 ++ + static inline u8 pci_bdf_to_bus(u16 bdf) { + return bdf >> 8; + } diff --git a/src/resume.c b/src/resume.c -index afeadcf..9f264fb 100644 +index 99fa34f..fb0b8a8 100644 --- a/src/resume.c +++ b/src/resume.c -@@ -120,8 +120,8 @@ tryReboot(void) +@@ -125,8 +125,8 @@ tryReboot(void) { dprintf(1, "Attempting a hard reboot\n"); @@ -86,10 +109,10 @@ index afeadcf..9f264fb 100644 // Reboot using ACPI RESET_REG acpi_reboot(); diff --git a/src/util.h b/src/util.h -index cba3359..b6b7dd3 100644 +index 557eb8b..1dfe463 100644 --- a/src/util.h +++ b/src/util.h -@@ -119,7 +119,7 @@ void pirtable_setup(void); +@@ -122,7 +122,7 @@ void pirtable_setup(void); // fw/shadow.c void make_bios_writable(void); void make_bios_readonly(void); diff --git a/SOURCES/seabios-resume-Make-KVM-soft-reboot-loop-detection-more-flex.patch b/SOURCES/seabios-resume-Make-KVM-soft-reboot-loop-detection-more-flex.patch deleted file mode 100644 index 14d9d09..0000000 --- a/SOURCES/seabios-resume-Make-KVM-soft-reboot-loop-detection-more-flex.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 51e8e987d3156c4a16428f922b1c0e5984451c39 Mon Sep 17 00:00:00 2001 -From: Gerd Hoffmann -Date: Wed, 12 Apr 2017 06:36:20 +0200 -Subject: [PATCH 1/2] resume: Make KVM soft reboot loop detection more flexible - -RH-Author: Gerd Hoffmann -Message-id: <20170412063621.25904-2-kraxel@redhat.com> -Patchwork-id: 74685 -O-Subject: [RHEL-7.3.z seabios PATCH 1/2] resume: Make KVM soft reboot loop detection more flexible -Bugzilla: 1440706 -RH-Acked-by: Laszlo Ersek -RH-Acked-by: Paolo Bonzini -RH-Acked-by: Dr. David Alan Gilbert - -From: Kevin O'Connor - -Move the check for soft reboot loops from resume.c to shadow.c and -directly check for the case where the copy of the BIOS in flash -appears to be a memory alias instead. This prevents a hang if an -external reboot request occurs during the BIOS memcpy. - -Signed-off-by: Kevin O'Connor -(cherry picked from commit b837e68d5a6c1a5945513f1995875445a1594c8a) -Signed-off-by: Miroslav Rezanina ---- - src/fw/shadow.c | 15 +++++++++++++-- - src/resume.c | 9 --------- - 2 files changed, 13 insertions(+), 11 deletions(-) - -diff --git a/src/fw/shadow.c b/src/fw/shadow.c -index ee87d36..4486884 100644 ---- a/src/fw/shadow.c -+++ b/src/fw/shadow.c -@@ -163,7 +163,18 @@ qemu_prep_reset(void) - return; - // QEMU doesn't map 0xc0000-0xfffff back to the original rom on a - // reset, so do that manually before invoking a hard reset. -+ void *cstart = VSYMBOL(code32flat_start), *cend = VSYMBOL(code32flat_end); -+ void *hrp = &HaveRunPost; -+ if (readl(hrp + BIOS_SRC_OFFSET)) { -+ // Some old versions of KVM don't store a pristine copy of the -+ // BIOS in high memory. Try to shutdown the machine instead. -+ dprintf(1, "Unable to hard-reboot machine - attempting shutdown.\n"); -+ apm_shutdown(); -+ } -+ // Copy the BIOS making sure to only reset HaveRunPost at end - make_bios_writable(); -- memcpy(VSYMBOL(code32flat_start), VSYMBOL(code32flat_start) + BIOS_SRC_OFFSET -- , SYMBOL(code32flat_end) - SYMBOL(code32flat_start)); -+ memcpy(cstart, cstart + BIOS_SRC_OFFSET, hrp - cstart); -+ memcpy(hrp + 4, hrp + 4 + BIOS_SRC_OFFSET, cend - (hrp + 4)); -+ barrier(); -+ HaveRunPost = 0; - } -diff --git a/src/resume.c b/src/resume.c -index a5465d8..afeadcf 100644 ---- a/src/resume.c -+++ b/src/resume.c -@@ -114,19 +114,10 @@ s3_resume(void) - farcall16big(&br); - } - --u8 HaveAttemptedReboot VARLOW; -- - // Attempt to invoke a hard-reboot. - static void - tryReboot(void) - { -- if (HaveAttemptedReboot) { -- // Hard reboot has failed - try to shutdown machine. -- dprintf(1, "Unable to hard-reboot machine - attempting shutdown.\n"); -- apm_shutdown(); -- } -- HaveAttemptedReboot = 1; -- - dprintf(1, "Attempting a hard reboot\n"); - - // Setup for reset on qemu. --- -1.8.3.1 - diff --git a/SOURCES/seabios-usb-uas-enumerate-luns-with-REPORT-LUNS.patch b/SOURCES/seabios-usb-uas-enumerate-luns-with-REPORT-LUNS.patch new file mode 100644 index 0000000..3284b09 --- /dev/null +++ b/SOURCES/seabios-usb-uas-enumerate-luns-with-REPORT-LUNS.patch @@ -0,0 +1,110 @@ +From bd21ce9f5a9ba8539e3b44b635d10cce501f58bf Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Tue, 9 May 2017 11:24:37 +0200 +Subject: [PATCH 4/4] usb-uas: enumerate luns with REPORT LUNS + +RH-Author: Paolo Bonzini +Message-id: <20170509112437.30666-5-pbonzini@redhat.com> +Patchwork-id: 75054 +O-Subject: [RHEL7.4 seabios PATCH 4/4] usb-uas: enumerate luns with REPORT LUNS +Bugzilla: 1020622 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng + +From: Roman Kagan + +Signed-off-by: Roman Kagan +Signed-off-by: Paolo Bonzini +(cherry picked from commit 8579fd20c89f0bbc258d6eedb993ecb1bf431027) +Signed-off-by: Miroslav Rezanina +--- + src/hw/usb-uas.c | 45 +++++++++++++++++++++++++++++---------------- + 1 file changed, 29 insertions(+), 16 deletions(-) + +diff --git a/src/hw/usb-uas.c b/src/hw/usb-uas.c +index 10e3845..f00221a 100644 +--- a/src/hw/usb-uas.c ++++ b/src/hw/usb-uas.c +@@ -86,8 +86,9 @@ typedef struct { + + struct uasdrive_s { + struct drive_s drive; ++ struct usbdevice_s *usbdev; + struct usb_pipe *command, *status, *data_in, *data_out; +- int lun; ++ u32 lun; + }; + + int +@@ -168,30 +169,41 @@ fail: + return DISK_RET_EBADTRACK; + } + +-static int +-uas_lun_setup(struct usbdevice_s *usbdev, +- struct usb_pipe *command, struct usb_pipe *status, +- struct usb_pipe *data_in, struct usb_pipe *data_out, +- int lun) ++static void ++uas_init_lun(struct uasdrive_s *drive, struct usbdevice_s *usbdev, ++ struct usb_pipe *command, struct usb_pipe *status, ++ struct usb_pipe *data_in, struct usb_pipe *data_out, ++ u32 lun) + { +- // Allocate drive structure. +- struct uasdrive_s *drive = malloc_fseg(sizeof(*drive)); +- if (!drive) { +- warn_noalloc(); +- return -1; +- } + memset(drive, 0, sizeof(*drive)); + if (usb_32bit_pipe(data_in)) + drive->drive.type = DTYPE_UAS_32; + else + drive->drive.type = DTYPE_UAS; ++ drive->usbdev = usbdev; + drive->command = command; + drive->status = status; + drive->data_in = data_in; + drive->data_out = data_out; + drive->lun = lun; ++} ++ ++static int ++uas_add_lun(u32 lun, struct drive_s *tmpl_drv) ++{ ++ struct uasdrive_s *tmpl_lun = ++ container_of(tmpl_drv, struct uasdrive_s, drive); ++ struct uasdrive_s *drive = malloc_fseg(sizeof(*drive)); ++ if (!drive) { ++ warn_noalloc(); ++ return -1; ++ } ++ uas_init_lun(drive, tmpl_lun->usbdev, ++ tmpl_lun->command, tmpl_lun->status, ++ tmpl_lun->data_in, tmpl_lun->data_out, ++ lun); + +- int prio = bootprio_find_usb(usbdev, lun); ++ int prio = bootprio_find_usb(drive->usbdev, drive->lun); + int ret = scsi_drive_setup(&drive->drive, "USB UAS", prio); + if (ret) { + free(drive); +@@ -258,9 +270,10 @@ usb_uas_setup(struct usbdevice_s *usbdev) + if (!command || !status || !data_in || !data_out) + goto fail; + +- /* TODO: send REPORT LUNS. For now, only LUN 0 is recognized. */ +- int ret = uas_lun_setup(usbdev, command, status, data_in, data_out, 0); +- if (ret < 0) { ++ struct uasdrive_s lun0; ++ uas_init_lun(&lun0, usbdev, command, status, data_in, data_out, 0); ++ int ret = scsi_rep_luns_scan(&lun0.drive, uas_add_lun); ++ if (ret <= 0) { + dprintf(1, "Unable to configure UAS drive.\n"); + goto fail; + } +-- +1.8.3.1 + diff --git a/SOURCES/seabios-vgabios-Reorder-video-modes-to-work-around-a-Windows.patch b/SOURCES/seabios-vgabios-Reorder-video-modes-to-work-around-a-Windows.patch deleted file mode 100644 index 96f5a86..0000000 --- a/SOURCES/seabios-vgabios-Reorder-video-modes-to-work-around-a-Windows.patch +++ /dev/null @@ -1,124 +0,0 @@ -From d4b8b97fab7f66875dfc212a7e18f16436d79340 Mon Sep 17 00:00:00 2001 -From: Ladi Prosek -Date: Mon, 31 Oct 2016 19:33:05 +0100 -Subject: [PATCH] vgabios: Reorder video modes to work around a Windows bug - -RH-Author: Ladi Prosek -Message-id: <1477924385-6169-1-git-send-email-lprosek@redhat.com> -Patchwork-id: 72677 -O-Subject: [RHEL-7.4/7.3.z seabios PATCH] vgabios: Reorder video modes to work around a Windows bug -Bugzilla: 1392028 -RH-Acked-by: Laszlo Ersek -RH-Acked-by: Gerd Hoffmann -RH-Acked-by: vrozenfe - -Windows Server 2016 and Windows 10 RS1 come with a bug in its blue screen -of death rendering logic which prevents it from generating crash dumps. - -The bug does not manifest if Windows sees a suitable 32 bpp video mode -before a suitable 24 bpp video mode in the list of modes returned from -vgabios. This commit moves all 32 bpp modes to the front of the list to -make sure that this is always the case. - -Upstream patch: -https://www.coreboot.org/pipermail/seabios/2016-October/010963.html - -There are valid concerns upstream about the breaking nature of the fix -but for the limited set of operating systems supported by RHEL/RHEV we -can easily verify that they are unaffected. So as things stand now, this -is a downstream-only patch which will be reverted in the near future; -the exact time will depend on Windows 10 RS2 schedule and other factors. -The goal is to make sure that our customers running Windows 10 VMs can -generate crash dumps. - -Signed-off-by: Ladi Prosek -Signed-off-by: Miroslav Rezanina ---- - vgasrc/bochsvga.c | 39 ++++++++++++++++++++------------------- - 1 file changed, 20 insertions(+), 19 deletions(-) - -diff --git a/vgasrc/bochsvga.c b/vgasrc/bochsvga.c -index aa82fc5..a43a21f 100644 ---- a/vgasrc/bochsvga.c -+++ b/vgasrc/bochsvga.c -@@ -27,6 +27,25 @@ static struct bochsvga_mode - u16 mode; - struct vgamode_s info; - } bochsvga_modes[] VAR16 = { -+ /* 32 bpp BOCHS modes */ -+ { 0x140, { MM_DIRECT, 320, 200, 32, 8, 16, SEG_GRAPH } }, -+ { 0x141, { MM_DIRECT, 640, 400, 32, 8, 16, SEG_GRAPH } }, -+ { 0x142, { MM_DIRECT, 640, 480, 32, 8, 16, SEG_GRAPH } }, -+ { 0x143, { MM_DIRECT, 800, 600, 32, 8, 16, SEG_GRAPH } }, -+ { 0x144, { MM_DIRECT, 1024, 768, 32, 8, 16, SEG_GRAPH } }, -+ { 0x145, { MM_DIRECT, 1280, 1024, 32, 8, 16, SEG_GRAPH } }, -+ { 0x147, { MM_DIRECT, 1600, 1200, 32, 8, 16, SEG_GRAPH } }, -+ { 0x14c, { MM_DIRECT, 1152, 864, 32, 8, 16, SEG_GRAPH } }, -+ { 0x177, { MM_DIRECT, 1280, 768, 32, 8, 16, SEG_GRAPH } }, -+ { 0x17a, { MM_DIRECT, 1280, 800, 32, 8, 16, SEG_GRAPH } }, -+ { 0x17d, { MM_DIRECT, 1280, 960, 32, 8, 16, SEG_GRAPH } }, -+ { 0x180, { MM_DIRECT, 1440, 900, 32, 8, 16, SEG_GRAPH } }, -+ { 0x183, { MM_DIRECT, 1400, 1050, 32, 8, 16, SEG_GRAPH } }, -+ { 0x186, { MM_DIRECT, 1680, 1050, 32, 8, 16, SEG_GRAPH } }, -+ { 0x189, { MM_DIRECT, 1920, 1200, 32, 8, 16, SEG_GRAPH } }, -+ { 0x18c, { MM_DIRECT, 2560, 1600, 32, 8, 16, SEG_GRAPH } }, -+ { 0x18f, { MM_DIRECT, 1280, 720, 32, 8, 16, SEG_GRAPH } }, -+ { 0x192, { MM_DIRECT, 1920, 1080, 32, 8, 16, SEG_GRAPH } }, - /* standard modes */ - { 0x100, { MM_PACKED, 640, 400, 8, 8, 16, SEG_GRAPH } }, - { 0x101, { MM_PACKED, 640, 480, 8, 8, 16, SEG_GRAPH } }, -@@ -55,50 +74,32 @@ static struct bochsvga_mode - { 0x11D, { MM_DIRECT, 1600, 1200, 15, 8, 16, SEG_GRAPH } }, - { 0x11E, { MM_DIRECT, 1600, 1200, 16, 8, 16, SEG_GRAPH } }, - { 0x11F, { MM_DIRECT, 1600, 1200, 24, 8, 16, SEG_GRAPH } }, -- /* BOCHS modes */ -- { 0x140, { MM_DIRECT, 320, 200, 32, 8, 16, SEG_GRAPH } }, -- { 0x141, { MM_DIRECT, 640, 400, 32, 8, 16, SEG_GRAPH } }, -- { 0x142, { MM_DIRECT, 640, 480, 32, 8, 16, SEG_GRAPH } }, -- { 0x143, { MM_DIRECT, 800, 600, 32, 8, 16, SEG_GRAPH } }, -- { 0x144, { MM_DIRECT, 1024, 768, 32, 8, 16, SEG_GRAPH } }, -- { 0x145, { MM_DIRECT, 1280, 1024, 32, 8, 16, SEG_GRAPH } }, -+ /* 8, 15, 16, and 24 bpp BOCHS modes */ - { 0x146, { MM_PACKED, 320, 200, 8, 8, 16, SEG_GRAPH } }, -- { 0x147, { MM_DIRECT, 1600, 1200, 32, 8, 16, SEG_GRAPH } }, - { 0x148, { MM_PACKED, 1152, 864, 8, 8, 16, SEG_GRAPH } }, - { 0x149, { MM_DIRECT, 1152, 864, 15, 8, 16, SEG_GRAPH } }, - { 0x14a, { MM_DIRECT, 1152, 864, 16, 8, 16, SEG_GRAPH } }, - { 0x14b, { MM_DIRECT, 1152, 864, 24, 8, 16, SEG_GRAPH } }, -- { 0x14c, { MM_DIRECT, 1152, 864, 32, 8, 16, SEG_GRAPH } }, - { 0x175, { MM_DIRECT, 1280, 768, 16, 8, 16, SEG_GRAPH } }, - { 0x176, { MM_DIRECT, 1280, 768, 24, 8, 16, SEG_GRAPH } }, -- { 0x177, { MM_DIRECT, 1280, 768, 32, 8, 16, SEG_GRAPH } }, - { 0x178, { MM_DIRECT, 1280, 800, 16, 8, 16, SEG_GRAPH } }, - { 0x179, { MM_DIRECT, 1280, 800, 24, 8, 16, SEG_GRAPH } }, -- { 0x17a, { MM_DIRECT, 1280, 800, 32, 8, 16, SEG_GRAPH } }, - { 0x17b, { MM_DIRECT, 1280, 960, 16, 8, 16, SEG_GRAPH } }, - { 0x17c, { MM_DIRECT, 1280, 960, 24, 8, 16, SEG_GRAPH } }, -- { 0x17d, { MM_DIRECT, 1280, 960, 32, 8, 16, SEG_GRAPH } }, - { 0x17e, { MM_DIRECT, 1440, 900, 16, 8, 16, SEG_GRAPH } }, - { 0x17f, { MM_DIRECT, 1440, 900, 24, 8, 16, SEG_GRAPH } }, -- { 0x180, { MM_DIRECT, 1440, 900, 32, 8, 16, SEG_GRAPH } }, - { 0x181, { MM_DIRECT, 1400, 1050, 16, 8, 16, SEG_GRAPH } }, - { 0x182, { MM_DIRECT, 1400, 1050, 24, 8, 16, SEG_GRAPH } }, -- { 0x183, { MM_DIRECT, 1400, 1050, 32, 8, 16, SEG_GRAPH } }, - { 0x184, { MM_DIRECT, 1680, 1050, 16, 8, 16, SEG_GRAPH } }, - { 0x185, { MM_DIRECT, 1680, 1050, 24, 8, 16, SEG_GRAPH } }, -- { 0x186, { MM_DIRECT, 1680, 1050, 32, 8, 16, SEG_GRAPH } }, - { 0x187, { MM_DIRECT, 1920, 1200, 16, 8, 16, SEG_GRAPH } }, - { 0x188, { MM_DIRECT, 1920, 1200, 24, 8, 16, SEG_GRAPH } }, -- { 0x189, { MM_DIRECT, 1920, 1200, 32, 8, 16, SEG_GRAPH } }, - { 0x18a, { MM_DIRECT, 2560, 1600, 16, 8, 16, SEG_GRAPH } }, - { 0x18b, { MM_DIRECT, 2560, 1600, 24, 8, 16, SEG_GRAPH } }, -- { 0x18c, { MM_DIRECT, 2560, 1600, 32, 8, 16, SEG_GRAPH } }, - { 0x18d, { MM_DIRECT, 1280, 720, 16, 8, 16, SEG_GRAPH } }, - { 0x18e, { MM_DIRECT, 1280, 720, 24, 8, 16, SEG_GRAPH } }, -- { 0x18f, { MM_DIRECT, 1280, 720, 32, 8, 16, SEG_GRAPH } }, - { 0x190, { MM_DIRECT, 1920, 1080, 16, 8, 16, SEG_GRAPH } }, - { 0x191, { MM_DIRECT, 1920, 1080, 24, 8, 16, SEG_GRAPH } }, -- { 0x192, { MM_DIRECT, 1920, 1080, 32, 8, 16, SEG_GRAPH } }, - }; - - static int dispi_found VAR16 = 0; --- -1.8.3.1 - diff --git a/SOURCES/seabios-virtio-scsi-enumerate-luns-with-REPORT-LUNS.patch b/SOURCES/seabios-virtio-scsi-enumerate-luns-with-REPORT-LUNS.patch new file mode 100644 index 0000000..a25febf --- /dev/null +++ b/SOURCES/seabios-virtio-scsi-enumerate-luns-with-REPORT-LUNS.patch @@ -0,0 +1,92 @@ +From bc962ebe743f27b3f939239a6193a3f93643ae7a Mon Sep 17 00:00:00 2001 +From: Paolo Bonzini +Date: Tue, 9 May 2017 11:24:36 +0200 +Subject: [PATCH 3/4] virtio-scsi: enumerate luns with REPORT LUNS + +RH-Author: Paolo Bonzini +Message-id: <20170509112437.30666-4-pbonzini@redhat.com> +Patchwork-id: 75053 +O-Subject: [RHEL7.4 seabios PATCH 3/4] virtio-scsi: enumerate luns with REPORT LUNS +Bugzilla: 1020622 +RH-Acked-by: Stefan Hajnoczi +RH-Acked-by: Laszlo Ersek +RH-Acked-by: Fam Zheng + +From: Roman Kagan + +Signed-off-by: Roman Kagan +Signed-off-by: Paolo Bonzini +(cherry picked from commit 69ebdef9bdb7f0f4f7bd9b5f30ef0bf687d6c918) +Signed-off-by: Miroslav Rezanina +--- + src/hw/virtio-scsi.c | 38 ++++++++++++++++++++++++++------------ + 1 file changed, 26 insertions(+), 12 deletions(-) + +diff --git a/src/hw/virtio-scsi.c b/src/hw/virtio-scsi.c +index 5fb9409..7490ec0 100644 +--- a/src/hw/virtio-scsi.c ++++ b/src/hw/virtio-scsi.c +@@ -94,15 +94,11 @@ virtio_scsi_process_op(struct disk_op_s *op) + return DISK_RET_EBADTRACK; + } + +-static int +-virtio_scsi_add_lun(struct pci_device *pci, struct vp_device *vp, +- struct vring_virtqueue *vq, u16 target, u16 lun) ++static void ++virtio_scsi_init_lun(struct virtio_lun_s *vlun, struct pci_device *pci, ++ struct vp_device *vp, struct vring_virtqueue *vq, ++ u16 target, u16 lun) + { +- struct virtio_lun_s *vlun = malloc_fseg(sizeof(*vlun)); +- if (!vlun) { +- warn_noalloc(); +- return -1; +- } + memset(vlun, 0, sizeof(*vlun)); + vlun->drive.type = DTYPE_VIRTIO_SCSI; + vlun->drive.cntl_id = pci->bdf; +@@ -111,8 +107,22 @@ virtio_scsi_add_lun(struct pci_device *pci, struct vp_device *vp, + vlun->vq = vq; + vlun->target = target; + vlun->lun = lun; ++} + +- int prio = bootprio_find_scsi_device(pci, target, lun); ++static int ++virtio_scsi_add_lun(u32 lun, struct drive_s *tmpl_drv) ++{ ++ struct virtio_lun_s *tmpl_vlun = ++ container_of(tmpl_drv, struct virtio_lun_s, drive); ++ struct virtio_lun_s *vlun = malloc_fseg(sizeof(*vlun)); ++ if (!vlun) { ++ warn_noalloc(); ++ return -1; ++ } ++ virtio_scsi_init_lun(vlun, tmpl_vlun->pci, tmpl_vlun->vp, tmpl_vlun->vq, ++ tmpl_vlun->target, lun); ++ ++ int prio = bootprio_find_scsi_device(vlun->pci, vlun->target, vlun->lun); + int ret = scsi_drive_setup(&vlun->drive, "virtio-scsi", prio); + if (ret) + goto fail; +@@ -127,9 +137,13 @@ static int + virtio_scsi_scan_target(struct pci_device *pci, struct vp_device *vp, + struct vring_virtqueue *vq, u16 target) + { +- /* TODO: send REPORT LUNS. For now, only LUN 0 is recognized. */ +- int ret = virtio_scsi_add_lun(pci, vp, vq, target, 0); +- return ret < 0 ? 0 : 1; ++ ++ struct virtio_lun_s vlun0; ++ ++ virtio_scsi_init_lun(&vlun0, pci, vp, vq, target, 0); ++ ++ int ret = scsi_rep_luns_scan(&vlun0.drive, virtio_scsi_add_lun); ++ return ret < 0 ? 0 : ret; + } + + static void +-- +1.8.3.1 + diff --git a/SPECS/seabios.spec b/SPECS/seabios.spec index 436e821..20e6694 100644 --- a/SPECS/seabios.spec +++ b/SPECS/seabios.spec @@ -1,6 +1,6 @@ Name: seabios -Version: 1.9.1 -Release: 5%{?dist}.3 +Version: 1.10.2 +Release: 3%{?dist} Summary: Open-source legacy BIOS implementation Group: Applications/Emulators @@ -8,7 +8,7 @@ License: LGPLv3 URL: http://www.coreboot.org/SeaBIOS -Source0: http://code.coreboot.org/p/seabios/downloads/get/%{name}-%{version}.tar.gz +Source0: http://code.coreboot.org/p/seabios/downloads/get/seabios-1.10.2.tar.gz Source10: config.vga.cirrus Source11: config.vga.isavga @@ -20,29 +20,21 @@ Source16: config.base-256k Source17: config.vga.virtio -Patch0002: 0002-allow-1TB-of-RAM.patch -Patch0003: 0003-smbios-set-bios-vendor-version-fields-to-Seabios-0.5.patch -Patch0004: 0004-Workaround-for-a-win8.1-32-S4-resume-bug.patch -# For bz#1185721 - win7 guest (boot with q35) show dark screen after do S3 -Patch5: seabios-fw-pci-add-Q35-S3-support.patch -# For bz#1327060 - [Seabios]Limited boot number supported for SCSI/SATA -Patch6: seabios-redhat-reserve-more-memory-on-fseg.patch -# For bz#1373154 - Guest fails boot up with ivshmem-plain and virtio-pci device -Patch7: seabios-pci-don-t-map-virtio-1.0-storage-devices-above-4G.patch -# For bz#1392028 - [virtio-win][svvp][ws2016] cannot generate dump file when using nmi on ws2016 and win10-32/64 -Patch8: seabios-vgabios-Reorder-video-modes-to-work-around-a-Windows.patch -# For bz#1400102 - decouple the SeaBIOS build from iasl -Patch9: seabios-acpi_extract-Move-main-code-to-new-function-main.patch -# For bz#1400102 - decouple the SeaBIOS build from iasl -Patch10: seabios-acpi_extract-Make-the-generated-.hex-files-more-huma.patch -# For bz#1400102 - decouple the SeaBIOS build from iasl -Patch11: seabios-acpi_extract-Don-t-generate-unused-and-empty-q35-acp.patch -# For bz#1400102 - decouple the SeaBIOS build from iasl -Patch12: seabios-acpi-Don-t-build-SSDT-files-on-every-build-store-the.patch -# For bz#1440706 - reboot hangs on rhel6 machine types (~1/20 times) -Patch13: seabios-resume-Make-KVM-soft-reboot-loop-detection-more-flex.patch -# For bz#1440706 - reboot hangs on rhel6 machine types (~1/20 times) -Patch14: seabios-resume-Don-t-attempt-to-use-generic-reboot-mechanism.patch +Patch2: 0002-allow-1TB-of-RAM.patch +Patch3: 0003-smbios-set-bios-vendor-version-fields-to-Seabios-0.5.patch +Patch4: 0004-Workaround-for-a-win8.1-32-S4-resume-bug.patch +Patch5: 0005-redhat-reserve-more-memory-on-fseg.patch +Patch6: 0006-vgabios-Reorder-video-modes-to-work-around-a-Windows.patch +# For bz#1428347 - reboot hangs on rhel6 machine types (~1/20 times) +Patch7: seabios-resume-Don-t-attempt-to-use-generic-reboot-mechanism.patch +# For bz#1020622 - seabios fail to recognize virtio-scsi device if specify LUN not 0 +Patch8: seabios-blockcmd-accept-only-disks-and-CD-ROMs.patch +# For bz#1020622 - seabios fail to recognize virtio-scsi device if specify LUN not 0 +Patch9: seabios-blockcmd-generic-SCSI-luns-enumeration.patch +# For bz#1020622 - seabios fail to recognize virtio-scsi device if specify LUN not 0 +Patch10: seabios-virtio-scsi-enumerate-luns-with-REPORT-LUNS.patch +# For bz#1020622 - seabios fail to recognize virtio-scsi device if specify LUN not 0 +Patch11: seabios-usb-uas-enumerate-luns-with-REPORT-LUNS.patch BuildRequires: python iasl ExclusiveArch: x86_64 %{power64} @@ -93,9 +85,9 @@ SeaVGABIOS is an open-source VGABIOS implementation. %prep %setup -q -%patch0002 -p1 -%patch0003 -p1 -%patch0004 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 %patch5 -p1 %patch6 -p1 %patch7 -p1 @@ -103,11 +95,6 @@ SeaVGABIOS is an open-source VGABIOS implementation. %patch9 -p1 %patch10 -p1 %patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 - -# Store version to be used %build %ifarch x86_64 @@ -160,19 +147,36 @@ install -m 0644 binaries/vgabios*.bin $RPM_BUILD_ROOT%{_datadir}/seavgabios %endif %changelog -* Thu May 11 2017 Miroslav Rezanina - 1.9.1-5.el7_3.3 -- seabios-resume-Make-KVM-soft-reboot-loop-detection-more-flex.patch [bz#1440706] -- seabios-resume-Don-t-attempt-to-use-generic-reboot-mechanism.patch [bz#1440706] -- Resolves: bz#1440706 +* Fri May 12 2017 Miroslav Rezanina - 1.10.2-3.el7 +- seabios-blockcmd-accept-only-disks-and-CD-ROMs.patch [bz#1020622] +- seabios-blockcmd-generic-SCSI-luns-enumeration.patch [bz#1020622] +- seabios-virtio-scsi-enumerate-luns-with-REPORT-LUNS.patch [bz#1020622] +- seabios-usb-uas-enumerate-luns-with-REPORT-LUNS.patch [bz#1020622] +- Resolves: bz#1020622 + (seabios fail to recognize virtio-scsi device if specify LUN not 0) + +* Thu Mar 30 2017 Miroslav Rezanina - 1.10.2-2.el7 +- seabios-resume-Don-t-attempt-to-use-generic-reboot-mechanism.patch [bz#1428347] +- Resolves: bz#1428347 (reboot hangs on rhel6 machine types (~1/20 times)) -* Fri Feb 10 2017 Miroslav Rezanina - 1.9.1-5.el7_3.2 -- seabios-acpi_extract-Move-main-code-to-new-function-main.patch [bz#1400102] -- seabios-acpi_extract-Make-the-generated-.hex-files-more-huma.patch [bz#1400102] -- seabios-acpi_extract-Don-t-generate-unused-and-empty-q35-acp.patch [bz#1400102] -- seabios-acpi-Don-t-build-SSDT-files-on-every-build-store-the.patch [bz#1400102] -- Resolves: bz#1400102 - (decouple the SeaBIOS build from iasl) +* Fri Mar 10 2017 Miroslav Rezanina - 1.10.2-1.el7 +- Rebase to 1.10.2 [bz#1392821] +- Resolves: bz#1392821 + (Rebase seabios to 1.10.1) + +* Fri Feb 03 2017 Miroslav Rezanina - 1.10.1-2.el7 +- seabios-smm-disable-by-default.patch [bz#1378006] +- seabios-ahci-Set-upper-32-bit-registers-to-zero.patch [bz#1418320] +- Resolves: bz#1378006 + (guest paused on target host sometimes when do migration during guest boot) +- Resolves: bz#1418320 + (Seabios does not fully reset AHCI adapters) + +* Tue Jan 10 2017 Miroslav Rezanina - 1.10.1-1.el7 +- Rebase to seabios 1.10.1 [bz#1392821] +- Resolves: bz#1392821 + (Rebase seabios to 1.10.1) * Tue Nov 29 2016 Miroslav Rezanina - 1.9.1-5.el7_3.1 - seabios-vgabios-Reorder-video-modes-to-work-around-a-Windows.patch [bz#1392028]