<p>Lijian Zhao has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/28688">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">[DoNotMerge]Local changes to make a platform working<br><br>Change-Id: I5449981baabcbb891e1036177307c58f5e2008ac<br>Signed-off-by: Lijian Zhao <lijian.zhao@intel.com><br>---<br>D payloads/external/tianocore/patches/01_CorebootPayloadPkg_pcinoenum.patch<br>D payloads/external/tianocore/patches/02_CorebootPayloadPkg_bds.patch<br>D payloads/external/tianocore/patches/03_Library_EndofDXE.patch<br>D payloads/external/tianocore/patches/04_CorebootPayloadPkg_addps2.patch<br>D payloads/external/tianocore/patches/05_CorebootPayloadPkg_noserial.patch<br>D payloads/external/tianocore/patches/06_CorebootPayloadPkg_keep_cb_table.patch<br>D payloads/external/tianocore/patches/07_CorebootPayloadPkg-Use-correct-BytesPerScanLine.patch<br>D payloads/external/tianocore/patches/08_BaseTools-Fix-building-with-Werror-stringop-truncati.patch<br>D payloads/external/tianocore/patches/09_gcc7-Fix-building-with-fpermissive.patch<br>M src/mainboard/intel/cannonlake_rvp/chromeos.fmd<br>M src/mainboard/intel/coffeelake_rvp/Makefile.inc<br>M src/mainboard/intel/coffeelake_rvp/bootblock.c<br>A src/mainboard/intel/coffeelake_rvp/early_init.c<br>M src/mainboard/intel/coffeelake_rvp/memory.c<br>M src/mainboard/intel/coffeelake_rvp/variants/baseboard/include/baseboard/variants.h<br>M src/mainboard/intel/coffeelake_rvp/variants/cfl_u/devicetree.cb<br>M src/soc/intel/cannonlake/Kconfig<br>17 files changed, 74 insertions(+), 2,951 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/88/28688/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/payloads/external/tianocore/patches/01_CorebootPayloadPkg_pcinoenum.patch b/payloads/external/tianocore/patches/01_CorebootPayloadPkg_pcinoenum.patch</span><br><span>deleted file mode 100644</span><br><span>index 448da4a..0000000</span><br><span>--- a/payloads/external/tianocore/patches/01_CorebootPayloadPkg_pcinoenum.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,65 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">->From 4f9d41e69356ce7486b0c74a754ff494256723de Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: CoolStar <coolstarorganization@gmail.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Sun, 4 Dec 2016 11:23:38 -0800</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH] PCI: use Duet's PciNoEnumeration</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootPayloadPkg/CorebootPayloadPkg.fdf        | 4 ++--</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc    | 7 ++-----</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc | 7 ++-----</span><br><span style="color: hsl(0, 100%, 40%);">- 3 files changed, 6 insertions(+), 12 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/CorebootPayloadPkg.fdf b/CorebootPayloadPkg/CorebootPayloadPkg.fdf</span><br><span style="color: hsl(0, 100%, 40%);">-index 303e626842..a39e3999ba 100644</span><br><span>---- a/CorebootPayloadPkg/CorebootPayloadPkg.fdf</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/CorebootPayloadPkg.fdf</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -124,8 +124,8 @@ INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf</span><br><span style="color: hsl(0, 100%, 40%);">- #
</span><br><span style="color: hsl(0, 100%, 40%);">- # PCI Support
</span><br><span style="color: hsl(0, 100%, 40%);">- #
</span><br><span style="color: hsl(0, 100%, 40%);">--INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--INF MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+INF DuetPkg/PciRootBridgeNoEnumerationDxe/PciRootBridgeNoEnumeration.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+INF DuetPkg/PciBusNoEnumerationDxe/PciBusNoEnumeration.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- #
</span><br><span style="color: hsl(0, 100%, 40%);">- # ISA Support
</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-index cdfcb75b59..e838aca61d 100644</span><br><span>---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -450,11 +450,8 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">-   # PCI Support
</span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">--  MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--  MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf {
</span><br><span style="color: hsl(0, 100%, 40%);">--    <LibraryClasses>
</span><br><span style="color: hsl(0, 100%, 40%);">--      PciHostBridgeLib|CorebootPayloadPkg/Library/PciHostBridgeLib/PciHostBridgeLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--  }
</span><br><span style="color: hsl(0, 100%, 40%);">-+  DuetPkg/PciRootBridgeNoEnumerationDxe/PciRootBridgeNoEnumeration.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  DuetPkg/PciBusNoEnumerationDxe/PciBusNoEnumeration.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">-   # SCSI/ATA/IDE/DISK Support
</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-index 6b16af63ba..c25d821fd4 100644</span><br><span>---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -451,11 +451,8 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">-   # PCI Support
</span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">--  MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--  MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf {
</span><br><span style="color: hsl(0, 100%, 40%);">--    <LibraryClasses>
</span><br><span style="color: hsl(0, 100%, 40%);">--      PciHostBridgeLib|CorebootPayloadPkg/Library/PciHostBridgeLib/PciHostBridgeLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--  }
</span><br><span style="color: hsl(0, 100%, 40%);">-+  DuetPkg/PciRootBridgeNoEnumerationDxe/PciRootBridgeNoEnumeration.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  DuetPkg/PciBusNoEnumerationDxe/PciBusNoEnumeration.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">-   # SCSI/ATA/IDE/DISK Support
</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.13.2.725.g09c95d1e9-goog</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/payloads/external/tianocore/patches/02_CorebootPayloadPkg_bds.patch b/payloads/external/tianocore/patches/02_CorebootPayloadPkg_bds.patch</span><br><span>deleted file mode 100644</span><br><span>index 8013ccd..0000000</span><br><span>--- a/payloads/external/tianocore/patches/02_CorebootPayloadPkg_bds.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,2551 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 5121087836c1ad2a08857d494c0d9ecb183f4f98 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: CoolStar <coolstarorganization@gmail.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Tue, 18 Jul 2017 15:50:38 -0600</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH] Rebasing</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootModulePkg/CorebootModulePkg.dec            |    8 +</span><br><span style="color: hsl(0, 100%, 40%);">- .../Include/Guid/LdrMemoryDescriptor.h             |   33 +</span><br><span style="color: hsl(0, 100%, 40%);">- .../Include/Guid/PciExpressBaseAddress.h           |   46 +</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootModulePkg/Include/Guid/PciOptionRomTable.h |   41 +</span><br><span style="color: hsl(0, 100%, 40%);">- .../Library/CorebootBdsLib/BdsPlatform.c           | 1731 ++++++++++++++++++++</span><br><span style="color: hsl(0, 100%, 40%);">- .../Library/CorebootBdsLib/BdsPlatform.h           |  288 ++++</span><br><span style="color: hsl(0, 100%, 40%);">- .../Library/CorebootBdsLib/PlatformBds.inf         |   65 +</span><br><span style="color: hsl(0, 100%, 40%);">- .../Library/CorebootBdsLib/PlatformData.c          |  161 ++</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootPayloadPkg/CorebootPayloadPkg.fdf          |    5 +-</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc      |   12 +-</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc   |   12 +-</span><br><span style="color: hsl(0, 100%, 40%);">- 11 files changed, 2388 insertions(+), 14 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">- create mode 100644 CorebootModulePkg/Include/Guid/LdrMemoryDescriptor.h</span><br><span style="color: hsl(0, 100%, 40%);">- create mode 100644 CorebootModulePkg/Include/Guid/PciExpressBaseAddress.h</span><br><span style="color: hsl(0, 100%, 40%);">- create mode 100644 CorebootModulePkg/Include/Guid/PciOptionRomTable.h</span><br><span style="color: hsl(0, 100%, 40%);">- create mode 100644 CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c</span><br><span style="color: hsl(0, 100%, 40%);">- create mode 100644 CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.h</span><br><span style="color: hsl(0, 100%, 40%);">- create mode 100644 CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf</span><br><span style="color: hsl(0, 100%, 40%);">- create mode 100644 CorebootModulePkg/Library/CorebootBdsLib/PlatformData.c</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootModulePkg/CorebootModulePkg.dec b/CorebootModulePkg/CorebootModulePkg.dec</span><br><span style="color: hsl(0, 100%, 40%);">-index 7f1309bdae..20932a1d04 100644</span><br><span>---- a/CorebootModulePkg/CorebootModulePkg.dec</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootModulePkg/CorebootModulePkg.dec</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -33,8 +33,16 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   gUefiCorebootModulePkgTokenSpaceGuid  = {0xe6ff49a0, 0x15df, 0x48fd, {0x9a, 0xcf, 0xd7, 0xdc, 0x27, 0x1b, 0x39, 0xd5}}
</span><br><span style="color: hsl(0, 100%, 40%);">-   gUefiSystemTableInfoGuid = {0x16c8a6d0, 0xfe8a, 0x4082, {0xa2, 0x8, 0xcf, 0x89, 0xc4, 0x29, 0x4, 0x33}}
</span><br><span style="color: hsl(0, 100%, 40%);">-   gUefiFrameBufferInfoGuid = {0xdc2cd8bd, 0x402c, 0x4dc4, {0x9b, 0xe0, 0xc, 0x43, 0x2b, 0x7, 0xfa, 0x34}}
</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiPciExpressBaseAddressGuid = {0x3677d529, 0x326f, 0x4603, {0xa9, 0x26, 0xea, 0xac, 0xe0, 0x1d, 0xcb, 0xb0 }}
</span><br><span style="color: hsl(0, 100%, 40%);">-   gUefiAcpiBoardInfoGuid   = {0xad3d31b, 0xb3d8, 0x4506, {0xae, 0x71, 0x2e, 0xf1, 0x10, 0x6, 0xd9, 0xf}}
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+  ## Include/Guid/PciOptionRomTable.h
</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiPciOptionRomTableGuid     = { 0x7462660F, 0x1CBD, 0x48DA, { 0xAD, 0x11, 0x91, 0x71, 0x79, 0x13, 0x83, 0x1C }}
</span><br><span style="color: hsl(0, 100%, 40%);">-+
</span><br><span style="color: hsl(0, 100%, 40%);">-+  ## Include/Guid/LdrMemoryDescriptor.h
</span><br><span style="color: hsl(0, 100%, 40%);">-+  gLdrMemoryDescriptorGuid      = { 0x7701d7e5, 0x7d1d, 0x4432, { 0xa4, 0x68, 0x67, 0x3d, 0xab, 0x8a, 0xde, 0x60 }}
</span><br><span style="color: hsl(0, 100%, 40%);">-+
</span><br><span style="color: hsl(0, 100%, 40%);">-+
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- [Ppis]
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootModulePkg/Include/Guid/LdrMemoryDescriptor.h b/CorebootModulePkg/Include/Guid/LdrMemoryDescriptor.h</span><br><span style="color: hsl(0, 100%, 40%);">-new file mode 100644</span><br><span style="color: hsl(0, 100%, 40%);">-index 0000000000..38a997deea</span><br><span>---- /dev/null</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootModulePkg/Include/Guid/LdrMemoryDescriptor.h</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -0,0 +1,33 @@</span><br><span style="color: hsl(0, 100%, 40%);">-+/** @file</span><br><span style="color: hsl(0, 100%, 40%);">-+  Guid is for GUIDED HOB of LDR memory descriptor.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Copyright (c) 2011, Intel Corporation. All rights reserved.<BR></span><br><span style="color: hsl(0, 100%, 40%);">-+This program and the accompanying materials                          </span><br><span style="color: hsl(0, 100%, 40%);">-+are licensed and made available under the terms and conditions of the BSD License         </span><br><span style="color: hsl(0, 100%, 40%);">-+which accompanies this distribution.  The full text of the license may be found at        </span><br><span style="color: hsl(0, 100%, 40%);">-+http://opensource.org/licenses/bsd-license.php                                            </span><br><span style="color: hsl(0, 100%, 40%);">-+                                                                                          </span><br><span style="color: hsl(0, 100%, 40%);">-+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     </span><br><span style="color: hsl(0, 100%, 40%);">-+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+**/</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#ifndef __LDR_MEMORY_DESCRIPTOR__</span><br><span style="color: hsl(0, 100%, 40%);">-+#define __LDR_MEMORY_DESCRIPTOR__</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define LDR_MEMORY_DESCRIPTOR_GUID \</span><br><span style="color: hsl(0, 100%, 40%);">-+  { 0x7701d7e5, 0x7d1d, 0x4432, {0xa4, 0x68, 0x67, 0x3d, 0xab, 0x8a, 0xde, 0x60}}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#pragma pack(1)</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+typedef struct {</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_HOB_GUID_TYPE             Hob;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                         MemDescCount;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_MEMORY_DESCRIPTOR         *MemDesc;</span><br><span style="color: hsl(0, 100%, 40%);">-+} MEMORY_DESC_HOB;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#pragma pack()</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+extern EFI_GUID gLdrMemoryDescriptorGuid;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#endif</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootModulePkg/Include/Guid/PciExpressBaseAddress.h b/CorebootModulePkg/Include/Guid/PciExpressBaseAddress.h</span><br><span style="color: hsl(0, 100%, 40%);">-new file mode 100644</span><br><span style="color: hsl(0, 100%, 40%);">-index 0000000000..ff554383c1</span><br><span>---- /dev/null</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootModulePkg/Include/Guid/PciExpressBaseAddress.h</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -0,0 +1,46 @@</span><br><span style="color: hsl(0, 100%, 40%);">-+/** @file</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Copyright (c) 2006, Intel Corporation. All rights reserved.<BR></span><br><span style="color: hsl(0, 100%, 40%);">-+This program and the accompanying materials                          </span><br><span style="color: hsl(0, 100%, 40%);">-+are licensed and made available under the terms and conditions of the BSD License         </span><br><span style="color: hsl(0, 100%, 40%);">-+which accompanies this distribution.  The full text of the license may be found at        </span><br><span style="color: hsl(0, 100%, 40%);">-+http://opensource.org/licenses/bsd-license.php                                            </span><br><span style="color: hsl(0, 100%, 40%);">-+                                                                                          </span><br><span style="color: hsl(0, 100%, 40%);">-+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     </span><br><span style="color: hsl(0, 100%, 40%);">-+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Module Name:</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+    PciExpressBaseAddress.h</span><br><span style="color: hsl(0, 100%, 40%);">-+    </span><br><span style="color: hsl(0, 100%, 40%);">-+Abstract:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+   GUIDs used for PciExpress Base Address</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+**/</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#ifndef _EFI_PCI_EXPRESS_BASE_ADDRESS_H_</span><br><span style="color: hsl(0, 100%, 40%);">-+#define _EFI_PCI_EXPRESS_BASE_ADDRESS_H_</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define EFI_PCI_EXPRESS_BASE_ADDRESS_GUID \</span><br><span style="color: hsl(0, 100%, 40%);">-+  { \</span><br><span style="color: hsl(0, 100%, 40%);">-+  0x3677d529, 0x326f, 0x4603, {0xa9, 0x26, 0xea, 0xac, 0xe0, 0x1d, 0xcb, 0xb0} \</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Following structure defines PCI Express Base Address information.</span><br><span style="color: hsl(0, 100%, 40%);">-+// This information is platform specific, and built into hob in PEI phase.</span><br><span style="color: hsl(0, 100%, 40%);">-+// It can be consumed by PEI PCI driver and DXE PCI driver.</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+#pragma pack(1)</span><br><span style="color: hsl(0, 100%, 40%);">-+typedef struct _EFI_PCI_EXPRESS_BASE_ADDRESS_INFORMATION {</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32       HostBridgeNumber;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32       RootBridgeNumber;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT64       PciExpressBaseAddress;</span><br><span style="color: hsl(0, 100%, 40%);">-+} EFI_PCI_EXPRESS_BASE_ADDRESS_INFORMATION;</span><br><span style="color: hsl(0, 100%, 40%);">-+#pragma pack()</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+extern EFI_GUID gEfiPciExpressBaseAddressGuid;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#endif</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootModulePkg/Include/Guid/PciOptionRomTable.h b/CorebootModulePkg/Include/Guid/PciOptionRomTable.h</span><br><span style="color: hsl(0, 100%, 40%);">-new file mode 100644</span><br><span style="color: hsl(0, 100%, 40%);">-index 0000000000..a2fb99710a</span><br><span>---- /dev/null</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootModulePkg/Include/Guid/PciOptionRomTable.h</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -0,0 +1,41 @@</span><br><span style="color: hsl(0, 100%, 40%);">-+/** @file</span><br><span style="color: hsl(0, 100%, 40%);">-+  GUID and data structure used to describe the list of PCI Option ROMs present in a system.</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+Copyright (c) 2006, Intel Corporation. All rights reserved.<BR></span><br><span style="color: hsl(0, 100%, 40%);">-+This program and the accompanying materials                          </span><br><span style="color: hsl(0, 100%, 40%);">-+are licensed and made available under the terms and conditions of the BSD License         </span><br><span style="color: hsl(0, 100%, 40%);">-+which accompanies this distribution.  The full text of the license may be found at        </span><br><span style="color: hsl(0, 100%, 40%);">-+http://opensource.org/licenses/bsd-license.php                                            </span><br><span style="color: hsl(0, 100%, 40%);">-+                                                                                          </span><br><span style="color: hsl(0, 100%, 40%);">-+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     </span><br><span style="color: hsl(0, 100%, 40%);">-+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+**/</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#ifndef __PCI_OPTION_ROM_TABLE_GUID_H_</span><br><span style="color: hsl(0, 100%, 40%);">-+#define __PCI_OPTION_ROM_TABLE_GUID_H_</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define EFI_PCI_OPTION_ROM_TABLE_GUID \</span><br><span style="color: hsl(0, 100%, 40%);">-+  { 0x7462660f, 0x1cbd, 0x48da, {0xad, 0x11, 0x91, 0x71, 0x79, 0x13, 0x83, 0x1c } }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+extern EFI_GUID gEfiPciOptionRomTableGuid;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+typedef struct {</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PHYSICAL_ADDRESS   RomAddress; </span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_MEMORY_TYPE        MemoryType;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                 RomLength; </span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                 Seg; </span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT8                  Bus; </span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT8                  Dev; </span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT8                  Func; </span><br><span style="color: hsl(0, 100%, 40%);">-+  BOOLEAN                ExecutedLegacyBiosImage; </span><br><span style="color: hsl(0, 100%, 40%);">-+  BOOLEAN                DontLoadEfiRom;</span><br><span style="color: hsl(0, 100%, 40%);">-+} EFI_PCI_OPTION_ROM_DESCRIPTOR;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+typedef struct {</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT64                         PciOptionRomCount;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PCI_OPTION_ROM_DESCRIPTOR   *PciOptionRomDescriptors;</span><br><span style="color: hsl(0, 100%, 40%);">-+} EFI_PCI_OPTION_ROM_TABLE;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#endif // __PCI_OPTION_ROM_TABLE_GUID_H_</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c</span><br><span style="color: hsl(0, 100%, 40%);">-new file mode 100644</span><br><span style="color: hsl(0, 100%, 40%);">-index 0000000000..b6253a17f8</span><br><span>---- /dev/null</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -0,0 +1,1731 @@</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR></span><br><span style="color: hsl(0, 100%, 40%);">-+This program and the accompanying materials                          </span><br><span style="color: hsl(0, 100%, 40%);">-+are licensed and made available under the terms and conditions of the BSD License         </span><br><span style="color: hsl(0, 100%, 40%);">-+which accompanies this distribution.  The full text of the license may be found at        </span><br><span style="color: hsl(0, 100%, 40%);">-+http://opensource.org/licenses/bsd-license.php                                            </span><br><span style="color: hsl(0, 100%, 40%);">-+                                                                                          </span><br><span style="color: hsl(0, 100%, 40%);">-+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     </span><br><span style="color: hsl(0, 100%, 40%);">-+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Module Name:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsPlatform.c</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Abstract:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  This file include all platform action which can be customized</span><br><span style="color: hsl(0, 100%, 40%);">-+  by IBV/OEM.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#include "BdsPlatform.h"</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define IS_PCI_ISA_PDECODE(_p)        IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS_BRIDGE_ISA_PDECODE, 0)</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+extern BOOLEAN  gConnectAllHappened;</span><br><span style="color: hsl(0, 100%, 40%);">-+extern USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_GUID                    *gTableGuidArray[] = {</span><br><span style="color: hsl(0, 100%, 40%);">-+    &gEfiAcpi20TableGuid, &gEfiAcpiTableGuid, &gEfiSmbiosTableGuid, &gEfiMpsTableGuid</span><br><span style="color: hsl(0, 100%, 40%);">-+  };</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// BDS Platform Functions</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+GetSystemTablesFromHob (</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+  Find GUID'ed HOBs that contain EFI_PHYSICAL_ADDRESS of ACPI, SMBIOS, MPs tables</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+  None</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+  None.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PEI_HOB_POINTERS        GuidHob;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PEI_HOB_POINTERS        HobStart;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PHYSICAL_ADDRESS        *Table;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                       Index;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Get Hob List</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  HobStart.Raw = GetHobList ();</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Iteratively add ACPI Table, SMBIOS Table, MPS Table to EFI System Table</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  for (Index = 0; Index < ARRAY_SIZE (gTableGuidArray); ++Index) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    GuidHob.Raw = GetNextGuidHob (gTableGuidArray[Index], HobStart.Raw);</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (GuidHob.Raw != NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      Table = GET_GUID_HOB_DATA (GuidHob.Guid);</span><br><span style="color: hsl(0, 100%, 40%);">-+      if (Table != NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        // Check if Mps Table/Smbios Table/Acpi Table exists in E/F seg,</span><br><span style="color: hsl(0, 100%, 40%);">-+        // According to UEFI Spec, we should make sure Smbios table, </span><br><span style="color: hsl(0, 100%, 40%);">-+        // ACPI table and Mps tables kept in memory of specified type</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        ConvertSystemTable(gTableGuidArray[Index], (VOID**)&Table);</span><br><span style="color: hsl(0, 100%, 40%);">-+        gBS->InstallConfigurationTable (gTableGuidArray[Index], (VOID *)Table);</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  return ;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#if 0</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+PrintMemoryMap (</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_MEMORY_DESCRIPTOR       *MemMap;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_MEMORY_DESCRIPTOR       *MemMapPtr;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                       MemMapSize;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                       MapKey, DescriptorSize;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                       Index;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                      DescriptorVersion;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT64                      Bytes;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                  Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  MemMapSize = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+  MemMap     = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->GetMemoryMap (&MemMapSize, MemMap, &MapKey, &DescriptorSize, &DescriptorVersion);</span><br><span style="color: hsl(0, 100%, 40%);">-+  ASSERT (Status == EFI_BUFFER_TOO_SMALL);</span><br><span style="color: hsl(0, 100%, 40%);">-+  MemMapSize += EFI_PAGE_SIZE;</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->AllocatePool (EfiBootServicesData, MemMapSize, &MemMap);</span><br><span style="color: hsl(0, 100%, 40%);">-+  ASSERT (Status == EFI_SUCCESS);</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->GetMemoryMap (&MemMapSize, MemMap, &MapKey, &DescriptorSize, &DescriptorVersion);</span><br><span style="color: hsl(0, 100%, 40%);">-+  ASSERT (Status == EFI_SUCCESS);</span><br><span style="color: hsl(0, 100%, 40%);">-+  MemMapPtr = MemMap;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  ASSERT (DescriptorVersion == EFI_MEMORY_DESCRIPTOR_VERSION);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  for (Index = 0; Index < MemMapSize / DescriptorSize; Index ++) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    Bytes = LShiftU64 (MemMap->NumberOfPages, 12);</span><br><span style="color: hsl(0, 100%, 40%);">-+    DEBUG ((EFI_D_ERROR, "%lX-%lX  %lX %lX %X\n",</span><br><span style="color: hsl(0, 100%, 40%);">-+          MemMap->PhysicalStart, </span><br><span style="color: hsl(0, 100%, 40%);">-+          MemMap->PhysicalStart + Bytes - 1,</span><br><span style="color: hsl(0, 100%, 40%);">-+          MemMap->NumberOfPages, </span><br><span style="color: hsl(0, 100%, 40%);">-+          MemMap->Attribute,</span><br><span style="color: hsl(0, 100%, 40%);">-+          (UINTN)MemMap->Type));</span><br><span style="color: hsl(0, 100%, 40%);">-+    MemMap = (EFI_MEMORY_DESCRIPTOR *)((UINTN)MemMap + DescriptorSize);</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  gBS->FreePool (MemMapPtr);</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+#endif</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+UpdateMemoryMap (</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                      Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PEI_HOB_POINTERS            GuidHob;</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID                            *Table;</span><br><span style="color: hsl(0, 100%, 40%);">-+  MEMORY_DESC_HOB                 MemoryDescHob;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                           Index;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PHYSICAL_ADDRESS            Memory;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_GCD_MEMORY_SPACE_DESCRIPTOR Descriptor;</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  GuidHob.Raw = GetFirstGuidHob (&gLdrMemoryDescriptorGuid);</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (GuidHob.Raw == NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    DEBUG ((EFI_D_ERROR, "Fail to get gEfiLdrMemoryDescriptorGuid from GUID HOB LIST!\n"));</span><br><span style="color: hsl(0, 100%, 40%);">-+    return;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  Table = GET_GUID_HOB_DATA (GuidHob.Guid);</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (Table == NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    DEBUG ((EFI_D_ERROR, "Fail to get gEfiLdrMemoryDescriptorGuid from GUID HOB LIST!\n"));</span><br><span style="color: hsl(0, 100%, 40%);">-+    return;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  MemoryDescHob.MemDescCount = *(UINTN *)Table;</span><br><span style="color: hsl(0, 100%, 40%);">-+  MemoryDescHob.MemDesc      = *(EFI_MEMORY_DESCRIPTOR **)((UINTN)Table + sizeof(UINTN));</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Add ACPINVS, ACPIReclaim, and Reserved memory to MemoryMap</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  for (Index = 0; Index < MemoryDescHob.MemDescCount; Index++) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (MemoryDescHob.MemDesc[Index].PhysicalStart < 0x100000) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (MemoryDescHob.MemDesc[Index].PhysicalStart >= 0x100000000ULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+    if ((MemoryDescHob.MemDesc[Index].Type == EfiReservedMemoryType) ||</span><br><span style="color: hsl(0, 100%, 40%);">-+        (MemoryDescHob.MemDesc[Index].Type == EfiRuntimeServicesData) ||</span><br><span style="color: hsl(0, 100%, 40%);">-+        (MemoryDescHob.MemDesc[Index].Type == EfiRuntimeServicesCode) ||</span><br><span style="color: hsl(0, 100%, 40%);">-+        (MemoryDescHob.MemDesc[Index].Type == EfiACPIReclaimMemory) ||</span><br><span style="color: hsl(0, 100%, 40%);">-+        (MemoryDescHob.MemDesc[Index].Type == EfiACPIMemoryNVS)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      DEBUG ((EFI_D_ERROR, "PhysicalStart - 0x%016lx, ", MemoryDescHob.MemDesc[Index].PhysicalStart));</span><br><span style="color: hsl(0, 100%, 40%);">-+      DEBUG ((EFI_D_ERROR, "PageNumber    - 0x%016lx, ", MemoryDescHob.MemDesc[Index].NumberOfPages));</span><br><span style="color: hsl(0, 100%, 40%);">-+      DEBUG ((EFI_D_ERROR, "Attribute     - 0x%016lx, ", MemoryDescHob.MemDesc[Index].Attribute));</span><br><span style="color: hsl(0, 100%, 40%);">-+      DEBUG ((EFI_D_ERROR, "Type          - 0x%08x\n", MemoryDescHob.MemDesc[Index].Type));</span><br><span style="color: hsl(0, 100%, 40%);">-+      if ((MemoryDescHob.MemDesc[Index].Type == EfiRuntimeServicesData) ||</span><br><span style="color: hsl(0, 100%, 40%);">-+          (MemoryDescHob.MemDesc[Index].Type == EfiRuntimeServicesCode)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        // For RuntimeSevicesData and RuntimeServicesCode, they are BFV or DxeCore.</span><br><span style="color: hsl(0, 100%, 40%);">-+        // The memory type is assigned in EfiLdr</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        Status = gDS->GetMemorySpaceDescriptor (MemoryDescHob.MemDesc[Index].PhysicalStart, &Descriptor);</span><br><span style="color: hsl(0, 100%, 40%);">-+        if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+          continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+        }</span><br><span style="color: hsl(0, 100%, 40%);">-+        if (Descriptor.GcdMemoryType != EfiGcdMemoryTypeReserved) {</span><br><span style="color: hsl(0, 100%, 40%);">-+          //</span><br><span style="color: hsl(0, 100%, 40%);">-+          // BFV or tested DXE core</span><br><span style="color: hsl(0, 100%, 40%);">-+          //</span><br><span style="color: hsl(0, 100%, 40%);">-+          continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+        }</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        // Untested DXE Core region, free and remove</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        Status = gDS->FreeMemorySpace (</span><br><span style="color: hsl(0, 100%, 40%);">-+                        MemoryDescHob.MemDesc[Index].PhysicalStart,</span><br><span style="color: hsl(0, 100%, 40%);">-+                        LShiftU64 (MemoryDescHob.MemDesc[Index].NumberOfPages, EFI_PAGE_SHIFT)</span><br><span style="color: hsl(0, 100%, 40%);">-+                        );</span><br><span style="color: hsl(0, 100%, 40%);">-+        if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+          DEBUG ((EFI_D_ERROR, "FreeMemorySpace fail - %r!\n", Status));</span><br><span style="color: hsl(0, 100%, 40%);">-+          continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+        }</span><br><span style="color: hsl(0, 100%, 40%);">-+        Status = gDS->RemoveMemorySpace (</span><br><span style="color: hsl(0, 100%, 40%);">-+                        MemoryDescHob.MemDesc[Index].PhysicalStart,</span><br><span style="color: hsl(0, 100%, 40%);">-+                        LShiftU64 (MemoryDescHob.MemDesc[Index].NumberOfPages, EFI_PAGE_SHIFT)</span><br><span style="color: hsl(0, 100%, 40%);">-+                        );</span><br><span style="color: hsl(0, 100%, 40%);">-+        if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+          DEBUG ((EFI_D_ERROR, "RemoveMemorySpace fail - %r!\n", Status));</span><br><span style="color: hsl(0, 100%, 40%);">-+          continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+        }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        // Convert Runtime type to BootTime type</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        if (MemoryDescHob.MemDesc[Index].Type == EfiRuntimeServicesData) {</span><br><span style="color: hsl(0, 100%, 40%);">-+          MemoryDescHob.MemDesc[Index].Type = EfiBootServicesData;</span><br><span style="color: hsl(0, 100%, 40%);">-+        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-+          MemoryDescHob.MemDesc[Index].Type = EfiBootServicesCode;</span><br><span style="color: hsl(0, 100%, 40%);">-+        }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        // PassThrough, let below code add and alloate.</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      // ACPI or reserved memory</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      Status = gDS->AddMemorySpace (</span><br><span style="color: hsl(0, 100%, 40%);">-+                      EfiGcdMemoryTypeSystemMemory,</span><br><span style="color: hsl(0, 100%, 40%);">-+                      MemoryDescHob.MemDesc[Index].PhysicalStart,</span><br><span style="color: hsl(0, 100%, 40%);">-+                      LShiftU64 (MemoryDescHob.MemDesc[Index].NumberOfPages, EFI_PAGE_SHIFT),</span><br><span style="color: hsl(0, 100%, 40%);">-+                      MemoryDescHob.MemDesc[Index].Attribute</span><br><span style="color: hsl(0, 100%, 40%);">-+                      );</span><br><span style="color: hsl(0, 100%, 40%);">-+      if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        DEBUG ((EFI_D_ERROR, "AddMemorySpace fail - %r!\n", Status));</span><br><span style="color: hsl(0, 100%, 40%);">-+        if ((MemoryDescHob.MemDesc[Index].Type == EfiACPIReclaimMemory) ||</span><br><span style="color: hsl(0, 100%, 40%);">-+            (MemoryDescHob.MemDesc[Index].Type == EfiACPIMemoryNVS)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+          //</span><br><span style="color: hsl(0, 100%, 40%);">-+          // For EfiACPIReclaimMemory and EfiACPIMemoryNVS, it must success.</span><br><span style="color: hsl(0, 100%, 40%);">-+          // For EfiReservedMemoryType, there maybe overlap. So skip check here.</span><br><span style="color: hsl(0, 100%, 40%);">-+          //</span><br><span style="color: hsl(0, 100%, 40%);">-+//          ASSERT_EFI_ERROR (Status);</span><br><span style="color: hsl(0, 100%, 40%);">-+        }</span><br><span style="color: hsl(0, 100%, 40%);">-+        continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+      Memory = MemoryDescHob.MemDesc[Index].PhysicalStart;</span><br><span style="color: hsl(0, 100%, 40%);">-+      Status = gBS->AllocatePages (</span><br><span style="color: hsl(0, 100%, 40%);">-+                      AllocateAddress,</span><br><span style="color: hsl(0, 100%, 40%);">-+                      (EFI_MEMORY_TYPE)MemoryDescHob.MemDesc[Index].Type,</span><br><span style="color: hsl(0, 100%, 40%);">-+                      (UINTN)MemoryDescHob.MemDesc[Index].NumberOfPages,</span><br><span style="color: hsl(0, 100%, 40%);">-+                      &Memory</span><br><span style="color: hsl(0, 100%, 40%);">-+                      );</span><br><span style="color: hsl(0, 100%, 40%);">-+      if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        DEBUG ((EFI_D_ERROR, "AllocatePages fail - %r!\n", Status));</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        // For the page added, it must be allocated.</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+//        ASSERT_EFI_ERROR (Status);</span><br><span style="color: hsl(0, 100%, 40%);">-+        continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+DisableUsbLegacySupport(</span><br><span style="color: hsl(0, 100%, 40%);">-+  void</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+  Disabble the USB legacy Support in all Ehci and Uhci.</span><br><span style="color: hsl(0, 100%, 40%);">-+  This function assume all PciIo handles have been created in system.</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+  None</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCCESS</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_NOT_FOUND</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                            Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_HANDLE                            *HandleArray;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                                 HandleArrayCount;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                                 Index;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PCI_IO_PROTOCOL                   *PciIo;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT8                                 Class[3];</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT16                                Command;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                                HcCapParams;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                                ExtendCap;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                                Value;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                                TimeOut;</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Find the usb host controller </span><br><span style="color: hsl(0, 100%, 40%);">-+  //   </span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->LocateHandleBuffer (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  ByProtocol,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &gEfiPciIoProtocolGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  NULL,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &HandleArrayCount,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &HandleArray</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (!EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    for (Index = 0; Index < HandleArrayCount; Index++) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      Status = gBS->HandleProtocol (</span><br><span style="color: hsl(0, 100%, 40%);">-+                      HandleArray[Index],</span><br><span style="color: hsl(0, 100%, 40%);">-+                      &gEfiPciIoProtocolGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+                      (VOID **)&PciIo</span><br><span style="color: hsl(0, 100%, 40%);">-+                      );</span><br><span style="color: hsl(0, 100%, 40%);">-+      if (!EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        // Find the USB host controller controller</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, 0x09, 3, &Class);</span><br><span style="color: hsl(0, 100%, 40%);">-+        if (!EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+          if ((PCI_CLASS_SERIAL == Class[2]) &&</span><br><span style="color: hsl(0, 100%, 40%);">-+              (PCI_CLASS_SERIAL_USB == Class[1])) {</span><br><span style="color: hsl(0, 100%, 40%);">-+            if (PCI_IF_UHCI == Class[0]) {</span><br><span style="color: hsl(0, 100%, 40%);">-+              //</span><br><span style="color: hsl(0, 100%, 40%);">-+              // Found the UHCI, then disable the legacy support</span><br><span style="color: hsl(0, 100%, 40%);">-+              //</span><br><span style="color: hsl(0, 100%, 40%);">-+              Command = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+              Status = PciIo->Pci.Write (PciIo, EfiPciIoWidthUint16, 0xC0, 1, &Command);</span><br><span style="color: hsl(0, 100%, 40%);">-+            } else if (PCI_IF_EHCI == Class[0]) {</span><br><span style="color: hsl(0, 100%, 40%);">-+              //</span><br><span style="color: hsl(0, 100%, 40%);">-+              // Found the EHCI, then disable the legacy support</span><br><span style="color: hsl(0, 100%, 40%);">-+              //</span><br><span style="color: hsl(0, 100%, 40%);">-+              Status = PciIo->Mem.Read (</span><br><span style="color: hsl(0, 100%, 40%);">-+                                   PciIo,</span><br><span style="color: hsl(0, 100%, 40%);">-+                                   EfiPciIoWidthUint32,</span><br><span style="color: hsl(0, 100%, 40%);">-+                                   0,                   //EHC_BAR_INDEX</span><br><span style="color: hsl(0, 100%, 40%);">-+                                   (UINT64) 0x08,       //EHC_HCCPARAMS_OFFSET</span><br><span style="color: hsl(0, 100%, 40%);">-+                                   1,</span><br><span style="color: hsl(0, 100%, 40%);">-+                                   &HcCapParams</span><br><span style="color: hsl(0, 100%, 40%);">-+                                   );</span><br><span style="color: hsl(0, 100%, 40%);">-+              </span><br><span style="color: hsl(0, 100%, 40%);">-+              ExtendCap = (HcCapParams >> 8) & 0xFF;</span><br><span style="color: hsl(0, 100%, 40%);">-+              //</span><br><span style="color: hsl(0, 100%, 40%);">-+              // Disable the SMI in USBLEGCTLSTS firstly</span><br><span style="color: hsl(0, 100%, 40%);">-+              //</span><br><span style="color: hsl(0, 100%, 40%);">-+              PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, ExtendCap + 0x4, 1, &Value);</span><br><span style="color: hsl(0, 100%, 40%);">-+              Value &= 0xFFFF0000;</span><br><span style="color: hsl(0, 100%, 40%);">-+              PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, ExtendCap + 0x4, 1, &Value);</span><br><span style="color: hsl(0, 100%, 40%);">-+              </span><br><span style="color: hsl(0, 100%, 40%);">-+              //</span><br><span style="color: hsl(0, 100%, 40%);">-+              // Get EHCI Ownership from legacy bios</span><br><span style="color: hsl(0, 100%, 40%);">-+              //</span><br><span style="color: hsl(0, 100%, 40%);">-+              PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, ExtendCap, 1, &Value);</span><br><span style="color: hsl(0, 100%, 40%);">-+              Value |= (0x1 << 24);</span><br><span style="color: hsl(0, 100%, 40%);">-+              PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, ExtendCap, 1, &Value);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+              TimeOut = 40;</span><br><span style="color: hsl(0, 100%, 40%);">-+              while (TimeOut--) {</span><br><span style="color: hsl(0, 100%, 40%);">-+                gBS->Stall (500);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+                PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, ExtendCap, 1, &Value);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+                if ((Value & 0x01010000) == 0x01000000) {</span><br><span style="color: hsl(0, 100%, 40%);">-+                  break;</span><br><span style="color: hsl(0, 100%, 40%);">-+                }</span><br><span style="color: hsl(0, 100%, 40%);">-+              }</span><br><span style="color: hsl(0, 100%, 40%);">-+            }</span><br><span style="color: hsl(0, 100%, 40%);">-+          } </span><br><span style="color: hsl(0, 100%, 40%);">-+        }</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+  } else {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  gBS->FreePool (HandleArray);</span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+EFIAPI</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsInit (</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Platform Bds init. Include the platform firmware vendor, revision</span><br><span style="color: hsl(0, 100%, 40%);">-+  and so crc check.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  None.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  GetSystemTablesFromHob ();</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  UpdateMemoryMap ();</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Append Usb Keyboard short form DevicePath into "ConInDev" </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (</span><br><span style="color: hsl(0, 100%, 40%);">-+    VarConsoleInpDev,</span><br><span style="color: hsl(0, 100%, 40%);">-+    (EFI_DEVICE_PATH_PROTOCOL *) &gUsbClassKeyboardDevicePath,</span><br><span style="color: hsl(0, 100%, 40%);">-+    NULL</span><br><span style="color: hsl(0, 100%, 40%);">-+    );</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+UINT64</span><br><span style="color: hsl(0, 100%, 40%);">-+GetPciExpressBaseAddressForRootBridge (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN UINTN    HostBridgeNumber,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN UINTN    RootBridgeNumber</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+  This routine is to get PciExpress Base Address for this RootBridge</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+  HostBridgeNumber - The number of HostBridge</span><br><span style="color: hsl(0, 100%, 40%);">-+  RootBridgeNumber - The number of RootBridge</span><br><span style="color: hsl(0, 100%, 40%);">-+    </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT64 - PciExpressBaseAddress for this HostBridge and RootBridge</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PCI_EXPRESS_BASE_ADDRESS_INFORMATION *PciExpressBaseAddressInfo;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                                    BufferSize;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                                   Index;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                                   Number;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PEI_HOB_POINTERS                     GuidHob;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Get PciExpressAddressInfo Hob</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  PciExpressBaseAddressInfo = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+  BufferSize                = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+  GuidHob.Raw = GetFirstGuidHob (&gEfiPciExpressBaseAddressGuid);</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (GuidHob.Raw != NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    PciExpressBaseAddressInfo = GET_GUID_HOB_DATA (GuidHob.Guid);</span><br><span style="color: hsl(0, 100%, 40%);">-+    BufferSize                = GET_GUID_HOB_DATA_SIZE (GuidHob.Guid);</span><br><span style="color: hsl(0, 100%, 40%);">-+  } else {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Search the PciExpress Base Address in the Hob for current RootBridge</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  Number = (UINT32)(BufferSize / sizeof(EFI_PCI_EXPRESS_BASE_ADDRESS_INFORMATION));</span><br><span style="color: hsl(0, 100%, 40%);">-+  for (Index = 0; Index < Number; Index++) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    if ((PciExpressBaseAddressInfo[Index].HostBridgeNumber == HostBridgeNumber) &&</span><br><span style="color: hsl(0, 100%, 40%);">-+        (PciExpressBaseAddressInfo[Index].RootBridgeNumber == RootBridgeNumber)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      return PciExpressBaseAddressInfo[Index].PciExpressBaseAddress;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Do not find the PciExpress Base Address in the Hob</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  return 0;  </span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+PatchPciRootBridgeDevicePath (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN UINTN    HostBridgeNumber,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN UINTN    RootBridgeNumber,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN PLATFORM_ROOT_BRIDGE_DEVICE_PATH  *RootBridge</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT64  PciExpressBase;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  PciExpressBase = GetPciExpressBaseAddressForRootBridge (HostBridgeNumber, RootBridgeNumber);</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  DEBUG ((EFI_D_INFO, "Get PciExpress Address from Hob: 0x%X\n", PciExpressBase));</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  if (PciExpressBase != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    RootBridge->PciRootBridge.HID = EISA_PNP_ID(0x0A08);</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+ConnectRootBridge (</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Connect RootBridge</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  None.</span><br><span style="color: hsl(0, 100%, 40%);">-+ </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCCESS             - Connect RootBridge successfully.</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS              - Connect RootBridge fail.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_HANDLE                RootHandle;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Patch Pci Root Bridge Device Path</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  PatchPciRootBridgeDevicePath (0, 0, &gPlatformRootBridge0);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Make all the PCI_IO protocols on PCI Seg 0 show up</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibConnectDevicePath (gPlatformRootBridges[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->LocateDevicePath (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &gEfiDevicePathProtocolGuid, </span><br><span style="color: hsl(0, 100%, 40%);">-+                  &gPlatformRootBridges[0], </span><br><span style="color: hsl(0, 100%, 40%);">-+                  &RootHandle</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  DEBUG ((EFI_D_INFO, "Pci Root bridge handle is 0x%X\n", RootHandle));</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->ConnectController (RootHandle, NULL, NULL, FALSE);</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+PrepareLpcBridgeDevicePath (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN EFI_HANDLE                DeviceHandle</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Add IsaKeyboard to ConIn,</span><br><span style="color: hsl(0, 100%, 40%);">-+  add IsaSerial to ConOut, ConIn, ErrOut.</span><br><span style="color: hsl(0, 100%, 40%);">-+  LPC Bridge: 06 01 00</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DeviceHandle            - Handle of PCIIO protocol.</span><br><span style="color: hsl(0, 100%, 40%);">-+ </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCCESS             - LPC bridge is added to ConOut, ConIn, and ErrOut.</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS              - No LPC bridge is added.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL  *TempDevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->HandleProtocol (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  DeviceHandle,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &gEfiDevicePathProtocolGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  (VOID*)&DevicePath</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  TempDevicePath = DevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Register Keyboard</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (VarConsoleInp, DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Register COM1</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = TempDevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPnp16550ComPortDeviceNode.UID = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode);</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode);</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (VarConsoleOut, DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (VarConsoleInp, DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (VarErrorOut, DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Register COM2</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = TempDevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPnp16550ComPortDeviceNode.UID = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode);</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode);</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (VarConsoleOut, DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (VarConsoleInp, DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (VarErrorOut, DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+GetGopDevicePath (</span><br><span style="color: hsl(0, 100%, 40%);">-+   IN  EFI_DEVICE_PATH_PROTOCOL *PciDevicePath,</span><br><span style="color: hsl(0, 100%, 40%);">-+   OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath</span><br><span style="color: hsl(0, 100%, 40%);">-+   )</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                           Index;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                      Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_HANDLE                      PciDeviceHandle;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL        *TempDevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL        *TempPciDevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                           GopHandleCount;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_HANDLE                      *GopHandleBuffer;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (PciDevicePath == NULL || GopDevicePath == NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return EFI_INVALID_PARAMETER;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Initialize the GopDevicePath to be PciDevicePath</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  *GopDevicePath    = PciDevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+  TempPciDevicePath = PciDevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->LocateDevicePath (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &gEfiDevicePathProtocolGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &TempPciDevicePath,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &PciDeviceHandle</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Try to connect this handle, so that GOP driver could start on this </span><br><span style="color: hsl(0, 100%, 40%);">-+  // device and create child handles with GraphicsOutput Protocol installed</span><br><span style="color: hsl(0, 100%, 40%);">-+  // on them, then we get device paths of these child handles and select </span><br><span style="color: hsl(0, 100%, 40%);">-+  // them as possible console device.</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  gBS->ConnectController (PciDeviceHandle, NULL, NULL, FALSE);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->LocateHandleBuffer (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  ByProtocol,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &gEfiGraphicsOutputProtocolGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  NULL,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &GopHandleCount,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &GopHandleBuffer</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (!EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Add all the child handles as possible Console Device</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    for (Index = 0; Index < GopHandleCount; Index++) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      Status = gBS->HandleProtocol (GopHandleBuffer[Index], &gEfiDevicePathProtocolGuid, (VOID*)&TempDevicePath);</span><br><span style="color: hsl(0, 100%, 40%);">-+      if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+      if (CompareMem (</span><br><span style="color: hsl(0, 100%, 40%);">-+            PciDevicePath,</span><br><span style="color: hsl(0, 100%, 40%);">-+            TempDevicePath,</span><br><span style="color: hsl(0, 100%, 40%);">-+            GetDevicePathSize (PciDevicePath) - END_DEVICE_PATH_LENGTH</span><br><span style="color: hsl(0, 100%, 40%);">-+            ) == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        // In current implementation, we only enable one of the child handles</span><br><span style="color: hsl(0, 100%, 40%);">-+        // as console device, i.e. sotre one of the child handle's device</span><br><span style="color: hsl(0, 100%, 40%);">-+        // path to variable "ConOut"</span><br><span style="color: hsl(0, 100%, 40%);">-+        // In future, we could select all child handles to be console device</span><br><span style="color: hsl(0, 100%, 40%);">-+        //       </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+        *GopDevicePath = TempDevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        // Delete the PCI device's path that added by GetPlugInPciVgaDevicePath()</span><br><span style="color: hsl(0, 100%, 40%);">-+        // Add the integrity GOP device path.</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        BdsLibUpdateConsoleVariable (VarConsoleOutDev, NULL, PciDevicePath);</span><br><span style="color: hsl(0, 100%, 40%);">-+        BdsLibUpdateConsoleVariable (VarConsoleOutDev, TempDevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+    gBS->FreePool (GopHandleBuffer);</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+PreparePciVgaDevicePath (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN EFI_HANDLE                DeviceHandle</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Add PCI VGA to ConOut.</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI VGA: 03 00 00</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DeviceHandle            - Handle of PCIIO protocol.</span><br><span style="color: hsl(0, 100%, 40%);">-+ </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCCESS             - PCI VGA is added to ConOut.</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS              - No PCI VGA device is added.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL  *GopDevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath    = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+  GopDevicePath = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->HandleProtocol (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  DeviceHandle,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &gEfiDevicePathProtocolGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  (VOID*)&DevicePath</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  GetGopDevicePath (DevicePath, &GopDevicePath);</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = GopDevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (VarConsoleOut, DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+PreparePciSerialDevicePath (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN EFI_HANDLE                DeviceHandle</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Add PCI Serial to ConOut, ConIn, ErrOut.</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI Serial: 07 00 02</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DeviceHandle            - Handle of PCIIO protocol.</span><br><span style="color: hsl(0, 100%, 40%);">-+ </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCCESS             - PCI Serial is added to ConOut, ConIn, and ErrOut.</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS              - No PCI Serial device is added.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->HandleProtocol (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  DeviceHandle,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &gEfiDevicePathProtocolGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  (VOID*)&DevicePath</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode);</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (VarConsoleOut, DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (VarConsoleInp, DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsLibUpdateConsoleVariable (VarErrorOut, DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+DetectAndPreparePlatformPciDevicePath (</span><br><span style="color: hsl(0, 100%, 40%);">-+  BOOLEAN DetectVgaOnly</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DetectVgaOnly           - Only detect VGA device if it's TRUE.</span><br><span style="color: hsl(0, 100%, 40%);">-+ </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCCESS             - PCI Device check and Console variable update successfully.</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS              - PCI Device check or Console variable update fail.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                     HandleCount;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_HANDLE                *HandleBuffer;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                     Index;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PCI_IO_PROTOCOL       *PciIo;</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI_TYPE00                Pci;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Start to check all the PciIo to find all possible device</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  HandleCount = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+  HandleBuffer = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->LocateHandleBuffer (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  ByProtocol,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &gEfiPciIoProtocolGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  NULL,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &HandleCount,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &HandleBuffer</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  for (Index = 0; Index < HandleCount; Index++) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiPciIoProtocolGuid, (VOID*)&PciIo);</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Check for all PCI device</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    Status = PciIo->Pci.Read (</span><br><span style="color: hsl(0, 100%, 40%);">-+                      PciIo,</span><br><span style="color: hsl(0, 100%, 40%);">-+                      EfiPciIoWidthUint32,</span><br><span style="color: hsl(0, 100%, 40%);">-+                      0,</span><br><span style="color: hsl(0, 100%, 40%);">-+                      sizeof (Pci) / sizeof (UINT32),</span><br><span style="color: hsl(0, 100%, 40%);">-+                      &Pci</span><br><span style="color: hsl(0, 100%, 40%);">-+                      );</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (!DetectVgaOnly) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      // Here we decide whether it is LPC Bridge</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      if ((IS_PCI_LPC (&Pci)) ||</span><br><span style="color: hsl(0, 100%, 40%);">-+          ((IS_PCI_ISA_PDECODE (&Pci)) && (Pci.Hdr.VendorId == 0x8086) && (Pci.Hdr.DeviceId == 0x7110))) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        // Add IsaKeyboard to ConIn,</span><br><span style="color: hsl(0, 100%, 40%);">-+        // add IsaSerial to ConOut, ConIn, ErrOut</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        DEBUG ((EFI_D_INFO, "Find the LPC Bridge device\n"));</span><br><span style="color: hsl(0, 100%, 40%);">-+        PrepareLpcBridgeDevicePath (HandleBuffer[Index]);</span><br><span style="color: hsl(0, 100%, 40%);">-+        continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      // Here we decide which Serial device to enable in PCI bus </span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      if (IS_PCI_16550SERIAL (&Pci)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        // Add them to ConOut, ConIn, ErrOut.</span><br><span style="color: hsl(0, 100%, 40%);">-+        //</span><br><span style="color: hsl(0, 100%, 40%);">-+        DEBUG ((EFI_D_INFO, "Find the 16550 SERIAL device\n"));</span><br><span style="color: hsl(0, 100%, 40%);">-+        PreparePciSerialDevicePath (HandleBuffer[Index]);</span><br><span style="color: hsl(0, 100%, 40%);">-+        continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Here we decide which VGA device to enable in PCI bus </span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (IS_PCI_VGA (&Pci)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      // Add them to ConOut.</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      DEBUG ((EFI_D_INFO, "Find the VGA device\n"));</span><br><span style="color: hsl(0, 100%, 40%);">-+      PreparePciVgaDevicePath (HandleBuffer[Index]);</span><br><span style="color: hsl(0, 100%, 40%);">-+      continue;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  gBS->FreePool (HandleBuffer);</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsConnectConsole (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN BDS_CONSOLE_CONNECT_ENTRY   *PlatformConsole</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Connect the predefined platform default console device. Always try to find</span><br><span style="color: hsl(0, 100%, 40%);">-+  and enable the vga device if have.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  PlatformConsole         - Predefined platform default console device array.</span><br><span style="color: hsl(0, 100%, 40%);">-+ </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCCESS             - Success connect at least one ConIn and ConOut </span><br><span style="color: hsl(0, 100%, 40%);">-+                            device, there must have one ConOut device is </span><br><span style="color: hsl(0, 100%, 40%);">-+                            active vga device.</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS              - Return the status of </span><br><span style="color: hsl(0, 100%, 40%);">-+                            BdsLibConnectAllDefaultConsoles ()</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                         Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                              Index;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL           *VarConout;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL           *VarConin;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                              DevicePathSize;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Connect RootBridge</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  ConnectRootBridge ();</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  VarConout = BdsLibGetVariableAndSize (</span><br><span style="color: hsl(0, 100%, 40%);">-+                VarConsoleOut,</span><br><span style="color: hsl(0, 100%, 40%);">-+                &gEfiGlobalVariableGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+                &DevicePathSize</span><br><span style="color: hsl(0, 100%, 40%);">-+                );</span><br><span style="color: hsl(0, 100%, 40%);">-+  VarConin = BdsLibGetVariableAndSize (</span><br><span style="color: hsl(0, 100%, 40%);">-+               VarConsoleInp,</span><br><span style="color: hsl(0, 100%, 40%);">-+               &gEfiGlobalVariableGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+               &DevicePathSize</span><br><span style="color: hsl(0, 100%, 40%);">-+               );</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  if (VarConout == NULL || VarConin == NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    DetectAndPreparePlatformPciDevicePath (FALSE);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Have chance to connect the platform default console,</span><br><span style="color: hsl(0, 100%, 40%);">-+    // the platform default console is the minimum device group</span><br><span style="color: hsl(0, 100%, 40%);">-+    // the platform should support</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    for (Index = 0; PlatformConsole[Index].DevicePath != NULL; ++Index) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      // Update the console variable with the connect type</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) == CONSOLE_IN) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        BdsLibUpdateConsoleVariable (VarConsoleInp, PlatformConsole[Index].DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+      if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) == CONSOLE_OUT) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        BdsLibUpdateConsoleVariable (VarConsoleOut, PlatformConsole[Index].DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+      if ((PlatformConsole[Index].ConnectType & STD_ERROR) == STD_ERROR) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        BdsLibUpdateConsoleVariable (VarErrorOut, PlatformConsole[Index].DevicePath, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+  } else {</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Only detect VGA device and add them to ConOut</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    DetectAndPreparePlatformPciDevicePath (TRUE);</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // The ConIn devices connection will start the USB bus, should disable all</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Usb legacy support firstly.</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Caution: Must ensure the PCI bus driver has been started. Since the </span><br><span style="color: hsl(0, 100%, 40%);">-+  // ConnectRootBridge() will create all the PciIo protocol, it's safe here now</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = DisableUsbLegacySupport();</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Connect the all the default console with current cosole variable</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = BdsLibConnectAllDefaultConsoles ();</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsConnectSequence (</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Connect with predefined platform connect sequence,</span><br><span style="color: hsl(0, 100%, 40%);">-+  the OEM/IBV can customize with their own connect sequence.</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  None.</span><br><span style="color: hsl(0, 100%, 40%);">-+ </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  None.</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN Index;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Index = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Here we can get the customized platform connect sequence</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Notes: we can connect with new variable which record the</span><br><span style="color: hsl(0, 100%, 40%);">-+  // last time boots connect device path sequence</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  while (gPlatformConnectSequence[Index] != NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Build the platform boot option</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    BdsLibConnectDevicePath (gPlatformConnectSequence[Index]);</span><br><span style="color: hsl(0, 100%, 40%);">-+    Index++;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsGetDriverOption (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN OUT LIST_ENTRY              *BdsDriverLists</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Load the predefined driver option, OEM/IBV can customize this</span><br><span style="color: hsl(0, 100%, 40%);">-+  to load their own drivers</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsDriverLists  - The header of the driver option link list.</span><br><span style="color: hsl(0, 100%, 40%);">-+ </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  None.</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN Index;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Index = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Here we can get the customized platform driver option</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  while (gPlatformDriverOption[Index] != NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Build the platform boot option</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    BdsLibRegisterNewOption (BdsDriverLists, gPlatformDriverOption[Index], NULL, L"DriverOrder");</span><br><span style="color: hsl(0, 100%, 40%);">-+    Index++;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsDiagnostics (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN EXTENDMEM_COVERAGE_LEVEL    MemoryTestLevel,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN BOOLEAN                     QuietBoot,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN BASEM_MEMORY_TEST           BaseMemoryTest</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Perform the platform diagnostic, such like test memory. OEM/IBV also</span><br><span style="color: hsl(0, 100%, 40%);">-+  can customize this fuction to support specific platform diagnostic.</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  MemoryTestLevel  - The memory test intensive level</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  QuietBoot        - Indicate if need to enable the quiet boot</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  BaseMemoryTest   - A pointer to BdsMemoryTest()</span><br><span style="color: hsl(0, 100%, 40%);">-+ </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  None.</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS  Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Here we can decide if we need to show</span><br><span style="color: hsl(0, 100%, 40%);">-+  // the diagnostics screen</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Notes: this quiet boot code should be remove</span><br><span style="color: hsl(0, 100%, 40%);">-+  // from the graphic lib</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (QuietBoot) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    Status = EnableQuietBoot (PcdGetPtr(PcdLogoFile));</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      DisableQuietBoot ();</span><br><span style="color: hsl(0, 100%, 40%);">-+      return;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Perform system diagnostic</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    Status = BaseMemoryTest (MemoryTestLevel);</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      DisableQuietBoot ();</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    return ;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Perform system diagnostic</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = BaseMemoryTest (MemoryTestLevel);</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+EFIAPI</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsPolicyBehavior (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN OUT LIST_ENTRY              *DriverOptionList,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN OUT LIST_ENTRY              *BootOptionList,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN PROCESS_CAPSULES            ProcessCapsules,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN BASEM_MEMORY_TEST           BaseMemoryTest</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  The function will execute with as the platform policy, current policy</span><br><span style="color: hsl(0, 100%, 40%);">-+  is driven by boot mode. IBV/OEM can customize this code for their specific</span><br><span style="color: hsl(0, 100%, 40%);">-+  policy action.</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DriverOptionList - The header of the driver option link list</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  BootOptionList   - The header of the boot option link list</span><br><span style="color: hsl(0, 100%, 40%);">-+ </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  None.</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                         Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT16                             Timeout;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_EVENT                          UserInputDurationTime;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                              Index;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_INPUT_KEY                      Key;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_BOOT_MODE                      BootMode;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Init the time out value</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  Timeout = PcdGet16 (PcdPlatformBootTimeOut);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Load the driver option as the driver option list</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  PlatformBdsGetDriverOption (DriverOptionList);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Get current Boot Mode</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = BdsLibGetBootMode (&BootMode);</span><br><span style="color: hsl(0, 100%, 40%);">-+  DEBUG ((EFI_D_ERROR, "Boot Mode:%x\n", BootMode));</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Go the different platform policy with different boot mode</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Notes: this part code can be change with the table policy</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  ASSERT (BootMode == BOOT_WITH_FULL_CONFIGURATION);</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Connect platform console</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = PlatformBdsConnectConsole (gPlatformConsole);</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Here OEM/IBV can customize with defined action</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    PlatformBdsNoConsoleAction ();</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Create a 300ms duration event to ensure user has enough input time to enter Setup</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->CreateEvent (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  EVT_TIMER,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  0,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  NULL,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  NULL,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &UserInputDurationTime</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  ASSERT (Status == EFI_SUCCESS);</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->SetTimer (UserInputDurationTime, TimerRelative, 3000000);</span><br><span style="color: hsl(0, 100%, 40%);">-+  ASSERT (Status == EFI_SUCCESS);</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Memory test and Logo show</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  PlatformBdsDiagnostics (IGNORE, TRUE, BaseMemoryTest);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Perform some platform specific connect sequence</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  PlatformBdsConnectSequence ();</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Give one chance to enter the setup if we</span><br><span style="color: hsl(0, 100%, 40%);">-+  // have the time out</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // BUGBUG: hard code timeout to 5 second to show logo in graphic mode.</span><br><span style="color: hsl(0, 100%, 40%);">-+  Timeout = 5;  </span><br><span style="color: hsl(0, 100%, 40%);">-+  if (Timeout != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    PlatformBdsEnterFrontPage (Timeout, FALSE);</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  //BdsLibConnectAll ();</span><br><span style="color: hsl(0, 100%, 40%);">-+  //BdsLibEnumerateAllBootOption (BootOptionList);  </span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Please uncomment above ConnectAll and EnumerateAll code and remove following first boot</span><br><span style="color: hsl(0, 100%, 40%);">-+  // checking code in real production tip.</span><br><span style="color: hsl(0, 100%, 40%);">-+  //          </span><br><span style="color: hsl(0, 100%, 40%);">-+  // In BOOT_WITH_FULL_CONFIGURATION boot mode, should always connect every device </span><br><span style="color: hsl(0, 100%, 40%);">-+  // and do enumerate all the default boot options. But in development system board, the boot mode </span><br><span style="color: hsl(0, 100%, 40%);">-+  // cannot be BOOT_ASSUMING_NO_CONFIGURATION_CHANGES because the machine box</span><br><span style="color: hsl(0, 100%, 40%);">-+  // is always open. So the following code only do the ConnectAll and EnumerateAll at first boot.</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = BdsLibBuildOptionFromVar (BootOptionList, L"BootOrder");</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (EFI_ERROR(Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // If cannot find "BootOrder" variable,  it may be first boot. </span><br><span style="color: hsl(0, 100%, 40%);">-+    // Try to connect all devices and enumerate all boot options here.</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    BdsLibConnectAll ();</span><br><span style="color: hsl(0, 100%, 40%);">-+    BdsLibEnumerateAllBootOption (BootOptionList);</span><br><span style="color: hsl(0, 100%, 40%);">-+  } </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // To give the User a chance to enter Setup here, if user set TimeOut is 0.</span><br><span style="color: hsl(0, 100%, 40%);">-+  // BDS should still give user a chance to enter Setup</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Check whether the user input after the duration time has expired </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  gBS->WaitForEvent (1, &UserInputDurationTime, &Index);</span><br><span style="color: hsl(0, 100%, 40%);">-+  gBS->CloseEvent (UserInputDurationTime);</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  if (!EFI_ERROR (Status)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Enter Setup if user input </span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    Timeout = 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-+    PlatformBdsEnterFrontPage (Timeout, FALSE);</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  return ;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+EFIAPI</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsBootSuccess (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN  BDS_COMMON_OPTION *Option</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  Hook point after a boot attempt succeeds. We don't expect a boot option to</span><br><span style="color: hsl(0, 100%, 40%);">-+  return, so the EFI 1.0 specification defines that you will default to an</span><br><span style="color: hsl(0, 100%, 40%);">-+  interactive mode and stop processing the BootOrder list in this case. This</span><br><span style="color: hsl(0, 100%, 40%);">-+  is alos a platform implementation and can be customized by IBV/OEM.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Option - Pointer to Boot Option that succeeded to boot.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  None.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  CHAR16  *TmpStr;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // If Boot returned with EFI_SUCCESS and there is not in the boot device</span><br><span style="color: hsl(0, 100%, 40%);">-+  // select loop then we need to pop up a UI and wait for user input.</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  TmpStr = Option->StatusString;</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (TmpStr != NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    BdsLibOutputStrings (gST->ConOut, TmpStr, Option->Description, L"\n\r", NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+    gBS->FreePool (TmpStr);</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+EFIAPI</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsBootFail (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN  BDS_COMMON_OPTION  *Option,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN  EFI_STATUS         Status,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN  CHAR16             *ExitData,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN  UINTN              ExitDataSize</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  Hook point after a boot attempt fails.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  Option - Pointer to Boot Option that failed to boot.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status - Status returned from failed boot.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  ExitData - Exit data returned from failed boot.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  ExitDataSize - Exit data size returned from failed boot.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  None.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  CHAR16  *TmpStr;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // If Boot returned with failed status then we need to pop up a UI and wait</span><br><span style="color: hsl(0, 100%, 40%);">-+  // for user input.</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  TmpStr = Option->StatusString;</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (TmpStr != NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    BdsLibOutputStrings (gST->ConOut, TmpStr, Option->Description, L"\n\r", NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+    gBS->FreePool (TmpStr);</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsNoConsoleAction (</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  This function is remained for IBV/OEM to do some platform action,</span><br><span style="color: hsl(0, 100%, 40%);">-+  if there no console device can be connected.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  None.</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCCESS      - Direct return success now.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+ConvertSystemTable (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN     EFI_GUID        *TableGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN OUT VOID            **Table</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+  Convert ACPI Table /Smbios Table /MP Table if its location is lower than Address:0x100000</span><br><span style="color: hsl(0, 100%, 40%);">-+  Assumption here:</span><br><span style="color: hsl(0, 100%, 40%);">-+   As in legacy Bios, ACPI/Smbios/MP table is required to place in E/F Seg, </span><br><span style="color: hsl(0, 100%, 40%);">-+   So here we just check if the range is E/F seg, </span><br><span style="color: hsl(0, 100%, 40%);">-+   and if Not, assume the Memory type is EfiACPIReclaimMemory/EfiACPIMemoryNVS</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+  TableGuid - Guid of the table</span><br><span style="color: hsl(0, 100%, 40%);">-+  Table     - pointer to the table  </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCEESS - Convert Table successfully</span><br><span style="color: hsl(0, 100%, 40%);">-+  Other       - Failed</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS      Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID            *AcpiHeader;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN           AcpiTableLen;</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // If match acpi guid (1.0, 2.0, or later), Convert ACPI table according to version. </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  AcpiHeader = (VOID*)(UINTN)(*(UINT64 *)(*Table));</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  if (CompareGuid(TableGuid, &gEfiAcpiTableGuid) || CompareGuid(TableGuid, &gEfiAcpi20TableGuid)){</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (((EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)AcpiHeader)->Reserved == 0x00){</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      // If Acpi 1.0 Table, then RSDP structure doesn't contain Length field, use structure size</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      AcpiTableLen = sizeof (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER);</span><br><span style="color: hsl(0, 100%, 40%);">-+    } else if (((EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)AcpiHeader)->Reserved >= 0x02){</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      // If Acpi 2.0 or later, use RSDP Length fied.</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      AcpiTableLen = ((EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)AcpiHeader)->Length;</span><br><span style="color: hsl(0, 100%, 40%);">-+    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      // Invalid Acpi Version, return</span><br><span style="color: hsl(0, 100%, 40%);">-+      //</span><br><span style="color: hsl(0, 100%, 40%);">-+      return EFI_UNSUPPORTED;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+    Status = ConvertAcpiTable (AcpiTableLen, Table);</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status; </span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // If matches smbios guid, convert Smbios table.</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (CompareGuid(TableGuid, &gEfiSmbiosTableGuid)){</span><br><span style="color: hsl(0, 100%, 40%);">-+    Status = ConvertSmbiosTable (Table);</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // If the table is MP table?</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (CompareGuid(TableGuid, &gEfiMpsTableGuid)){</span><br><span style="color: hsl(0, 100%, 40%);">-+    Status = ConvertMpsTable (Table);</span><br><span style="color: hsl(0, 100%, 40%);">-+    return Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_UNSUPPORTED;</span><br><span style="color: hsl(0, 100%, 40%);">-+}  </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+ConvertAcpiTable (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN     UINTN                       TableLen,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN OUT VOID                        **Table</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+  Convert RSDP of ACPI Table if its location is lower than Address:0x100000</span><br><span style="color: hsl(0, 100%, 40%);">-+  Assumption here:</span><br><span style="color: hsl(0, 100%, 40%);">-+   As in legacy Bios, ACPI table is required to place in E/F Seg, </span><br><span style="color: hsl(0, 100%, 40%);">-+   So here we just check if the range is E/F seg, </span><br><span style="color: hsl(0, 100%, 40%);">-+   and if Not, assume the Memory type is EfiACPIReclaimMemory/EfiACPIMemoryNVS</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+  TableLen  - Acpi RSDP length</span><br><span style="color: hsl(0, 100%, 40%);">-+  Table     - pointer to the table  </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCEESS - Convert Table successfully</span><br><span style="color: hsl(0, 100%, 40%);">-+  Other       - Failed</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID                  *AcpiTableOri;</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID                  *AcpiTableNew;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS            Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PHYSICAL_ADDRESS  BufferPtr;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  AcpiTableOri    =  (VOID *)(UINTN)(*(UINT64*)(*Table));</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (((UINTN)AcpiTableOri < 0x100000) && ((UINTN)AcpiTableOri > 0xE0000)) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    BufferPtr = EFI_SYSTEM_TABLE_MAX_ADDRESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+    Status = gBS->AllocatePages (</span><br><span style="color: hsl(0, 100%, 40%);">-+                    AllocateMaxAddress,</span><br><span style="color: hsl(0, 100%, 40%);">-+                    EfiACPIMemoryNVS,</span><br><span style="color: hsl(0, 100%, 40%);">-+                    EFI_SIZE_TO_PAGES(TableLen),</span><br><span style="color: hsl(0, 100%, 40%);">-+                    &BufferPtr</span><br><span style="color: hsl(0, 100%, 40%);">-+                    );</span><br><span style="color: hsl(0, 100%, 40%);">-+    ASSERT_EFI_ERROR (Status);</span><br><span style="color: hsl(0, 100%, 40%);">-+    AcpiTableNew = (VOID *)(UINTN)BufferPtr;</span><br><span style="color: hsl(0, 100%, 40%);">-+    CopyMem (AcpiTableNew, AcpiTableOri, TableLen);</span><br><span style="color: hsl(0, 100%, 40%);">-+  } else {</span><br><span style="color: hsl(0, 100%, 40%);">-+    AcpiTableNew = AcpiTableOri;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Change configuration table Pointer</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  *Table = AcpiTableNew;</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+ConvertSmbiosTable (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN OUT VOID        **Table</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Convert Smbios Table if the Location of the SMBios Table is lower than Addres 0x100000</span><br><span style="color: hsl(0, 100%, 40%);">-+  Assumption here:</span><br><span style="color: hsl(0, 100%, 40%);">-+   As in legacy Bios, Smbios table is required to place in E/F Seg, </span><br><span style="color: hsl(0, 100%, 40%);">-+   So here we just check if the range is F seg, </span><br><span style="color: hsl(0, 100%, 40%);">-+   and if Not, assume the Memory type is EfiACPIMemoryNVS/EfiRuntimeServicesData</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+  Table     - pointer to the table</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCEESS - Convert Table successfully</span><br><span style="color: hsl(0, 100%, 40%);">-+  Other       - Failed</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  SMBIOS_TABLE_ENTRY_POINT *SmbiosTableNew;</span><br><span style="color: hsl(0, 100%, 40%);">-+  SMBIOS_TABLE_ENTRY_POINT *SmbiosTableOri;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS               Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                   SmbiosEntryLen;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                   BufferLen;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PHYSICAL_ADDRESS     BufferPtr;</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  SmbiosTableNew  = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+  SmbiosTableOri  = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Get Smibos configuration Table </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  SmbiosTableOri =  (SMBIOS_TABLE_ENTRY_POINT *)(UINTN)(*(UINT64*)(*Table));</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  if ((SmbiosTableOri == NULL) ||</span><br><span style="color: hsl(0, 100%, 40%);">-+      ((UINTN)SmbiosTableOri > 0x100000) ||</span><br><span style="color: hsl(0, 100%, 40%);">-+      ((UINTN)SmbiosTableOri < 0xF0000)){</span><br><span style="color: hsl(0, 100%, 40%);">-+    return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Relocate the Smibos memory</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  BufferPtr = EFI_SYSTEM_TABLE_MAX_ADDRESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (SmbiosTableOri->SmbiosBcdRevision != 0x21) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    SmbiosEntryLen  = SmbiosTableOri->EntryPointLength;</span><br><span style="color: hsl(0, 100%, 40%);">-+  } else {</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // According to Smbios Spec 2.4, we should set entry point length as 0x1F if version is 2.1</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    SmbiosEntryLen = 0x1F;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  BufferLen = SmbiosEntryLen + SYS_TABLE_PAD(SmbiosEntryLen) + SmbiosTableOri->TableLength;</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->AllocatePages (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  AllocateMaxAddress,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  EfiACPIMemoryNVS,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  EFI_SIZE_TO_PAGES(BufferLen),</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &BufferPtr</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  ASSERT_EFI_ERROR (Status);</span><br><span style="color: hsl(0, 100%, 40%);">-+  SmbiosTableNew = (SMBIOS_TABLE_ENTRY_POINT *)(UINTN)BufferPtr;</span><br><span style="color: hsl(0, 100%, 40%);">-+  CopyMem (</span><br><span style="color: hsl(0, 100%, 40%);">-+    SmbiosTableNew, </span><br><span style="color: hsl(0, 100%, 40%);">-+    SmbiosTableOri,</span><br><span style="color: hsl(0, 100%, 40%);">-+    SmbiosEntryLen</span><br><span style="color: hsl(0, 100%, 40%);">-+    );</span><br><span style="color: hsl(0, 100%, 40%);">-+  // </span><br><span style="color: hsl(0, 100%, 40%);">-+  // Get Smbios Structure table address, and make sure the start address is 32-bit align</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  BufferPtr += SmbiosEntryLen + SYS_TABLE_PAD(SmbiosEntryLen);</span><br><span style="color: hsl(0, 100%, 40%);">-+  CopyMem (</span><br><span style="color: hsl(0, 100%, 40%);">-+    (VOID *)(UINTN)BufferPtr, </span><br><span style="color: hsl(0, 100%, 40%);">-+    (VOID *)(UINTN)(SmbiosTableOri->TableAddress),</span><br><span style="color: hsl(0, 100%, 40%);">-+    SmbiosTableOri->TableLength</span><br><span style="color: hsl(0, 100%, 40%);">-+    );</span><br><span style="color: hsl(0, 100%, 40%);">-+  SmbiosTableNew->TableAddress = (UINT32)BufferPtr;</span><br><span style="color: hsl(0, 100%, 40%);">-+  SmbiosTableNew->IntermediateChecksum = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+  SmbiosTableNew->IntermediateChecksum = </span><br><span style="color: hsl(0, 100%, 40%);">-+          CalculateCheckSum8 ((UINT8*)SmbiosTableNew + 0x10, SmbiosEntryLen -0x10);</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Change the SMBIOS pointer</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  *Table = SmbiosTableNew;</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;  </span><br><span style="color: hsl(0, 100%, 40%);">-+} </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+ConvertMpsTable (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN OUT VOID          **Table</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Routine Description:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Convert MP Table if the Location of the SMBios Table is lower than Addres 0x100000</span><br><span style="color: hsl(0, 100%, 40%);">-+  Assumption here:</span><br><span style="color: hsl(0, 100%, 40%);">-+   As in legacy Bios, MP table is required to place in E/F Seg, </span><br><span style="color: hsl(0, 100%, 40%);">-+   So here we just check if the range is E/F seg, </span><br><span style="color: hsl(0, 100%, 40%);">-+   and if Not, assume the Memory type is EfiACPIMemoryNVS/EfiRuntimeServicesData</span><br><span style="color: hsl(0, 100%, 40%);">-+Arguments:</span><br><span style="color: hsl(0, 100%, 40%);">-+  Table     - pointer to the table</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_SUCEESS - Convert Table successfully</span><br><span style="color: hsl(0, 100%, 40%);">-+  Other       - Failed</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                                       Data32;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINT32                                       FPLength;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_LEGACY_MP_TABLE_FLOATING_POINTER         *MpsFloatingPointerOri;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_LEGACY_MP_TABLE_FLOATING_POINTER         *MpsFloatingPointerNew;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_LEGACY_MP_TABLE_HEADER                   *MpsTableOri;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_LEGACY_MP_TABLE_HEADER                   *MpsTableNew;</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID                                         *OemTableOri;</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID                                         *OemTableNew;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                                   Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_PHYSICAL_ADDRESS                         BufferPtr;</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Get MP configuration Table </span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  MpsFloatingPointerOri = (EFI_LEGACY_MP_TABLE_FLOATING_POINTER *)(UINTN)(*(UINT64*)(*Table));</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (!(((UINTN)MpsFloatingPointerOri <= 0x100000) && </span><br><span style="color: hsl(0, 100%, 40%);">-+        ((UINTN)MpsFloatingPointerOri >= 0xF0000))){</span><br><span style="color: hsl(0, 100%, 40%);">-+    return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Get Floating pointer structure length</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  FPLength = MpsFloatingPointerOri->Length * 16;</span><br><span style="color: hsl(0, 100%, 40%);">-+  Data32   = FPLength + SYS_TABLE_PAD (FPLength);</span><br><span style="color: hsl(0, 100%, 40%);">-+  MpsTableOri = (EFI_LEGACY_MP_TABLE_HEADER *)(UINTN)(MpsFloatingPointerOri->PhysicalAddress);</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (MpsTableOri != NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    Data32 += MpsTableOri->BaseTableLength;</span><br><span style="color: hsl(0, 100%, 40%);">-+    Data32 += MpsTableOri->ExtendedTableLength;</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (MpsTableOri->OemTablePointer != 0x00) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      Data32 += SYS_TABLE_PAD (Data32);</span><br><span style="color: hsl(0, 100%, 40%);">-+      Data32 += MpsTableOri->OemTableSize;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+  } else {</span><br><span style="color: hsl(0, 100%, 40%);">-+    return EFI_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Relocate memory</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  BufferPtr = EFI_SYSTEM_TABLE_MAX_ADDRESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->AllocatePages (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  AllocateMaxAddress,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  EfiACPIMemoryNVS,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  EFI_SIZE_TO_PAGES(Data32),</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &BufferPtr</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  ASSERT_EFI_ERROR (Status); </span><br><span style="color: hsl(0, 100%, 40%);">-+  MpsFloatingPointerNew = (EFI_LEGACY_MP_TABLE_FLOATING_POINTER *)(UINTN)BufferPtr;</span><br><span style="color: hsl(0, 100%, 40%);">-+  CopyMem (MpsFloatingPointerNew, MpsFloatingPointerOri, FPLength);</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // If Mp Table exists</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (MpsTableOri != NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Get Mps table length, including Ext table</span><br><span style="color: hsl(0, 100%, 40%);">-+    //</span><br><span style="color: hsl(0, 100%, 40%);">-+    BufferPtr = BufferPtr + FPLength + SYS_TABLE_PAD (FPLength);</span><br><span style="color: hsl(0, 100%, 40%);">-+    MpsTableNew = (EFI_LEGACY_MP_TABLE_HEADER *)(UINTN)BufferPtr;</span><br><span style="color: hsl(0, 100%, 40%);">-+    CopyMem (MpsTableNew, MpsTableOri, MpsTableOri->BaseTableLength + MpsTableOri->ExtendedTableLength);</span><br><span style="color: hsl(0, 100%, 40%);">-+    </span><br><span style="color: hsl(0, 100%, 40%);">-+    if ((MpsTableOri->OemTableSize != 0x0000) && (MpsTableOri->OemTablePointer != 0x0000)){</span><br><span style="color: hsl(0, 100%, 40%);">-+        BufferPtr += MpsTableOri->BaseTableLength + MpsTableOri->ExtendedTableLength;</span><br><span style="color: hsl(0, 100%, 40%);">-+        BufferPtr += SYS_TABLE_PAD (BufferPtr);</span><br><span style="color: hsl(0, 100%, 40%);">-+        OemTableNew = (VOID *)(UINTN)BufferPtr;</span><br><span style="color: hsl(0, 100%, 40%);">-+        OemTableOri = (VOID *)(UINTN)MpsTableOri->OemTablePointer;</span><br><span style="color: hsl(0, 100%, 40%);">-+        CopyMem (OemTableNew, OemTableOri, MpsTableOri->OemTableSize);</span><br><span style="color: hsl(0, 100%, 40%);">-+        MpsTableNew->OemTablePointer = (UINT32)(UINTN)OemTableNew;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+    MpsTableNew->Checksum = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+    MpsTableNew->Checksum = CalculateCheckSum8 ((UINT8*)MpsTableNew, MpsTableOri->BaseTableLength);</span><br><span style="color: hsl(0, 100%, 40%);">-+    MpsFloatingPointerNew->PhysicalAddress = (UINT32)(UINTN)MpsTableNew;</span><br><span style="color: hsl(0, 100%, 40%);">-+    MpsFloatingPointerNew->Checksum = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-+    MpsFloatingPointerNew->Checksum = CalculateCheckSum8 ((UINT8*)MpsFloatingPointerNew, FPLength);</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Change the pointer</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  *Table = MpsFloatingPointerNew;</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  return EFI_SUCCESS;  </span><br><span style="color: hsl(0, 100%, 40%);">-+} </span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+/**</span><br><span style="color: hsl(0, 100%, 40%);">-+  Lock the ConsoleIn device in system table. All key</span><br><span style="color: hsl(0, 100%, 40%);">-+  presses will be ignored until the Password is typed in. The only way to</span><br><span style="color: hsl(0, 100%, 40%);">-+  disable the password is to type it in to a ConIn device.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  @param  Password        Password used to lock ConIn device.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  @retval EFI_SUCCESS     lock the Console In Spliter virtual handle successfully.</span><br><span style="color: hsl(0, 100%, 40%);">-+  @retval EFI_UNSUPPORTED Password not found</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+**/</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+EFIAPI</span><br><span style="color: hsl(0, 100%, 40%);">-+LockKeyboards (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN  CHAR16    *Password</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+    return EFI_UNSUPPORTED;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+/**</span><br><span style="color: hsl(0, 100%, 40%);">-+  This function locks platform flash that is not allowed to be updated during normal boot path.</span><br><span style="color: hsl(0, 100%, 40%);">-+  The flash layout is platform specific.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  **/</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+EFIAPI</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsLockNonUpdatableFlash (</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  return;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.h b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.h</span><br><span style="color: hsl(0, 100%, 40%);">-new file mode 100644</span><br><span style="color: hsl(0, 100%, 40%);">-index 0000000000..d447f77747</span><br><span>---- /dev/null</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.h</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -0,0 +1,288 @@</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR></span><br><span style="color: hsl(0, 100%, 40%);">-+This program and the accompanying materials                          </span><br><span style="color: hsl(0, 100%, 40%);">-+are licensed and made available under the terms and conditions of the BSD License         </span><br><span style="color: hsl(0, 100%, 40%);">-+which accompanies this distribution.  The full text of the license may be found at        </span><br><span style="color: hsl(0, 100%, 40%);">-+http://opensource.org/licenses/bsd-license.php                                            </span><br><span style="color: hsl(0, 100%, 40%);">-+                                                                                          </span><br><span style="color: hsl(0, 100%, 40%);">-+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     </span><br><span style="color: hsl(0, 100%, 40%);">-+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Module Name: </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsPlatform.h</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Abstract:</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  Head file for BDS Platform specific code</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#ifndef _PLATFORM_SPECIFIC_BDS_PLATFORM_H_</span><br><span style="color: hsl(0, 100%, 40%);">-+#define _PLATFORM_SPECIFIC_BDS_PLATFORM_H_</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#include <PiDxe.h></span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#include <IndustryStandard/Pci.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <IndustryStandard/Acpi.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <IndustryStandard/SmBios.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <IndustryStandard/LegacyBiosMpTable.h></span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/DebugLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/BaseMemoryLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/UefiBootServicesTableLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/MemoryAllocationLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/BaseLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/PcdLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/GenericBdsLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/PlatformBdsLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/HobLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/UefiLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/DxeServicesTableLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Library/DevicePathLib.h></span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Protocol/PciIo.h></span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Guid/Acpi.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Guid/SmBios.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Guid/Mps.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Guid/HobList.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Guid/PciExpressBaseAddress.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Guid/GlobalVariable.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <Guid/LdrMemoryDescriptor.h></span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+extern BDS_CONSOLE_CONNECT_ENTRY  gPlatformConsole[];</span><br><span style="color: hsl(0, 100%, 40%);">-+extern EFI_DEVICE_PATH_PROTOCOL   *gPlatformConnectSequence[];</span><br><span style="color: hsl(0, 100%, 40%);">-+extern EFI_DEVICE_PATH_PROTOCOL   *gPlatformDriverOption[];</span><br><span style="color: hsl(0, 100%, 40%);">-+extern EFI_DEVICE_PATH_PROTOCOL   *gPlatformRootBridges[];</span><br><span style="color: hsl(0, 100%, 40%);">-+extern ACPI_HID_DEVICE_PATH       gPnpPs2KeyboardDeviceNode;</span><br><span style="color: hsl(0, 100%, 40%);">-+extern ACPI_HID_DEVICE_PATH       gPnp16550ComPortDeviceNode;</span><br><span style="color: hsl(0, 100%, 40%);">-+extern UART_DEVICE_PATH           gUartDeviceNode;</span><br><span style="color: hsl(0, 100%, 40%);">-+extern VENDOR_DEVICE_PATH         gTerminalTypeDeviceNode;</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+#define VarConsoleInpDev        L"ConInDev"</span><br><span style="color: hsl(0, 100%, 40%);">-+#define VarConsoleInp           L"ConIn"</span><br><span style="color: hsl(0, 100%, 40%);">-+#define VarConsoleOutDev        L"ConOutDev"</span><br><span style="color: hsl(0, 100%, 40%);">-+#define VarConsoleOut           L"ConOut"</span><br><span style="color: hsl(0, 100%, 40%);">-+#define VarErrorOutDev          L"ErrOutDev"</span><br><span style="color: hsl(0, 100%, 40%);">-+#define VarErrorOut             L"ErrOut"</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define PCI_DEVICE_PATH_NODE(Func, Dev) \</span><br><span style="color: hsl(0, 100%, 40%);">-+  { \</span><br><span style="color: hsl(0, 100%, 40%);">-+    { \</span><br><span style="color: hsl(0, 100%, 40%);">-+      HARDWARE_DEVICE_PATH, \</span><br><span style="color: hsl(0, 100%, 40%);">-+      HW_PCI_DP, \</span><br><span style="color: hsl(0, 100%, 40%);">-+      { \</span><br><span style="color: hsl(0, 100%, 40%);">-+        (UINT8) (sizeof (PCI_DEVICE_PATH)), \</span><br><span style="color: hsl(0, 100%, 40%);">-+        (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \</span><br><span style="color: hsl(0, 100%, 40%);">-+      } \</span><br><span style="color: hsl(0, 100%, 40%);">-+    }, \</span><br><span style="color: hsl(0, 100%, 40%);">-+    (Func), \</span><br><span style="color: hsl(0, 100%, 40%);">-+    (Dev) \</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define PNPID_DEVICE_PATH_NODE(PnpId) \</span><br><span style="color: hsl(0, 100%, 40%);">-+  { \</span><br><span style="color: hsl(0, 100%, 40%);">-+    { \</span><br><span style="color: hsl(0, 100%, 40%);">-+      ACPI_DEVICE_PATH, \</span><br><span style="color: hsl(0, 100%, 40%);">-+      ACPI_DP, \</span><br><span style="color: hsl(0, 100%, 40%);">-+      { \</span><br><span style="color: hsl(0, 100%, 40%);">-+        (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \</span><br><span style="color: hsl(0, 100%, 40%);">-+        (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \</span><br><span style="color: hsl(0, 100%, 40%);">-+      } \</span><br><span style="color: hsl(0, 100%, 40%);">-+    }, \</span><br><span style="color: hsl(0, 100%, 40%);">-+    EISA_PNP_ID((PnpId)), \</span><br><span style="color: hsl(0, 100%, 40%);">-+    0 \</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define gPciRootBridge \</span><br><span style="color: hsl(0, 100%, 40%);">-+  PNPID_DEVICE_PATH_NODE(0x0A03)</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define gPciIsaBridge \</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI_DEVICE_PATH_NODE(0, 0x1f)</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define gP2PBridge \</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI_DEVICE_PATH_NODE(0, 0x1e)</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define gPnpPs2Keyboard \</span><br><span style="color: hsl(0, 100%, 40%);">-+  PNPID_DEVICE_PATH_NODE(0x0303)</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define gPnp16550ComPort \</span><br><span style="color: hsl(0, 100%, 40%);">-+  PNPID_DEVICE_PATH_NODE(0x0501)</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define gUart \</span><br><span style="color: hsl(0, 100%, 40%);">-+  { \</span><br><span style="color: hsl(0, 100%, 40%);">-+    { \</span><br><span style="color: hsl(0, 100%, 40%);">-+      MESSAGING_DEVICE_PATH, \</span><br><span style="color: hsl(0, 100%, 40%);">-+      MSG_UART_DP, \</span><br><span style="color: hsl(0, 100%, 40%);">-+      { \</span><br><span style="color: hsl(0, 100%, 40%);">-+        (UINT8) (sizeof (UART_DEVICE_PATH)), \</span><br><span style="color: hsl(0, 100%, 40%);">-+        (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \</span><br><span style="color: hsl(0, 100%, 40%);">-+      } \</span><br><span style="color: hsl(0, 100%, 40%);">-+    }, \</span><br><span style="color: hsl(0, 100%, 40%);">-+    0, \</span><br><span style="color: hsl(0, 100%, 40%);">-+    115200, \</span><br><span style="color: hsl(0, 100%, 40%);">-+    8, \</span><br><span style="color: hsl(0, 100%, 40%);">-+    1, \</span><br><span style="color: hsl(0, 100%, 40%);">-+    1 \</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define gPcAnsiTerminal \</span><br><span style="color: hsl(0, 100%, 40%);">-+  { \</span><br><span style="color: hsl(0, 100%, 40%);">-+    { \</span><br><span style="color: hsl(0, 100%, 40%);">-+      MESSAGING_DEVICE_PATH, \</span><br><span style="color: hsl(0, 100%, 40%);">-+      MSG_VENDOR_DP, \</span><br><span style="color: hsl(0, 100%, 40%);">-+      { \</span><br><span style="color: hsl(0, 100%, 40%);">-+        (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \</span><br><span style="color: hsl(0, 100%, 40%);">-+        (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \</span><br><span style="color: hsl(0, 100%, 40%);">-+      } \</span><br><span style="color: hsl(0, 100%, 40%);">-+    }, \</span><br><span style="color: hsl(0, 100%, 40%);">-+    DEVICE_PATH_MESSAGING_PC_ANSI \</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define gEndEntire \</span><br><span style="color: hsl(0, 100%, 40%);">-+  { \</span><br><span style="color: hsl(0, 100%, 40%);">-+    END_DEVICE_PATH_TYPE, \</span><br><span style="color: hsl(0, 100%, 40%);">-+    END_ENTIRE_DEVICE_PATH_SUBTYPE, \</span><br><span style="color: hsl(0, 100%, 40%);">-+    { \</span><br><span style="color: hsl(0, 100%, 40%);">-+      END_DEVICE_PATH_LENGTH, \</span><br><span style="color: hsl(0, 100%, 40%);">-+      0 \</span><br><span style="color: hsl(0, 100%, 40%);">-+    } \</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define PCI_CLASS_SCC          0x07</span><br><span style="color: hsl(0, 100%, 40%);">-+#define PCI_SUBCLASS_SERIAL    0x00</span><br><span style="color: hsl(0, 100%, 40%);">-+#define PCI_IF_16550           0x02</span><br><span style="color: hsl(0, 100%, 40%);">-+#define IS_PCI_16550SERIAL(_p)           IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS_SERIAL, PCI_IF_16550)</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#define EFI_SYSTEM_TABLE_MAX_ADDRESS 0xFFFFFFFF</span><br><span style="color: hsl(0, 100%, 40%);">-+#define SYS_TABLE_PAD(ptr) (((~ptr) +1) & 0x07 )</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Platform Root Bridge</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+typedef struct {</span><br><span style="color: hsl(0, 100%, 40%);">-+  ACPI_HID_DEVICE_PATH      PciRootBridge;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL  End;</span><br><span style="color: hsl(0, 100%, 40%);">-+} PLATFORM_ROOT_BRIDGE_DEVICE_PATH;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+typedef struct {</span><br><span style="color: hsl(0, 100%, 40%);">-+  ACPI_HID_DEVICE_PATH      PciRootBridge;</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI_DEVICE_PATH           IsaBridge;</span><br><span style="color: hsl(0, 100%, 40%);">-+  ACPI_HID_DEVICE_PATH      Keyboard;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL  End;</span><br><span style="color: hsl(0, 100%, 40%);">-+} PLATFORM_DUMMY_ISA_KEYBOARD_DEVICE_PATH;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+typedef struct {</span><br><span style="color: hsl(0, 100%, 40%);">-+  ACPI_HID_DEVICE_PATH      PciRootBridge;</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI_DEVICE_PATH           IsaBridge;</span><br><span style="color: hsl(0, 100%, 40%);">-+  ACPI_HID_DEVICE_PATH      IsaSerial;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UART_DEVICE_PATH          Uart;</span><br><span style="color: hsl(0, 100%, 40%);">-+  VENDOR_DEVICE_PATH        TerminalType;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL  End;</span><br><span style="color: hsl(0, 100%, 40%);">-+} PLATFORM_DUMMY_ISA_SERIAL_DEVICE_PATH;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+typedef struct {</span><br><span style="color: hsl(0, 100%, 40%);">-+  ACPI_HID_DEVICE_PATH      PciRootBridge;</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI_DEVICE_PATH           VgaDevice;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL  End;</span><br><span style="color: hsl(0, 100%, 40%);">-+} PLATFORM_DUMMY_PCI_VGA_DEVICE_PATH;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+typedef struct {</span><br><span style="color: hsl(0, 100%, 40%);">-+  ACPI_HID_DEVICE_PATH      PciRootBridge;</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI_DEVICE_PATH           PciBridge;</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI_DEVICE_PATH           SerialDevice;</span><br><span style="color: hsl(0, 100%, 40%);">-+  UART_DEVICE_PATH          Uart;</span><br><span style="color: hsl(0, 100%, 40%);">-+  VENDOR_DEVICE_PATH        TerminalType;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL  End;</span><br><span style="color: hsl(0, 100%, 40%);">-+} PLATFORM_DUMMY_PCI_SERIAL_DEVICE_PATH;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// the short form device path for Usb keyboard</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+#define CLASS_HID           3</span><br><span style="color: hsl(0, 100%, 40%);">-+#define SUBCLASS_BOOT       1</span><br><span style="color: hsl(0, 100%, 40%);">-+#define PROTOCOL_KEYBOARD   1</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+typedef struct {</span><br><span style="color: hsl(0, 100%, 40%);">-+  USB_CLASS_DEVICE_PATH           UsbClass;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_DEVICE_PATH_PROTOCOL        End;</span><br><span style="color: hsl(0, 100%, 40%);">-+} USB_CLASS_FORMAT_DEVICE_PATH;  </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+extern PLATFORM_ROOT_BRIDGE_DEVICE_PATH  gPlatformRootBridge0;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Platform BDS Functions</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsGetDriverOption (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN LIST_ENTRY               *BdsDriverLists</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+BdsMemoryTest (</span><br><span style="color: hsl(0, 100%, 40%);">-+  EXTENDMEM_COVERAGE_LEVEL Level</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsShowProgress (</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground,</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground,</span><br><span style="color: hsl(0, 100%, 40%);">-+  CHAR16                        *Title,</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor,</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                         Progress,</span><br><span style="color: hsl(0, 100%, 40%);">-+  UINTN                         PreviousValue</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsConnectSequence (</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+ProcessCapsules (</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_BOOT_MODE BootMode</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsConnectConsole (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN BDS_CONSOLE_CONNECT_ENTRY   *PlatformConsole</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsNoConsoleAction (</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+ConvertMpsTable (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN OUT  VOID     **Table</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+ConvertSmbiosTable (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN OUT VOID       **Table</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+ConvertAcpiTable (</span><br><span style="color: hsl(0, 100%, 40%);">-+ IN      UINTN      TableLen,</span><br><span style="color: hsl(0, 100%, 40%);">-+ IN OUT  VOID       **Table</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_STATUS</span><br><span style="color: hsl(0, 100%, 40%);">-+ConvertSystemTable (</span><br><span style="color: hsl(0, 100%, 40%);">-+ IN     EFI_GUID   *TableGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+ IN OUT VOID       **Table</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+PlatformBdsEnterFrontPage (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN UINT16                 TimeoutDefault,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN BOOLEAN                ConnectAllHappened</span><br><span style="color: hsl(0, 100%, 40%);">-+  );</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#endif // _PLATFORM_SPECIFIC_BDS_PLATFORM_H_</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf b/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf</span><br><span style="color: hsl(0, 100%, 40%);">-new file mode 100644</span><br><span style="color: hsl(0, 100%, 40%);">-index 0000000000..578c74afae</span><br><span>---- /dev/null</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -0,0 +1,65 @@</span><br><span style="color: hsl(0, 100%, 40%);">-+## @file</span><br><span style="color: hsl(0, 100%, 40%);">-+#</span><br><span style="color: hsl(0, 100%, 40%);">-+# Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR></span><br><span style="color: hsl(0, 100%, 40%);">-+# This program and the accompanying materials                          </span><br><span style="color: hsl(0, 100%, 40%);">-+# are licensed and made available under the terms and conditions of the BSD License         </span><br><span style="color: hsl(0, 100%, 40%);">-+# which accompanies this distribution.  The full text of the license may be found at        </span><br><span style="color: hsl(0, 100%, 40%);">-+# http://opensource.org/licenses/bsd-license.php                                            </span><br><span style="color: hsl(0, 100%, 40%);">-+#                                                                                           </span><br><span style="color: hsl(0, 100%, 40%);">-+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     </span><br><span style="color: hsl(0, 100%, 40%);">-+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             </span><br><span style="color: hsl(0, 100%, 40%);">-+# </span><br><span style="color: hsl(0, 100%, 40%);">-+#  Module Name:</span><br><span style="color: hsl(0, 100%, 40%);">-+#</span><br><span style="color: hsl(0, 100%, 40%);">-+#    PlatformBds.inf</span><br><span style="color: hsl(0, 100%, 40%);">-+#</span><br><span style="color: hsl(0, 100%, 40%);">-+#  Abstract:</span><br><span style="color: hsl(0, 100%, 40%);">-+#</span><br><span style="color: hsl(0, 100%, 40%);">-+#    Component description file for Bds module.</span><br><span style="color: hsl(0, 100%, 40%);">-+#</span><br><span style="color: hsl(0, 100%, 40%);">-+##</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+[Defines]</span><br><span style="color: hsl(0, 100%, 40%);">-+  INF_VERSION                    = 0x00010005</span><br><span style="color: hsl(0, 100%, 40%);">-+  BASE_NAME                      = CorebootBds</span><br><span style="color: hsl(0, 100%, 40%);">-+  FILE_GUID                      = A6F691AC-31C8-4444-854C-E2C1A6950F92</span><br><span style="color: hsl(0, 100%, 40%);">-+  MODULE_TYPE                    = DXE_DRIVER</span><br><span style="color: hsl(0, 100%, 40%);">-+  VERSION_STRING                 = 1.0</span><br><span style="color: hsl(0, 100%, 40%);">-+  LIBRARY_CLASS                  = PlatformBdsLib|DXE_DRIVER</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+[Sources]</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsPlatform.c</span><br><span style="color: hsl(0, 100%, 40%);">-+  PlatformData.c</span><br><span style="color: hsl(0, 100%, 40%);">-+  BdsPlatform.h</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+[Packages]</span><br><span style="color: hsl(0, 100%, 40%);">-+  MdePkg/MdePkg.dec</span><br><span style="color: hsl(0, 100%, 40%);">-+  MdeModulePkg/MdeModulePkg.dec</span><br><span style="color: hsl(0, 100%, 40%);">-+  CorebootModulePkg/CorebootModulePkg.dec</span><br><span style="color: hsl(0, 100%, 40%);">-+  IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+[LibraryClasses]</span><br><span style="color: hsl(0, 100%, 40%);">-+  BaseLib</span><br><span style="color: hsl(0, 100%, 40%);">-+  MemoryAllocationLib</span><br><span style="color: hsl(0, 100%, 40%);">-+  UefiBootServicesTableLib</span><br><span style="color: hsl(0, 100%, 40%);">-+  BaseMemoryLib</span><br><span style="color: hsl(0, 100%, 40%);">-+  DebugLib</span><br><span style="color: hsl(0, 100%, 40%);">-+  PcdLib</span><br><span style="color: hsl(0, 100%, 40%);">-+  GenericBdsLib</span><br><span style="color: hsl(0, 100%, 40%);">-+  HobLib</span><br><span style="color: hsl(0, 100%, 40%);">-+  UefiLib</span><br><span style="color: hsl(0, 100%, 40%);">-+  DevicePathLib</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+[Guids]</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiGlobalVariableGuid</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiPciExpressBaseAddressGuid</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiAcpi20TableGuid</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiMpsTableGuid</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiSmbiosTableGuid</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiAcpiTableGuid</span><br><span style="color: hsl(0, 100%, 40%);">-+  gLdrMemoryDescriptorGuid</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+[Pcd]</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootModulePkg/Library/CorebootBdsLib/PlatformData.c b/CorebootModulePkg/Library/CorebootBdsLib/PlatformData.c</span><br><span style="color: hsl(0, 100%, 40%);">-new file mode 100644</span><br><span style="color: hsl(0, 100%, 40%);">-index 0000000000..fbdcc7de81</span><br><span>---- /dev/null</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootModulePkg/Library/CorebootBdsLib/PlatformData.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -0,0 +1,161 @@</span><br><span style="color: hsl(0, 100%, 40%);">-+/*++</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR></span><br><span style="color: hsl(0, 100%, 40%);">-+This program and the accompanying materials                          </span><br><span style="color: hsl(0, 100%, 40%);">-+are licensed and made available under the terms and conditions of the BSD License         </span><br><span style="color: hsl(0, 100%, 40%);">-+which accompanies this distribution.  The full text of the license may be found at        </span><br><span style="color: hsl(0, 100%, 40%);">-+http://opensource.org/licenses/bsd-license.php                                            </span><br><span style="color: hsl(0, 100%, 40%);">-+                                                                                          </span><br><span style="color: hsl(0, 100%, 40%);">-+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     </span><br><span style="color: hsl(0, 100%, 40%);">-+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Module Name: </span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  PlatformData.c</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+Abstract:</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  Defined the platform specific device path which will be used by</span><br><span style="color: hsl(0, 100%, 40%);">-+  platform Bbd to perform the platform policy connect.</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+--*/</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+#include "BdsPlatform.h"</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Predefined platform default time out value</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+UINT16   gPlatformBootTimeOutDefault = 3;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+ACPI_HID_DEVICE_PATH       gPnpPs2KeyboardDeviceNode  = gPnpPs2Keyboard;</span><br><span style="color: hsl(0, 100%, 40%);">-+ACPI_HID_DEVICE_PATH       gPnp16550ComPortDeviceNode = gPnp16550ComPort;</span><br><span style="color: hsl(0, 100%, 40%);">-+UART_DEVICE_PATH           gUartDeviceNode            = gUart;</span><br><span style="color: hsl(0, 100%, 40%);">-+VENDOR_DEVICE_PATH         gTerminalTypeDeviceNode    = gPcAnsiTerminal;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Predefined platform root bridge</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+PLATFORM_ROOT_BRIDGE_DEVICE_PATH  gPlatformRootBridge0 = {</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPciRootBridge,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEndEntire</span><br><span style="color: hsl(0, 100%, 40%);">-+};</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_DEVICE_PATH_PROTOCOL          *gPlatformRootBridges[] = {</span><br><span style="color: hsl(0, 100%, 40%);">-+  (EFI_DEVICE_PATH_PROTOCOL *) &gPlatformRootBridge0,</span><br><span style="color: hsl(0, 100%, 40%);">-+  NULL</span><br><span style="color: hsl(0, 100%, 40%);">-+};</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath = {</span><br><span style="color: hsl(0, 100%, 40%);">-+  {</span><br><span style="color: hsl(0, 100%, 40%);">-+    {</span><br><span style="color: hsl(0, 100%, 40%);">-+      MESSAGING_DEVICE_PATH,</span><br><span style="color: hsl(0, 100%, 40%);">-+      MSG_USB_CLASS_DP,</span><br><span style="color: hsl(0, 100%, 40%);">-+      {</span><br><span style="color: hsl(0, 100%, 40%);">-+        (UINT8) (sizeof (USB_CLASS_DEVICE_PATH)),</span><br><span style="color: hsl(0, 100%, 40%);">-+        (UINT8) ((sizeof (USB_CLASS_DEVICE_PATH)) >> 8)</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+    },</span><br><span style="color: hsl(0, 100%, 40%);">-+    0xffff,           // VendorId </span><br><span style="color: hsl(0, 100%, 40%);">-+    0xffff,           // ProductId </span><br><span style="color: hsl(0, 100%, 40%);">-+    CLASS_HID,        // DeviceClass </span><br><span style="color: hsl(0, 100%, 40%);">-+    SUBCLASS_BOOT,    // DeviceSubClass</span><br><span style="color: hsl(0, 100%, 40%);">-+    PROTOCOL_KEYBOARD // DeviceProtocol</span><br><span style="color: hsl(0, 100%, 40%);">-+  },</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  { </span><br><span style="color: hsl(0, 100%, 40%);">-+    END_DEVICE_PATH_TYPE, </span><br><span style="color: hsl(0, 100%, 40%);">-+    END_ENTIRE_DEVICE_PATH_SUBTYPE, </span><br><span style="color: hsl(0, 100%, 40%);">-+    {</span><br><span style="color: hsl(0, 100%, 40%);">-+      END_DEVICE_PATH_LENGTH, </span><br><span style="color: hsl(0, 100%, 40%);">-+      0</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+};</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+/*</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Platform specific Dummy ISA keyboard device path</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+PLATFORM_DUMMY_ISA_KEYBOARD_DEVICE_PATH     gDummyIsaKeyboardDevicePath = {</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPciRootBridge,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPciIsaBridge,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPnpPs2Keyboard,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEndEntire</span><br><span style="color: hsl(0, 100%, 40%);">-+};</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Platform specific Dummy ISA serial device path</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+PLATFORM_DUMMY_ISA_SERIAL_DEVICE_PATH   gDummyIsaSerialDevicePath = {</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPciRootBridge,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPciIsaBridge,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPnp16550ComPort,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gUart,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPcAnsiTerminal,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEndEntire</span><br><span style="color: hsl(0, 100%, 40%);">-+};</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Platform specific Dummy PCI VGA device path</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+PLATFORM_DUMMY_PCI_VGA_DEVICE_PATH gDummyPciVgaDevicePath = {</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPciRootBridge,</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI_DEVICE_PATH_NODE(0, 0x2),</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEndEntire</span><br><span style="color: hsl(0, 100%, 40%);">-+};</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Platform specific Dummy PCI serial device path</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+PLATFORM_DUMMY_PCI_SERIAL_DEVICE_PATH gDummyPciSerialDevicePath = {</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPciRootBridge,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gP2PBridge,</span><br><span style="color: hsl(0, 100%, 40%);">-+  PCI_DEVICE_PATH_NODE(0, 0x0),</span><br><span style="color: hsl(0, 100%, 40%);">-+  gUart,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gPcAnsiTerminal,</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEndEntire</span><br><span style="color: hsl(0, 100%, 40%);">-+};</span><br><span style="color: hsl(0, 100%, 40%);">-+*/</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Predefined platform default console device path</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+BDS_CONSOLE_CONNECT_ENTRY         gPlatformConsole[] = {</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // need update dynamically</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+//  {</span><br><span style="color: hsl(0, 100%, 40%);">-+//    (EFI_DEVICE_PATH_PROTOCOL *) &gDummyIsaSerialDevicePath,</span><br><span style="color: hsl(0, 100%, 40%);">-+//    (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)</span><br><span style="color: hsl(0, 100%, 40%);">-+//  },</span><br><span style="color: hsl(0, 100%, 40%);">-+//  {</span><br><span style="color: hsl(0, 100%, 40%);">-+//    (EFI_DEVICE_PATH_PROTOCOL *) &gDummyIsaKeyboardDevicePath,</span><br><span style="color: hsl(0, 100%, 40%);">-+//    (CONSOLE_IN | STD_ERROR)</span><br><span style="color: hsl(0, 100%, 40%);">-+//  },</span><br><span style="color: hsl(0, 100%, 40%);">-+//  {</span><br><span style="color: hsl(0, 100%, 40%);">-+//    (EFI_DEVICE_PATH_PROTOCOL *) &gDummyPciVgaDevicePath,</span><br><span style="color: hsl(0, 100%, 40%);">-+//    CONSOLE_OUT</span><br><span style="color: hsl(0, 100%, 40%);">-+//  },</span><br><span style="color: hsl(0, 100%, 40%);">-+//  {</span><br><span style="color: hsl(0, 100%, 40%);">-+//    (EFI_DEVICE_PATH_PROTOCOL *) &gDummyPciSerialDevicePath,</span><br><span style="color: hsl(0, 100%, 40%);">-+//    (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)</span><br><span style="color: hsl(0, 100%, 40%);">-+//  },</span><br><span style="color: hsl(0, 100%, 40%);">-+  {</span><br><span style="color: hsl(0, 100%, 40%);">-+    (EFI_DEVICE_PATH_PROTOCOL*) &gUsbClassKeyboardDevicePath, </span><br><span style="color: hsl(0, 100%, 40%);">-+    CONSOLE_IN</span><br><span style="color: hsl(0, 100%, 40%);">-+  },</span><br><span style="color: hsl(0, 100%, 40%);">-+  {</span><br><span style="color: hsl(0, 100%, 40%);">-+    NULL,</span><br><span style="color: hsl(0, 100%, 40%);">-+    0</span><br><span style="color: hsl(0, 100%, 40%);">-+  }</span><br><span style="color: hsl(0, 100%, 40%);">-+};</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Predefined platform specific driver option</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_DEVICE_PATH_PROTOCOL    *gPlatformDriverOption[] = { NULL };</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+// Predefined platform connect sequence</span><br><span style="color: hsl(0, 100%, 40%);">-+//</span><br><span style="color: hsl(0, 100%, 40%);">-+EFI_DEVICE_PATH_PROTOCOL    *gPlatformConnectSequence[] = { NULL };</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/CorebootPayloadPkg.fdf b/CorebootPayloadPkg/CorebootPayloadPkg.fdf</span><br><span style="color: hsl(0, 100%, 40%);">-index a39e3999ba..623ff9c344 100644</span><br><span>---- a/CorebootPayloadPkg/CorebootPayloadPkg.fdf</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/CorebootPayloadPkg.fdf</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -95,8 +95,9 @@ INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntime</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- INF UefiCpuPkg/CpuDxe/CpuDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--INF MdeModulePkg/Application/UiApp/UiApp.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+
</span><br><span style="color: hsl(0, 100%, 40%);">-+INF  IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+
</span><br><span style="color: hsl(0, 100%, 40%);">- !if $(USE_HPET_TIMER) == TRUE
</span><br><span style="color: hsl(0, 100%, 40%);">- INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- !else
</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-index e838aca61d..a329b78f08 100644</span><br><span>---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -165,6 +165,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  GenericBdsLib|IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -183,7 +184,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   ResetSystemLib|CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   SerialPortLib|CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   PlatformHookLib|CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--  PlatformBootManagerLib|CorebootPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  PlatformBdsLib|CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   IoApicLib|PcAtChipsetPkg/Library/BaseIoApicLib/BaseIoApicLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   CbPlatformSupportLib|CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -396,13 +397,12 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">-   MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   UefiCpuPkg/CpuDxe/CpuDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--  MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--  MdeModulePkg/Application/UiApp/UiApp.inf {
</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf {
</span><br><span style="color: hsl(0, 100%, 40%);">-     <LibraryClasses>
</span><br><span style="color: hsl(0, 100%, 40%);">--      NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--      NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--      NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+      PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   }
</span><br><span style="color: hsl(0, 100%, 40%);">-+
</span><br><span style="color: hsl(0, 100%, 40%);">- !if $(USE_HPET_TIMER) == TRUE
</span><br><span style="color: hsl(0, 100%, 40%);">-   PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- !else
</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-index c25d821fd4..790efd7810 100644</span><br><span>---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -165,6 +165,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  GenericBdsLib|IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -183,7 +184,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   ResetSystemLib|CorebootPayloadPkg/Library/ResetSystemLib/ResetSystemLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   SerialPortLib|CorebootModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   PlatformHookLib|CorebootPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--  PlatformBootManagerLib|CorebootPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  PlatformBdsLib|CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   IoApicLib|PcAtChipsetPkg/Library/BaseIoApicLib/BaseIoApicLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   CbPlatformSupportLib|CorebootModulePkg/Library/CbPlatformSupportLibNull/CbPlatformSupportLibNull.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -397,13 +398,12 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">-   MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   UefiCpuPkg/CpuDxe/CpuDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--  MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--  MdeModulePkg/Application/UiApp/UiApp.inf {
</span><br><span style="color: hsl(0, 100%, 40%);">-+  </span><br><span style="color: hsl(0, 100%, 40%);">-+  IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf {
</span><br><span style="color: hsl(0, 100%, 40%);">-     <LibraryClasses>
</span><br><span style="color: hsl(0, 100%, 40%);">--      NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--      NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">--      NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+      PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-   }
</span><br><span style="color: hsl(0, 100%, 40%);">-+
</span><br><span style="color: hsl(0, 100%, 40%);">- !if $(USE_HPET_TIMER) == TRUE
</span><br><span style="color: hsl(0, 100%, 40%);">-   PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- !else
</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.13.2.932.g7449e964c-goog</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/payloads/external/tianocore/patches/03_Library_EndofDXE.patch b/payloads/external/tianocore/patches/03_Library_EndofDXE.patch</span><br><span>deleted file mode 100644</span><br><span>index 02ba42b..0000000</span><br><span>--- a/payloads/external/tianocore/patches/03_Library_EndofDXE.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,86 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 760f1cafdd689beedc8418ab89e856b54296389c Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: CoolStar <coolstarorganization@gmail.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Sun, 4 Dec 2016 12:07:30 -0800</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH] CorebootBdsLib: Call End of DXE event to allow booting 3rd</span><br><span style="color: hsl(0, 100%, 40%);">- party efi binaries.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- .../Library/CorebootBdsLib/BdsPlatform.c           | 42 ++++++++++++++++++++++</span><br><span style="color: hsl(0, 100%, 40%);">- .../Library/CorebootBdsLib/PlatformBds.inf         |  1 +</span><br><span style="color: hsl(0, 100%, 40%);">- 2 files changed, 43 insertions(+)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c</span><br><span style="color: hsl(0, 100%, 40%);">-index b6253a17f8..cf3e5320cb 100644</span><br><span>---- a/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootModulePkg/Library/CorebootBdsLib/BdsPlatform.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1129,6 +1129,46 @@ Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-   Status = BaseMemoryTest (MemoryTestLevel);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+EFIAPI</span><br><span style="color: hsl(0, 100%, 40%);">-+InternalBdsEmptyCallbackFuntion (</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN EFI_EVENT                Event,</span><br><span style="color: hsl(0, 100%, 40%);">-+  IN VOID                     *Context</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  return;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+InstallReadyToLock (</span><br><span style="color: hsl(0, 100%, 40%);">-+  VOID</span><br><span style="color: hsl(0, 100%, 40%);">-+  )</span><br><span style="color: hsl(0, 100%, 40%);">-+{</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_STATUS                            Status;</span><br><span style="color: hsl(0, 100%, 40%);">-+  EFI_EVENT                             EndOfDxeEvent;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DEBUG((DEBUG_INFO,"InstallReadyToLock  entering......\n"));</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Inform the SMM infrastructure that we're entering BDS and may run 3rd party code hereafter</span><br><span style="color: hsl(0, 100%, 40%);">-+  // Since PI1.2.1, we need signal EndOfDxe as ExitPmAuth</span><br><span style="color: hsl(0, 100%, 40%);">-+  //</span><br><span style="color: hsl(0, 100%, 40%);">-+  Status = gBS->CreateEventEx (</span><br><span style="color: hsl(0, 100%, 40%);">-+                  EVT_NOTIFY_SIGNAL,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  TPL_CALLBACK,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  InternalBdsEmptyCallbackFuntion,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  NULL,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &gEfiEndOfDxeEventGroupGuid,</span><br><span style="color: hsl(0, 100%, 40%);">-+                  &EndOfDxeEvent</span><br><span style="color: hsl(0, 100%, 40%);">-+                  );</span><br><span style="color: hsl(0, 100%, 40%);">-+  ASSERT_EFI_ERROR (Status);</span><br><span style="color: hsl(0, 100%, 40%);">-+  gBS->SignalEvent (EndOfDxeEvent);</span><br><span style="color: hsl(0, 100%, 40%);">-+  gBS->CloseEvent (EndOfDxeEvent);</span><br><span style="color: hsl(0, 100%, 40%);">-+  DEBUG((DEBUG_INFO,"All EndOfDxe callbacks have returned successfully\n"));</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+  DEBUG((DEBUG_INFO,"InstallReadyToLock  end\n"));</span><br><span style="color: hsl(0, 100%, 40%);">-+  return;</span><br><span style="color: hsl(0, 100%, 40%);">-+}</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">- VOID</span><br><span style="color: hsl(0, 100%, 40%);">- EFIAPI</span><br><span style="color: hsl(0, 100%, 40%);">- PlatformBdsPolicyBehavior (</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1164,6 +1204,8 @@ Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-   EFI_INPUT_KEY                      Key;</span><br><span style="color: hsl(0, 100%, 40%);">-   EFI_BOOT_MODE                      BootMode;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+  InstallReadyToLock();</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-   //</span><br><span style="color: hsl(0, 100%, 40%);">-   // Init the time out value</span><br><span style="color: hsl(0, 100%, 40%);">-   //</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf b/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf</span><br><span style="color: hsl(0, 100%, 40%);">-index 578c74afae..992bd846bd 100644</span><br><span>---- a/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootModulePkg/Library/CorebootBdsLib/PlatformBds.inf</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -58,6 +58,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   gEfiSmbiosTableGuid</span><br><span style="color: hsl(0, 100%, 40%);">-   gEfiAcpiTableGuid</span><br><span style="color: hsl(0, 100%, 40%);">-   gLdrMemoryDescriptorGuid</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiEndOfDxeEventGroupGuid</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- [Pcd]</span><br><span style="color: hsl(0, 100%, 40%);">-   gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.13.2.725.g09c95d1e9-goog</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/payloads/external/tianocore/patches/04_CorebootPayloadPkg_addps2.patch b/payloads/external/tianocore/patches/04_CorebootPayloadPkg_addps2.patch</span><br><span>deleted file mode 100644</span><br><span>index e90b70e..0000000</span><br><span>--- a/payloads/external/tianocore/patches/04_CorebootPayloadPkg_addps2.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,56 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 77c5dfcce842819215490fe63c481860fa7d752d Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: CoolStar <coolstarorganization@gmail.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Sun, 4 Dec 2016 11:50:00 -0800</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH] CorebootPayloadPkg: Add PS/2 keyboard drivers.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootPayloadPkg/CorebootPayloadPkg.fdf        | 3 +++</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc    | 3 +++</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc | 3 +++</span><br><span style="color: hsl(0, 100%, 40%);">- 3 files changed, 9 insertions(+)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/CorebootPayloadPkg.fdf b/CorebootPayloadPkg/CorebootPayloadPkg.fdf</span><br><span style="color: hsl(0, 100%, 40%);">-index 347e9c75ce..a347af0c9a 100644</span><br><span>---- a/CorebootPayloadPkg/CorebootPayloadPkg.fdf</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/CorebootPayloadPkg.fdf</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -132,6 +132,9 @@ INF DuetPkg/PciBusNoEnumerationDxe/PciBusNoEnumeration.inf</span><br><span style="color: hsl(0, 100%, 40%);">- # ISA Support
</span><br><span style="color: hsl(0, 100%, 40%);">- #
</span><br><span style="color: hsl(0, 100%, 40%);">- INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+INF  PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+INF  IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+INF  IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- #
</span><br><span style="color: hsl(0, 100%, 40%);">- # Console Support
</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-index 5ce823bb95..60ee064c59 100644</span><br><span>---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -492,6 +492,9 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   # ISA Support
</span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">-   MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">-   # Console Support
</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-index fea297a77a..167329c897 100644</span><br><span>---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -493,6 +493,9 @@</span><br><span style="color: hsl(0, 100%, 40%);">-   # ISA Support
</span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">-   MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">-+  IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-   #
</span><br><span style="color: hsl(0, 100%, 40%);">-   # Console Support
</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.13.2.725.g09c95d1e9-goog</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/payloads/external/tianocore/patches/05_CorebootPayloadPkg_noserial.patch b/payloads/external/tianocore/patches/05_CorebootPayloadPkg_noserial.patch</span><br><span>deleted file mode 100644</span><br><span>index 0e84b7d..0000000</span><br><span>--- a/payloads/external/tianocore/patches/05_CorebootPayloadPkg_noserial.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,39 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 77f75370d6fbfefb04456f6e1c32c85d4bac8bf5 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Matt Devo <matt.devillier@gmail.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Thu, 23 Feb 2017 14:11:14 -0600</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH] CorebootPayloadPkg: don't use serial output</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc    | 2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc | 2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- 2 files changed, 2 insertions(+), 2 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-index 1d80fc4f5c..ce360c9e9e 100644</span><br><span>---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -261,7 +261,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">- #
</span><br><span style="color: hsl(0, 100%, 40%);">- ################################################################################
</span><br><span style="color: hsl(0, 100%, 40%);">- [PcdsFeatureFlag]
</span><br><span style="color: hsl(0, 100%, 40%);">--  gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|TRUE
</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|FALSE
</span><br><span style="color: hsl(0, 100%, 40%);">-   gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE
</span><br><span style="color: hsl(0, 100%, 40%);">-   gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode|FALSE
</span><br><span style="color: hsl(0, 100%, 40%);">-   gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE
</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-index 52b26eb3d0..a27b0873a1 100644</span><br><span>---- a/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/CorebootPayloadPkgIa32X64.dsc</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -261,7 +261,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">- #
</span><br><span style="color: hsl(0, 100%, 40%);">- ################################################################################
</span><br><span style="color: hsl(0, 100%, 40%);">- [PcdsFeatureFlag]
</span><br><span style="color: hsl(0, 100%, 40%);">--  gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|TRUE
</span><br><span style="color: hsl(0, 100%, 40%);">-+  gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|FALSE
</span><br><span style="color: hsl(0, 100%, 40%);">-   gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE
</span><br><span style="color: hsl(0, 100%, 40%);">-   gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode|TRUE
</span><br><span style="color: hsl(0, 100%, 40%);">-   gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE
</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.13.2.725.g09c95d1e9-goog</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/payloads/external/tianocore/patches/06_CorebootPayloadPkg_keep_cb_table.patch b/payloads/external/tianocore/patches/06_CorebootPayloadPkg_keep_cb_table.patch</span><br><span>deleted file mode 100644</span><br><span>index e75052b..0000000</span><br><span>--- a/payloads/external/tianocore/patches/06_CorebootPayloadPkg_keep_cb_table.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,26 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From ef89b11ce6f93c96fbd1753a8006dd9c3da212e0 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: ReddestDream <reddestdream@gmail.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Wed, 3 May 2017 00:13:28 -0400</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH] CbSupportPei: prevent lower coreboot table from being</span><br><span style="color: hsl(0, 100%, 40%);">- overwritten</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Exclude the bottom 4kb from being included in System Memory HoB</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootModulePkg/CbSupportPei/CbSupportPei.c b/CorebootModulePkg/CbSupportPei/CbSupportPei.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 262e6b9..d3c5723 100755</span><br><span>---- a/CorebootModulePkg/CbSupportPei/CbSupportPei.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootModulePkg/CbSupportPei/CbSupportPei.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -261,8 +261,9 @@ CbPeiEntryPoint (</span><br><span style="color: hsl(0, 100%, 40%);">-     EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |</span><br><span style="color: hsl(0, 100%, 40%);">-     EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE</span><br><span style="color: hsl(0, 100%, 40%);">-     ),</span><br><span style="color: hsl(0, 100%, 40%);">--    (EFI_PHYSICAL_ADDRESS)(0),</span><br><span style="color: hsl(0, 100%, 40%);">--    (UINT64)(0xA0000)</span><br><span style="color: hsl(0, 100%, 40%);">-+    // Lower 640KB, except for first 4KB where the lower coreboot pointer ("LBIO") resides</span><br><span style="color: hsl(0, 100%, 40%);">-+    (EFI_PHYSICAL_ADDRESS)(0 + 0x1000),</span><br><span style="color: hsl(0, 100%, 40%);">-+    (UINT64)(0xA0000 - 0x1000)</span><br><span style="color: hsl(0, 100%, 40%);">-     );</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>---</span><br><span style="color: hsl(0, 100%, 40%);">-2.14.0</span><br><span>diff --git a/payloads/external/tianocore/patches/07_CorebootPayloadPkg-Use-correct-BytesPerScanLine.patch b/payloads/external/tianocore/patches/07_CorebootPayloadPkg-Use-correct-BytesPerScanLine.patch</span><br><span>deleted file mode 100644</span><br><span>index 6370efc..0000000</span><br><span>--- a/payloads/external/tianocore/patches/07_CorebootPayloadPkg-Use-correct-BytesPerScanLine.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,31 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 07dec11fe965e73cfef7df38af70c945b6ff21a2 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Arthur Heymans <arthur@aheymans.xyz></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Wed, 24 Jan 2018 10:07:08 +0100</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH] CorebootPayloadPkg: Use correct BytesPerScanLine</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Fetch BytesPerScanLine from coreboot table to reflect how the actual</span><br><span style="color: hsl(0, 100%, 40%);">-framebuffer is set up instead of guessing it from the horizontal</span><br><span style="color: hsl(0, 100%, 40%);">-resolution.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-This fixes a garbled display when HorizontalResolution * (BitsPerPixel</span><br><span style="color: hsl(0, 100%, 40%);">-/ 8) and pFbInfo->BytesPerScanLine don't match.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Contributed-under: TianoCore Contribution Agreement 1.1</span><br><span style="color: hsl(0, 100%, 40%);">-Signed-off-by: Arthur Heymans <arthur@aheymans.xyz></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/CorebootPayloadPkg/FbGop/FbGop.c b/CorebootPayloadPkg/FbGop/FbGop.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 37d6def7f7..6790617033 100644</span><br><span>---- a/CorebootPayloadPkg/FbGop/FbGop.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/CorebootPayloadPkg/FbGop/FbGop.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -822,7 +822,7 @@ FbGopCheckForVbe (</span><br><span style="color: hsl(0, 100%, 40%);">-   BitsPerPixel         = pFbInfo->BitsPerPixel;
</span><br><span style="color: hsl(0, 100%, 40%);">-   HorizontalResolution = pFbInfo->HorizontalResolution;
</span><br><span style="color: hsl(0, 100%, 40%);">-   VerticalResolution   = pFbInfo->VerticalResolution;
</span><br><span style="color: hsl(0, 100%, 40%);">--  BytesPerScanLine     = HorizontalResolution * (BitsPerPixel / 8);
</span><br><span style="color: hsl(0, 100%, 40%);">-+  BytesPerScanLine     = pFbInfo->BytesPerScanLine;
</span><br><span style="color: hsl(0, 100%, 40%);">-   </span><br><span style="color: hsl(0, 100%, 40%);">-   ModeBuffer = (FB_VIDEO_MODE_DATA *) AllocatePool (
</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                                                                                                                                ModeNumber * sizeof (FB_VIDEO_MODE_DATA)
</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.16.1</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>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</span><br><span>deleted file mode 100644</span><br><span>index 06ddd56..0000000</span><br><span>--- a/payloads/external/tianocore/patches/08_BaseTools-Fix-building-with-Werror-stringop-truncati.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,38 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From b652262ed0dd554c44e7b1bf7134d3458f5edef1 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Patrick Rudolph <siro@das-labor.org></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Sun, 17 Jun 2018 08:44:51 +0200</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH] BaseTools: Fix building with -Werror=stringop-truncation</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Signed-off-by: Patrick Rudolph <siro@das-labor.org></span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- BaseTools/Source/C/GenVtf/GenVtf.c | 6 +++---</span><br><span style="color: hsl(0, 100%, 40%);">- 1 file changed, 3 insertions(+), 3 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/BaseTools/Source/C/GenVtf/GenVtf.c b/BaseTools/Source/C/GenVtf/GenVtf.c</span><br><span style="color: hsl(0, 100%, 40%);">-index acc142a6d1..5d77016eba 100644</span><br><span>---- a/BaseTools/Source/C/GenVtf/GenVtf.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/BaseTools/Source/C/GenVtf/GenVtf.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -129,9 +129,9 @@ Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-   } else {
</span><br><span style="color: hsl(0, 100%, 40%);">-     Length = strlen(Str);
</span><br><span style="color: hsl(0, 100%, 40%);">-     if (Length < 4) {
</span><br><span style="color: hsl(0, 100%, 40%);">--      strncpy (TemStr + 4 - Length, Str, Length);
</span><br><span style="color: hsl(0, 100%, 40%);">-+      memcpy (TemStr + 4 - Length, Str, Length);
</span><br><span style="color: hsl(0, 100%, 40%);">-     } else {
</span><br><span style="color: hsl(0, 100%, 40%);">--      strncpy (TemStr, Str + Length - 4, 4);
</span><br><span style="color: hsl(0, 100%, 40%);">-+      memcpy (TemStr, Str + Length - 4, 4);
</span><br><span style="color: hsl(0, 100%, 40%);">-     }
</span><br><span style="color: hsl(0, 100%, 40%);">-   </span><br><span style="color: hsl(0, 100%, 40%);">-     sscanf (
</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1529,7 +1529,7 @@ Returns:</span><br><span style="color: hsl(0, 100%, 40%);">-   //
</span><br><span style="color: hsl(0, 100%, 40%);">-   FitStartPtr = (FIT_TABLE *) RelativeAddress;
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--  strncpy ((CHAR8 *) &FitStartPtr->CompAddress, FIT_SIGNATURE, 8);  // "_FIT_   "
</span><br><span style="color: hsl(0, 100%, 40%);">-+  memcpy ((CHAR8 *) &FitStartPtr->CompAddress, FIT_SIGNATURE, 8);  // "_FIT_   "
</span><br><span style="color: hsl(0, 100%, 40%);">-   assert (((VtfInfo->CompSize & 0x00FFFFFF) % 16) == 0);
</span><br><span style="color: hsl(0, 100%, 40%);">-   FitStartPtr->CompSize     = (VtfInfo->CompSize & 0x00FFFFFF) / 16;
</span><br><span style="color: hsl(0, 100%, 40%);">-   FitStartPtr->CompVersion  = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.17.0</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/payloads/external/tianocore/patches/09_gcc7-Fix-building-with-fpermissive.patch b/payloads/external/tianocore/patches/09_gcc7-Fix-building-with-fpermissive.patch</span><br><span>deleted file mode 100644</span><br><span>index 7016759..0000000</span><br><span>--- a/payloads/external/tianocore/patches/09_gcc7-Fix-building-with-fpermissive.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,40 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 5546ab29b2c0c2fc3a963bc71221918dc77b6152 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Patrick Rudolph <siro@das-labor.org></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Sun, 17 Jun 2018 08:53:25 +0200</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH] gcc7: Fix building with -fpermissive</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Signed-off-by: Patrick Rudolph <siro@das-labor.org></span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp | 2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- MdeModulePkg/Library/UefiHiiLib/HiiLib.c        | 2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- 2 files changed, 2 insertions(+), 2 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-index 3ca57ed741..4fa066dd9f 100644</span><br><span>---- a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -3372,7 +3372,7 @@ CVfrStringDB::GetVarStoreNameFormStringId (</span><br><span style="color: hsl(0, 100%, 40%);">-   UINT8       BlockType;
</span><br><span style="color: hsl(0, 100%, 40%);">-   EFI_HII_STRING_PACKAGE_HDR *PkgHeader;
</span><br><span style="color: hsl(0, 100%, 40%);">-   </span><br><span style="color: hsl(0, 100%, 40%);">--  if (mStringFileName == '\0' ) {
</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (mStringFileName == NULL ) {
</span><br><span style="color: hsl(0, 100%, 40%);">-     return NULL;
</span><br><span style="color: hsl(0, 100%, 40%);">-   }
</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/MdeModulePkg/Library/UefiHiiLib/HiiLib.c b/MdeModulePkg/Library/UefiHiiLib/HiiLib.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 857950118f..de0aa5f7bc 100644</span><br><span>---- a/MdeModulePkg/Library/UefiHiiLib/HiiLib.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/MdeModulePkg/Library/UefiHiiLib/HiiLib.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -2181,7 +2181,7 @@ InternalHiiIfrValueAction (</span><br><span style="color: hsl(0, 100%, 40%);">-   </span><br><span style="color: hsl(0, 100%, 40%);">-   StringPtr = ConfigAltResp;
</span><br><span style="color: hsl(0, 100%, 40%);">-   </span><br><span style="color: hsl(0, 100%, 40%);">--  while (StringPtr != L'\0') {
</span><br><span style="color: hsl(0, 100%, 40%);">-+  while (StringPtr != NULL) {
</span><br><span style="color: hsl(0, 100%, 40%);">-     //
</span><br><span style="color: hsl(0, 100%, 40%);">-     // 1. Find <ConfigHdr> GUID=...&NAME=...&PATH=...
</span><br><span style="color: hsl(0, 100%, 40%);">-     //
</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.17.0</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/src/mainboard/intel/cannonlake_rvp/chromeos.fmd b/src/mainboard/intel/cannonlake_rvp/chromeos.fmd</span><br><span>index 65d22c3..d2b6364 100644</span><br><span>--- a/src/mainboard/intel/cannonlake_rvp/chromeos.fmd</span><br><span>+++ b/src/mainboard/intel/cannonlake_rvp/chromeos.fmd</span><br><span>@@ -1,21 +1,22 @@</span><br><span> FLASH@0xff000000 0x1000000 {</span><br><span style="color: hsl(0, 100%, 40%);">-      SI_ALL@0x0 0x380000 {</span><br><span style="color: hsl(120, 100%, 40%);">+ SI_ALL@0x0 0x400000 {</span><br><span>                SI_DESC@0x0 0x1000</span><br><span style="color: hsl(0, 100%, 40%);">-              SI_EC@0x01000 0x80000</span><br><span style="color: hsl(0, 100%, 40%);">-           SI_ME@0x81000 0x2ff000</span><br><span style="color: hsl(120, 100%, 40%);">+                SI_EC@0x01000 0x100000</span><br><span style="color: hsl(120, 100%, 40%);">+                SI_GBE@0x101000 0x2000</span><br><span style="color: hsl(120, 100%, 40%);">+                SI_ME@0x103000 0x2fd000</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-       SI_BIOS@0x380000 0xc80000 {</span><br><span style="color: hsl(0, 100%, 40%);">-             RW_SECTION_A@0x0 0x368000 {</span><br><span style="color: hsl(120, 100%, 40%);">+   SI_BIOS@0x400000 0xc00000 {</span><br><span style="color: hsl(120, 100%, 40%);">+           RW_SECTION_A@0x0 0x328000 {</span><br><span>                  VBLOCK_A@0x0 0x10000</span><br><span style="color: hsl(0, 100%, 40%);">-                    FW_MAIN_A(CBFS)@0x10000 0x357fc0</span><br><span style="color: hsl(0, 100%, 40%);">-                        RW_FWID_A@0x367fc0 0x40</span><br><span style="color: hsl(120, 100%, 40%);">+                       FW_MAIN_A(CBFS)@0x10000 0x317fc0</span><br><span style="color: hsl(120, 100%, 40%);">+                      RW_FWID_A@0x327fc0 0x40</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-               RW_SECTION_B@0x368000 0x368000 {</span><br><span style="color: hsl(120, 100%, 40%);">+              RW_SECTION_B@0x328000 0x328000 {</span><br><span>                     VBLOCK_B@0x0 0x10000</span><br><span style="color: hsl(0, 100%, 40%);">-                    FW_MAIN_B(CBFS)@0x10000 0x357fc0</span><br><span style="color: hsl(0, 100%, 40%);">-                        RW_FWID_B@0x367fc0 0x40</span><br><span style="color: hsl(120, 100%, 40%);">+                       FW_MAIN_B(CBFS)@0x10000 0x317fc0</span><br><span style="color: hsl(120, 100%, 40%);">+                      RW_FWID_B@0x327fc0 0x40</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-               RW_MISC@0x6d0000 0x30000 {</span><br><span style="color: hsl(120, 100%, 40%);">+            RW_MISC@0x650000 0x30000 {</span><br><span>                   UNIFIED_MRC_CACHE@0x0 0x20000 {</span><br><span>                              RECOVERY_MRC_CACHE@0x0 0x10000</span><br><span>                               RW_MRC_CACHE@0x10000 0x10000</span><br><span>@@ -28,9 +29,9 @@</span><br><span>                     RW_VPD@0x28000 0x2000</span><br><span>                        RW_NVRAM@0x2a000 0x6000</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-               SMMSTORE@0x700000 0x40000</span><br><span style="color: hsl(0, 100%, 40%);">-               RW_LEGACY(CBFS)@0x740000 0x1c0000</span><br><span style="color: hsl(0, 100%, 40%);">-               WP_RO@0x900000 0x380000 {</span><br><span style="color: hsl(120, 100%, 40%);">+             SMMSTORE@0x680000 0x40000</span><br><span style="color: hsl(120, 100%, 40%);">+             RW_LEGACY(CBFS)@0x6c0000 0x1c0000</span><br><span style="color: hsl(120, 100%, 40%);">+             WP_RO@0x880000 0x380000 {</span><br><span>                    RO_VPD@0x0 0x4000</span><br><span>                    RO_UNUSED@0x4000 0xc000</span><br><span>                      RO_SECTION@0x10000 0x370000 {</span><br><span>diff --git a/src/mainboard/intel/coffeelake_rvp/Makefile.inc b/src/mainboard/intel/coffeelake_rvp/Makefile.inc</span><br><span>index 2746453..4e02bce 100644</span><br><span>--- a/src/mainboard/intel/coffeelake_rvp/Makefile.inc</span><br><span>+++ b/src/mainboard/intel/coffeelake_rvp/Makefile.inc</span><br><span>@@ -16,6 +16,7 @@</span><br><span> </span><br><span> bootblock-y += bootblock.c</span><br><span> bootblock-$(CONFIG_CHROMEOS) += chromeos.c</span><br><span style="color: hsl(120, 100%, 40%);">+bootblock-y += early_init.c</span><br><span> </span><br><span> verstage-$(CONFIG_CHROMEOS) += chromeos.c</span><br><span> </span><br><span>diff --git a/src/mainboard/intel/coffeelake_rvp/bootblock.c b/src/mainboard/intel/coffeelake_rvp/bootblock.c</span><br><span>index cac219e..8917f41 100644</span><br><span>--- a/src/mainboard/intel/coffeelake_rvp/bootblock.c</span><br><span>+++ b/src/mainboard/intel/coffeelake_rvp/bootblock.c</span><br><span>@@ -24,4 +24,5 @@</span><br><span> </span><br><span>    pads = variant_early_gpio_table(&num);</span><br><span>   gpio_configure_pads(pads, num);</span><br><span style="color: hsl(120, 100%, 40%);">+       wilco_ec_early_init();</span><br><span> }</span><br><span>diff --git a/src/mainboard/intel/coffeelake_rvp/early_init.c b/src/mainboard/intel/coffeelake_rvp/early_init.c</span><br><span>new file mode 100644</span><br><span>index 0000000..7c0ad9b</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/intel/coffeelake_rvp/early_init.c</span><br><span>@@ -0,0 +1,50 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright 2018 Google LLC</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <arch/io.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <device/pnp_def.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <baseboard/variants.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define PNP_CFG_IDX        0x2e</span><br><span style="color: hsl(120, 100%, 40%);">+#define PNP_LDN_SERIAL    0x0d</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void pnp_enter_conf_state(pnp_devfn_t dev)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  outb(0x55, PNP_CFG_IDX);</span><br><span style="color: hsl(120, 100%, 40%);">+      outb(0x55, PNP_CFG_IDX);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void pnp_exit_conf_state(pnp_devfn_t dev)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    outb(0xaa, PNP_CFG_IDX);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void wilco_ec_serial_init(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      pnp_devfn_t dev = PNP_DEV(PNP_CFG_IDX, PNP_LDN_SERIAL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     pnp_enter_conf_state(dev);</span><br><span style="color: hsl(120, 100%, 40%);">+    pnp_set_logical_device(dev);</span><br><span style="color: hsl(120, 100%, 40%);">+  pnp_set_enable(dev, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+       pnp_set_iobase(dev, PNP_IDX_IO1, cpu_to_be16(CONFIG_TTYS0_BASE));</span><br><span style="color: hsl(120, 100%, 40%);">+     pnp_write_config(dev, PNP_IDX_IO0, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+        pnp_exit_conf_state(dev);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void wilco_ec_early_init(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     if (IS_ENABLED(CONFIG_DRIVERS_UART_8250IO))</span><br><span style="color: hsl(120, 100%, 40%);">+           wilco_ec_serial_init();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/mainboard/intel/coffeelake_rvp/memory.c b/src/mainboard/intel/coffeelake_rvp/memory.c</span><br><span>index 7058be4..2665077 100644</span><br><span>--- a/src/mainboard/intel/coffeelake_rvp/memory.c</span><br><span>+++ b/src/mainboard/intel/coffeelake_rvp/memory.c</span><br><span>@@ -28,8 +28,8 @@</span><br><span>       * the index = pin number on ddr4 part</span><br><span>        * the value = pin number on SoC</span><br><span>      */</span><br><span style="color: hsl(0, 100%, 40%);">-     .dqs_map[DDR_CH0] = { 0, 1, 3, 2, 4, 5, 6, 7 },</span><br><span style="color: hsl(0, 100%, 40%);">- .dqs_map[DDR_CH1] = { 1, 0, 4, 5, 2, 3, 6, 7 },</span><br><span style="color: hsl(120, 100%, 40%);">+       .dqs_map[DDR_CH0] = { 0, 1, 4, 5, 2, 3, 6, 7 },</span><br><span style="color: hsl(120, 100%, 40%);">+       .dqs_map[DDR_CH1] = { 0, 1, 4, 5, 2, 3, 6, 7 },</span><br><span> </span><br><span>  /* Baseboard uses 121, 81 and 100 rcomp resistors */</span><br><span>         .rcomp_resistor = { 121, 81, 100 },</span><br><span>@@ -40,7 +40,7 @@</span><br><span>      .rcomp_targets = { 100, 40, 20, 20, 26 },</span><br><span> </span><br><span>        /* Baseboard is an interleaved design */</span><br><span style="color: hsl(0, 100%, 40%);">-        .dq_pins_interleaved = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+     .dq_pins_interleaved = 0,</span><br><span> </span><br><span>        /* Baseboard is using config 2 for vref_ca */</span><br><span>        .vref_ca_config = 2,</span><br><span>diff --git a/src/mainboard/intel/coffeelake_rvp/variants/baseboard/include/baseboard/variants.h b/src/mainboard/intel/coffeelake_rvp/variants/baseboard/include/baseboard/variants.h</span><br><span>index 64ff69f..23e613e 100644</span><br><span>--- a/src/mainboard/intel/coffeelake_rvp/variants/baseboard/include/baseboard/variants.h</span><br><span>+++ b/src/mainboard/intel/coffeelake_rvp/variants/baseboard/include/baseboard/variants.h</span><br><span>@@ -36,4 +36,6 @@</span><br><span> struct nhlt;</span><br><span> void variant_nhlt_init(struct nhlt *nhlt);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void wilco_ec_early_init(void);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #endif /*__BASEBOARD_VARIANTS_H__ */</span><br><span>diff --git a/src/mainboard/intel/coffeelake_rvp/variants/cfl_u/devicetree.cb b/src/mainboard/intel/coffeelake_rvp/variants/cfl_u/devicetree.cb</span><br><span>index 6bd90a5..f4bfcff 100644</span><br><span>--- a/src/mainboard/intel/coffeelake_rvp/variants/cfl_u/devicetree.cb</span><br><span>+++ b/src/mainboard/intel/coffeelake_rvp/variants/cfl_u/devicetree.cb</span><br><span>@@ -10,6 +10,7 @@</span><br><span>      register "ScsEmmcEnabled" = "1"</span><br><span>  register "ScsEmmcHs400Enabled" = "1"</span><br><span>     register "ScsSdCardEnabled" = "1"</span><br><span style="color: hsl(120, 100%, 40%);">+ register "DebugConsent" = "3"</span><br><span> </span><br><span>        register "usb2_ports[0]" = "USB2_PORT_TYPE_C(OC0)"</span><br><span>       register "usb2_ports[1]" = "USB2_PORT_MID(OC0)"</span><br><span>diff --git a/src/soc/intel/cannonlake/Kconfig b/src/soc/intel/cannonlake/Kconfig</span><br><span>index 256cf1b..c71ec39 100644</span><br><span>--- a/src/soc/intel/cannonlake/Kconfig</span><br><span>+++ b/src/soc/intel/cannonlake/Kconfig</span><br><span>@@ -82,8 +82,7 @@</span><br><span>         select CONSOLE_SERIAL</span><br><span>        select BOOTBLOCK_CONSOLE</span><br><span>     select DRIVERS_UART</span><br><span style="color: hsl(0, 100%, 40%);">-     select DRIVERS_UART_8250MEM_32</span><br><span style="color: hsl(0, 100%, 40%);">-  select NO_UART_ON_SUPERIO</span><br><span style="color: hsl(120, 100%, 40%);">+     select DRIVERS_UART_8250IO</span><br><span> </span><br><span> config UART_FOR_CONSOLE</span><br><span>    int "Index for LPSS UART port to use for console"</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/28688">change 28688</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/28688"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I5449981baabcbb891e1036177307c58f5e2008ac </div>
<div style="display:none"> Gerrit-Change-Number: 28688 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Lijian Zhao <lijian.zhao@intel.com> </div>