diff options
Diffstat (limited to 'payloads/external/tianocore')
10 files changed, 34 insertions, 2957 deletions
diff --git a/payloads/external/tianocore/Kconfig b/payloads/external/tianocore/Kconfig index a30fc31a45..4347edb9d2 100644 --- a/payloads/external/tianocore/Kconfig +++ b/payloads/external/tianocore/Kconfig @@ -11,28 +11,22 @@ choice default TIANOCORE_STABLE help Select which version of Tianocore to build (default is to build stable) - stable: a version of Tianocore that builds without any errors - master: most recent version from upstream Tianocore repository + stable: MrChromebox's customized version of Tianocore which works on most + (all?) x86_64 devices revision: use specific commit or branch to build Tianocore (specified by user) config TIANOCORE_STABLE bool "stable" help - Select this option to build the stable tianocore version - i.e. a version of Tianocore that builds without any errors - -config TIANOCORE_MASTER - bool "master" - help - Select this option to build the master tianocore version - i.e. most recent version from upstream Tianocore repository + Select this option to build using MrChromebox's custom Tianocore tree + i.e. a version of Tianocore that builds without any errors and just works. config TIANOCORE_REVISION bool "git revision" help Select this option if you have a specific commit or branch - that you want to use as the revision from which to - build Tianocore. + that you want to use from either MrChromebox's tree or upstream + EDK2 from which to build Tianocore. You will be able to specify the name of a branch or a commit id later. @@ -42,7 +36,7 @@ endchoice config TIANOCORE_REVISION_ID string "Insert a commit's SHA-1 or a branch name" depends on TIANOCORE_REVISION - default "origin/master" + default "upstream/master" help The commit's SHA-1 or branch name of the revision to use. diff --git a/payloads/external/tianocore/Makefile b/payloads/external/tianocore/Makefile index bd02f48e03..87c48b1e0d 100644 --- a/payloads/external/tianocore/Makefile +++ b/payloads/external/tianocore/Makefile @@ -16,15 +16,15 @@ # force the shell to bash - the edksetup.sh script doesn't work with dash export SHELL := env bash -# STABLE_COMMIT_ID represent official edk2 release, currently UDK2018 -STABLE_COMMIT_ID=3e72ffe8afdd03f1f89eba65c921cbdcb004cfee -TAG-$(CONFIG_TIANOCORE_MASTER)=origin/master -TAG-$(CONFIG_TIANOCORE_STABLE)=$(STABLE_COMMIT_ID) -TAG-$(CONFIG_TIANOCORE_REVISION)=$(CONFIG_TIANOCORE_REVISION_ID) - project_name=Tianocore project_dir=$(CURDIR)/tianocore -project_git_repo=https://github.com/tianocore/edk2 +project_git_repo=https://github.com/mrchromebox/edk2 +project_git_branch=coreboot_fb +upstream_git_repo=https://github.com/tianocore/edk2 + +# STABLE revision is MrChromebox's coreboot framebuffer (coreboot_fb) branch +TAG-$(CONFIG_TIANOCORE_STABLE)=origin/$(project_git_branch) +TAG-$(CONFIG_TIANOCORE_REVISION)=$(CONFIG_TIANOCORE_REVISION_ID) export EDK_TOOLS_PATH=$(project_dir)/BaseTools @@ -44,39 +44,28 @@ else BUILD_STR=-a IA32 -a X64 -t COREBOOT -p CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -b $(BUILD_TYPE) $(TIMER) endif -all: build +all: clean build $(project_dir): echo " Cloning $(project_name) from Git" - git clone $(project_git_repo) $(project_dir) - -fetch: $(project_dir) - cd $(project_dir); \ - git show $(TAG-y) >/dev/null 2>&1 ; \ - if [ $$? -ne 0 ] || [ "$(TAG-y)" = "origin/master" ]; then \ - echo " Fetching new commits from the $(project_name) repo"; \ - git fetch; \ - fi - -$(project_dir)/.version_$(TAG-y): fetch - if ! [[ -e $(project_dir)/.version_$(STABLE_COMMIT_ID) ]] || \ - [ "$(TAG-y)" = "origin/master" ] ; then \ - rm -f .version_*; \ - echo " Checking out $(project_name) revision $(TAG-y)"; \ - cd $(project_dir); \ - git checkout master; \ - git branch -D coreboot 2>/dev/null; \ - git checkout -b coreboot $(TAG-y); \ - for patch in $(CURDIR)/patches/*.patch; do \ - echo "Applying $$patch"; \ - cd $(project_dir); \ - git am --keep-cr --ignore-space-change $$patch || \ - ( echo " Error when applying patches.\n"; git am --abort; exit 1; ); \ - done; \ - if ! [ "$(TAG-y)" = "origin/master" ] ; then \ - touch $(project_dir)/.version_$(STABLE_COMMIT_ID); \ + git clone --single-branch --branch $(project_git_branch) $(project_git_repo) $(project_dir); \ + cd $(project_dir); \ + git remote add upstream $(upstream_git_repo) + +update: $(project_dir) + cd $(project_dir); \ + echo " Fetching new commits from the $(project_name) repo"; \ + git fetch --multiple origin upstream 2>/dev/null; \ + if ! git rev-parse --verify -q $(TAG-y) >/dev/null; then \ + echo " $(TAG-y) is not a valid git reference"; \ + exit 1; \ fi; \ - fi; \ + if git describe --all --dirty | grep -qv dirty; then \ + echo " Checking out $(project_name) revision $(TAG-y)"; \ + git checkout --detach $(TAG-y); \ + else \ + echo " Working directory not clean; will not overwrite"; \ + fi checktools: echo "Checking uuid-dev..." @@ -89,7 +78,7 @@ checktools: type nasm > /dev/null 2>&1 && echo " found nasm." || \ ( echo " Not found."; echo "Error: Please install nasm."; exit 1 ) -build: $(project_dir)/.version_$(TAG-y) checktools +build: update checktools unset CC; $(MAKE) -C $(project_dir)/BaseTools echo " build $(project_name) $(TAG-y)" cd $(project_dir); \ @@ -109,4 +98,4 @@ clean: distclean: rm -rf $(project_dir) -.PHONY: all fetch checkout checktools config build clean distclean +.PHONY: all update checktools config build clean distclean diff --git a/payloads/external/tianocore/patches/01_CorebootPayloadPkg_pcinoenum.patch b/payloads/external/tianocore/patches/01_CorebootPayloadPkg_pcinoenum.patch deleted file mode 100644 index 7036f3675e..0000000000 --- a/payloads/external/tianocore/patches/01_CorebootPayloadPkg_pcinoenum.patch +++ /dev/null @@ -1,65 +0,0 @@ -From c3da734cd08117ce2d5cd48367f5a94848aa9321 Mon Sep 17 00:00:00 2001 -From: CoolStar <coolstarorganization@gmail.com> -Date: Sun, 4 Dec 2016 11:23:38 -0800 -Subject: [PATCH] PCI: use Duet's PciNoEnumeration - ---- - CorebootPayloadPkg/CorebootPayloadPkg.fdf | 4 ++-- - CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc | 7 ++----- - CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc | 7 ++----- - 3 files changed, 6 insertions(+), 12 deletions(-) - -diff --git a/CorebootPayloadPkg/CorebootPayloadPkg.fdf b/CorebootPayloadPkg/CorebootPayloadPkg.fdf -index 7994f0c94928..d71b3ec55690 100644 ---- a/CorebootPayloadPkg/CorebootPayloadPkg.fdf -+++ b/CorebootPayloadPkg/CorebootPayloadPkg.fdf -@@ -124,8 +124,8 @@ INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf - #
- # PCI Support
- #
--INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
--INF MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf
-+INF DuetPkg/PciRootBridgeNoEnumerationDxe/PciRootBridgeNoEnumeration.inf
-+INF DuetPkg/PciBusNoEnumerationDxe/PciBusNoEnumeration.inf
-
- #
- # ISA Support
-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -index ace1bc0a3726..0f4e475187ee 100644 ---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -@@ -450,11 +450,8 @@ - #
- # PCI Support
- #
-- MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
-- MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf {
-- <LibraryClasses>
-- PciHostBridgeLib|CorebootPayloadPkg/Library/PciHostBridgeLib/PciHostBridgeLib.inf
-- }
-+ DuetPkg/PciRootBridgeNoEnumerationDxe/PciRootBridgeNoEnumeration.inf
-+ DuetPkg/PciBusNoEnumerationDxe/PciBusNoEnumeration.inf
-
- #
- # SCSI/ATA/IDE/DISK Support
-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -index 2492142b972d..97bb0a8ae0a1 100644 ---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -@@ -451,11 +451,8 @@ - #
- # PCI Support
- #
-- MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
-- MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf {
-- <LibraryClasses>
-- PciHostBridgeLib|CorebootPayloadPkg/Library/PciHostBridgeLib/PciHostBridgeLib.inf
-- }
-+ DuetPkg/PciRootBridgeNoEnumerationDxe/PciRootBridgeNoEnumeration.inf
-+ DuetPkg/PciBusNoEnumerationDxe/PciBusNoEnumeration.inf
-
- #
- # SCSI/ATA/IDE/DISK Support
--- -2.17.0 - diff --git a/payloads/external/tianocore/patches/02_CorebootPayloadPkg_bds.patch b/payloads/external/tianocore/patches/02_CorebootPayloadPkg_bds.patch deleted file mode 100644 index 9c612631a4..0000000000 --- a/payloads/external/tianocore/patches/02_CorebootPayloadPkg_bds.patch +++ /dev/null @@ -1,2551 +0,0 @@ -From e72cac80c845429b042c7f9c36ede642cbe9e150 Mon Sep 17 00:00:00 2001 -From: CoolStar <coolstarorganization@gmail.com> -Date: Tue, 18 Jul 2017 15:50:38 -0600 -Subject: [PATCH] Rebasing - ---- - CorebootModulePkg/CorebootModulePkg.dec | 8 + - .../Include/Guid/LdrMemoryDescriptor.h | 33 + - .../Include/Guid/PciExpressBaseAddress.h | 46 + - .../Include/Guid/PciOptionRomTable.h | 41 + - .../Library/CorebootBdsLib/BdsPlatform.c | 1731 +++++++++++++++++ - .../Library/CorebootBdsLib/BdsPlatform.h | 288 +++ - .../Library/CorebootBdsLib/PlatformBds.inf | 65 + - .../Library/CorebootBdsLib/PlatformData.c | 161 ++ - CorebootPayloadPkg/CorebootPayloadPkg.fdf | 5 +- - CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc | 12 +- - .../CorebootPayloadPkgIa32X64.dsc | 12 +- - 11 files changed, 2388 insertions(+), 14 deletions(-) - create mode 100644 CorebootModulePkg/Include/Guid/LdrMemoryDescriptor.h - create mode 100644 CorebootModulePkg/Include/Guid/PciExpressBaseAddress.h - create mode 100644 CorebootModulePkg/Include/Guid/PciOptionRomTable.h - create mode 100644 CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c - create mode 100644 CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.h - create mode 100644 CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf - create mode 100644 CorebootModulePkg/Library/CorebootBdsLib/PlatformData.c - -diff --git a/CorebootModulePkg/CorebootModulePkg.dec b/CorebootModulePkg/CorebootModulePkg.dec -index 7f1309bdae61..20932a1d0467 100644 ---- a/CorebootModulePkg/CorebootModulePkg.dec -+++ b/CorebootModulePkg/CorebootModulePkg.dec -@@ -33,8 +33,16 @@ - gUefiCorebootModulePkgTokenSpaceGuid = {0xe6ff49a0, 0x15df, 0x48fd, {0x9a, 0xcf, 0xd7, 0xdc, 0x27, 0x1b, 0x39, 0xd5}}
- gUefiSystemTableInfoGuid = {0x16c8a6d0, 0xfe8a, 0x4082, {0xa2, 0x8, 0xcf, 0x89, 0xc4, 0x29, 0x4, 0x33}}
- gUefiFrameBufferInfoGuid = {0xdc2cd8bd, 0x402c, 0x4dc4, {0x9b, 0xe0, 0xc, 0x43, 0x2b, 0x7, 0xfa, 0x34}}
-+ gEfiPciExpressBaseAddressGuid = {0x3677d529, 0x326f, 0x4603, {0xa9, 0x26, 0xea, 0xac, 0xe0, 0x1d, 0xcb, 0xb0 }}
- gUefiAcpiBoardInfoGuid = {0xad3d31b, 0xb3d8, 0x4506, {0xae, 0x71, 0x2e, 0xf1, 0x10, 0x6, 0xd9, 0xf}}
-
-+ ## Include/Guid/PciOptionRomTable.h
-+ gEfiPciOptionRomTableGuid = { 0x7462660F, 0x1CBD, 0x48DA, { 0xAD, 0x11, 0x91, 0x71, 0x79, 0x13, 0x83, 0x1C }}
-+
-+ ## Include/Guid/LdrMemoryDescriptor.h
-+ gLdrMemoryDescriptorGuid = { 0x7701d7e5, 0x7d1d, 0x4432, { 0xa4, 0x68, 0x67, 0x3d, 0xab, 0x8a, 0xde, 0x60 }}
-+
-+
-
- [Ppis]
-
-diff --git a/CorebootModulePkg/Include/Guid/LdrMemoryDescriptor.h b/CorebootModulePkg/Include/Guid/LdrMemoryDescriptor.h -new file mode 100644 -index 000000000000..38a997deea0c ---- /dev/null -+++ b/CorebootModulePkg/Include/Guid/LdrMemoryDescriptor.h -@@ -0,0 +1,33 @@ -+/** @file -+ Guid is for GUIDED HOB of LDR memory descriptor. -+ -+Copyright (c) 2011, Intel Corporation. All rights reserved.<BR> -+This program and the accompanying materials -+are licensed and made available under the terms and conditions of the BSD License -+which accompanies this distribution. The full text of the license may be found at -+http://opensource.org/licenses/bsd-license.php -+ -+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -+ -+**/ -+ -+#ifndef __LDR_MEMORY_DESCRIPTOR__ -+#define __LDR_MEMORY_DESCRIPTOR__ -+ -+#define LDR_MEMORY_DESCRIPTOR_GUID \ -+ { 0x7701d7e5, 0x7d1d, 0x4432, {0xa4, 0x68, 0x67, 0x3d, 0xab, 0x8a, 0xde, 0x60}} -+ -+#pragma pack(1) -+ -+typedef struct { -+ EFI_HOB_GUID_TYPE Hob; -+ UINTN MemDescCount; -+ EFI_MEMORY_DESCRIPTOR *MemDesc; -+} MEMORY_DESC_HOB; -+ -+#pragma pack() -+ -+extern EFI_GUID gLdrMemoryDescriptorGuid; -+ -+#endif -diff --git a/CorebootModulePkg/Include/Guid/PciExpressBaseAddress.h b/CorebootModulePkg/Include/Guid/PciExpressBaseAddress.h -new file mode 100644 -index 000000000000..ff554383c11b ---- /dev/null -+++ b/CorebootModulePkg/Include/Guid/PciExpressBaseAddress.h -@@ -0,0 +1,46 @@ -+/** @file -+ -+Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> -+This program and the accompanying materials -+are licensed and made available under the terms and conditions of the BSD License -+which accompanies this distribution. The full text of the license may be found at -+http://opensource.org/licenses/bsd-license.php -+ -+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -+ -+Module Name: -+ -+ PciExpressBaseAddress.h -+ -+Abstract: -+ -+ -+ GUIDs used for PciExpress Base Address -+ -+**/ -+ -+#ifndef _EFI_PCI_EXPRESS_BASE_ADDRESS_H_ -+#define _EFI_PCI_EXPRESS_BASE_ADDRESS_H_ -+ -+#define EFI_PCI_EXPRESS_BASE_ADDRESS_GUID \ -+ { \ -+ 0x3677d529, 0x326f, 0x4603, {0xa9, 0x26, 0xea, 0xac, 0xe0, 0x1d, 0xcb, 0xb0} \ -+ } -+ -+// -+// Following structure defines PCI Express Base Address information. -+// This information is platform specific, and built into hob in PEI phase. -+// It can be consumed by PEI PCI driver and DXE PCI driver. -+// -+#pragma pack(1) -+typedef struct _EFI_PCI_EXPRESS_BASE_ADDRESS_INFORMATION { -+ UINT32 HostBridgeNumber; -+ UINT32 RootBridgeNumber; -+ UINT64 PciExpressBaseAddress; -+} EFI_PCI_EXPRESS_BASE_ADDRESS_INFORMATION; -+#pragma pack() -+ -+extern EFI_GUID gEfiPciExpressBaseAddressGuid; -+ -+#endif -diff --git a/CorebootModulePkg/Include/Guid/PciOptionRomTable.h b/CorebootModulePkg/Include/Guid/PciOptionRomTable.h -new file mode 100644 -index 000000000000..a2fb99710a69 ---- /dev/null -+++ b/CorebootModulePkg/Include/Guid/PciOptionRomTable.h -@@ -0,0 +1,41 @@ -+/** @file -+ GUID and data structure used to describe the list of PCI Option ROMs present in a system. -+ -+Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> -+This program and the accompanying materials -+are licensed and made available under the terms and conditions of the BSD License -+which accompanies this distribution. The full text of the license may be found at -+http://opensource.org/licenses/bsd-license.php -+ -+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -+ -+**/ -+ -+#ifndef __PCI_OPTION_ROM_TABLE_GUID_H_ -+#define __PCI_OPTION_ROM_TABLE_GUID_H_ -+ -+#define EFI_PCI_OPTION_ROM_TABLE_GUID \ -+ { 0x7462660f, 0x1cbd, 0x48da, {0xad, 0x11, 0x91, 0x71, 0x79, 0x13, 0x83, 0x1c } } -+ -+extern EFI_GUID gEfiPciOptionRomTableGuid; -+ -+typedef struct { -+ EFI_PHYSICAL_ADDRESS RomAddress; -+ EFI_MEMORY_TYPE MemoryType; -+ UINT32 RomLength; -+ UINT32 Seg; -+ UINT8 Bus; -+ UINT8 Dev; -+ UINT8 Func; -+ BOOLEAN ExecutedLegacyBiosImage; -+ BOOLEAN DontLoadEfiRom; -+} EFI_PCI_OPTION_ROM_DESCRIPTOR; -+ -+typedef struct { -+ UINT64 PciOptionRomCount; -+ EFI_PCI_OPTION_ROM_DESCRIPTOR *PciOptionRomDescriptors; -+} EFI_PCI_OPTION_ROM_TABLE; -+ -+#endif // __PCI_OPTION_ROM_TABLE_GUID_H_ -+ -diff --git a/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c -new file mode 100644 -index 000000000000..b6253a17f8ea ---- /dev/null -+++ b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c -@@ -0,0 +1,1731 @@ -+/*++ -+ -+Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR> -+This program and the accompanying materials -+are licensed and made available under the terms and conditions of the BSD License -+which accompanies this distribution. The full text of the license may be found at -+http://opensource.org/licenses/bsd-license.php -+ -+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -+ -+Module Name: -+ -+ BdsPlatform.c -+ -+Abstract: -+ -+ This file include all platform action which can be customized -+ by IBV/OEM. -+ -+--*/ -+ -+#include "BdsPlatform.h" -+ -+#define IS_PCI_ISA_PDECODE(_p) IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS_BRIDGE_ISA_PDECODE, 0) -+ -+extern BOOLEAN gConnectAllHappened; -+extern USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath; -+ -+EFI_GUID *gTableGuidArray[] = { -+ &gEfiAcpi20TableGuid, &gEfiAcpiTableGuid, &gEfiSmbiosTableGuid, &gEfiMpsTableGuid -+ }; -+ -+// -+// BDS Platform Functions -+// -+ -+VOID -+GetSystemTablesFromHob ( -+ VOID -+ ) -+/*++ -+ -+Routine Description: -+ Find GUID'ed HOBs that contain EFI_PHYSICAL_ADDRESS of ACPI, SMBIOS, MPs tables -+ -+Arguments: -+ None -+ -+Returns: -+ None. -+ -+--*/ -+{ -+ EFI_PEI_HOB_POINTERS GuidHob; -+ EFI_PEI_HOB_POINTERS HobStart; -+ EFI_PHYSICAL_ADDRESS *Table; -+ UINTN Index; -+ -+ // -+ // Get Hob List -+ // -+ HobStart.Raw = GetHobList (); -+ // -+ // Iteratively add ACPI Table, SMBIOS Table, MPS Table to EFI System Table -+ // -+ for (Index = 0; Index < ARRAY_SIZE (gTableGuidArray); ++Index) { -+ GuidHob.Raw = GetNextGuidHob (gTableGuidArray[Index], HobStart.Raw); -+ if (GuidHob.Raw != NULL) { -+ Table = GET_GUID_HOB_DATA (GuidHob.Guid); -+ if (Table != NULL) { -+ // -+ // Check if Mps Table/Smbios Table/Acpi Table exists in E/F seg, -+ // According to UEFI Spec, we should make sure Smbios table, -+ // ACPI table and Mps tables kept in memory of specified type -+ // -+ ConvertSystemTable(gTableGuidArray[Index], (VOID**)&Table); -+ gBS->InstallConfigurationTable (gTableGuidArray[Index], (VOID *)Table); -+ } -+ } -+ } -+ -+ return ; -+} -+ -+#if 0 -+VOID -+PrintMemoryMap ( -+ VOID -+ ) -+{ -+ EFI_MEMORY_DESCRIPTOR *MemMap; -+ EFI_MEMORY_DESCRIPTOR *MemMapPtr; -+ UINTN MemMapSize; -+ UINTN MapKey, DescriptorSize; -+ UINTN Index; -+ UINT32 DescriptorVersion; -+ UINT64 Bytes; -+ EFI_STATUS Status; -+ -+ MemMapSize = 0; -+ MemMap = NULL; -+ Status = gBS->GetMemoryMap (&MemMapSize, MemMap, &MapKey, &DescriptorSize, &DescriptorVersion); -+ ASSERT (Status == EFI_BUFFER_TOO_SMALL); -+ MemMapSize += EFI_PAGE_SIZE; -+ Status = gBS->AllocatePool (EfiBootServicesData, MemMapSize, &MemMap); -+ ASSERT (Status == EFI_SUCCESS); -+ Status = gBS->GetMemoryMap (&MemMapSize, MemMap, &MapKey, &DescriptorSize, &DescriptorVersion); -+ ASSERT (Status == EFI_SUCCESS); -+ MemMapPtr = MemMap; -+ -+ ASSERT (DescriptorVersion == EFI_MEMORY_DESCRIPTOR_VERSION); -+ -+ for (Index = 0; Index < MemMapSize / DescriptorSize; Index ++) { -+ Bytes = LShiftU64 (MemMap->NumberOfPages, 12); -+ DEBUG ((EFI_D_ERROR, "%lX-%lX %lX %lX %X\n", -+ MemMap->PhysicalStart, -+ MemMap->PhysicalStart + Bytes - 1, -+ MemMap->NumberOfPages, -+ MemMap->Attribute, -+ (UINTN)MemMap->Type)); -+ MemMap = (EFI_MEMORY_DESCRIPTOR *)((UINTN)MemMap + DescriptorSize); -+ } -+ -+ gBS->FreePool (MemMapPtr); -+} -+#endif -+ -+VOID -+UpdateMemoryMap ( -+ VOID -+ ) -+{ -+ EFI_STATUS Status; -+ EFI_PEI_HOB_POINTERS GuidHob; -+ VOID *Table; -+ MEMORY_DESC_HOB MemoryDescHob; -+ UINTN Index; -+ EFI_PHYSICAL_ADDRESS Memory; -+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR Descriptor; -+ -+ GuidHob.Raw = GetFirstGuidHob (&gLdrMemoryDescriptorGuid); -+ if (GuidHob.Raw == NULL) { -+ DEBUG ((EFI_D_ERROR, "Fail to get gEfiLdrMemoryDescriptorGuid from GUID HOB LIST!\n")); -+ return; -+ } -+ Table = GET_GUID_HOB_DATA (GuidHob.Guid); -+ if (Table == NULL) { -+ DEBUG ((EFI_D_ERROR, "Fail to get gEfiLdrMemoryDescriptorGuid from GUID HOB LIST!\n")); -+ return; -+ } -+ MemoryDescHob.MemDescCount = *(UINTN *)Table; -+ MemoryDescHob.MemDesc = *(EFI_MEMORY_DESCRIPTOR **)((UINTN)Table + sizeof(UINTN)); -+ -+ // -+ // Add ACPINVS, ACPIReclaim, and Reserved memory to MemoryMap -+ // -+ for (Index = 0; Index < MemoryDescHob.MemDescCount; Index++) { -+ if (MemoryDescHob.MemDesc[Index].PhysicalStart < 0x100000) { -+ continue; -+ } -+ if (MemoryDescHob.MemDesc[Index].PhysicalStart >= 0x100000000ULL) { -+ continue; -+ } -+ if ((MemoryDescHob.MemDesc[Index].Type == EfiReservedMemoryType) || -+ (MemoryDescHob.MemDesc[Index].Type == EfiRuntimeServicesData) || -+ (MemoryDescHob.MemDesc[Index].Type == EfiRuntimeServicesCode) || -+ (MemoryDescHob.MemDesc[Index].Type == EfiACPIReclaimMemory) || -+ (MemoryDescHob.MemDesc[Index].Type == EfiACPIMemoryNVS)) { -+ DEBUG ((EFI_D_ERROR, "PhysicalStart - 0x%016lx, ", MemoryDescHob.MemDesc[Index].PhysicalStart)); -+ DEBUG ((EFI_D_ERROR, "PageNumber - 0x%016lx, ", MemoryDescHob.MemDesc[Index].NumberOfPages)); -+ DEBUG ((EFI_D_ERROR, "Attribute - 0x%016lx, ", MemoryDescHob.MemDesc[Index].Attribute)); -+ DEBUG ((EFI_D_ERROR, "Type - 0x%08x\n", MemoryDescHob.MemDesc[Index].Type)); -+ if ((MemoryDescHob.MemDesc[Index].Type == EfiRuntimeServicesData) || -+ (MemoryDescHob.MemDesc[Index].Type == EfiRuntimeServicesCode)) { -+ // -+ // For RuntimeSevicesData and RuntimeServicesCode, they are BFV or DxeCore. -+ // The memory type is assigned in EfiLdr -+ // -+ Status = gDS->GetMemorySpaceDescriptor (MemoryDescHob.MemDesc[Index].PhysicalStart, &Descriptor); -+ if (EFI_ERROR (Status)) { -+ continue; -+ } -+ if (Descriptor.GcdMemoryType != EfiGcdMemoryTypeReserved) { -+ // -+ // BFV or tested DXE core -+ // -+ continue; -+ } -+ // -+ // Untested DXE Core region, free and remove -+ // -+ Status = gDS->FreeMemorySpace ( -+ MemoryDescHob.MemDesc[Index].PhysicalStart, -+ LShiftU64 (MemoryDescHob.MemDesc[Index].NumberOfPages, EFI_PAGE_SHIFT) -+ ); -+ if (EFI_ERROR (Status)) { -+ DEBUG ((EFI_D_ERROR, "FreeMemorySpace fail - %r!\n", Status)); -+ continue; -+ } -+ Status = gDS->RemoveMemorySpace ( -+ MemoryDescHob.MemDesc[Index].PhysicalStart, -+ LShiftU64 (MemoryDescHob.MemDesc[Index].NumberOfPages, EFI_PAGE_SHIFT) -+ ); -+ if (EFI_ERROR (Status)) { -+ DEBUG ((EFI_D_ERROR, "RemoveMemorySpace fail - %r!\n", Status)); -+ continue; -+ } -+ -+ // -+ // Convert Runtime type to BootTime type -+ // -+ if (MemoryDescHob.MemDesc[Index].Type == EfiRuntimeServicesData) { -+ MemoryDescHob.MemDesc[Index].Type = EfiBootServicesData; -+ } else { -+ MemoryDescHob.MemDesc[Index].Type = EfiBootServicesCode; -+ } -+ -+ // -+ // PassThrough, let below code add and alloate. -+ // -+ } -+ // -+ // ACPI or reserved memory -+ // -+ Status = gDS->AddMemorySpace ( -+ EfiGcdMemoryTypeSystemMemory, -+ MemoryDescHob.MemDesc[Index].PhysicalStart, -+ LShiftU64 (MemoryDescHob.MemDesc[Index].NumberOfPages, EFI_PAGE_SHIFT), -+ MemoryDescHob.MemDesc[Index].Attribute -+ ); -+ if (EFI_ERROR (Status)) { -+ DEBUG ((EFI_D_ERROR, "AddMemorySpace fail - %r!\n", Status)); -+ if ((MemoryDescHob.MemDesc[Index].Type == EfiACPIReclaimMemory) || -+ (MemoryDescHob.MemDesc[Index].Type == EfiACPIMemoryNVS)) { -+ // -+ // For EfiACPIReclaimMemory and EfiACPIMemoryNVS, it must success. -+ // For EfiReservedMemoryType, there maybe overlap. So skip check here. -+ // -+// ASSERT_EFI_ERROR (Status); -+ } -+ continue; -+ } -+ -+ Memory = MemoryDescHob.MemDesc[Index].PhysicalStart; -+ Status = gBS->AllocatePages ( -+ AllocateAddress, -+ (EFI_MEMORY_TYPE)MemoryDescHob.MemDesc[Index].Type, -+ (UINTN)MemoryDescHob.MemDesc[Index].NumberOfPages, -+ &Memory -+ ); -+ if (EFI_ERROR (Status)) { -+ DEBUG ((EFI_D_ERROR, "AllocatePages fail - %r!\n", Status)); -+ // -+ // For the page added, it must be allocated. -+ // -+// ASSERT_EFI_ERROR (Status); -+ continue; -+ } -+ } -+ } -+ -+} -+ -+EFI_STATUS -+DisableUsbLegacySupport( -+ void -+ ) -+/*++ -+ -+Routine Description: -+ Disabble the USB legacy Support in all Ehci and Uhci. -+ This function assume all PciIo handles have been created in system. -+ -+Arguments: -+ None -+ -+Returns: -+ EFI_SUCCESS -+ EFI_NOT_FOUND -+--*/ -+{ -+ EFI_STATUS Status; -+ EFI_HANDLE *HandleArray; -+ UINTN HandleArrayCount; -+ UINTN Index; -+ EFI_PCI_IO_PROTOCOL *PciIo; -+ UINT8 Class[3]; -+ UINT16 Command; -+ UINT32 HcCapParams; -+ UINT32 ExtendCap; -+ UINT32 Value; -+ UINT32 TimeOut; -+ -+ // -+ // Find the usb host controller -+ // -+ Status = gBS->LocateHandleBuffer ( -+ ByProtocol, -+ &gEfiPciIoProtocolGuid, -+ NULL, -+ &HandleArrayCount, -+ &HandleArray -+ ); -+ if (!EFI_ERROR (Status)) { -+ for (Index = 0; Index < HandleArrayCount; Index++) { -+ Status = gBS->HandleProtocol ( -+ HandleArray[Index], -+ &gEfiPciIoProtocolGuid, -+ (VOID **)&PciIo -+ ); -+ if (!EFI_ERROR (Status)) { -+ // -+ // Find the USB host controller controller -+ // -+ Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, 0x09, 3, &Class); -+ if (!EFI_ERROR (Status)) { -+ if ((PCI_CLASS_SERIAL == Class[2]) && -+ (PCI_CLASS_SERIAL_USB == Class[1])) { -+ if (PCI_IF_UHCI == Class[0]) { -+ // -+ // Found the UHCI, then disable the legacy support -+ // -+ Command = 0; -+ Status = PciIo->Pci.Write (PciIo, EfiPciIoWidthUint16, 0xC0, 1, &Command); -+ } else if (PCI_IF_EHCI == Class[0]) { -+ // -+ // Found the EHCI, then disable the legacy support -+ // -+ Status = PciIo->Mem.Read ( -+ PciIo, -+ EfiPciIoWidthUint32, -+ 0, //EHC_BAR_INDEX -+ (UINT64) 0x08, //EHC_HCCPARAMS_OFFSET -+ 1, -+ &HcCapParams -+ ); -+ -+ ExtendCap = (HcCapParams >> 8) & 0xFF; -+ // -+ // Disable the SMI in USBLEGCTLSTS firstly -+ // -+ PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, ExtendCap + 0x4, 1, &Value); -+ Value &= 0xFFFF0000; -+ PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, ExtendCap + 0x4, 1, &Value); -+ -+ // -+ // Get EHCI Ownership from legacy bios -+ // -+ PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, ExtendCap, 1, &Value); -+ Value |= (0x1 << 24); -+ PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, ExtendCap, 1, &Value); -+ -+ TimeOut = 40; -+ while (TimeOut--) { -+ gBS->Stall (500); -+ -+ PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, ExtendCap, 1, &Value); -+ -+ if ((Value & 0x01010000) == 0x01000000) { -+ break; -+ } -+ } -+ } -+ } -+ } -+ } -+ } -+ } else { -+ return Status; -+ } -+ gBS->FreePool (HandleArray); -+ return EFI_SUCCESS; -+} -+ -+ -+VOID -+EFIAPI -+PlatformBdsInit ( -+ VOID -+ ) -+/*++ -+ -+Routine Description: -+ -+ Platform Bds init. Include the platform firmware vendor, revision -+ and so crc check. -+ -+Arguments: -+ -+Returns: -+ -+ None. -+ -+--*/ -+{ -+ GetSystemTablesFromHob (); -+ -+ UpdateMemoryMap (); -+ -+ // -+ // Append Usb Keyboard short form DevicePath into "ConInDev" -+ // -+ BdsLibUpdateConsoleVariable ( -+ VarConsoleInpDev, -+ (EFI_DEVICE_PATH_PROTOCOL *) &gUsbClassKeyboardDevicePath, -+ NULL -+ ); -+} -+ -+UINT64 -+GetPciExpressBaseAddressForRootBridge ( -+ IN UINTN HostBridgeNumber, -+ IN UINTN RootBridgeNumber -+ ) -+/*++ -+ -+Routine Description: -+ This routine is to get PciExpress Base Address for this RootBridge -+ -+Arguments: -+ HostBridgeNumber - The number of HostBridge -+ RootBridgeNumber - The number of RootBridge -+ -+Returns: -+ UINT64 - PciExpressBaseAddress for this HostBridge and RootBridge -+ -+--*/ -+{ -+ EFI_PCI_EXPRESS_BASE_ADDRESS_INFORMATION *PciExpressBaseAddressInfo; -+ UINTN BufferSize; -+ UINT32 Index; -+ UINT32 Number; -+ EFI_PEI_HOB_POINTERS GuidHob; -+ -+ // -+ // Get PciExpressAddressInfo Hob -+ // -+ PciExpressBaseAddressInfo = NULL; -+ BufferSize = 0; -+ GuidHob.Raw = GetFirstGuidHob (&gEfiPciExpressBaseAddressGuid); -+ if (GuidHob.Raw != NULL) { -+ PciExpressBaseAddressInfo = GET_GUID_HOB_DATA (GuidHob.Guid); -+ BufferSize = GET_GUID_HOB_DATA_SIZE (GuidHob.Guid); -+ } else { -+ return 0; -+ } -+ -+ // -+ // Search the PciExpress Base Address in the Hob for current RootBridge -+ // -+ Number = (UINT32)(BufferSize / sizeof(EFI_PCI_EXPRESS_BASE_ADDRESS_INFORMATION)); -+ for (Index = 0; Index < Number; Index++) { -+ if ((PciExpressBaseAddressInfo[Index].HostBridgeNumber == HostBridgeNumber) && -+ (PciExpressBaseAddressInfo[Index].RootBridgeNumber == RootBridgeNumber)) { -+ return PciExpressBaseAddressInfo[Index].PciExpressBaseAddress; -+ } -+ } -+ -+ // -+ // Do not find the PciExpress Base Address in the Hob -+ // -+ return 0; -+} -+ -+VOID -+PatchPciRootBridgeDevicePath ( -+ IN UINTN HostBridgeNumber, -+ IN UINTN RootBridgeNumber, -+ IN PLATFORM_ROOT_BRIDGE_DEVICE_PATH *RootBridge -+ ) -+{ -+ UINT64 PciExpressBase; -+ -+ PciExpressBase = GetPciExpressBaseAddressForRootBridge (HostBridgeNumber, RootBridgeNumber); -+ -+ DEBUG ((EFI_D_INFO, "Get PciExpress Address from Hob: 0x%X\n", PciExpressBase)); -+ -+ if (PciExpressBase != 0) { -+ RootBridge->PciRootBridge.HID = EISA_PNP_ID(0x0A08); -+ } -+} -+ -+EFI_STATUS -+ConnectRootBridge ( -+ VOID -+ ) -+/*++ -+ -+Routine Description: -+ -+ Connect RootBridge -+ -+Arguments: -+ -+ None. -+ -+Returns: -+ -+ EFI_SUCCESS - Connect RootBridge successfully. -+ EFI_STATUS - Connect RootBridge fail. -+ -+--*/ -+{ -+ EFI_STATUS Status; -+ EFI_HANDLE RootHandle; -+ -+ // -+ // Patch Pci Root Bridge Device Path -+ // -+ PatchPciRootBridgeDevicePath (0, 0, &gPlatformRootBridge0); -+ -+ // -+ // Make all the PCI_IO protocols on PCI Seg 0 show up -+ // -+ BdsLibConnectDevicePath (gPlatformRootBridges[0]); -+ -+ Status = gBS->LocateDevicePath ( -+ &gEfiDevicePathProtocolGuid, -+ &gPlatformRootBridges[0], -+ &RootHandle -+ ); -+ DEBUG ((EFI_D_INFO, "Pci Root bridge handle is 0x%X\n", RootHandle)); -+ -+ if (EFI_ERROR (Status)) { -+ return Status; -+ } -+ -+ Status = gBS->ConnectController (RootHandle, NULL, NULL, FALSE); -+ if (EFI_ERROR (Status)) { -+ return Status; -+ } -+ -+ return EFI_SUCCESS; -+} -+ -+EFI_STATUS -+PrepareLpcBridgeDevicePath ( -+ IN EFI_HANDLE DeviceHandle -+ ) -+/*++ -+ -+Routine Description: -+ -+ Add IsaKeyboard to ConIn, -+ add IsaSerial to ConOut, ConIn, ErrOut. -+ LPC Bridge: 06 01 00 -+ -+Arguments: -+ -+ DeviceHandle - Handle of PCIIO protocol. -+ -+Returns: -+ -+ EFI_SUCCESS - LPC bridge is added to ConOut, ConIn, and ErrOut. -+ EFI_STATUS - No LPC bridge is added. -+ -+--*/ -+{ -+ EFI_STATUS Status; -+ EFI_DEVICE_PATH_PROTOCOL *DevicePath; -+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; -+ -+ DevicePath = NULL; -+ Status = gBS->HandleProtocol ( -+ DeviceHandle, -+ &gEfiDevicePathProtocolGuid, -+ (VOID*)&DevicePath -+ ); -+ if (EFI_ERROR (Status)) { -+ return Status; -+ } -+ TempDevicePath = DevicePath; -+ -+ // -+ // Register Keyboard -+ // -+ DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode); -+ -+ BdsLibUpdateConsoleVariable (VarConsoleInp, DevicePath, NULL); -+ -+ // -+ // Register COM1 -+ // -+ DevicePath = TempDevicePath; -+ gPnp16550ComPortDeviceNode.UID = 0; -+ -+ DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode); -+ DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); -+ DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); -+ -+ BdsLibUpdateConsoleVariable (VarConsoleOut, DevicePath, NULL); -+ BdsLibUpdateConsoleVariable (VarConsoleInp, DevicePath, NULL); -+ BdsLibUpdateConsoleVariable (VarErrorOut, DevicePath, NULL); -+ -+ // -+ // Register COM2 -+ // -+ DevicePath = TempDevicePath; -+ gPnp16550ComPortDeviceNode.UID = 1; -+ -+ DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode); -+ DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); -+ DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); -+ -+ BdsLibUpdateConsoleVariable (VarConsoleOut, DevicePath, NULL); -+ BdsLibUpdateConsoleVariable (VarConsoleInp, DevicePath, NULL); -+ BdsLibUpdateConsoleVariable (VarErrorOut, DevicePath, NULL); -+ -+ return EFI_SUCCESS; -+} -+ -+EFI_STATUS -+GetGopDevicePath ( -+ IN EFI_DEVICE_PATH_PROTOCOL *PciDevicePath, -+ OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath -+ ) -+{ -+ UINTN Index; -+ EFI_STATUS Status; -+ EFI_HANDLE PciDeviceHandle; -+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; -+ EFI_DEVICE_PATH_PROTOCOL *TempPciDevicePath; -+ UINTN GopHandleCount; -+ EFI_HANDLE *GopHandleBuffer; -+ -+ if (PciDevicePath == NULL || GopDevicePath == NULL) { -+ return EFI_INVALID_PARAMETER; -+ } -+ -+ // -+ // Initialize the GopDevicePath to be PciDevicePath -+ // -+ *GopDevicePath = PciDevicePath; -+ TempPciDevicePath = PciDevicePath; -+ -+ Status = gBS->LocateDevicePath ( -+ &gEfiDevicePathProtocolGuid, -+ &TempPciDevicePath, -+ &PciDeviceHandle -+ ); -+ if (EFI_ERROR (Status)) { -+ return Status; -+ } -+ -+ // -+ // Try to connect this handle, so that GOP driver could start on this -+ // device and create child handles with GraphicsOutput Protocol installed -+ // on them, then we get device paths of these child handles and select -+ // them as possible console device. -+ // -+ gBS->ConnectController (PciDeviceHandle, NULL, NULL, FALSE); -+ -+ Status = gBS->LocateHandleBuffer ( -+ ByProtocol, -+ &gEfiGraphicsOutputProtocolGuid, -+ NULL, -+ &GopHandleCount, -+ &GopHandleBuffer -+ ); -+ if (!EFI_ERROR (Status)) { -+ // -+ // Add all the child handles as possible Console Device -+ // -+ for (Index = 0; Index < GopHandleCount; Index++) { -+ Status = gBS->HandleProtocol (GopHandleBuffer[Index], &gEfiDevicePathProtocolGuid, (VOID*)&TempDevicePath); -+ if (EFI_ERROR (Status)) { -+ continue; -+ } -+ if (CompareMem ( -+ PciDevicePath, -+ TempDevicePath, -+ GetDevicePathSize (PciDevicePath) - END_DEVICE_PATH_LENGTH -+ ) == 0) { -+ // -+ // In current implementation, we only enable one of the child handles -+ // as console device, i.e. sotre one of the child handle's device -+ // path to variable "ConOut" -+ // In future, we could select all child handles to be console device -+ // -+ -+ *GopDevicePath = TempDevicePath; -+ -+ // -+ // Delete the PCI device's path that added by GetPlugInPciVgaDevicePath() -+ // Add the integrity GOP device path. -+ // -+ BdsLibUpdateConsoleVariable (VarConsoleOutDev, NULL, PciDevicePath); -+ BdsLibUpdateConsoleVariable (VarConsoleOutDev, TempDevicePath, NULL); -+ } -+ } -+ gBS->FreePool (GopHandleBuffer); -+ } -+ -+ return EFI_SUCCESS; -+} -+ -+EFI_STATUS -+PreparePciVgaDevicePath ( -+ IN EFI_HANDLE DeviceHandle -+ ) -+/*++ -+ -+Routine Description: -+ -+ Add PCI VGA to ConOut. -+ PCI VGA: 03 00 00 -+ -+Arguments: -+ -+ DeviceHandle - Handle of PCIIO protocol. -+ -+Returns: -+ -+ EFI_SUCCESS - PCI VGA is added to ConOut. -+ EFI_STATUS - No PCI VGA device is added. -+ -+--*/ -+{ -+ EFI_STATUS Status; -+ EFI_DEVICE_PATH_PROTOCOL *DevicePath; -+ EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; -+ -+ DevicePath = NULL; -+ GopDevicePath = NULL; -+ Status = gBS->HandleProtocol ( -+ DeviceHandle, -+ &gEfiDevicePathProtocolGuid, -+ (VOID*)&DevicePath -+ ); -+ if (EFI_ERROR (Status)) { -+ return Status; -+ } -+ -+ GetGopDevicePath (DevicePath, &GopDevicePath); -+ DevicePath = GopDevicePath; -+ -+ BdsLibUpdateConsoleVariable (VarConsoleOut, DevicePath, NULL); -+ -+ return EFI_SUCCESS; -+} -+ -+EFI_STATUS -+PreparePciSerialDevicePath ( -+ IN EFI_HANDLE DeviceHandle -+ ) -+/*++ -+ -+Routine Description: -+ -+ Add PCI Serial to ConOut, ConIn, ErrOut. -+ PCI Serial: 07 00 02 -+ -+Arguments: -+ -+ DeviceHandle - Handle of PCIIO protocol. -+ -+Returns: -+ -+ EFI_SUCCESS - PCI Serial is added to ConOut, ConIn, and ErrOut. -+ EFI_STATUS - No PCI Serial device is added. -+ -+--*/ -+{ -+ EFI_STATUS Status; -+ EFI_DEVICE_PATH_PROTOCOL *DevicePath; -+ -+ DevicePath = NULL; -+ Status = gBS->HandleProtocol ( -+ DeviceHandle, -+ &gEfiDevicePathProtocolGuid, -+ (VOID*)&DevicePath -+ ); -+ if (EFI_ERROR (Status)) { -+ return Status; -+ } -+ -+ DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); -+ DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); -+ -+ BdsLibUpdateConsoleVariable (VarConsoleOut, DevicePath, NULL); -+ BdsLibUpdateConsoleVariable (VarConsoleInp, DevicePath, NULL); -+ BdsLibUpdateConsoleVariable (VarErrorOut, DevicePath, NULL); -+ -+ return EFI_SUCCESS; -+} -+ -+EFI_STATUS -+DetectAndPreparePlatformPciDevicePath ( -+ BOOLEAN DetectVgaOnly -+ ) -+/*++ -+ -+Routine Description: -+ -+ Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut -+ -+Arguments: -+ -+ DetectVgaOnly - Only detect VGA device if it's TRUE. -+ -+Returns: -+ -+ EFI_SUCCESS - PCI Device check and Console variable update successfully. -+ EFI_STATUS - PCI Device check or Console variable update fail. -+ -+--*/ -+{ -+ EFI_STATUS Status; -+ UINTN HandleCount; -+ EFI_HANDLE *HandleBuffer; -+ UINTN Index; -+ EFI_PCI_IO_PROTOCOL *PciIo; -+ PCI_TYPE00 Pci; -+ -+ // -+ // Start to check all the PciIo to find all possible device -+ // -+ HandleCount = 0; -+ HandleBuffer = NULL; -+ Status = gBS->LocateHandleBuffer ( -+ ByProtocol, -+ &gEfiPciIoProtocolGuid, -+ NULL, -+ &HandleCount, -+ &HandleBuffer -+ ); -+ if (EFI_ERROR (Status)) { -+ return Status; -+ } -+ -+ for (Index = 0; Index < HandleCount; Index++) { -+ Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiPciIoProtocolGuid, (VOID*)&PciIo); -+ if (EFI_ERROR (Status)) { -+ continue; -+ } -+ -+ // -+ // Check for all PCI device -+ // -+ Status = PciIo->Pci.Read ( -+ PciIo, -+ EfiPciIoWidthUint32, -+ 0, -+ sizeof (Pci) / sizeof (UINT32), -+ &Pci -+ ); -+ if (EFI_ERROR (Status)) { -+ continue; -+ } -+ -+ if (!DetectVgaOnly) { -+ // -+ // Here we decide whether it is LPC Bridge -+ // -+ if ((IS_PCI_LPC (&Pci)) || -+ ((IS_PCI_ISA_PDECODE (&Pci)) && (Pci.Hdr.VendorId == 0x8086) && (Pci.Hdr.DeviceId == 0x7110))) { -+ // -+ // Add IsaKeyboard to ConIn, -+ // add IsaSerial to ConOut, ConIn, ErrOut -+ // -+ DEBUG ((EFI_D_INFO, "Find the LPC Bridge device\n")); -+ PrepareLpcBridgeDevicePath (HandleBuffer[Index]); -+ continue; -+ } -+ // -+ // Here we decide which Serial device to enable in PCI bus -+ // -+ if (IS_PCI_16550SERIAL (&Pci)) { -+ // -+ // Add them to ConOut, ConIn, ErrOut. -+ // -+ DEBUG ((EFI_D_INFO, "Find the 16550 SERIAL device\n")); -+ PreparePciSerialDevicePath (HandleBuffer[Index]); -+ continue; -+ } -+ } -+ -+ // -+ // Here we decide which VGA device to enable in PCI bus -+ // -+ if (IS_PCI_VGA (&Pci)) { -+ // -+ // Add them to ConOut. -+ // -+ DEBUG ((EFI_D_INFO, "Find the VGA device\n")); -+ PreparePciVgaDevicePath (HandleBuffer[Index]); -+ continue; -+ } -+ } -+ -+ gBS->FreePool (HandleBuffer); -+ -+ return EFI_SUCCESS; -+} -+ -+EFI_STATUS -+PlatformBdsConnectConsole ( -+ IN BDS_CONSOLE_CONNECT_ENTRY *PlatformConsole -+ ) -+/*++ -+ -+Routine Description: -+ -+ Connect the predefined platform default console device. Always try to find -+ and enable the vga device if have. -+ -+Arguments: -+ -+ PlatformConsole - Predefined platform default console device array. -+ -+Returns: -+ -+ EFI_SUCCESS - Success connect at least one ConIn and ConOut -+ device, there must have one ConOut device is -+ active vga device. -+ -+ EFI_STATUS - Return the status of -+ BdsLibConnectAllDefaultConsoles () -+ -+--*/ -+{ -+ EFI_STATUS Status; -+ UINTN Index; -+ EFI_DEVICE_PATH_PROTOCOL *VarConout; -+ EFI_DEVICE_PATH_PROTOCOL *VarConin; -+ UINTN DevicePathSize; -+ -+ // -+ // Connect RootBridge -+ // -+ ConnectRootBridge (); -+ -+ VarConout = BdsLibGetVariableAndSize ( -+ VarConsoleOut, -+ &gEfiGlobalVariableGuid, -+ &DevicePathSize -+ ); -+ VarConin = BdsLibGetVariableAndSize ( -+ VarConsoleInp, -+ &gEfiGlobalVariableGuid, -+ &DevicePathSize -+ ); -+ -+ if (VarConout == NULL || VarConin == NULL) { -+ // -+ // Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut -+ // -+ DetectAndPreparePlatformPciDevicePath (FALSE); -+ -+ // -+ // Have chance to connect the platform default console, -+ // the platform default console is the minimum device group -+ // the platform should support -+ // -+ for (Index = 0; PlatformConsole[Index].DevicePath != NULL; ++Index) { -+ // -+ // Update the console variable with the connect type -+ // -+ if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) == CONSOLE_IN) { -+ BdsLibUpdateConsoleVariable (VarConsoleInp, PlatformConsole[Index].DevicePath, NULL); -+ } -+ if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) == CONSOLE_OUT) { -+ BdsLibUpdateConsoleVariable (VarConsoleOut, PlatformConsole[Index].DevicePath, NULL); -+ } -+ if ((PlatformConsole[Index].ConnectType & STD_ERROR) == STD_ERROR) { -+ BdsLibUpdateConsoleVariable (VarErrorOut, PlatformConsole[Index].DevicePath, NULL); -+ } -+ } -+ } else { -+ // -+ // Only detect VGA device and add them to ConOut -+ // -+ DetectAndPreparePlatformPciDevicePath (TRUE); -+ } -+ -+ // -+ // The ConIn devices connection will start the USB bus, should disable all -+ // Usb legacy support firstly. -+ // Caution: Must ensure the PCI bus driver has been started. Since the -+ // ConnectRootBridge() will create all the PciIo protocol, it's safe here now -+ // -+ Status = DisableUsbLegacySupport(); -+ -+ // -+ // Connect the all the default console with current cosole variable -+ // -+ Status = BdsLibConnectAllDefaultConsoles (); -+ if (EFI_ERROR (Status)) { -+ return Status; -+ } -+ -+ return EFI_SUCCESS; -+} -+ -+VOID -+PlatformBdsConnectSequence ( -+ VOID -+ ) -+/*++ -+ -+Routine Description: -+ -+ Connect with predefined platform connect sequence, -+ the OEM/IBV can customize with their own connect sequence. -+ -+Arguments: -+ -+ None. -+ -+Returns: -+ -+ None. -+ -+--*/ -+{ -+ UINTN Index; -+ -+ Index = 0; -+ -+ // -+ // Here we can get the customized platform connect sequence -+ // Notes: we can connect with new variable which record the -+ // last time boots connect device path sequence -+ // -+ while (gPlatformConnectSequence[Index] != NULL) { -+ // -+ // Build the platform boot option -+ // -+ BdsLibConnectDevicePath (gPlatformConnectSequence[Index]); -+ Index++; -+ } -+ -+} -+ -+VOID -+PlatformBdsGetDriverOption ( -+ IN OUT LIST_ENTRY *BdsDriverLists -+ ) -+/*++ -+ -+Routine Description: -+ -+ Load the predefined driver option, OEM/IBV can customize this -+ to load their own drivers -+ -+Arguments: -+ -+ BdsDriverLists - The header of the driver option link list. -+ -+Returns: -+ -+ None. -+ -+--*/ -+{ -+ UINTN Index; -+ -+ Index = 0; -+ -+ // -+ // Here we can get the customized platform driver option -+ // -+ while (gPlatformDriverOption[Index] != NULL) { -+ // -+ // Build the platform boot option -+ // -+ BdsLibRegisterNewOption (BdsDriverLists, gPlatformDriverOption[Index], NULL, L"DriverOrder"); -+ Index++; -+ } -+ -+} -+ -+VOID -+PlatformBdsDiagnostics ( -+ IN EXTENDMEM_COVERAGE_LEVEL MemoryTestLevel, -+ IN BOOLEAN QuietBoot, -+ IN BASEM_MEMORY_TEST BaseMemoryTest -+ ) -+/*++ -+ -+Routine Description: -+ -+ Perform the platform diagnostic, such like test memory. OEM/IBV also -+ can customize this fuction to support specific platform diagnostic. -+ -+Arguments: -+ -+ MemoryTestLevel - The memory test intensive level -+ -+ QuietBoot - Indicate if need to enable the quiet boot -+ -+ BaseMemoryTest - A pointer to BdsMemoryTest() -+ -+Returns: -+ -+ None. -+ -+--*/ -+{ -+ EFI_STATUS Status; -+ -+ // -+ // Here we can decide if we need to show -+ // the diagnostics screen -+ // Notes: this quiet boot code should be remove -+ // from the graphic lib -+ // -+ if (QuietBoot) { -+ Status = EnableQuietBoot (PcdGetPtr(PcdLogoFile)); -+ if (EFI_ERROR (Status)) { -+ DisableQuietBoot (); -+ return; -+ } -+ -+ // -+ // Perform system diagnostic -+ // -+ Status = BaseMemoryTest (MemoryTestLevel); -+ if (EFI_ERROR (Status)) { -+ DisableQuietBoot (); -+ } -+ -+ return ; -+ } -+ // -+ // Perform system diagnostic -+ // -+ Status = BaseMemoryTest (MemoryTestLevel); -+} -+ -+VOID -+EFIAPI -+PlatformBdsPolicyBehavior ( -+ IN OUT LIST_ENTRY *DriverOptionList, -+ IN OUT LIST_ENTRY *BootOptionList, -+ IN PROCESS_CAPSULES ProcessCapsules, -+ IN BASEM_MEMORY_TEST BaseMemoryTest -+ ) -+/*++ -+ -+Routine Description: -+ -+ The function will execute with as the platform policy, current policy -+ is driven by boot mode. IBV/OEM can customize this code for their specific -+ policy action. -+ -+Arguments: -+ -+ DriverOptionList - The header of the driver option link list -+ -+ BootOptionList - The header of the boot option link list -+ -+Returns: -+ -+ None. -+ -+--*/ -+{ -+ EFI_STATUS Status; -+ UINT16 Timeout; -+ EFI_EVENT UserInputDurationTime; -+ UINTN Index; -+ EFI_INPUT_KEY Key; -+ EFI_BOOT_MODE BootMode; -+ -+ // -+ // Init the time out value -+ // -+ Timeout = PcdGet16 (PcdPlatformBootTimeOut); -+ -+ // -+ // Load the driver option as the driver option list -+ // -+ PlatformBdsGetDriverOption (DriverOptionList); -+ -+ // -+ // Get current Boot Mode -+ // -+ Status = BdsLibGetBootMode (&BootMode); -+ DEBUG ((EFI_D_ERROR, "Boot Mode:%x\n", BootMode)); -+ -+ // -+ // Go the different platform policy with different boot mode -+ // Notes: this part code can be change with the table policy -+ // -+ ASSERT (BootMode == BOOT_WITH_FULL_CONFIGURATION); -+ // -+ // Connect platform console -+ // -+ Status = PlatformBdsConnectConsole (gPlatformConsole); -+ if (EFI_ERROR (Status)) { -+ // -+ // Here OEM/IBV can customize with defined action -+ // -+ PlatformBdsNoConsoleAction (); -+ } -+ // -+ // Create a 300ms duration event to ensure user has enough input time to enter Setup -+ // -+ Status = gBS->CreateEvent ( -+ EVT_TIMER, -+ 0, -+ NULL, -+ NULL, -+ &UserInputDurationTime -+ ); -+ ASSERT (Status == EFI_SUCCESS); -+ Status = gBS->SetTimer (UserInputDurationTime, TimerRelative, 3000000); -+ ASSERT (Status == EFI_SUCCESS); -+ // -+ // Memory test and Logo show -+ // -+ PlatformBdsDiagnostics (IGNORE, TRUE, BaseMemoryTest); -+ -+ // -+ // Perform some platform specific connect sequence -+ // -+ PlatformBdsConnectSequence (); -+ -+ // -+ // Give one chance to enter the setup if we -+ // have the time out -+ // -+ // BUGBUG: hard code timeout to 5 second to show logo in graphic mode. -+ Timeout = 5; -+ if (Timeout != 0) { -+ PlatformBdsEnterFrontPage (Timeout, FALSE); -+ } -+ -+ // -+ //BdsLibConnectAll (); -+ //BdsLibEnumerateAllBootOption (BootOptionList); -+ -+ // -+ // Please uncomment above ConnectAll and EnumerateAll code and remove following first boot -+ // checking code in real production tip. -+ // -+ // In BOOT_WITH_FULL_CONFIGURATION boot mode, should always connect every device -+ // and do enumerate all the default boot options. But in development system board, the boot mode -+ // cannot be BOOT_ASSUMING_NO_CONFIGURATION_CHANGES because the machine box -+ // is always open. So the following code only do the ConnectAll and EnumerateAll at first boot. -+ // -+ Status = BdsLibBuildOptionFromVar (BootOptionList, L"BootOrder"); -+ if (EFI_ERROR(Status)) { -+ // -+ // If cannot find "BootOrder" variable, it may be first boot. -+ // Try to connect all devices and enumerate all boot options here. -+ // -+ BdsLibConnectAll (); -+ BdsLibEnumerateAllBootOption (BootOptionList); -+ } -+ -+ // -+ // To give the User a chance to enter Setup here, if user set TimeOut is 0. -+ // BDS should still give user a chance to enter Setup -+ // Check whether the user input after the duration time has expired -+ // -+ gBS->WaitForEvent (1, &UserInputDurationTime, &Index); -+ gBS->CloseEvent (UserInputDurationTime); -+ Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key); -+ -+ if (!EFI_ERROR (Status)) { -+ // -+ // Enter Setup if user input -+ // -+ Timeout = 0xffff; -+ PlatformBdsEnterFrontPage (Timeout, FALSE); -+ } -+ -+ return ; -+ -+} -+ -+VOID -+EFIAPI -+PlatformBdsBootSuccess ( -+ IN BDS_COMMON_OPTION *Option -+ ) -+/*++ -+ -+Routine Description: -+ -+ Hook point after a boot attempt succeeds. We don't expect a boot option to -+ return, so the EFI 1.0 specification defines that you will default to an -+ interactive mode and stop processing the BootOrder list in this case. This -+ is alos a platform implementation and can be customized by IBV/OEM. -+ -+Arguments: -+ -+ Option - Pointer to Boot Option that succeeded to boot. -+ -+Returns: -+ -+ None. -+ -+--*/ -+{ -+ CHAR16 *TmpStr; -+ -+ // -+ // If Boot returned with EFI_SUCCESS and there is not in the boot device -+ // select loop then we need to pop up a UI and wait for user input. -+ // -+ TmpStr = Option->StatusString; -+ if (TmpStr != NULL) { -+ BdsLibOutputStrings (gST->ConOut, TmpStr, Option->Description, L"\n\r", NULL); -+ gBS->FreePool (TmpStr); -+ } -+} -+ -+VOID -+EFIAPI -+PlatformBdsBootFail ( -+ IN BDS_COMMON_OPTION *Option, -+ IN EFI_STATUS Status, -+ IN CHAR16 *ExitData, -+ IN UINTN ExitDataSize -+ ) -+/*++ -+ -+Routine Description: -+ -+ Hook point after a boot attempt fails. -+ -+Arguments: -+ -+ Option - Pointer to Boot Option that failed to boot. -+ -+ Status - Status returned from failed boot. -+ -+ ExitData - Exit data returned from failed boot. -+ -+ ExitDataSize - Exit data size returned from failed boot. -+ -+Returns: -+ -+ None. -+ -+--*/ -+{ -+ CHAR16 *TmpStr; -+ -+ // -+ // If Boot returned with failed status then we need to pop up a UI and wait -+ // for user input. -+ // -+ TmpStr = Option->StatusString; -+ if (TmpStr != NULL) { -+ BdsLibOutputStrings (gST->ConOut, TmpStr, Option->Description, L"\n\r", NULL); -+ gBS->FreePool (TmpStr); -+ } -+ -+} -+ -+EFI_STATUS -+PlatformBdsNoConsoleAction ( -+ VOID -+ ) -+/*++ -+ -+Routine Description: -+ -+ This function is remained for IBV/OEM to do some platform action, -+ if there no console device can be connected. -+ -+Arguments: -+ -+ None. -+ -+Returns: -+ -+ EFI_SUCCESS - Direct return success now. -+ -+--*/ -+{ -+ return EFI_SUCCESS; -+} -+ -+EFI_STATUS -+ConvertSystemTable ( -+ IN EFI_GUID *TableGuid, -+ IN OUT VOID **Table -+ ) -+/*++ -+ -+Routine Description: -+ Convert ACPI Table /Smbios Table /MP Table if its location is lower than Address:0x100000 -+ Assumption here: -+ As in legacy Bios, ACPI/Smbios/MP table is required to place in E/F Seg, -+ So here we just check if the range is E/F seg, -+ and if Not, assume the Memory type is EfiACPIReclaimMemory/EfiACPIMemoryNVS -+ -+Arguments: -+ TableGuid - Guid of the table -+ Table - pointer to the table -+ -+Returns: -+ EFI_SUCEESS - Convert Table successfully -+ Other - Failed -+ -+--*/ -+{ -+ EFI_STATUS Status; -+ VOID *AcpiHeader; -+ UINTN AcpiTableLen; -+ -+ // -+ // If match acpi guid (1.0, 2.0, or later), Convert ACPI table according to version. -+ // -+ AcpiHeader = (VOID*)(UINTN)(*(UINT64 *)(*Table)); -+ -+ if (CompareGuid(TableGuid, &gEfiAcpiTableGuid) || CompareGuid(TableGuid, &gEfiAcpi20TableGuid)){ -+ if (((EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)AcpiHeader)->Reserved == 0x00){ -+ // -+ // If Acpi 1.0 Table, then RSDP structure doesn't contain Length field, use structure size -+ // -+ AcpiTableLen = sizeof (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER); -+ } else if (((EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)AcpiHeader)->Reserved >= 0x02){ -+ // -+ // If Acpi 2.0 or later, use RSDP Length fied. -+ // -+ AcpiTableLen = ((EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)AcpiHeader)->Length; -+ } else { -+ // -+ // Invalid Acpi Version, return -+ // -+ return EFI_UNSUPPORTED; -+ } -+ Status = ConvertAcpiTable (AcpiTableLen, Table); -+ return Status; -+ } -+ -+ // -+ // If matches smbios guid, convert Smbios table. -+ // -+ if (CompareGuid(TableGuid, &gEfiSmbiosTableGuid)){ -+ Status = ConvertSmbiosTable (Table); -+ return Status; -+ } -+ -+ // -+ // If the table is MP table? -+ // -+ if (CompareGuid(TableGuid, &gEfiMpsTableGuid)){ -+ Status = ConvertMpsTable (Table); -+ return Status; -+ } -+ -+ return EFI_UNSUPPORTED; -+} -+ -+ -+EFI_STATUS -+ConvertAcpiTable ( -+ IN UINTN TableLen, -+ IN OUT VOID **Table -+ ) -+/*++ -+ -+Routine Description: -+ Convert RSDP of ACPI Table if its location is lower than Address:0x100000 -+ Assumption here: -+ As in legacy Bios, ACPI table is required to place in E/F Seg, -+ So here we just check if the range is E/F seg, -+ and if Not, assume the Memory type is EfiACPIReclaimMemory/EfiACPIMemoryNVS -+ -+Arguments: -+ TableLen - Acpi RSDP length -+ Table - pointer to the table -+ -+Returns: -+ EFI_SUCEESS - Convert Table successfully -+ Other - Failed -+ -+--*/ -+{ -+ VOID *AcpiTableOri; -+ VOID *AcpiTableNew; -+ EFI_STATUS Status; -+ EFI_PHYSICAL_ADDRESS BufferPtr; -+ -+ -+ AcpiTableOri = (VOID *)(UINTN)(*(UINT64*)(*Table)); -+ if (((UINTN)AcpiTableOri < 0x100000) && ((UINTN)AcpiTableOri > 0xE0000)) { -+ BufferPtr = EFI_SYSTEM_TABLE_MAX_ADDRESS; -+ Status = gBS->AllocatePages ( -+ AllocateMaxAddress, -+ EfiACPIMemoryNVS, -+ EFI_SIZE_TO_PAGES(TableLen), -+ &BufferPtr -+ ); -+ ASSERT_EFI_ERROR (Status); -+ AcpiTableNew = (VOID *)(UINTN)BufferPtr; -+ CopyMem (AcpiTableNew, AcpiTableOri, TableLen); -+ } else { -+ AcpiTableNew = AcpiTableOri; -+ } -+ // -+ // Change configuration table Pointer -+ // -+ *Table = AcpiTableNew; -+ -+ return EFI_SUCCESS; -+} -+ -+EFI_STATUS -+ConvertSmbiosTable ( -+ IN OUT VOID **Table -+ ) -+/*++ -+ -+Routine Description: -+ -+ Convert Smbios Table if the Location of the SMBios Table is lower than Addres 0x100000 -+ Assumption here: -+ As in legacy Bios, Smbios table is required to place in E/F Seg, -+ So here we just check if the range is F seg, -+ and if Not, assume the Memory type is EfiACPIMemoryNVS/EfiRuntimeServicesData -+Arguments: -+ Table - pointer to the table -+ -+Returns: -+ EFI_SUCEESS - Convert Table successfully -+ Other - Failed -+ -+--*/ -+{ -+ SMBIOS_TABLE_ENTRY_POINT *SmbiosTableNew; -+ SMBIOS_TABLE_ENTRY_POINT *SmbiosTableOri; -+ EFI_STATUS Status; -+ UINT32 SmbiosEntryLen; -+ UINT32 BufferLen; -+ EFI_PHYSICAL_ADDRESS BufferPtr; -+ -+ SmbiosTableNew = NULL; -+ SmbiosTableOri = NULL; -+ -+ // -+ // Get Smibos configuration Table -+ // -+ SmbiosTableOri = (SMBIOS_TABLE_ENTRY_POINT *)(UINTN)(*(UINT64*)(*Table)); -+ -+ if ((SmbiosTableOri == NULL) || -+ ((UINTN)SmbiosTableOri > 0x100000) || -+ ((UINTN)SmbiosTableOri < 0xF0000)){ -+ return EFI_SUCCESS; -+ } -+ // -+ // Relocate the Smibos memory -+ // -+ BufferPtr = EFI_SYSTEM_TABLE_MAX_ADDRESS; -+ if (SmbiosTableOri->SmbiosBcdRevision != 0x21) { -+ SmbiosEntryLen = SmbiosTableOri->EntryPointLength; -+ } else { -+ // -+ // According to Smbios Spec 2.4, we should set entry point length as 0x1F if version is 2.1 -+ // -+ SmbiosEntryLen = 0x1F; -+ } -+ BufferLen = SmbiosEntryLen + SYS_TABLE_PAD(SmbiosEntryLen) + SmbiosTableOri->TableLength; -+ Status = gBS->AllocatePages ( -+ AllocateMaxAddress, -+ EfiACPIMemoryNVS, -+ EFI_SIZE_TO_PAGES(BufferLen), -+ &BufferPtr -+ ); -+ ASSERT_EFI_ERROR (Status); -+ SmbiosTableNew = (SMBIOS_TABLE_ENTRY_POINT *)(UINTN)BufferPtr; -+ CopyMem ( -+ SmbiosTableNew, -+ SmbiosTableOri, -+ SmbiosEntryLen -+ ); -+ // -+ // Get Smbios Structure table address, and make sure the start address is 32-bit align -+ // -+ BufferPtr += SmbiosEntryLen + SYS_TABLE_PAD(SmbiosEntryLen); -+ CopyMem ( -+ (VOID *)(UINTN)BufferPtr, -+ (VOID *)(UINTN)(SmbiosTableOri->TableAddress), -+ SmbiosTableOri->TableLength -+ ); -+ SmbiosTableNew->TableAddress = (UINT32)BufferPtr; -+ SmbiosTableNew->IntermediateChecksum = 0; -+ SmbiosTableNew->IntermediateChecksum = -+ CalculateCheckSum8 ((UINT8*)SmbiosTableNew + 0x10, SmbiosEntryLen -0x10); -+ // -+ // Change the SMBIOS pointer -+ // -+ *Table = SmbiosTableNew; -+ -+ return EFI_SUCCESS; -+} -+ -+EFI_STATUS -+ConvertMpsTable ( -+ IN OUT VOID **Table -+ ) -+/*++ -+ -+Routine Description: -+ -+ Convert MP Table if the Location of the SMBios Table is lower than Addres 0x100000 -+ Assumption here: -+ As in legacy Bios, MP table is required to place in E/F Seg, -+ So here we just check if the range is E/F seg, -+ and if Not, assume the Memory type is EfiACPIMemoryNVS/EfiRuntimeServicesData -+Arguments: -+ Table - pointer to the table -+ -+Returns: -+ EFI_SUCEESS - Convert Table successfully -+ Other - Failed -+ -+--*/ -+{ -+ UINT32 Data32; -+ UINT32 FPLength; -+ EFI_LEGACY_MP_TABLE_FLOATING_POINTER *MpsFloatingPointerOri; -+ EFI_LEGACY_MP_TABLE_FLOATING_POINTER *MpsFloatingPointerNew; -+ EFI_LEGACY_MP_TABLE_HEADER *MpsTableOri; -+ EFI_LEGACY_MP_TABLE_HEADER *MpsTableNew; -+ VOID *OemTableOri; -+ VOID *OemTableNew; -+ EFI_STATUS Status; -+ EFI_PHYSICAL_ADDRESS BufferPtr; -+ -+ // -+ // Get MP configuration Table -+ // -+ MpsFloatingPointerOri = (EFI_LEGACY_MP_TABLE_FLOATING_POINTER *)(UINTN)(*(UINT64*)(*Table)); -+ if (!(((UINTN)MpsFloatingPointerOri <= 0x100000) && -+ ((UINTN)MpsFloatingPointerOri >= 0xF0000))){ -+ return EFI_SUCCESS; -+ } -+ // -+ // Get Floating pointer structure length -+ // -+ FPLength = MpsFloatingPointerOri->Length * 16; -+ Data32 = FPLength + SYS_TABLE_PAD (FPLength); -+ MpsTableOri = (EFI_LEGACY_MP_TABLE_HEADER *)(UINTN)(MpsFloatingPointerOri->PhysicalAddress); -+ if (MpsTableOri != NULL) { -+ Data32 += MpsTableOri->BaseTableLength; -+ Data32 += MpsTableOri->ExtendedTableLength; -+ if (MpsTableOri->OemTablePointer != 0x00) { -+ Data32 += SYS_TABLE_PAD (Data32); -+ Data32 += MpsTableOri->OemTableSize; -+ } -+ } else { -+ return EFI_SUCCESS; -+ } -+ // -+ // Relocate memory -+ // -+ BufferPtr = EFI_SYSTEM_TABLE_MAX_ADDRESS; -+ Status = gBS->AllocatePages ( -+ AllocateMaxAddress, -+ EfiACPIMemoryNVS, -+ EFI_SIZE_TO_PAGES(Data32), -+ &BufferPtr -+ ); -+ ASSERT_EFI_ERROR (Status); -+ MpsFloatingPointerNew = (EFI_LEGACY_MP_TABLE_FLOATING_POINTER *)(UINTN)BufferPtr; -+ CopyMem (MpsFloatingPointerNew, MpsFloatingPointerOri, FPLength); -+ // -+ // If Mp Table exists -+ // -+ if (MpsTableOri != NULL) { -+ // -+ // Get Mps table length, including Ext table -+ // -+ BufferPtr = BufferPtr + FPLength + SYS_TABLE_PAD (FPLength); -+ MpsTableNew = (EFI_LEGACY_MP_TABLE_HEADER *)(UINTN)BufferPtr; -+ CopyMem (MpsTableNew, MpsTableOri, MpsTableOri->BaseTableLength + MpsTableOri->ExtendedTableLength); -+ -+ if ((MpsTableOri->OemTableSize != 0x0000) && (MpsTableOri->OemTablePointer != 0x0000)){ -+ BufferPtr += MpsTableOri->BaseTableLength + MpsTableOri->ExtendedTableLength; -+ BufferPtr += SYS_TABLE_PAD (BufferPtr); -+ OemTableNew = (VOID *)(UINTN)BufferPtr; -+ OemTableOri = (VOID *)(UINTN)MpsTableOri->OemTablePointer; -+ CopyMem (OemTableNew, OemTableOri, MpsTableOri->OemTableSize); -+ MpsTableNew->OemTablePointer = (UINT32)(UINTN)OemTableNew; -+ } -+ MpsTableNew->Checksum = 0; -+ MpsTableNew->Checksum = CalculateCheckSum8 ((UINT8*)MpsTableNew, MpsTableOri->BaseTableLength); -+ MpsFloatingPointerNew->PhysicalAddress = (UINT32)(UINTN)MpsTableNew; -+ MpsFloatingPointerNew->Checksum = 0; -+ MpsFloatingPointerNew->Checksum = CalculateCheckSum8 ((UINT8*)MpsFloatingPointerNew, FPLength); -+ } -+ // -+ // Change the pointer -+ // -+ *Table = MpsFloatingPointerNew; -+ -+ return EFI_SUCCESS; -+} -+ -+/** -+ Lock the ConsoleIn device in system table. All key -+ presses will be ignored until the Password is typed in. The only way to -+ disable the password is to type it in to a ConIn device. -+ -+ @param Password Password used to lock ConIn device. -+ -+ @retval EFI_SUCCESS lock the Console In Spliter virtual handle successfully. -+ @retval EFI_UNSUPPORTED Password not found -+ -+**/ -+EFI_STATUS -+EFIAPI -+LockKeyboards ( -+ IN CHAR16 *Password -+ ) -+{ -+ return EFI_UNSUPPORTED; -+} -+ -+/** -+ This function locks platform flash that is not allowed to be updated during normal boot path. -+ The flash layout is platform specific. -+ -+ **/ -+VOID -+EFIAPI -+PlatformBdsLockNonUpdatableFlash ( -+ VOID -+ ) -+{ -+ return; -+} -diff --git a/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.h b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.h -new file mode 100644 -index 000000000000..d447f77747e3 ---- /dev/null -+++ b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.h -@@ -0,0 +1,288 @@ -+/*++ -+ -+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR> -+This program and the accompanying materials -+are licensed and made available under the terms and conditions of the BSD License -+which accompanies this distribution. The full text of the license may be found at -+http://opensource.org/licenses/bsd-license.php -+ -+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -+ -+Module Name: -+ -+ BdsPlatform.h -+ -+Abstract: -+ -+ Head file for BDS Platform specific code -+ -+--*/ -+ -+#ifndef _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ -+#define _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ -+ -+ -+#include <PiDxe.h> -+ -+#include <IndustryStandard/Pci.h> -+#include <IndustryStandard/Acpi.h> -+#include <IndustryStandard/SmBios.h> -+#include <IndustryStandard/LegacyBiosMpTable.h> -+ -+#include <Library/DebugLib.h> -+#include <Library/BaseMemoryLib.h> -+#include <Library/UefiBootServicesTableLib.h> -+#include <Library/MemoryAllocationLib.h> -+#include <Library/BaseLib.h> -+#include <Library/PcdLib.h> -+#include <Library/GenericBdsLib.h> -+#include <Library/PlatformBdsLib.h> -+#include <Library/HobLib.h> -+#include <Library/UefiLib.h> -+#include <Library/DxeServicesTableLib.h> -+#include <Library/DevicePathLib.h> -+ -+#include <Protocol/PciIo.h> -+ -+#include <Guid/Acpi.h> -+#include <Guid/SmBios.h> -+#include <Guid/Mps.h> -+#include <Guid/HobList.h> -+#include <Guid/PciExpressBaseAddress.h> -+#include <Guid/GlobalVariable.h> -+#include <Guid/LdrMemoryDescriptor.h> -+ -+extern BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole[]; -+extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[]; -+extern EFI_DEVICE_PATH_PROTOCOL *gPlatformDriverOption[]; -+extern EFI_DEVICE_PATH_PROTOCOL *gPlatformRootBridges[]; -+extern ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode; -+extern ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode; -+extern UART_DEVICE_PATH gUartDeviceNode; -+extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; -+// -+// -+// -+#define VarConsoleInpDev L"ConInDev" -+#define VarConsoleInp L"ConIn" -+#define VarConsoleOutDev L"ConOutDev" -+#define VarConsoleOut L"ConOut" -+#define VarErrorOutDev L"ErrOutDev" -+#define VarErrorOut L"ErrOut" -+ -+#define PCI_DEVICE_PATH_NODE(Func, Dev) \ -+ { \ -+ { \ -+ HARDWARE_DEVICE_PATH, \ -+ HW_PCI_DP, \ -+ { \ -+ (UINT8) (sizeof (PCI_DEVICE_PATH)), \ -+ (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \ -+ } \ -+ }, \ -+ (Func), \ -+ (Dev) \ -+ } -+ -+#define PNPID_DEVICE_PATH_NODE(PnpId) \ -+ { \ -+ { \ -+ ACPI_DEVICE_PATH, \ -+ ACPI_DP, \ -+ { \ -+ (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \ -+ (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \ -+ } \ -+ }, \ -+ EISA_PNP_ID((PnpId)), \ -+ 0 \ -+ } -+ -+#define gPciRootBridge \ -+ PNPID_DEVICE_PATH_NODE(0x0A03) -+ -+#define gPciIsaBridge \ -+ PCI_DEVICE_PATH_NODE(0, 0x1f) -+ -+#define gP2PBridge \ -+ PCI_DEVICE_PATH_NODE(0, 0x1e) -+ -+#define gPnpPs2Keyboard \ -+ PNPID_DEVICE_PATH_NODE(0x0303) -+ -+#define gPnp16550ComPort \ -+ PNPID_DEVICE_PATH_NODE(0x0501) -+ -+#define gUart \ -+ { \ -+ { \ -+ MESSAGING_DEVICE_PATH, \ -+ MSG_UART_DP, \ -+ { \ -+ (UINT8) (sizeof (UART_DEVICE_PATH)), \ -+ (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \ -+ } \ -+ }, \ -+ 0, \ -+ 115200, \ -+ 8, \ -+ 1, \ -+ 1 \ -+ } -+ -+#define gPcAnsiTerminal \ -+ { \ -+ { \ -+ MESSAGING_DEVICE_PATH, \ -+ MSG_VENDOR_DP, \ -+ { \ -+ (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \ -+ (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \ -+ } \ -+ }, \ -+ DEVICE_PATH_MESSAGING_PC_ANSI \ -+ } -+ -+#define gEndEntire \ -+ { \ -+ END_DEVICE_PATH_TYPE, \ -+ END_ENTIRE_DEVICE_PATH_SUBTYPE, \ -+ { \ -+ END_DEVICE_PATH_LENGTH, \ -+ 0 \ -+ } \ -+ } -+ -+#define PCI_CLASS_SCC 0x07 -+#define PCI_SUBCLASS_SERIAL 0x00 -+#define PCI_IF_16550 0x02 -+#define IS_PCI_16550SERIAL(_p) IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS_SERIAL, PCI_IF_16550) -+ -+#define EFI_SYSTEM_TABLE_MAX_ADDRESS 0xFFFFFFFF -+#define SYS_TABLE_PAD(ptr) (((~ptr) +1) & 0x07 ) -+// -+// Platform Root Bridge -+// -+typedef struct { -+ ACPI_HID_DEVICE_PATH PciRootBridge; -+ EFI_DEVICE_PATH_PROTOCOL End; -+} PLATFORM_ROOT_BRIDGE_DEVICE_PATH; -+ -+typedef struct { -+ ACPI_HID_DEVICE_PATH PciRootBridge; -+ PCI_DEVICE_PATH IsaBridge; -+ ACPI_HID_DEVICE_PATH Keyboard; -+ EFI_DEVICE_PATH_PROTOCOL End; -+} PLATFORM_DUMMY_ISA_KEYBOARD_DEVICE_PATH; -+ -+typedef struct { -+ ACPI_HID_DEVICE_PATH PciRootBridge; -+ PCI_DEVICE_PATH IsaBridge; -+ ACPI_HID_DEVICE_PATH IsaSerial; -+ UART_DEVICE_PATH Uart; -+ VENDOR_DEVICE_PATH TerminalType; -+ EFI_DEVICE_PATH_PROTOCOL End; -+} PLATFORM_DUMMY_ISA_SERIAL_DEVICE_PATH; -+ -+typedef struct { -+ ACPI_HID_DEVICE_PATH PciRootBridge; -+ PCI_DEVICE_PATH VgaDevice; -+ EFI_DEVICE_PATH_PROTOCOL End; -+} PLATFORM_DUMMY_PCI_VGA_DEVICE_PATH; -+ -+typedef struct { -+ ACPI_HID_DEVICE_PATH PciRootBridge; -+ PCI_DEVICE_PATH PciBridge; -+ PCI_DEVICE_PATH SerialDevice; -+ UART_DEVICE_PATH Uart; -+ VENDOR_DEVICE_PATH TerminalType; -+ EFI_DEVICE_PATH_PROTOCOL End; -+} PLATFORM_DUMMY_PCI_SERIAL_DEVICE_PATH; -+ -+// -+// the short form device path for Usb keyboard -+// -+#define CLASS_HID 3 -+#define SUBCLASS_BOOT 1 -+#define PROTOCOL_KEYBOARD 1 -+ -+typedef struct { -+ USB_CLASS_DEVICE_PATH UsbClass; -+ EFI_DEVICE_PATH_PROTOCOL End; -+} USB_CLASS_FORMAT_DEVICE_PATH; -+ -+extern PLATFORM_ROOT_BRIDGE_DEVICE_PATH gPlatformRootBridge0; -+ -+// -+// Platform BDS Functions -+// -+VOID -+PlatformBdsGetDriverOption ( -+ IN LIST_ENTRY *BdsDriverLists -+ ); -+ -+EFI_STATUS -+BdsMemoryTest ( -+ EXTENDMEM_COVERAGE_LEVEL Level -+ ); -+ -+EFI_STATUS -+PlatformBdsShowProgress ( -+ EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground, -+ EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground, -+ CHAR16 *Title, -+ EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor, -+ UINTN Progress, -+ UINTN PreviousValue -+ ); -+ -+VOID -+PlatformBdsConnectSequence ( -+ VOID -+ ); -+ -+EFI_STATUS -+ProcessCapsules ( -+ EFI_BOOT_MODE BootMode -+ ); -+ -+EFI_STATUS -+PlatformBdsConnectConsole ( -+ IN BDS_CONSOLE_CONNECT_ENTRY *PlatformConsole -+ ); -+ -+EFI_STATUS -+PlatformBdsNoConsoleAction ( -+ VOID -+ ); -+ -+EFI_STATUS -+ConvertMpsTable ( -+ IN OUT VOID **Table -+ ); -+ -+EFI_STATUS -+ConvertSmbiosTable ( -+ IN OUT VOID **Table -+ ); -+ -+EFI_STATUS -+ConvertAcpiTable ( -+ IN UINTN TableLen, -+ IN OUT VOID **Table -+ ); -+ -+EFI_STATUS -+ConvertSystemTable ( -+ IN EFI_GUID *TableGuid, -+ IN OUT VOID **Table -+ ); -+ -+VOID -+PlatformBdsEnterFrontPage ( -+ IN UINT16 TimeoutDefault, -+ IN BOOLEAN ConnectAllHappened -+ ); -+ -+#endif // _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ -diff --git a/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf b/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf -new file mode 100644 -index 000000000000..578c74afae22 ---- /dev/null -+++ b/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf -@@ -0,0 +1,65 @@ -+## @file -+# -+# Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR> -+# This program and the accompanying materials -+# are licensed and made available under the terms and conditions of the BSD License -+# which accompanies this distribution. The full text of the license may be found at -+# http://opensource.org/licenses/bsd-license.php -+# -+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -+# -+# Module Name: -+# -+# PlatformBds.inf -+# -+# Abstract: -+# -+# Component description file for Bds module. -+# -+## -+ -+[Defines] -+ INF_VERSION = 0x00010005 -+ BASE_NAME = CorebootBds -+ FILE_GUID = A6F691AC-31C8-4444-854C-E2C1A6950F92 -+ MODULE_TYPE = DXE_DRIVER -+ VERSION_STRING = 1.0 -+ LIBRARY_CLASS = PlatformBdsLib|DXE_DRIVER -+ -+[Sources] -+ BdsPlatform.c -+ PlatformData.c -+ BdsPlatform.h -+ -+[Packages] -+ MdePkg/MdePkg.dec -+ MdeModulePkg/MdeModulePkg.dec -+ CorebootModulePkg/CorebootModulePkg.dec -+ IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec -+ -+[LibraryClasses] -+ BaseLib -+ MemoryAllocationLib -+ UefiBootServicesTableLib -+ BaseMemoryLib -+ DebugLib -+ PcdLib -+ GenericBdsLib -+ HobLib -+ UefiLib -+ DevicePathLib -+ -+[Guids] -+ gEfiGlobalVariableGuid -+ gEfiPciExpressBaseAddressGuid -+ gEfiAcpi20TableGuid -+ gEfiMpsTableGuid -+ gEfiSmbiosTableGuid -+ gEfiAcpiTableGuid -+ gLdrMemoryDescriptorGuid -+ -+[Pcd] -+ gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut -+ gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile -+ -diff --git a/CorebootModulePkg/Library/CorebootBdsLib/PlatformData.c b/CorebootModulePkg/Library/CorebootBdsLib/PlatformData.c -new file mode 100644 -index 000000000000..fbdcc7de8166 ---- /dev/null -+++ b/CorebootModulePkg/Library/CorebootBdsLib/PlatformData.c -@@ -0,0 +1,161 @@ -+/*++ -+ -+Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR> -+This program and the accompanying materials -+are licensed and made available under the terms and conditions of the BSD License -+which accompanies this distribution. The full text of the license may be found at -+http://opensource.org/licenses/bsd-license.php -+ -+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -+ -+Module Name: -+ -+ PlatformData.c -+ -+Abstract: -+ -+ Defined the platform specific device path which will be used by -+ platform Bbd to perform the platform policy connect. -+ -+--*/ -+ -+#include "BdsPlatform.h" -+ -+// -+// Predefined platform default time out value -+// -+UINT16 gPlatformBootTimeOutDefault = 3; -+ -+ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode = gPnpPs2Keyboard; -+ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode = gPnp16550ComPort; -+UART_DEVICE_PATH gUartDeviceNode = gUart; -+VENDOR_DEVICE_PATH gTerminalTypeDeviceNode = gPcAnsiTerminal; -+ -+// -+// Predefined platform root bridge -+// -+PLATFORM_ROOT_BRIDGE_DEVICE_PATH gPlatformRootBridge0 = { -+ gPciRootBridge, -+ gEndEntire -+}; -+ -+EFI_DEVICE_PATH_PROTOCOL *gPlatformRootBridges[] = { -+ (EFI_DEVICE_PATH_PROTOCOL *) &gPlatformRootBridge0, -+ NULL -+}; -+ -+USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath = { -+ { -+ { -+ MESSAGING_DEVICE_PATH, -+ MSG_USB_CLASS_DP, -+ { -+ (UINT8) (sizeof (USB_CLASS_DEVICE_PATH)), -+ (UINT8) ((sizeof (USB_CLASS_DEVICE_PATH)) >> 8) -+ } -+ }, -+ 0xffff, // VendorId -+ 0xffff, // ProductId -+ CLASS_HID, // DeviceClass -+ SUBCLASS_BOOT, // DeviceSubClass -+ PROTOCOL_KEYBOARD // DeviceProtocol -+ }, -+ -+ { -+ END_DEVICE_PATH_TYPE, -+ END_ENTIRE_DEVICE_PATH_SUBTYPE, -+ { -+ END_DEVICE_PATH_LENGTH, -+ 0 -+ } -+ } -+}; -+ -+/* -+// -+// Platform specific Dummy ISA keyboard device path -+// -+PLATFORM_DUMMY_ISA_KEYBOARD_DEVICE_PATH gDummyIsaKeyboardDevicePath = { -+ gPciRootBridge, -+ gPciIsaBridge, -+ gPnpPs2Keyboard, -+ gEndEntire -+}; -+ -+// -+// Platform specific Dummy ISA serial device path -+// -+PLATFORM_DUMMY_ISA_SERIAL_DEVICE_PATH gDummyIsaSerialDevicePath = { -+ gPciRootBridge, -+ gPciIsaBridge, -+ gPnp16550ComPort, -+ gUart, -+ gPcAnsiTerminal, -+ gEndEntire -+}; -+ -+// -+// Platform specific Dummy PCI VGA device path -+// -+PLATFORM_DUMMY_PCI_VGA_DEVICE_PATH gDummyPciVgaDevicePath = { -+ gPciRootBridge, -+ PCI_DEVICE_PATH_NODE(0, 0x2), -+ gEndEntire -+}; -+ -+// -+// Platform specific Dummy PCI serial device path -+// -+PLATFORM_DUMMY_PCI_SERIAL_DEVICE_PATH gDummyPciSerialDevicePath = { -+ gPciRootBridge, -+ gP2PBridge, -+ PCI_DEVICE_PATH_NODE(0, 0x0), -+ gUart, -+ gPcAnsiTerminal, -+ gEndEntire -+}; -+*/ -+// -+// Predefined platform default console device path -+// -+BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = { -+ // -+ // need update dynamically -+ // -+// { -+// (EFI_DEVICE_PATH_PROTOCOL *) &gDummyIsaSerialDevicePath, -+// (CONSOLE_OUT | CONSOLE_IN | STD_ERROR) -+// }, -+// { -+// (EFI_DEVICE_PATH_PROTOCOL *) &gDummyIsaKeyboardDevicePath, -+// (CONSOLE_IN | STD_ERROR) -+// }, -+// { -+// (EFI_DEVICE_PATH_PROTOCOL *) &gDummyPciVgaDevicePath, -+// CONSOLE_OUT -+// }, -+// { -+// (EFI_DEVICE_PATH_PROTOCOL *) &gDummyPciSerialDevicePath, -+// (CONSOLE_OUT | CONSOLE_IN | STD_ERROR) -+// }, -+ { -+ (EFI_DEVICE_PATH_PROTOCOL*) &gUsbClassKeyboardDevicePath, -+ CONSOLE_IN -+ }, -+ { -+ NULL, -+ 0 -+ } -+}; -+ -+// -+// Predefined platform specific driver option -+// -+EFI_DEVICE_PATH_PROTOCOL *gPlatformDriverOption[] = { NULL }; -+ -+// -+// Predefined platform connect sequence -+// -+EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[] = { NULL }; -+ -diff --git a/CorebootPayloadPkg/CorebootPayloadPkg.fdf b/CorebootPayloadPkg/CorebootPayloadPkg.fdf -index d71b3ec55690..22987093da58 100644 ---- a/CorebootPayloadPkg/CorebootPayloadPkg.fdf -+++ b/CorebootPayloadPkg/CorebootPayloadPkg.fdf -@@ -95,8 +95,9 @@ INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntime -
- INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
- INF UefiCpuPkg/CpuDxe/CpuDxe.inf
--INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
--INF MdeModulePkg/Application/UiApp/UiApp.inf
-+
-+INF IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
-+
- !if $(USE_HPET_TIMER) == TRUE
- INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
- !else
-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -index 0f4e475187ee..053f380a8608 100644 ---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -@@ -165,6 +165,7 @@ - UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
- UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
- OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
-+ GenericBdsLib|IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
- CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
- SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
- UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
-@@ -183,7 +184,7 @@ - ResetSystemLib|CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.inf
- SerialPortLib|CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
- PlatformHookLib|CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
-- PlatformBootManagerLib|CorebootPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
-+ PlatformBdsLib|CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf
- IoApicLib|PcAtChipsetPkg/Library/BaseIoApicLib/BaseIoApicLib.inf
- CbPlatformSupportLib|CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.inf
-
-@@ -396,13 +397,12 @@ - #
- MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
- UefiCpuPkg/CpuDxe/CpuDxe.inf
-- MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
-- MdeModulePkg/Application/UiApp/UiApp.inf {
-+
-+ IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf {
- <LibraryClasses>
-- NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
-- NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
-- NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
-+ PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- }
-+
- !if $(USE_HPET_TIMER) == TRUE
- PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
- !else
-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -index 97bb0a8ae0a1..bb328349b44a 100644 ---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -@@ -165,6 +165,7 @@ - UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
- UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
- OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
-+ GenericBdsLib|IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
- CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
- SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
- UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
-@@ -183,7 +184,7 @@ - ResetSystemLib|CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.inf
- SerialPortLib|CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
- PlatformHookLib|CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
-- PlatformBootManagerLib|CorebootPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
-+ PlatformBdsLib|CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf
- IoApicLib|PcAtChipsetPkg/Library/BaseIoApicLib/BaseIoApicLib.inf
- CbPlatformSupportLib|CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.inf
-
-@@ -397,13 +398,12 @@ - #
- MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
- UefiCpuPkg/CpuDxe/CpuDxe.inf
-- MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
-- MdeModulePkg/Application/UiApp/UiApp.inf {
-+
-+ IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf {
- <LibraryClasses>
-- NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
-- NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
-- NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
-+ PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- }
-+
- !if $(USE_HPET_TIMER) == TRUE
- PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
- !else
--- -2.17.0 - diff --git a/payloads/external/tianocore/patches/03_Library_EndofDXE.patch b/payloads/external/tianocore/patches/03_Library_EndofDXE.patch deleted file mode 100644 index cca3eeac99..0000000000 --- a/payloads/external/tianocore/patches/03_Library_EndofDXE.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 1e9c5c97a55f3ad3c0d6d5dde380b4d73bd15860 Mon Sep 17 00:00:00 2001 -From: CoolStar <coolstarorganization@gmail.com> -Date: Sun, 4 Dec 2016 12:07:30 -0800 -Subject: [PATCH] CorebootBdsLib: Call End of DXE event to allow booting 3rd - party efi binaries. - ---- - .../Library/CorebootBdsLib/BdsPlatform.c | 42 +++++++++++++++++++ - .../Library/CorebootBdsLib/PlatformBds.inf | 1 + - 2 files changed, 43 insertions(+) - -diff --git a/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c -index b6253a17f8ea..cf3e5320cbe8 100644 ---- a/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c -+++ b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c -@@ -1129,6 +1129,46 @@ Returns: - Status = BaseMemoryTest (MemoryTestLevel); - } - -+VOID -+EFIAPI -+InternalBdsEmptyCallbackFuntion ( -+ IN EFI_EVENT Event, -+ IN VOID *Context -+ ) -+{ -+ return; -+} -+ -+VOID -+InstallReadyToLock ( -+ VOID -+ ) -+{ -+ EFI_STATUS Status; -+ EFI_EVENT EndOfDxeEvent; -+ -+ DEBUG((DEBUG_INFO,"InstallReadyToLock entering......\n")); -+ // -+ // Inform the SMM infrastructure that we're entering BDS and may run 3rd party code hereafter -+ // Since PI1.2.1, we need signal EndOfDxe as ExitPmAuth -+ // -+ Status = gBS->CreateEventEx ( -+ EVT_NOTIFY_SIGNAL, -+ TPL_CALLBACK, -+ InternalBdsEmptyCallbackFuntion, -+ NULL, -+ &gEfiEndOfDxeEventGroupGuid, -+ &EndOfDxeEvent -+ ); -+ ASSERT_EFI_ERROR (Status); -+ gBS->SignalEvent (EndOfDxeEvent); -+ gBS->CloseEvent (EndOfDxeEvent); -+ DEBUG((DEBUG_INFO,"All EndOfDxe callbacks have returned successfully\n")); -+ -+ DEBUG((DEBUG_INFO,"InstallReadyToLock end\n")); -+ return; -+} -+ - VOID - EFIAPI - PlatformBdsPolicyBehavior ( -@@ -1164,6 +1204,8 @@ Returns: - EFI_INPUT_KEY Key; - EFI_BOOT_MODE BootMode; - -+ InstallReadyToLock(); -+ - // - // Init the time out value - // -diff --git a/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf b/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf -index 578c74afae22..992bd846bdc4 100644 ---- a/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf -+++ b/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf -@@ -58,6 +58,7 @@ - gEfiSmbiosTableGuid - gEfiAcpiTableGuid - gLdrMemoryDescriptorGuid -+ gEfiEndOfDxeEventGroupGuid - - [Pcd] - gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut --- -2.17.0 - diff --git a/payloads/external/tianocore/patches/04_CorebootPayloadPkg_addps2.patch b/payloads/external/tianocore/patches/04_CorebootPayloadPkg_addps2.patch deleted file mode 100644 index 2b7da9d9fb..0000000000 --- a/payloads/external/tianocore/patches/04_CorebootPayloadPkg_addps2.patch +++ /dev/null @@ -1,56 +0,0 @@ -From e8d6ed35c15b92497cd3ede6cd35523b0e7366ac Mon Sep 17 00:00:00 2001 -From: CoolStar <coolstarorganization@gmail.com> -Date: Sun, 4 Dec 2016 11:50:00 -0800 -Subject: [PATCH] CorebootPayloadPkg: Add PS/2 keyboard drivers. - ---- - CorebootPayloadPkg/CorebootPayloadPkg.fdf | 3 +++ - CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc | 3 +++ - CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc | 3 +++ - 3 files changed, 9 insertions(+) - -diff --git a/CorebootPayloadPkg/CorebootPayloadPkg.fdf b/CorebootPayloadPkg/CorebootPayloadPkg.fdf -index 22987093da58..0961e96c250d 100644 ---- a/CorebootPayloadPkg/CorebootPayloadPkg.fdf -+++ b/CorebootPayloadPkg/CorebootPayloadPkg.fdf -@@ -132,6 +132,9 @@ INF DuetPkg/PciBusNoEnumerationDxe/PciBusNoEnumeration.inf - # ISA Support
- #
- INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
-+INF PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf
-+INF IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
-+INF IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-
- #
- # Console Support
-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -index 053f380a8608..6ddd64faf7a5 100644 ---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -@@ -492,6 +492,9 @@ - # ISA Support
- #
- MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
-+ PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf
-+ IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
-+ IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-
- #
- # Console Support
-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -index bb328349b44a..19c203e6cbb6 100644 ---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -@@ -493,6 +493,9 @@ - # ISA Support
- #
- MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
-+ PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf
-+ IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
-+ IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-
- #
- # Console Support
--- -2.17.0 - diff --git a/payloads/external/tianocore/patches/05_CorebootPayloadPkg-don-t-use-serial-output-for-Release-build.patch b/payloads/external/tianocore/patches/05_CorebootPayloadPkg-don-t-use-serial-output-for-Release-build.patch deleted file mode 100644 index a581a8c749..0000000000 --- a/payloads/external/tianocore/patches/05_CorebootPayloadPkg-don-t-use-serial-output-for-Release-build.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 147174ea833e14ef68a8c5f1366cfbd1468dd1c8 Mon Sep 17 00:00:00 2001 -From: Wonkyu Kim <wonkyu.kim@intel.com> -Date: Wed, 10 Oct 2018 10:59:51 -0700 -Subject: [PATCH] CorebootPayloadPkg: don't use serial output for Release build - -Signed-off-by: Wonkyu Kim <wonkyu.kim@intel.com> ---- - CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc | 4 ++++ - CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc | 4 ++++ - 2 files changed, 8 insertions(+) - -diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -index 6ddd64faf7a5..2e7055815add 100644 ---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc -@@ -261,7 +261,11 @@ - # - ################################################################################ - [PcdsFeatureFlag] -+!if $(TARGET) == DEBUG - gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|TRUE -+!else -+ gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|FALSE -+!endif - gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE -diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -index 19c203e6cbb6..b00b7b0e1134 100644 ---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc -@@ -261,7 +261,11 @@ - # - ################################################################################ - [PcdsFeatureFlag] -+!if $(TARGET) == DEBUG - gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|TRUE -+!else -+ gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|FALSE -+!endif - gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode|TRUE - gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE --- -2.17.1 - diff --git a/payloads/external/tianocore/patches/06_CorebootPayloadPkg_keep_cb_table.patch b/payloads/external/tianocore/patches/06_CorebootPayloadPkg_keep_cb_table.patch deleted file mode 100644 index 10024d85ab..0000000000 --- a/payloads/external/tianocore/patches/06_CorebootPayloadPkg_keep_cb_table.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 9c28ac87eb2df7319d4f5a48124c837b8bf123b3 Mon Sep 17 00:00:00 2001 -From: ReddestDream <reddestdream@gmail.com> -Date: Wed, 3 May 2017 00:13:28 -0400 -Subject: [PATCH] CbSupportPei: prevent lower coreboot table from being - overwritten - -Exclude the bottom 4kb from being included in System Memory HoB ---- - CorebootModulePkg/CbSupportPei/CbSupportPei.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/CorebootModulePkg/CbSupportPei/CbSupportPei.c b/CorebootModulePkg/CbSupportPei/CbSupportPei.c -index 831de89b21d1..e84b9b55288a 100755 ---- a/CorebootModulePkg/CbSupportPei/CbSupportPei.c -+++ b/CorebootModulePkg/CbSupportPei/CbSupportPei.c -@@ -261,8 +261,9 @@ CbPeiEntryPoint ( - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE - ), -- (EFI_PHYSICAL_ADDRESS)(0), -- (UINT64)(0xA0000) -+ // Lower 640KB, except for first 4KB where the lower coreboot pointer ("LBIO") resides -+ (EFI_PHYSICAL_ADDRESS)(0 + 0x1000), -+ (UINT64)(0xA0000 - 0x1000) - ); - - --- -2.17.0 - diff --git a/payloads/external/tianocore/patches/07_CorebootPayloadPkg-Use-correct-BytesPerScanLine.patch b/payloads/external/tianocore/patches/07_CorebootPayloadPkg-Use-correct-BytesPerScanLine.patch deleted file mode 100644 index 9b2569abda..0000000000 --- a/payloads/external/tianocore/patches/07_CorebootPayloadPkg-Use-correct-BytesPerScanLine.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 2e75f9ad6ef625575185dfc262c6803a89850dd5 Mon Sep 17 00:00:00 2001 -From: Arthur Heymans <arthur@aheymans.xyz> -Date: Wed, 24 Jan 2018 10:07:08 +0100 -Subject: [PATCH] CorebootPayloadPkg: Use correct BytesPerScanLine - -Fetch BytesPerScanLine from coreboot table to reflect how the actual -framebuffer is set up instead of guessing it from the horizontal -resolution. - -This fixes a garbled display when HorizontalResolution * (BitsPerPixel -/ 8) and pFbInfo->BytesPerScanLine don't match. - -Contributed-under: TianoCore Contribution Agreement 1.1 -Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> ---- - CorebootPayloadPkg/FbGop/FbGop.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/CorebootPayloadPkg/FbGop/FbGop.c b/CorebootPayloadPkg/FbGop/FbGop.c -index 37d6def7f780..679061703358 100644 ---- a/CorebootPayloadPkg/FbGop/FbGop.c -+++ b/CorebootPayloadPkg/FbGop/FbGop.c -@@ -822,7 +822,7 @@ FbGopCheckForVbe ( - BitsPerPixel = pFbInfo->BitsPerPixel;
- HorizontalResolution = pFbInfo->HorizontalResolution;
- VerticalResolution = pFbInfo->VerticalResolution;
-- BytesPerScanLine = HorizontalResolution * (BitsPerPixel / 8);
-+ BytesPerScanLine = pFbInfo->BytesPerScanLine;
-
- ModeBuffer = (FB_VIDEO_MODE_DATA *) AllocatePool (
- ModeNumber * sizeof (FB_VIDEO_MODE_DATA)
--- -2.17.0 - diff --git a/payloads/external/tianocore/patches/08_BaseTools-Fix-building-with-Werror-stringop-truncati.patch b/payloads/external/tianocore/patches/08_BaseTools-Fix-building-with-Werror-stringop-truncati.patch deleted file mode 100644 index 4881fff559..0000000000 --- a/payloads/external/tianocore/patches/08_BaseTools-Fix-building-with-Werror-stringop-truncati.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 8cb365e9ec90420e3d04b77f6e7999a65d5983a6 Mon Sep 17 00:00:00 2001 -From: Patrick Rudolph <siro@das-labor.org> -Date: Sun, 17 Jun 2018 08:44:51 +0200 -Subject: [PATCH] BaseTools: Fix building with -Werror=stringop-truncation - -Signed-off-by: Patrick Rudolph <siro@das-labor.org> ---- - BaseTools/Source/C/GenVtf/GenVtf.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/BaseTools/Source/C/GenVtf/GenVtf.c b/BaseTools/Source/C/GenVtf/GenVtf.c -index 65ae08eeceb8..d4200621457c 100644 ---- a/BaseTools/Source/C/GenVtf/GenVtf.c -+++ b/BaseTools/Source/C/GenVtf/GenVtf.c -@@ -129,9 +129,9 @@ Returns: - } else {
- Length = strlen(Str);
- if (Length < 4) {
-- strncpy (TemStr + 4 - Length, Str, Length);
-+ memcpy (TemStr + 4 - Length, Str, Length);
- } else {
-- strncpy (TemStr, Str + Length - 4, 4);
-+ memcpy (TemStr, Str + Length - 4, 4);
- }
-
- sscanf (
-@@ -1521,7 +1521,7 @@ Returns: - //
- FitStartPtr = (FIT_TABLE *) RelativeAddress;
-
-- strncpy ((CHAR8 *) &FitStartPtr->CompAddress, FIT_SIGNATURE, 8); // "_FIT_ "
-+ memcpy ((CHAR8 *) &FitStartPtr->CompAddress, FIT_SIGNATURE, 8); // "_FIT_ "
- assert (((VtfInfo->CompSize & 0x00FFFFFF) % 16) == 0);
- FitStartPtr->CompSize = (VtfInfo->CompSize & 0x00FFFFFF) / 16;
- FitStartPtr->CompVersion = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
--- -2.17.0 - |