* [edk2-platforms Patch 01/14] Vlv2DeviceRefCodePkg: Add gEfiSmmIchnDispatchProtocolGuid
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:06 ` Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 02/14] Vlv2TbltDevicePkg: Reduce Intel Framework dependencies Michael D Kinney
` (13 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
* Add the gEfiSmmIchnDispatchProtocolGuid from the IntelFrameworkPkg
to the Si specific Vlv2TbltDevicePkg. This removes a dependency
on the IntelFrameworkPkg and adds a Si specific protocol to a Si
package.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Include/Protocol/SmmIchnDispatch.h | 183 ++++++++++++++++++
.../Vlv2DeviceRefCodePkg.dec | 5 +-
2 files changed, 186 insertions(+), 2 deletions(-)
create mode 100644 Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/SmmIchnDispatch.h
diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/SmmIchnDispatch.h b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/SmmIchnDispatch.h
new file mode 100644
index 0000000000..3cf86c0ff9
--- /dev/null
+++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/SmmIchnDispatch.h
@@ -0,0 +1,183 @@
+/** @file
+ Provides the parent dispatch service for a given SMI source generator.
+ The EFI_SMM_ICHN_DISPATCH_PROTOCOL provides the ability to install child handlers for
+ the given event types.
+
+Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+ @par Revision Reference:
+ This Protocol is defined in Framework of EFI SMM Core Interface Spec
+ Version 0.9.
+
+**/
+
+#ifndef _EFI_SMM_ICHN_DISPATCH_H_
+#define _EFI_SMM_ICHN_DISPATCH_H_
+
+
+//
+// Global ID for the ICH SMI Protocol
+//
+#define EFI_SMM_ICHN_DISPATCH_PROTOCOL_GUID \
+ { \
+ 0xc50b323e, 0x9075, 0x4f2a, {0xac, 0x8e, 0xd2, 0x59, 0x6a, 0x10, 0x85, 0xcc } \
+ }
+
+typedef struct _EFI_SMM_ICHN_DISPATCH_PROTOCOL EFI_SMM_ICHN_DISPATCH_PROTOCOL;
+
+//
+// Related Definitions
+//
+//
+// ICHN Specific SMIs. These are miscellaneous SMI sources that are supported by the
+// ICHN specific SMI implementation. These may change over time. TrapNumber is only
+// valid if the Type is Trap.
+//
+typedef enum {
+ //
+ // NOTE: NEVER delete items from this list/enumeration! Doing so will prevent other versions
+ // of the code from compiling. If the ICH version your driver is written for doesn't support
+ // some of these SMIs, then simply return EFI_UNSUPPORTED when a child/client tries to register
+ // for them.
+ //
+ IchnMch,
+ IchnPme,
+ IchnRtcAlarm,
+ IchnRingIndicate,
+ IchnAc97Wake,
+ IchnSerialIrq,
+ IchnY2KRollover,
+ IchnTcoTimeout,
+ IchnOsTco,
+ IchnNmi,
+ IchnIntruderDetect,
+ IchnBiosWp,
+ IchnMcSmi,
+ IchnPmeB0,
+ IchnThrmSts,
+ IchnSmBus,
+ IchnIntelUsb2,
+ IchnMonSmi7,
+ IchnMonSmi6,
+ IchnMonSmi5,
+ IchnMonSmi4,
+ IchnDevTrap13,
+ IchnDevTrap12,
+ IchnDevTrap11,
+ IchnDevTrap10,
+ IchnDevTrap9,
+ IchnDevTrap8,
+ IchnDevTrap7,
+ IchnDevTrap6,
+ IchnDevTrap5,
+ IchnDevTrap3,
+ IchnDevTrap2,
+ IchnDevTrap1,
+ IchnDevTrap0,
+ IchnIoTrap3,
+ IchnIoTrap2,
+ IchnIoTrap1,
+ IchnIoTrap0,
+ IchnPciExpress,
+ IchnMonitor,
+ IchnSpi,
+ IchnQRT,
+ IchnGpioUnlock,
+ //
+ // INSERT NEW ITEMS JUST BEFORE THIS LINE
+ //
+ NUM_ICHN_TYPES // the number of items in this enumeration
+} EFI_SMM_ICHN_SMI_TYPE;
+
+typedef struct {
+ EFI_SMM_ICHN_SMI_TYPE Type;
+} EFI_SMM_ICHN_DISPATCH_CONTEXT;
+
+//
+// Member functions
+//
+/**
+ Dispatch function for a ICHN specific SMI handler.
+
+ @param DispatchHandle The handle of this dispatch function.
+ @param DispatchContext The pointer to the dispatch function's context.
+ The DispatchContext fields are filled in
+ by the dispatching driver prior to
+ invoking this dispatch function.
+
+ @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_SMM_ICHN_DISPATCH)(
+ IN EFI_HANDLE DispatchHandle,
+ IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext
+ );
+
+/**
+ Register a child SMI source dispatch function with a parent SMM driver.
+
+ @param This The pointer to the EFI_SMM_ICHN_DISPATCH_PROTOCOL instance.
+ @param DispatchFunction The function to install.
+ @param DispatchContext The pointer to the dispatch function's context.
+ The caller fills in this context before calling
+ the register function to indicate to the register
+ function the ICHN SMI source for which the dispatch
+ function should be invoked.
+ @param DispatchHandle The handle generated by the dispatcher to track the function
+ instance.
+
+ @retval EFI_SUCCESS The dispatch function has been successfully
+ registered and the SMI source has been enabled.
+ @retval EFI_DEVICE_ERROR The driver could not enable the SMI source.
+ @retval EFI_OUT_OF_RESOURCES Not enough memory (system or SMM) to manage this
+ child.
+ @retval EFI_INVALID_PARAMETER DispatchContext is invalid. The ICHN input value
+ is not within valid range.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_ICHN_REGISTER)(
+ IN EFI_SMM_ICHN_DISPATCH_PROTOCOL *This,
+ IN EFI_SMM_ICHN_DISPATCH DispatchFunction,
+ IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext,
+ OUT EFI_HANDLE *DispatchHandle
+ );
+
+/**
+ Unregister a child SMI source dispatch function with a parent SMM driver
+
+ @param This The pointer to the EFI_SMM_ICHN_DISPATCH_PROTOCOL instance.
+ @param DispatchHandle The handle of the service to remove.
+
+ @retval EFI_SUCCESS The dispatch function has been successfully
+ unregistered, and the SMI source has been disabled,
+ if there are no other registered child dispatch
+ functions for this SMI source.
+ @retval EFI_INVALID_PARAMETER The handle is invalid.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_ICHN_UNREGISTER)(
+ IN EFI_SMM_ICHN_DISPATCH_PROTOCOL *This,
+ IN EFI_HANDLE DispatchHandle
+ );
+
+//
+// Interface structure for the SMM ICHN specific SMI Dispatch Protocol
+//
+/**
+ Provides the parent dispatch service for a given SMI source generator.
+**/
+struct _EFI_SMM_ICHN_DISPATCH_PROTOCOL {
+ EFI_SMM_ICHN_REGISTER Register; ///< Installs a child service to be dispatched by this protocol.
+ EFI_SMM_ICHN_UNREGISTER UnRegister; ///< Removes a child service dispatched by this protocol.
+};
+
+extern EFI_GUID gEfiSmmIchnDispatchProtocolGuid;
+
+#endif
diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec b/Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
index 6117f179ba..1af1ed757c 100644
--- a/Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
+++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
@@ -1,6 +1,6 @@
## @file Vlv2DeviceRefCodePkg.dec
#
-# Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved
+# Copyright (c) 2012 - 2019, Intel Corporation. All rights reserved
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -32,7 +32,7 @@ [Ppis]
gEfiPeiReadOnlyVariable2PpiGuid = { 0x2ab86ef5, 0xecb5, 0x4134, {0xb5, 0x56, 0x38, 0x54, 0xca, 0x1f, 0xe1, 0xb4}}
gPchPeiInitPpiGuid = { 0xACB93B08, 0x5CDC, 0x4A8F, {0x93, 0xD4, 0x6, 0xE3, 0x42, 0xDF, 0x18, 0x2E}}
gPttPassThruPpiGuid = { 0xc5068bac, 0xa7dc, 0x42f1, {0xae, 0x80, 0xca, 0xa2, 0x4b, 0xb4, 0x90, 0x4b}}
-
+
[Protocols]
gEfiGlobalNvsAreaProtocolGuid = { 0x074e1e48, 0x8132, 0x47a1, {0x8c, 0x2c, 0x3f, 0x14, 0xad, 0x9a, 0x66, 0xdc}}
gPpmPlatformPolicyProtocolGuid = { 0xddabfeac, 0xef63, 0x452c, {0x8f, 0x39, 0xed, 0x7f, 0xae, 0xd8, 0x26, 0x5e}}
@@ -41,6 +41,7 @@ [Protocols]
gEfiSdHostIoProtocolGuid = { 0xb63f8ec7, 0xa9c9, 0x4472, {0xa4, 0xc0, 0x4d, 0x8b, 0xf3, 0x65, 0xcc, 0x51}}
gEfiSpiProtocolGuid = { 0x1156efc6, 0xea32, 0x4396, {0xb5, 0xd5, 0x26, 0x93, 0x2e, 0x83, 0xc3, 0x13}}
gEfiSmmSpiProtocolGuid = { 0xD9072C35, 0xEB8F, 0x43AD, {0xA2, 0x20, 0x34, 0xD4, 0x0E, 0x2A, 0x82, 0x85}}
+ gEfiSmmIchnDispatchProtocolGuid = { 0xc50b323e, 0x9075, 0x4f2a, { 0xac, 0x8e, 0xd2, 0x59, 0x6a, 0x10, 0x85, 0xcc}}
gEfiSmmIchnDispatchExProtocolGuid = { 0x3920405B, 0xC897, 0x44DA, {0x88, 0xF3, 0x4C, 0x49, 0x8A, 0x6F, 0xF7, 0x36}}
gEfiPchS3SupportProtocolGuid = { 0xE287D20B, 0xD897, 0x4E1E, {0xA5, 0xD9, 0x97, 0x77, 0x63, 0x93, 0x6A, 0x04}}
gPchResetProtocolGuid = { 0xDB63592C, 0xB8CC, 0x44C8, {0x91, 0x8C, 0x51, 0xF5, 0x34, 0x59, 0x8A, 0x5A}}
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-platforms Patch 01/14] Vlv2DeviceRefCodePkg: Add gEfiSmmIchnDispatchProtocolGuid
2019-07-01 2:55 ` [edk2-platforms Patch 01/14] Vlv2DeviceRefCodePkg: Add gEfiSmmIchnDispatchProtocolGuid Michael D Kinney
@ 2019-07-01 4:06 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:06 UTC (permalink / raw)
To: Kinney, Michael D, devel@edk2.groups.io; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: Kinney, Michael D
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-platforms Patch 01/14] Vlv2DeviceRefCodePkg: Add gEfiSmmIchnDispatchProtocolGuid
* Add the gEfiSmmIchnDispatchProtocolGuid from the IntelFrameworkPkg
to the Si specific Vlv2TbltDevicePkg. This removes a dependency
on the IntelFrameworkPkg and adds a Si specific protocol to a Si
package.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Include/Protocol/SmmIchnDispatch.h | 183 ++++++++++++++++++
.../Vlv2DeviceRefCodePkg.dec | 5 +-
2 files changed, 186 insertions(+), 2 deletions(-) create mode 100644 Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/SmmIchnDispatch.h
diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/SmmIchnDispatch.h b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/SmmIchnDispatch.h
new file mode 100644
index 0000000000..3cf86c0ff9
--- /dev/null
+++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/SmmIchnDispatc
+++ h.h
@@ -0,0 +1,183 @@
+/** @file
+ Provides the parent dispatch service for a given SMI source generator.
+ The EFI_SMM_ICHN_DISPATCH_PROTOCOL provides the ability to install
+child handlers for
+ the given event types.
+
+Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+ @par Revision Reference:
+ This Protocol is defined in Framework of EFI SMM Core Interface Spec
+ Version 0.9.
+
+**/
+
+#ifndef _EFI_SMM_ICHN_DISPATCH_H_
+#define _EFI_SMM_ICHN_DISPATCH_H_
+
+
+//
+// Global ID for the ICH SMI Protocol
+//
+#define EFI_SMM_ICHN_DISPATCH_PROTOCOL_GUID \
+ { \
+ 0xc50b323e, 0x9075, 0x4f2a, {0xac, 0x8e, 0xd2, 0x59, 0x6a, 0x10,
+0x85, 0xcc } \
+ }
+
+typedef struct _EFI_SMM_ICHN_DISPATCH_PROTOCOL
+EFI_SMM_ICHN_DISPATCH_PROTOCOL;
+
+//
+// Related Definitions
+//
+//
+// ICHN Specific SMIs. These are miscellaneous SMI sources that are
+supported by the // ICHN specific SMI implementation. These may change
+over time. TrapNumber is only // valid if the Type is Trap.
+//
+typedef enum {
+ //
+ // NOTE: NEVER delete items from this list/enumeration! Doing so
+will prevent other versions
+ // of the code from compiling. If the ICH version your driver is
+written for doesn't support
+ // some of these SMIs, then simply return EFI_UNSUPPORTED when a
+child/client tries to register
+ // for them.
+ //
+ IchnMch,
+ IchnPme,
+ IchnRtcAlarm,
+ IchnRingIndicate,
+ IchnAc97Wake,
+ IchnSerialIrq,
+ IchnY2KRollover,
+ IchnTcoTimeout,
+ IchnOsTco,
+ IchnNmi,
+ IchnIntruderDetect,
+ IchnBiosWp,
+ IchnMcSmi,
+ IchnPmeB0,
+ IchnThrmSts,
+ IchnSmBus,
+ IchnIntelUsb2,
+ IchnMonSmi7,
+ IchnMonSmi6,
+ IchnMonSmi5,
+ IchnMonSmi4,
+ IchnDevTrap13,
+ IchnDevTrap12,
+ IchnDevTrap11,
+ IchnDevTrap10,
+ IchnDevTrap9,
+ IchnDevTrap8,
+ IchnDevTrap7,
+ IchnDevTrap6,
+ IchnDevTrap5,
+ IchnDevTrap3,
+ IchnDevTrap2,
+ IchnDevTrap1,
+ IchnDevTrap0,
+ IchnIoTrap3,
+ IchnIoTrap2,
+ IchnIoTrap1,
+ IchnIoTrap0,
+ IchnPciExpress,
+ IchnMonitor,
+ IchnSpi,
+ IchnQRT,
+ IchnGpioUnlock,
+ //
+ // INSERT NEW ITEMS JUST BEFORE THIS LINE
+ //
+ NUM_ICHN_TYPES // the number of items in this enumeration }
+EFI_SMM_ICHN_SMI_TYPE;
+
+typedef struct {
+ EFI_SMM_ICHN_SMI_TYPE Type;
+} EFI_SMM_ICHN_DISPATCH_CONTEXT;
+
+//
+// Member functions
+//
+/**
+ Dispatch function for a ICHN specific SMI handler.
+
+ @param DispatchHandle The handle of this dispatch function.
+ @param DispatchContext The pointer to the dispatch function's context.
+ The DispatchContext fields are filled in
+ by the dispatching driver prior to
+ invoking this dispatch function.
+
+ @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_SMM_ICHN_DISPATCH)(
+ IN EFI_HANDLE DispatchHandle,
+ IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext
+ );
+
+/**
+ Register a child SMI source dispatch function with a parent SMM driver.
+
+ @param This The pointer to the EFI_SMM_ICHN_DISPATCH_PROTOCOL instance.
+ @param DispatchFunction The function to install.
+ @param DispatchContext The pointer to the dispatch function's context.
+ The caller fills in this context before calling
+ the register function to indicate to the register
+ function the ICHN SMI source for which the dispatch
+ function should be invoked.
+ @param DispatchHandle The handle generated by the dispatcher to track the function
+ instance.
+
+ @retval EFI_SUCCESS The dispatch function has been successfully
+ registered and the SMI source has been enabled.
+ @retval EFI_DEVICE_ERROR The driver could not enable the SMI source.
+ @retval EFI_OUT_OF_RESOURCES Not enough memory (system or SMM) to manage this
+ child.
+ @retval EFI_INVALID_PARAMETER DispatchContext is invalid. The ICHN input value
+ is not within valid range.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_ICHN_REGISTER)(
+ IN EFI_SMM_ICHN_DISPATCH_PROTOCOL *This,
+ IN EFI_SMM_ICHN_DISPATCH DispatchFunction,
+ IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext,
+ OUT EFI_HANDLE *DispatchHandle
+ );
+
+/**
+ Unregister a child SMI source dispatch function with a parent SMM
+driver
+
+ @param This The pointer to the EFI_SMM_ICHN_DISPATCH_PROTOCOL instance.
+ @param DispatchHandle The handle of the service to remove.
+
+ @retval EFI_SUCCESS The dispatch function has been successfully
+ unregistered, and the SMI source has been disabled,
+ if there are no other registered child dispatch
+ functions for this SMI source.
+ @retval EFI_INVALID_PARAMETER The handle is invalid.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_ICHN_UNREGISTER)(
+ IN EFI_SMM_ICHN_DISPATCH_PROTOCOL *This,
+ IN EFI_HANDLE DispatchHandle
+ );
+
+//
+// Interface structure for the SMM ICHN specific SMI Dispatch Protocol
+//
+/**
+ Provides the parent dispatch service for a given SMI source generator.
+**/
+struct _EFI_SMM_ICHN_DISPATCH_PROTOCOL {
+ EFI_SMM_ICHN_REGISTER Register; ///< Installs a child service to be dispatched by this protocol.
+ EFI_SMM_ICHN_UNREGISTER UnRegister; ///< Removes a child service dispatched by this protocol.
+};
+
+extern EFI_GUID gEfiSmmIchnDispatchProtocolGuid;
+
+#endif
diff --git a/Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec b/Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
index 6117f179ba..1af1ed757c 100644
--- a/Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
+++ b/Silicon/Intel/Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
@@ -1,6 +1,6 @@
## @file Vlv2DeviceRefCodePkg.dec
#
-# Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved
+# Copyright (c) 2012 - 2019, Intel Corporation. All rights reserved
#
# SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -32,7 +32,7 @@ [Ppis]
gEfiPeiReadOnlyVariable2PpiGuid = { 0x2ab86ef5, 0xecb5, 0x4134, {0xb5, 0x56, 0x38, 0x54, 0xca, 0x1f, 0xe1, 0xb4}}
gPchPeiInitPpiGuid = { 0xACB93B08, 0x5CDC, 0x4A8F, {0x93, 0xD4, 0x6, 0xE3, 0x42, 0xDF, 0x18, 0x2E}}
gPttPassThruPpiGuid = { 0xc5068bac, 0xa7dc, 0x42f1, {0xae, 0x80, 0xca, 0xa2, 0x4b, 0xb4, 0x90, 0x4b}}
-
+
[Protocols]
gEfiGlobalNvsAreaProtocolGuid = { 0x074e1e48, 0x8132, 0x47a1, {0x8c, 0x2c, 0x3f, 0x14, 0xad, 0x9a, 0x66, 0xdc}}
gPpmPlatformPolicyProtocolGuid = { 0xddabfeac, 0xef63, 0x452c, {0x8f, 0x39, 0xed, 0x7f, 0xae, 0xd8, 0x26, 0x5e}}
@@ -41,6 +41,7 @@ [Protocols]
gEfiSdHostIoProtocolGuid = { 0xb63f8ec7, 0xa9c9, 0x4472, {0xa4, 0xc0, 0x4d, 0x8b, 0xf3, 0x65, 0xcc, 0x51}}
gEfiSpiProtocolGuid = { 0x1156efc6, 0xea32, 0x4396, {0xb5, 0xd5, 0x26, 0x93, 0x2e, 0x83, 0xc3, 0x13}}
gEfiSmmSpiProtocolGuid = { 0xD9072C35, 0xEB8F, 0x43AD, {0xA2, 0x20, 0x34, 0xD4, 0x0E, 0x2A, 0x82, 0x85}}
+ gEfiSmmIchnDispatchProtocolGuid = { 0xc50b323e, 0x9075, 0x4f2a, { 0xac, 0x8e, 0xd2, 0x59, 0x6a, 0x10, 0x85, 0xcc}}
gEfiSmmIchnDispatchExProtocolGuid = { 0x3920405B, 0xC897, 0x44DA, {0x88, 0xF3, 0x4C, 0x49, 0x8A, 0x6F, 0xF7, 0x36}}
gEfiPchS3SupportProtocolGuid = { 0xE287D20B, 0xD897, 0x4E1E, {0xA5, 0xD9, 0x97, 0x77, 0x63, 0x93, 0x6A, 0x04}}
gPchResetProtocolGuid = { 0xDB63592C, 0xB8CC, 0x44C8, {0x91, 0x8C, 0x51, 0xF5, 0x34, 0x59, 0x8A, 0x5A}}
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 02/14] Vlv2TbltDevicePkg: Reduce Intel Framework dependencies
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
2019-07-01 2:55 ` [edk2-platforms Patch 01/14] Vlv2DeviceRefCodePkg: Add gEfiSmmIchnDispatchProtocolGuid Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:06 ` Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 03/14] Vlv2TbltDevicePkg: Remove unused modules/libraries Michael D Kinney
` (12 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
* Use BaseSerialPortLib16550 from MdeModulePkg.
* Remove unused DxeSmmDriverEntryPoint library instance mapping
from the IntelFrameworkPkg.
* Remove all references to PS/2 Keyboard/Mouse that are not
available on MinnowMax.
* Remove VgaClassDxe module from IntelFrameworkModulePkg that is
not used.
* Remove DatahubStatusCodeHandlerDxe module from the
IntelFrameworkModulePkg that is not used.
* Remove LegacyRegionDxe module from the IntelFrameworkModulePkg
The Legacy Region Protocol produced by this module is not used.
* Remove VLV2 specific Metronome module that uses the CPU I/O
Protocol defined in the IntelFrameworkPkg. Instead, use the
Metronome module from the MdeModulePkg that produces the
Metronome Arch Protocol from a TimerLib instance.
* Remove use of MpCpu.inf from DSC/FDF file.
* Update DSC/FDF/source files to assume MINNOW2_FSP_BUILD is FALSE.
* Update DSC/FDF/source files to assume FTPM_ENABLE is FALSE.
* Remove TXT binary
* Use PcAtChisetPkg HpetDxe module instead of the VLV2 specific
SmartTimer module that has an IntelFramework dependency.
* Remove SEC_ENABLE define and dependent modules.
* Remove IdeBusDxe module from DSC files. IdeBusDxe is listed
in DSC file, but not the FDF file, so it is not used. This
removes an IntelFrameworkModulkePkg dependency.
* Remove commented out SDIO and PiSmmCommunicationPei modules
* Remove unused Intel Framework S3Lib
* Remove use of PCD from the IntelFrameworkModulePkg
PcdEbdaReservedMemorySize.
* Remove EdkCompatibilityPkg related [BuildOptions] sections
* Remove unused DEFINES from DSC/FDF
* Remove unused references to Ppi/Cache.h from Vlv2SocBinPkg.dec
* Remove unused references to gPeiCachePpiGuid from Vlv2SocBinPkg.dec
* Remove unused references to gEfiHtBistHobGuid from Vlv2SocBinPkg.dec
* Remove unused references to gEfiCpuTokenSpaceGuid PCDs from
Vlv2SocBinPkg.dec
* Remove unused IntelPchLegacyInterrupt module
* Remove CpuIoDxe module from IntelFrameworkModulePkg
* Remove duplicate declaration of gEfiAcpiSupportProtocolGuid
from Vlv2Tblt2DevicePkg
* Remove duplicate declaration of PcdShellFile from Vlv2Tblt2DevicePkg
* Remove unused gEfiAcpiTableProtocolGuid from AcpiPlatform.inf
* Add E7006X3 UNDI module to FDF files
* Remove gEfiSimpleNetworkProtocolGuid dependency.
If gEfiSimpleNetworkProtocolGuid is not produced, still
allow all SMBIOS records to be produced. The MAC address
from Simple Network Protocol is being used as a system
serial number. If Simple Network Protocol is not available,
then default to a serial number of 0.
* Remove unused dependency on IntelFspWrapperPkg
* Remove Intel Framework S3 support.
* Remove use of the gEfiSmmPeiSmramMemoryReserveGuid GUIDed HOB.
* Remove production of unused gEfiFindFvPpiGuid.
* Update IA32 only builds to use a unique BUILD_OUTPUT directory
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../AcpiPlatform/AcpiPlatform.c | 33 +-
.../AcpiPlatform/AcpiPlatform.h | 8 +-
.../AcpiPlatform/AcpiPlatform.inf | 5 -
.../Intel/Vlv2TbltDevicePkg/Build_IFWI.bat | 33 --
.../Include/Library/EfiRegTableLib.h | 11 +-
.../Library/EfiRegTableLib/EfiRegTableLib.inf | 12 +-
.../MultiPlatformLib/MultiPlatformLib.h | 7 +-
.../MultiPlatformLib/MultiPlatformLib.inf | 9 +-
.../Library/PlatformBdsLib/BdsPlatform.c | 6 -
.../MonoStatusCode/MonoStatusCode.h | 47 +-
.../MonoStatusCode/MonoStatusCode.inf | 9 +-
.../PciPlatform/PciPlatform.inf | 8 +-
.../PlatformCpuInfoDxe/PlatformCpuInfoDxe.h | 17 +-
.../PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf | 8 +-
.../PlatformDxe/Configuration.h | 8 +-
.../Vlv2TbltDevicePkg/PlatformDxe/Platform.c | 524 +----------------
.../PlatformDxe/PlatformDxe.h | 515 +----------------
.../PlatformDxe/PlatformDxe.inf | 20 +-
.../PlatformGopPolicy/PlatformGopPolicy.inf | 12 +-
.../PlatformInitPei/MemoryCallback.c | 8 +-
.../PlatformInitPei/PlatformEarlyInit.c | 209 +------
.../PlatformInitPei/PlatformEarlyInit.h | 21 +-
.../PlatformInitPei/PlatformInitPei.inf | 29 +-
| 11 +-
.../PlatformPei/MemoryCallback.c | 8 +-
.../Vlv2TbltDevicePkg/PlatformPei/Platform.c | 16 +-
.../PlatformPei/PlatformPei.inf | 11 +-
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 16 +-
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 254 +++------
.../Vlv2TbltDevicePkg/PlatformPkgConfig.dsc | 21 +-
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 234 +++-----
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 532 ++++-------------
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 533 ++++-------------
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 534 ++++--------------
.../PlatformSetupDxe/PlatformSetupDxe.h | 28 +-
.../PlatformSetupDxe/PlatformSetupDxe.inf | 14 +-
.../PlatformSetupDxe/SetupInfoRecords.c | 43 +-
.../Vlv2TbltDevicePkg/PlatformSmm/Platform.c | 83 +--
.../PlatformSmm/PlatformSmm.inf | 17 +-
.../Vlv2TbltDevicePkg/PlatformSmm/S3Save.c | 53 +-
.../PlatformSmm/SmmPlatform.h | 7 +-
.../Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf | 6 +-
.../MiscBaseBoardManufacturerFunction.c | 8 +-
.../SmBiosMiscDxe/MiscOemType0x94Function.c | 42 +-
.../MiscSystemManufacturerFunction.c | 10 +-
.../SmBiosMiscDxe/SmBiosMiscDxe.inf | 15 +-
.../VlvPlatformInitDxe/IgdOpRegion.c | 11 +-
.../VlvPlatformInitDxe/IgdOpRegion.h | 27 +-
.../VlvPlatformInitDxe/VlvPlatformInitDxe.inf | 8 +-
Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat | 39 +-
50 files changed, 599 insertions(+), 3541 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
index 5c03f66edb..1f4d575b73 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
@@ -638,7 +638,6 @@ OnReadyToBoot (
EFI_STATUS Status;
EFI_ACPI_TABLE_VERSION TableVersion;
EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
- EFI_ACPI_S3_SAVE_PROTOCOL *AcpiS3Save;
SYSTEM_CONFIGURATION SetupVarBuffer;
UINTN VariableSize;
EFI_PLATFORM_CPU_INFO *PlatformCpuInfoPtr = NULL;
@@ -722,15 +721,6 @@ OnReadyToBoot (
TableVersion
);
ASSERT_EFI_ERROR (Status);
-
- //
- // S3 script save.
- //
- Status = gBS->LocateProtocol (&gEfiAcpiS3SaveProtocolGuid, NULL, (VOID **) &AcpiS3Save);
- if (!EFI_ERROR (Status)) {
- AcpiS3Save->S3Save (AcpiS3Save, NULL);
- }
-
}
VOID
@@ -1261,12 +1251,23 @@ AcpiPlatformEntryPoint (
}
}
- Status = EfiCreateEventReadyToBootEx (
- TPL_NOTIFY,
- OnReadyToBoot,
- NULL,
- &Event
- );
+ //
+ // Publish ACPI 1.0 or 2.0 Tables.
+ //
+// Status = AcpiSupport->PublishTables (
+// AcpiSupport,
+// TableVersion
+// );
+// ASSERT_EFI_ERROR (Status);
+
+// Status = EfiCreateEventReadyToBootEx (
+// TPL_NOTIFY,
+// OnReadyToBoot,
+// NULL,
+// &Event
+// );
+ Event = NULL;
+ OnReadyToBoot (Event, NULL);
//
// Finished.
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
index 598756846a..f45590ea24 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
@@ -1,12 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
AcpiPlatform.h
@@ -26,7 +23,6 @@ Abstract:
//
// Statements that include other header files.
//
-#include <FrameworkDxe.h>
#include <PiDxe.h>
#include <Base.h>
#include <Library/UefiLib.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
index c59920db03..817ad58a81 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
@@ -37,7 +37,6 @@ [Packages]
IntelFrameworkPkg/IntelFrameworkPkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
[LibraryClasses]
@@ -63,13 +62,9 @@ [Guids]
gEfiVlv2VariableGuid
[Protocols]
- gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEnhancedSpeedstepProtocolGuid
gEfiPlatformCpuProtocolGuid
gEfiAcpiSupportProtocolGuid
- gEfiAcpiS3SaveProtocolGuid
- gEfiCpuIoProtocolGuid
- gEfiPs2PolicyProtocolGuid
gEfiFirmwareVolume2ProtocolGuid
gEfiMpServiceProtocolGuid
gEfiGlobalNvsAreaProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat b/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat
index 887206703a..44759c617f 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat
@@ -114,7 +114,6 @@ if /i "%~1"=="/yL" (
goto OptLoop
)
-
:: Require 2 input parameters
if "%~2"=="" goto Usage
@@ -122,10 +121,6 @@ if "%~2"=="" goto Usage
set Platform_Type=%~1
set Build_Target=%~2
-if "%~3"=="" (
- set "IFWI_Suffix= "
-) else set "IFWI_Suffix=/S %~3"
-
:: Build BIOS
echo ======================================================================
echo Build_IFWI: Calling BIOS build Script...
@@ -139,34 +134,6 @@ if %ERRORLEVEL% NEQ 0 (
)
echo.
echo Finished Building BIOS.
-@REM Set BIOS_ID environment variable here.
-call %WORKSPACE%\Conf\BiosId.bat
-echo BIOS_ID=%BIOS_ID%
-
-:: Set the Board_Id, Build_Type, Version_Major, and Version_Minor environment variables
-find /v "#" %WORKSPACE%\Conf\BiosId.env > ver_strings
-for /f "tokens=1,3" %%i in (ver_strings) do set %%i=%%j
-del /f/q ver_strings >nul
-set BIOS_Name=%BOARD_ID%_%Arch%_%BUILD_TYPE%_%VERSION_MAJOR%_%VERSION_MINOR%.ROM
-
-:: Start Integration process
-echo ======================================================================
-echo Build_IFWI: Calling IFWI Stitching Script...
-pushd %PLATFORM_PATH%\%PLATFORM_PACKAGE%\Stitch
-
- :: IFWIStitch.bat [/nG] [/nM] [/nB] [/B BIOS.rom] [/C StitchConfig] [/S IFWISuffix]
- call IFWIStitch.bat %Stitch_Flags% /B %BIOS_Name% %IFWI_Suffix%
-
- @echo off
-popd
-if %ERRORLEVEL% NEQ 0 (
- echo echo -- Error Stitching %BIOS_Nam% & echo.
- set exitCode=1
-)
-echo.
-echo Build_IFWI is finished.
-echo The final IFWI file is located in %ROOT_DIR%\Vlv2TbltDevicePkg\Stitch\
-echo ======================================================================
goto Exit
:Usage
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
index 915f8b39d9..12e44efed0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
@@ -1,12 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
EfiRegTableLib.h
@@ -31,10 +28,6 @@ Abstract:
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
#include <Library/UefiLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Protocol/CpuIo.h>
-#include <Protocol/BootScriptSave.h>
-#include <Framework/BootScript.h>
#include <Protocol/PciRootBridgeIo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
index 9cb8841d65..472fc4e0f6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
@@ -2,12 +2,9 @@
#
#/*++
#
-# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
-#
+# Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.<BR>
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-
#
# Module Name:
#
@@ -40,8 +37,3 @@ [Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
-
-
-[LibraryClasses]
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
index 807ca20acb..3fa9f7b129 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
@@ -3,11 +3,11 @@
This file includes package header files, library classes.
- Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
+
**/
#ifndef _MULTIPLATFORM_LIB_H_
@@ -52,7 +52,6 @@
#include <Ppi/Speaker.h>
#include <Guid/FirmwareFileSystem.h>
#include <Guid/MemoryTypeInformation.h>
-#include <Ppi/Cache.h>
#include <Ppi/Reset.h>
#include <Ppi/EndOfPeiPhase.h>
#include <Ppi/MemoryDiscovered.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
index 758e47ca70..a4942a097c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
@@ -1,11 +1,8 @@
#
#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-#
#
# Module Name:
#
@@ -59,13 +56,11 @@ [Packages]
Vlv2TbltDevicePkg/PlatformPkg.dec
IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- Vlv2SocBinPkg/Vlv2SocBinPkg.dec
[LibraryClasses]
DebugLib
HobLib
IoLib
-# PeiKscLib
[Ppis]
gEfiPeiReadOnlyVariable2PpiGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
index 4d5997d6e9..4adca1b465 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
@@ -1789,9 +1789,6 @@ PlatformBdsPolicyBehavior (
#ifdef TPM_ENABLED
TcgPhysicalPresenceLibProcessRequest();
#endif
- #ifdef FTPM_ENABLE
- Tcg2PhysicalPresenceLibProcessRequest(NULL);
- #endif
if (EsrtManagement != NULL) {
EsrtManagement->LockEsrtRepository();
@@ -1997,9 +1994,6 @@ FULL_CONFIGURATION:
}
#ifdef TPM_ENABLED
TcgPhysicalPresenceLibProcessRequest();
- #endif
- #ifdef FTPM_ENABLE
- Tcg2PhysicalPresenceLibProcessRequest(NULL);
#endif
if (EsrtManagement != NULL) {
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.h b/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.h
index 0b256093a6..80a84d0d21 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
MonoStatusCode.h
@@ -24,41 +22,18 @@ Abstract:
//
// Statements that include other files.
//
-#include "PiPei.h"
+#include <PiPei.h>
-#include "Pi/PiBootMode.h"
-
-#include "Ppi/StatusCode.h"
-#include "Ppi/MemoryDiscovered.h"
-#include "Ppi/FvLoadFile.h"
-
-#include "Library/HobLib.h"
-#include "Library/DebugLib.h"
-#include "Library/IoLib.h"
-#include "Library/SerialPortLib.h"
-#include "Protocol/StatusCode.h"
-
-
-#ifndef _STATUS_CODE_ENABLER_H_
-#define _STATUS_CODE_ENABLER_H_
-
-#ifdef EFI_DEBUG
-
-#define EFI_STATUS_CODE_ENABLER_HOB_GUID \
- { \
- 0x5ffc6cf3, 0x71ad, 0x46f5, 0xbd, 0x8b, 0x7e, 0x8f, 0xfe, 0x19, 0x7, 0xd7 \
- }
-
-extern EFI_GUID gEfiSerialStatusCodeEnablerHobGuid;
-
-typedef struct _EFI_STATUS_CODE_INFO {
- BOOLEAN StatusCodeDisable;
-} EFI_STATUS_CODE_INFO;
-
-#endif
-#endif
+#include <Pi/PiBootMode.h>
+#include <Ppi/StatusCode.h>
+#include <Ppi/MemoryDiscovered.h>
+#include <Library/HobLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/SerialPortLib.h>
+#include <Protocol/StatusCode.h>
//
// Platform specific function Declarations. These must be implemented in a
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf b/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
index f1be5b8d6c..d429310ac4 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
@@ -1,9 +1,8 @@
#
#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
#
# Module Name:
#
@@ -34,10 +33,8 @@ [sources.common]
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
- Vlv2SocBinPkg/Vlv2SocBinPkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
[LibraryClasses]
PeimEntryPoint
@@ -52,7 +49,6 @@ [LibraryClasses]
[Ppis]
gEfiPeiMemoryDiscoveredPpiGuid
gEfiPeiStatusCodePpiGuid
- gEfiPeiFvFileLoaderPpiGuid
[Protocols]
gEfiStatusCodeRuntimeProtocolGuid
@@ -62,7 +58,6 @@ [Pcd]
[Guids]
gEfiPlatformCpuInfoGuid
- gEfiHtBistHobGuid
gEfiStatusCodeDataTypeStringGuid ## CONSUMES
[Depex]
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
index a0837917d8..18012a1d53 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
@@ -1,11 +1,8 @@
#/*++
#
-# Copyright (c) 2003 - 2018, Intel Corporation. All rights reserved
-#
+# Copyright (c) 2003 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-
#
# Module Name:
#
@@ -46,7 +43,6 @@ [Packages]
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
[LibraryClasses]
HobLib
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.h
index b13611f4f8..dfe3d1a0c7 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.h
@@ -1,12 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
PlatformCpuInfoDxe.h
@@ -18,12 +15,10 @@ Abstract:
#ifndef _PLATFORM_CPU_INFO_DRIVER_H_
#define _PLATFORM_CPU_INFO_DRIVER_H_
-#include "PiDxe.h"
-#include "Library/HobLib.h"
-#include "Guid/GlobalVariable.h"
-#include "Guid/AcpiVariableCompatibility.h"
-#include "Guid/PlatformCpuInfo.h"
-#include "Library/UefiRuntimeServicesTableLib.h"
+#include <PiDxe.h>
+#include <Library/HobLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Guid/PlatformCpuInfo.h>
#include <Guid/Vlv2Variable.h>
#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
index f2ade1b105..ac9c7f1ba1 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
@@ -1,10 +1,8 @@
#/*++
#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-
#
# Module Name:
#
@@ -36,9 +34,7 @@ [Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2SocBinPkg/Vlv2SocBinPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
[LibraryClasses]
HobLib
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Configuration.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Configuration.h
index 23e03111c9..676f500530 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Configuration.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Configuration.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
Configuration.h
@@ -89,8 +87,6 @@ Abstract:
#define VAR_EQ_CONFIG_MODE_DECIMAL_NAME L"67"
#define VAR_EQ_CPU_EE_NAME 0x0045 // E
#define VAR_EQ_CPU_EE_DECIMAL_NAME L"69"
-#define VAR_EQ_FLOPPY_MODE_NAME 0x0046 // F
-#define VAR_EQ_FLOPPY_MODE_DECIMAL_NAME L"70"
#define VAR_EQ_HT_MODE_NAME 0x0048 // H
#define VAR_EQ_HT_MODE_DECIMAL_NAME L"72"
#define VAR_EQ_AHCI_MODE_NAME 0x0049 // I
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
index 2a4a0b92e1..1d90117af6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
@@ -1,13 +1,9 @@
/** @file
- Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
@@ -23,9 +19,7 @@ Abstract:
#include "PlatformDxe.h"
#include "Platform.h"
#include "PchCommonDefinitions.h"
-#include <Protocol/UsbPolicy.h>
#include <Protocol/PchPlatformPolicy.h>
-#include <Protocol/TpmMp.h>
#include <Protocol/CpuIo2.h>
#include <Library/S3BootScriptLib.h>
#include <Guid/PciLanInfo.h>
@@ -63,10 +57,8 @@ GPIO_CONF_PAD_INIT mTB_BL_GpioInitData_SC_TRI_Exit_boot_Service[] =
EFI_GUID mSystemHiiExportDatabase = EFI_HII_EXPORT_DATABASE_GUID;
EFI_GUID mPlatformDriverGuid = EFI_PLATFORM_DRIVER_GUID;
SYSTEM_CONFIGURATION mSystemConfiguration;
-SYSTEM_PASSWORDS mSystemPassword;
EFI_HANDLE mImageHandle;
BOOLEAN mMfgMode = FALSE;
-VOID *mDxePlatformStringPack;
UINT32 mPlatformBootMode = PLATFORM_NORMAL_MODE;
extern CHAR16 gItkDataVarName[];
@@ -77,8 +69,6 @@ EFI_EVENT mReadyToBootEvent;
UINT8 mSmbusRsvdAddresses[] = PLATFORM_SMBUS_RSVD_ADDRESSES;
UINT8 mNumberSmbusAddress = sizeof( mSmbusRsvdAddresses ) / sizeof( mSmbusRsvdAddresses[0] );
-UINT32 mSubsystemVidDid;
-UINT32 mSubsystemAudioVidDid;
UINTN mPciLanCount = 0;
VOID *mPciLanInfo = NULL;
@@ -89,9 +79,6 @@ static EFI_SPEAKER_IF_PROTOCOL mSpeakerInterface = {
GenerateBeepTone
};
-EFI_USB_POLICY_PROTOCOL mUsbPolicyData = {0};
-
-
CFIO_PNP_INIT mTB_BL_GpioInitData_SC_TRI_S0ix_Exit_boot_Service[] =
{
{0x410 ,0x20038e10}, //vlv.gpio.gpscore.cfio_regs_pad_lpc_clkout1_pconf0
@@ -179,11 +166,6 @@ VOID
UpdateDVMTSetup(
);
-VOID
-InitPlatformUsbPolicy (
- VOID
- );
-
VOID
InitRC6Policy(
VOID
@@ -427,14 +409,8 @@ SpiBiosProtectionFunction(
BiosFlaLower0 = PcdGet32(PcdFlashMicroCodeAddress)-PcdGet32(PcdFlashAreaBaseAddress);
BiosFlaLimit0 = PcdGet32(PcdFlashMicroCodeSize)-1;
- #ifdef MINNOW2_FSP_BUILD
- BiosFlaLower1 = PcdGet32(PcdFlashFvFspBase)-PcdGet32(PcdFlashAreaBaseAddress);
- BiosFlaLimit1 = (PcdGet32(PcdFlashFvRecoveryBase)-PcdGet32(PcdFlashFvFspBase)+PcdGet32(PcdFlashFvRecoverySize))-1;
- #else
BiosFlaLower1 = PcdGet32(PcdFlashFvMainBase)-PcdGet32(PcdFlashAreaBaseAddress);
BiosFlaLimit1 = (PcdGet32(PcdFlashFvRecoveryBase)-PcdGet32(PcdFlashFvMainBase)+PcdGet32(PcdFlashFvRecoverySize))-1;
- #endif
-
mPciD31F0RegBase = MmPciAddress (0,
DEFAULT_PCI_BUS_NUMBER_PCH,
@@ -611,8 +587,6 @@ TristateLpcGpioS0i3Config (
}
-EFI_BOOT_SCRIPT_SAVE_PROTOCOL *mBootScriptSave;
-
/**
Event Notification during exit boot service to enabel ACPI mode
@@ -862,8 +836,6 @@ InitializePlatform (
//
// Add usb policy
//
- InitPlatformUsbPolicy();
- InitSioPlatformPolicy();
InitializeClockRouting();
InitializeSlotInfo();
InitTcoReset();
@@ -949,7 +921,7 @@ InitializePlatform (
);
if (!EFI_ERROR (Status)) {
Status = gBS->RegisterProtocolNotify (
- &gExitPmAuthProtocolGuid,
+ &gEfiEndOfDxeEventGroupGuid,
RtcEvent,
&RtcCallbackReg
);
@@ -1042,58 +1014,6 @@ ReadyToBootFunction (
VOID *Context
)
{
- EFI_STATUS Status;
- EFI_ISA_ACPI_PROTOCOL *IsaAcpi;
- EFI_ISA_ACPI_DEVICE_ID IsaDevice;
- UINTN Size;
- UINT16 State;
- EFI_TPM_MP_DRIVER_PROTOCOL *TpmMpDriver;
- EFI_CPU_IO_PROTOCOL *CpuIo;
- UINT8 Data;
- UINT8 ReceiveBuffer [64];
- UINT32 ReceiveBufferSize;
-
- UINT8 TpmForceClearCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0A,
- 0x00, 0x00, 0x00, 0x5D};
- UINT8 TpmPhysicalPresenceCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0C,
- 0x40, 0x00, 0x00, 0x0A,
- 0x00, 0x00};
- UINT8 TpmPhysicalDisableCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0A,
- 0x00, 0x00, 0x00, 0x70};
- UINT8 TpmPhysicalEnableCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0A,
- 0x00, 0x00, 0x00, 0x6F};
- UINT8 TpmPhysicalSetDeactivatedCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0B,
- 0x00, 0x00, 0x00, 0x72,
- 0x00};
- UINT8 TpmSetOwnerInstallCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0B,
- 0x00, 0x00, 0x00, 0x71,
- 0x00};
-
- Size = sizeof(UINT16);
- Status = gRT->GetVariable (
- VAR_EQ_FLOPPY_MODE_DECIMAL_NAME,
- &gEfiNormalSetupGuid,
- NULL,
- &Size,
- &State
- );
-
- //
- // Disable Floppy Controller if needed
- //
- Status = gBS->LocateProtocol (&gEfiIsaAcpiProtocolGuid, NULL, (VOID **) &IsaAcpi);
- if (!EFI_ERROR(Status) && (State == 0x00)) {
- IsaDevice.HID = EISA_PNP_ID(0x604);
- IsaDevice.UID = 0;
- Status = IsaAcpi->EnableDevice(IsaAcpi, &IsaDevice, FALSE);
- }
-
//
// save LAN info to a variable
//
@@ -1111,386 +1031,6 @@ ReadyToBootFunction (
gBS->FreePool (mPciLanInfo);
mPciLanInfo = NULL;
}
-
-
- //
- // Handle ACPI OS TPM requests here
- //
- Status = gBS->LocateProtocol (
- &gEfiCpuIoProtocolGuid,
- NULL,
- (VOID **)&CpuIo
- );
- Status = gBS->LocateProtocol (
- &gEfiTpmMpDriverProtocolGuid,
- NULL,
- (VOID **)&TpmMpDriver
- );
- if (!EFI_ERROR (Status))
- {
- Data = ReadCmosBank1Byte (CpuIo, ACPI_TPM_REQUEST);
-
- //
- // Clear pending ACPI TPM request indicator
- //
- WriteCmosBank1Byte (CpuIo, ACPI_TPM_REQUEST, 0x00);
- if (Data != 0)
- {
- WriteCmosBank1Byte (CpuIo, ACPI_TPM_LAST_REQUEST, Data);
-
- //
- // Assert Physical Presence for these commands
- //
- TpmPhysicalPresenceCommand [11] = 0x20;
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver, TpmPhysicalPresenceCommand,
- sizeof (TpmPhysicalPresenceCommand),
- ReceiveBuffer, &ReceiveBufferSize
- );
- //
- // PF PhysicalPresence = TRUE
- //
- TpmPhysicalPresenceCommand [11] = 0x08;
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver, TpmPhysicalPresenceCommand,
- sizeof (TpmPhysicalPresenceCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- if (Data == 0x01)
- {
- //
- // TPM_PhysicalEnable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver, TpmPhysicalEnableCommand,
- sizeof (TpmPhysicalEnableCommand),
- ReceiveBuffer, &ReceiveBufferSize
- );
- }
- if (Data == 0x02)
- {
- //
- // TPM_PhysicalDisable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver, TpmPhysicalDisableCommand,
- sizeof (TpmPhysicalDisableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- }
- if (Data == 0x03)
- {
- //
- // TPM_PhysicalSetDeactivated=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer, &ReceiveBufferSize
- );
- gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);
- }
- if (Data == 0x04)
- {
- //
- // TPM_PhysicalSetDeactivated=TRUE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x01;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x05)
- {
- //
- // TPM_ForceClear
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmForceClearCommand,
- sizeof (TpmForceClearCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x06)
- {
- //
- // TPM_PhysicalEnable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalEnableCommand,
- sizeof (TpmPhysicalEnableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalSetDeactivated=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x07)
- {
- //
- // TPM_PhysicalSetDeactivated=TRUE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x01;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalDisable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalDisableCommand,
- sizeof (TpmPhysicalDisableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x08)
- {
- //
- // TPM_SetOwnerInstall=TRUE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmSetOwnerInstallCommand [10] = 0x01;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmSetOwnerInstallCommand,
- sizeof (TpmSetOwnerInstallCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- }
- if (Data == 0x09)
- {
- //
- // TPM_SetOwnerInstall=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmSetOwnerInstallCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmSetOwnerInstallCommand,
- sizeof (TpmSetOwnerInstallCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- }
- if (Data == 0x0A)
- {
- //
- // TPM_PhysicalEnable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalEnableCommand,
- sizeof (TpmPhysicalEnableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalSetDeactivated=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // Do TPM_SetOwnerInstall=TRUE on next reboot
- //
-
- WriteCmosBank1Byte (CpuIo, ACPI_TPM_REQUEST, 0xF0);
-
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x0B)
- {
- //
- // TPM_SetOwnerInstall=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmSetOwnerInstallCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmSetOwnerInstallCommand,
- sizeof (TpmSetOwnerInstallCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalSetDeactivated=TRUE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x01;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalDisable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalDisableCommand,
- sizeof (TpmPhysicalDisableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x0E)
- {
- //
- // TPM_ForceClear
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmForceClearCommand,
- sizeof (TpmForceClearCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalEnable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalEnableCommand,
- sizeof (TpmPhysicalEnableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalSetDeactivated=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0xF0)
- {
- //
- // Second part of ACPI TPM request 0x0A: OEM custom TPM_SetOwnerInstall=TRUE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmSetOwnerInstallCommand [10] = 0x01;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmSetOwnerInstallCommand,
- sizeof (TpmSetOwnerInstallCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- WriteCmosBank1Byte (CpuIo, ACPI_TPM_LAST_REQUEST, 0x0A);
- }
- //
- // Deassert Physical Presence
- //
- TpmPhysicalPresenceCommand [11] = 0x10;
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalPresenceCommand,
- sizeof (TpmPhysicalPresenceCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- }
- }
-
- return;
}
/**
@@ -1722,66 +1262,6 @@ UpdateDVMTSetup(
}
}
-VOID
-InitPlatformUsbPolicy (
- VOID
- )
-
-{
- EFI_HANDLE Handle;
- EFI_STATUS Status;
-
- Handle = NULL;
-
- mUsbPolicyData.Version = (UINT8)USB_POLICY_PROTOCOL_REVISION_2;
- mUsbPolicyData.UsbMassStorageEmulationType = mSystemConfiguration.UsbBIOSINT13DeviceEmulation;
- if(mUsbPolicyData.UsbMassStorageEmulationType == 3) {
- mUsbPolicyData.UsbEmulationSize = mSystemConfiguration.UsbBIOSINT13DeviceEmulationSize;
- } else {
- mUsbPolicyData.UsbEmulationSize = 0;
- }
- mUsbPolicyData.UsbZipEmulationType = mSystemConfiguration.UsbZipEmulation;
- mUsbPolicyData.UsbOperationMode = HIGH_SPEED;
-
- //
- // Some chipset need Period smi, 0 = LEGACY_PERIOD_UN_SUPP
- //
- mUsbPolicyData.USBPeriodSupport = LEGACY_PERIOD_UN_SUPP;
-
- //
- // Some platform need legacyfree, 0 = LEGACY_FREE_UN_SUPP
- //
- mUsbPolicyData.LegacyFreeSupport = LEGACY_FREE_UN_SUPP;
-
- //
- // Set Code base , TIANO_CODE_BASE =0x01, ICBD =0x00
- //
- mUsbPolicyData.CodeBase = (UINT8)ICBD_CODE_BASE;
-
- //
- // Some chispet 's LpcAcpibase are diffrent,set by platform or chipset,
- // default is Ich acpibase =0x040. acpitimerreg=0x08.
- mUsbPolicyData.LpcAcpiBase = 0x40;
- mUsbPolicyData.AcpiTimerReg = 0x08;
-
- //
- // Set for reduce usb post time
- //
- mUsbPolicyData.UsbTimeTue = 0x00;
- mUsbPolicyData.InternelHubExist = 0x00; //TigerPoint doesn't have RMH
- mUsbPolicyData.EnumWaitPortStableStall = 100;
-
-
- Status = gBS->InstallProtocolInterface (
- &Handle,
- &gUsbPolicyGuid,
- EFI_NATIVE_INTERFACE,
- &mUsbPolicyData
- );
- ASSERT_EFI_ERROR(Status);
-
-}
-
UINT8
ReadCmosBank1Byte (
IN EFI_CPU_IO_PROTOCOL *CpuIo,
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
index 8f5df3257e..621fb08274 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
@@ -1,10 +1,8 @@
/*++
- Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -42,25 +40,17 @@ Abstract:
#include <Library/BiosIdLib.h>
#include <Protocol/GlobalNvsArea.h>
#include <Protocol/PciRootBridgeIo.h>
-#include <Protocol/IsaAcpi.h>
-#include <Framework/FrameworkInternalFormRepresentation.h>
-#include <Protocol/FrameworkHii.h>
-#include <Protocol/FrameworkFormCallback.h>
-#include <Protocol/CpuIo.h>
-#include <Protocol/BootScriptSave.h>
-#include <Framework/BootScript.h>
+#include <Protocol/CpuIo2.h>
#include <Guid/GlobalVariable.h>
#include <Guid/BoardFeatures.h>
#include <Guid/DataHubRecords.h>
#include <Protocol/DataHub.h>
#include <Protocol/PciIo.h>
#include <Protocol/Speaker.h>
-#include <Protocol/ExitPmAuth.h>
#include <IndustryStandard/Pci22.h>
#include <Guid/SetupVariable.h>
#include <Guid/PlatformInfo.h>
#include "Configuration.h"
-#define _EFI_H_ //skip efi.h
#include "PchAccess.h"
#include "VlvAccess.h"
#include "BoardIdDecode.h"
@@ -86,25 +76,9 @@ Abstract:
#define B_RTC_DATE_ALARM_MASK 0x3F
-//
-// Default CPU Alternate Duty Cycle (255=100%, 0=0%)
-//
-#define DEF_CPU_ALT_DUTY_CYCLE 0xFF
-
-#define MAX_ONBOARD_SATA_DEVICE 2
-
-#define DXE_DEVICE_ENABLED 1
-#define DXE_DEVICE_DISABLED 0
-
-#define AZALIA_MAX_LOOP_TIME 0x10000
-
//
// Platform driver GUID
//
-#define EFI_PLATFORM_DRIVER_GUID \
- { 0x056E7324, 0xA718, 0x465b, 0x9A, 0x84, 0x22, 0x8F, 0x06, 0x64, 0x2B, 0x4F }
-
-#define PASSWORD_MAX_SIZE 20
#define PLATFORM_NORMAL_MODE 0x01
#define PLATFORM_SAFE_MODE 0x02
#define PLATFORM_RECOVERY_MODE 0x04
@@ -119,33 +93,10 @@ Abstract:
#define EFI_CU_PLATFORM_DXE_STEP4 (EFI_OEM_SPECIFIC | 0x00000015)
#define EFI_CU_PLATFORM_DXE_INIT_DONE (EFI_OEM_SPECIFIC | 0x00000016)
-
-#define EFI_SECTION_STRING 0x1C
-#define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
-#define PREFIX_BLANK 0x04
-
#pragma pack(1)
typedef UINT64 EFI_BOARD_FEATURES;
-//
-//BUGBUG: should remove these EDK hii definition once Hii transtion is done
-//
-typedef UINT16 STRING_REF;
-typedef UINT16 EFI_FORM_LABEL;
-
-typedef enum {
- EfiUserPassword,
- EfiAdminPassword
-} EFI_PASSWORD_TYPE;
-
-typedef struct {
- CHAR16 TempPassword[PASSWORD_MAX_SIZE];
- CHAR16 EncodedPassword[PASSWORD_MAX_SIZE];
- VOID *PasswordLocation;
- EFI_PASSWORD_TYPE PasswordType;
-} EFI_PASSWORD_DATA;
-
typedef struct {
CHAR8 AaNumber[7];
UINT8 BoardId;
@@ -155,111 +106,11 @@ typedef struct {
UINT64 AcpiOemTableId;
} BOARD_ID_DECODE;
-typedef
-EFI_STATUS
-(EFIAPI *EFI_FORM_ROUTINE) (
- SYSTEM_CONFIGURATION *SetupBuffer
- );
-
-typedef struct{
- UINT16 DeviceNumber;
- UINT16 FunctionNumber;
-}PCI_DEVICE_FUNC_INFO;
-
-typedef struct{
- CHAR16 PortNumber[4];
- STRING_REF SataDeviceInfoStringId;
-}SATA_DEVICE_STRING_INFO;
-
-typedef struct {
- UINT16 Signature;
- UINT8 Size;
- UINT32 EntryPoint;
- UINT8 Reserve[17];
- UINT16 PciDataOff;
- UINT16 ExpansionOff;
-} PNP_OPTION_ROM_HEADER;
-
-typedef struct {
- UINT32 Signature;
- UINT8 Revision;
- UINT8 Length;
- UINT16 NextHeader;
- UINT8 Reserve;
- UINT8 CheckSum;
- UINT32 DeviceId;
- UINT16 ManufactureStrOff;
- UINT16 ProductStrOff;
-} PNP_EXPANSION_HEADER;
-
-typedef struct {
- BOOLEAN Enable;
- UINT8 VerbTableNum;
- UINT16 CodecSSID;
- EFI_PHYSICAL_ADDRESS HDABar;
- EFI_PHYSICAL_ADDRESS UpperHDABar;
- UINT8 SDIPresent;
- BOOLEAN Pme;
- BOOLEAN LegacyFrontPanelAudio;
- BOOLEAN HighDefinitionFrontPanelAudio;
-} EFI_AZALIA_S3;
-
-//
-//following structs are from R8. Remove them once R8->R9 transition is done
-//
-typedef struct {
- CHAR16 *OptionString; // Passed in string to generate a token for in a truly dynamic form creation
- STRING_REF StringToken; // This is used when creating a single op-code without generating a StringToken (have one already)
- UINT16 Value;
- UINT8 Flags;
- UINT16 Key;
-} IFR_OPTION;
-
-
-
-typedef struct {
- UINT8 Number;
- UINT32 HorizontalResolution;
- UINT32 VerticalResolution;
-} PANEL_RESOLUTION;
-
#pragma pack()
//
// Prototypes
//
-EFI_STATUS
-EFIAPI
-EfiMain (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- );
-
-EFI_STATUS
-ProcessEventLog (
- );
-
-EFI_STATUS
-FindDataRecords (
- );
-
-EFI_STATUS
-ProcessPasswords(
- );
-
-VOID
-MemorySetup(
- );
-
-
-UINTN
-EfiValueToString (
- IN OUT CHAR16 *Buffer,
- IN INT64 Value,
- IN UINTN Flags,
- IN UINTN Width
- );
-
VOID
EFIAPI
ReadyToBootFunction (
@@ -267,60 +118,6 @@ ReadyToBootFunction (
VOID *Context
);
-VOID
-InstallHiiDataAndGetSettings(
- IN EFI_HII_STRING_PACK *StringPack,
- //
- ... // 0 or more of => IN EFI_HII_IFR_PACK *IfrPack,
- // Terminate list with NULL
- //
- );
-
-EFI_STATUS
-ReadOrInitSetupVariable(
- IN UINTN RequiredVariableSize,
- IN UINTN RequiredPasswordSize,
- IN VOID *DefaultData,
- IN VOID *MfgDefaultData,
- OUT VOID *SetupVariableData,
- OUT VOID *SystemPassword
- );
-
-VOID
-EfiLogicalOrMem(
- IN VOID *Destination,
- IN VOID *Source,
- IN UINTN Length
- );
-
-EFI_STATUS
-GetStringFromToken (
- IN EFI_GUID *ProducerGuid,
- IN STRING_REF Token,
- OUT CHAR16 **String
- );
-
-UINT32
-ConvertBase2ToRaw (
- IN EFI_EXP_BASE2_DATA *Data);
-
-UINT32
-ConvertBase10ToRaw (
- IN EFI_EXP_BASE10_DATA *Data);
-
-CHAR16 *
-GetStringById (
- IN STRING_REF Id,
- EFI_HII_HANDLE StringPackHandle
- );
-
-VOID
-EFIAPI
-SetupDataFilter (
- IN EFI_EVENT Event,
- IN VOID* Context
- );
-
VOID
EFIAPI
IdeDataFilter (
@@ -328,20 +125,6 @@ IdeDataFilter (
IN VOID* Context
);
-VOID
-EFIAPI
-UpdateAhciRaidDiskInfo (
- IN EFI_EVENT Event,
- IN VOID* Context
- );
-
-VOID
-EFIAPI
-EventLogFilter (
- IN EFI_EVENT Event,
- IN VOID* Context
- );
-
VOID
SwapEntries (
IN CHAR8 *Data
@@ -353,45 +136,12 @@ AsciiToUnicode (
IN CHAR16 *UnicodeString
);
-UINT16
-ConfigModeStateGet();
-
-VOID
-SetSkus();
-
-VOID
-CPUSetupItems();
-
-EFI_STATUS
-SecurityDriverCallback (
- IN EFI_FORM_CALLBACK_PROTOCOL *This,
- IN UINT16 KeyValue,
- IN EFI_IFR_DATA_ARRAY *Data,
- OUT EFI_HII_CALLBACK_PACKET **Packet
- );
-
-VOID
-SetPasswordState (
- );
-
-VOID
-EncodePassword (
- IN CHAR16 *Password
- );
-
VOID
EFIAPI
PciBusEvent (
IN EFI_EVENT Event,
IN VOID* Context
);
-VOID
-AsfInitialize(
- );
-
-VOID
-InitializeAsf (
- );
UINT8
ReadCmosBank1Byte (
@@ -410,204 +160,6 @@ VOID
InitializeBoardId (
);
-EFI_STATUS
-InstallBootCallbackRoutine(
- );
-
-EFI_STATUS
-InstallConfigurationCallbackRoutine(
- );
-
-EFI_STATUS
-InstallPerformanceCallbackRoutine(
- );
-
-EFI_STATUS
-InstallSecurityCallbackRoutine (
- );
-
-EFI_STATUS
-InstallMainCallbackRoutine (
- );
-
-EFI_STATUS
-MemoryConfigurationUpdate (
- UINT16 *Key,
- EFI_FORM_LABEL *Label,
- UINT16 *OpcodeCount,
- UINT8 **OpcodeData,
- EFI_FORM_ROUTINE *Routine
- );
-
-EFI_STATUS
-MemoryConfigurationCallbackRoutine (
- SYSTEM_CONFIGURATION *SetupBuffer
- );
-
-EFI_STATUS
-MemoryConfigurationCalculateSpeed(
- SYSTEM_CONFIGURATION *SetupBuffer
- );
-
-VOID
-UpdateMemoryString(
- IN STRING_REF TokenToUpdate,
- IN CHAR16 *NewString
- );
-
-VOID
-InitFeaturePolicy (
- IN EFI_PLATFORM_INFO_HOB *PlatformInfo
- );
-
-VOID
-InitializeSetupVarHide (
- );
-
-VOID
-PreparePCIePCISlotInformation(
- VOID
- );
-
-
-EFI_STATUS
-BootConfigurationUpdate (
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-EFI_STATUS
-InitializeBootConfiguration(
- VOID
- );
-
-UINT16
-GetStringSize(
- IN CHAR16 *ThisString
- );
-
-UINT16
-GetDriveCount (
- IN STRING_REF *BootMap
- );
-
-CHAR16 *
-GetBootString (
- IN STRING_REF Id,
- OUT UINTN *Length
- );
-
-EFI_STATUS
-BootCfgCreateTwoOptionOneOf(
- IN UINT16 QuestionId,
- IN EFI_FORM_LABEL Label,
- IN STRING_REF OptionPrompt,
- IN STRING_REF OptionHelp,
- IN STRING_REF OptionOneString,
- IN STRING_REF OptionTwoString,
- IN UINT8 OptionOneFlags,
- IN UINT8 OptionTwoFlags,
- IN UINT16 KeyValueOne,
- IN UINT16 KeyValueTwo
- );
-
-EFI_STATUS
-ReplaceOpcodeWithText(
- IN STRING_REF OptionPrompt,
- IN STRING_REF OptionHelp,
- IN STRING_REF OptionOneString,
- IN EFI_FORM_LABEL Label
- );
-
-EFI_STATUS
-CreateDriveBootOrderOpcode(
- IN VOID *Data,
- IN STRING_REF *BootMap,
- IN EFI_FORM_LABEL Label,
- IN UINT16 QuestionId,
- IN STRING_REF OptionOneString,
- IN STRING_REF OptionTwoString
- );
-
-VOID
-SetHyperBootCfgFlags(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-VOID
-GetHyperBootCfgFlags(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-VOID
-PrepareBootCfgForHyperBoot(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-BOOLEAN
-BootCfgChanged(
- IN SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-EFI_STATUS
-InsertOpcodeAtIndex(
- IN SYSTEM_CONFIGURATION *SystemConfiguration,
- IN OUT IFR_OPTION *OptionList,
- IN IFR_OPTION IfrOption,
- IN UINT16 OptionCount
- );
-
-VOID
-ConfigureBootOrderStrings(
- IN SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-VOID
-InitializeAllBootStrings(
- VOID
- );
-
-VOID
-SaveUsbCfgSettings(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-VOID
-RestoreUsbCfgSettings(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-EFI_STATUS
-UpdateBootDevicePriority(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-EFI_STATUS
-DisableHyperBoot(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-BOOLEAN
-CheckForUserPassword(
- VOID
- );
-
-EFI_STATUS
-EFIAPI
-HyperBootPasswordCallback(
- IN OUT VOID* Data
- );
-
-EFI_STATUS
-EFIAPI
-HyperBootF9Callback (
- IN VOID* Data
- );
-
-EFI_STATUS
-InstallHiiEvents(
- VOID
- );
-
EFI_STATUS
EFIAPI
ProgramToneFrequency (
@@ -637,73 +189,13 @@ AdjustDefaultRtcTimeCallback (
IN VOID *Context
);
-typedef struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL GOP_DISPLAY_BRIGHTNESS_PROTOCOL;
-
-typedef
-EFI_STATUS
-(EFIAPI *GET_MAXIMUM_BRIGHTNESS_LEVEL) (
- IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This,
- OUT UINT32 *MaxBrightnessLevel
- );
-
-
-typedef
-EFI_STATUS
-(EFIAPI *GET_CURRENT_BRIGHTNESS_LEVEL) (
- IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This,
- OUT UINT32 *MaxBrightnessLevel
- );
-
-typedef
-EFI_STATUS
-(EFIAPI *SET_BRIGHTNESS_LEVEL) (
- IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This,
- IN UINT32 BrightnessLevel
- );
-
-struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL {
- UINT32 Revision;
- GET_MAXIMUM_BRIGHTNESS_LEVEL GetMaxBrightnessLevel;
- GET_CURRENT_BRIGHTNESS_LEVEL GetCurrentBrightnessLevel;
- SET_BRIGHTNESS_LEVEL SetBrightnessLevel;
-};
-
//
// Global externs
//
-extern UINT8 MaintenanceBin[];
-extern UINT8 MainBin[];
-extern UINT8 ConfigurationBin[];
-extern UINT8 MemoryConfigurationBin[];
-extern UINT8 PerformanceBin[];
-extern UINT8 SecurityBin[];
-extern UINT8 BootBin[];
-extern UINT8 PowerBin[];
-extern UINT8 SystemSetupBin[];
-
-extern VOID *mDxePlatformStringPack;
-extern EFI_HII_PROTOCOL *mHii;
extern SYSTEM_CONFIGURATION mSystemConfiguration;
-extern FRAMEWORK_EFI_HII_HANDLE mMaintenanceHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mMainHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mConfigurationHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mPerformanceHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mPowerHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mBootHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mSecurityHiiHandle;
-
-extern SYSTEM_PASSWORDS mSystemPassword;
-extern EFI_PASSWORD_DATA mAdminPassword;
-extern EFI_PASSWORD_DATA mUserPassword;
extern EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *mPciRootBridgeIo;
-//
-//extern EFI_REG_TABLE mSubsystemIdRegs[];
-//
-extern UINT32 mSubsystemVidDid;
-extern UINT32 mSubsystemAudioVidDid;
-
extern UINT8 mBoardIdIndex;
extern BOOLEAN mFoundAANum;
extern EFI_BOARD_FEATURES mBoardFeatures;
@@ -718,5 +210,4 @@ extern BOOLEAN mMfgMode;
extern UINT32 mPlatformBootMode;
extern CHAR8 BoardAaNumber[];
-extern EFI_GUID gEfiGlobalNvsAreaProtocolGuid;
#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index 4d1949d05d..e8652f2a84 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -1,6 +1,6 @@
## @file
#
-# Copyright (c) 1999 - 2016, Intel Corporation. All rights reserved
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -50,13 +50,10 @@ [sources.common]
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
SecurityPkg/SecurityPkg.dec
CryptoPkg/CryptoPkg.dec
- IntelFspWrapperPkg/IntelFspWrapperPkg.dec
[LibraryClasses]
BaseLib
@@ -91,24 +88,18 @@ [Guids]
gEfiEventExitBootServicesGuid
gEfiVlv2VariableGuid
gEfiSecureBootEnableDisableGuid
+ gEfiEndOfDxeEventGroupGuid
[Protocols]
gEfiPciRootBridgeIoProtocolGuid # CONSUMES ## GUID
gEfiVariableArchProtocolGuid
gEfiVariableWriteArchProtocolGuid
gEfiHiiConfigAccessProtocolGuid
- gEfiBootScriptSaveProtocolGuid
- gEfiCpuIoProtocolGuid
+ gEfiCpuIo2ProtocolGuid
gEfiDevicePathProtocolGuid
gEfiDiskInfoProtocolGuid
- gEfiPs2PolicyProtocolGuid
- gEfiIsaAcpiProtocolGuid
- gEfiDataHubProtocolGuid
gEfiPciIoProtocolGuid
gDxePchPlatformPolicyProtocolGuid
- gEfiTpmMpDriverProtocolGuid
- gEfiLpcWpce791PolicyProtocolGuid
- gUsbPolicyGuid
gEfiSpeakerInterfaceProtocolGuid
gDxeVlvPlatformPolicyGuid
gEfiSmbiosSlotPopulationGuid
@@ -121,7 +112,6 @@ [Protocols]
gEfiGlobalNvsAreaProtocolGuid
gEfiCpuIo2ProtocolGuid
gIgdOpRegionProtocolGuid
- gExitPmAuthProtocolGuid
gEdkiiVariableLockProtocolGuid
[Pcd.common]
@@ -134,15 +124,13 @@ [Pcd.common]
gPlatformModuleTokenSpaceGuid.PcdFlashFvMainBase
gPlatformModuleTokenSpaceGuid.PcdFlashFvRecoveryBase
gPlatformModuleTokenSpaceGuid.PcdFlashFvRecoverySize
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase
[Depex]
gEfiPciRootBridgeIoProtocolGuid AND
gEfiVariableArchProtocolGuid AND
gEfiVariableWriteArchProtocolGuid AND
- gEfiBootScriptSaveProtocolGuid AND
- gEfiCpuIoProtocolGuid AND
+ gEfiCpuIo2ProtocolGuid AND
gDxePchPlatformPolicyProtocolGuid AND
gEfiGlobalNvsAreaProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
index 948793f719..c00553e224 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
@@ -1,15 +1,10 @@
#
#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
-
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = PlatformGOPPolicy
@@ -29,14 +24,13 @@ [Sources.common]
[Packages]
MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
+
[LibraryClasses]
BaseLib
DebugLib
UefiDriverEntryPoint
UefiRuntimeServicesTableLib
-# DxeKscLib
[Guids]
gBmpImageGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryCallback.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryCallback.c
index 070848ed1e..074bf7debb 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryCallback.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryCallback.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
MemoryCallback.c
@@ -158,12 +156,10 @@ MemoryDiscoveredPpiNotifyCallback (
IoWrite16 (ACPI_BASE_ADDRESS + R_PCH_ACPI_PM1_CNT, Pm1Cnt);
}
- #ifndef MINNOW2_FSP_BUILD
//
// Set PEI cache mode here
//
SetPeiCacheMode (PeiServices);
- #endif
//
// Pulish memory tyoe info
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c
index a359c95920..ec636a4cd9 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
PlatformEarlyInit.c
@@ -70,10 +67,6 @@ static EFI_PEI_PPI_DESCRIPTOR mInstallSpeakerInterfacePpi = {
static EFI_PEI_RESET_PPI mResetPpi = { IchReset };
-static EFI_PEI_FIND_FV_PPI mEfiFindFvPpi = {
- (EFI_PEI_FIND_FV_FINDFV)FindFv
-};
-
static EFI_PEI_PPI_DESCRIPTOR mPpiList[] = {
{
EFI_PEI_PPI_DESCRIPTOR_PPI,
@@ -81,14 +74,9 @@ static EFI_PEI_PPI_DESCRIPTOR mPpiList[] = {
NULL
},
{
- EFI_PEI_PPI_DESCRIPTOR_PPI,
+ (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
&gEfiPeiResetPpiGuid,
&mResetPpi
- },
- {
- (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
- &gEfiFindFvPpiGuid,
- &mEfiFindFvPpi
}
};
@@ -815,158 +803,6 @@ PlatformEarlyInitEntry (
EFI_PLATFORM_INFO_HOB *PlatformInfo;
EFI_PEI_HOB_POINTERS Hob;
EFI_PLATFORM_CPU_INFO PlatformCpuInfo;
- EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *DescriptorBlock;
- EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *NewDescriptorBlock;
- UINTN Index;
- UINTN MaxIndex;
- UINT64 Base;
- UINT64 Size;
- UINT64 NewSize;
-
- //
- // Make sure base and size of the SMRAM region is aligned
- //
- Hob.Raw = GetFirstGuidHob (&gEfiSmmPeiSmramMemoryReserveGuid);
- if (Hob.Raw != NULL) {
- DescriptorBlock = GET_GUID_HOB_DATA (Hob.Raw);
- DEBUG ((DEBUG_INFO, "SMM PEI SMRAM Memory Reserved HOB\n"));
- for (Index = 0; Index < DescriptorBlock->NumberOfSmmReservedRegions; Index++) {
- DEBUG((DEBUG_INFO, " SMRAM Descriptor[%02x]: Start=%016lx Size=%016lx State=%02x\n",
- Index,
- DescriptorBlock->Descriptor[Index].PhysicalStart,
- DescriptorBlock->Descriptor[Index].PhysicalSize,
- DescriptorBlock->Descriptor[Index].RegionState
- ));
- }
-
- //
- // Find the largest usable range of SMRAM between 1MB and 4GB
- //
- for (Index = 0, MaxIndex = 0, Size = 0; Index < DescriptorBlock->NumberOfSmmReservedRegions; Index++) {
- //
- // Skip any SMRAM region that is already allocated, needs testing, or needs ECC initialization
- //
- if ((DescriptorBlock->Descriptor[Index].RegionState & (EFI_ALLOCATED | EFI_NEEDS_TESTING | EFI_NEEDS_ECC_INITIALIZATION)) != 0) {
- continue;
- }
- //
- // Skip any SMRAM region below 1MB
- //
- if (DescriptorBlock->Descriptor[Index].CpuStart < BASE_1MB) {
- continue;
- }
- //
- // Skip any SMRAM region that is above 4GB or crosses the 4GB boundary
- //
- if ((DescriptorBlock->Descriptor[Index].CpuStart + DescriptorBlock->Descriptor[Index].PhysicalSize) >= BASE_4GB) {
- continue;
- }
- //
- // Cache the largest SMRAM region index
- //
- if (DescriptorBlock->Descriptor[Index].PhysicalSize >= DescriptorBlock->Descriptor[MaxIndex].PhysicalSize) {
- MaxIndex = Index;
- }
- }
-
- //
- // Find the extent of the contiguous SMRAM region that surrounds the largest usable SMRAM range
- //
- Base = DescriptorBlock->Descriptor[MaxIndex].CpuStart;
- Size = DescriptorBlock->Descriptor[MaxIndex].PhysicalSize;
- for (Index = 0; Index < DescriptorBlock->NumberOfSmmReservedRegions; Index++) {
- if (DescriptorBlock->Descriptor[Index].CpuStart < Base &&
- Base == (DescriptorBlock->Descriptor[Index].CpuStart + DescriptorBlock->Descriptor[Index].PhysicalSize)) {
- Base = DescriptorBlock->Descriptor[Index].CpuStart;
- Size += DescriptorBlock->Descriptor[Index].PhysicalSize;
- } else if ((Base + Size) == DescriptorBlock->Descriptor[Index].CpuStart) {
- Size += DescriptorBlock->Descriptor[Index].PhysicalSize;
- }
- }
-
- //
- // Round SMRAM region up to nearest power of 2 that is at least 4KB
- //
- NewSize = MAX (LShiftU64 (1, HighBitSet64 (Size - 1) + 1), SIZE_4KB);
- if ((Base & ~(NewSize - 1)) != Base) {
- //
- // SMRAM region Base Address has smaller alignment than SMRAM region Size
- // This is not compatible with SMRR settings
- //
- DEBUG((DEBUG_ERROR, "ERROR: SMRAM Region Size has larger alignment than SMRAM Region Base\n"));
- DEBUG((DEBUG_ERROR, " SMRAM Region Base=%016lx Size=%016lx\n", Base, NewSize));
- ASSERT (FALSE);
- } else if (Size != NewSize) {
- //
- // See if the size difference can be added to an adjacent descriptor that is already allocated
- //
- for (Index = 0; Index < DescriptorBlock->NumberOfSmmReservedRegions; Index++) {
- if ((DescriptorBlock->Descriptor[Index].CpuStart + DescriptorBlock->Descriptor[Index].PhysicalSize) == (Base + Size)) {
- if (((DescriptorBlock->Descriptor[Index].RegionState) & EFI_ALLOCATED) != 0) {
- DescriptorBlock->Descriptor[Index].PhysicalSize += (NewSize - Size);
- Size = NewSize;
- break;
- }
- }
- }
-
- if (Size != NewSize) {
- //
- // Add an allocated descriptor to the SMM PEI SMRAM Memory Reserved HOB to accomodate the larger size.
- //
- Index = DescriptorBlock->NumberOfSmmReservedRegions;
- NewDescriptorBlock = (EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *)BuildGuidHob (
- &gEfiSmmPeiSmramMemoryReserveGuid,
- sizeof (EFI_SMRAM_HOB_DESCRIPTOR_BLOCK) + ((Index + 1) * sizeof (EFI_SMRAM_DESCRIPTOR))
- );
- ASSERT (NewDescriptorBlock != NULL);
-
- //
- // Copy old EFI_SMRAM_HOB_DESCRIPTOR_BLOCK to new allocated region
- //
- CopyMem (
- NewDescriptorBlock,
- DescriptorBlock,
- sizeof (EFI_SMRAM_HOB_DESCRIPTOR_BLOCK) + (Index * sizeof (EFI_SMRAM_DESCRIPTOR))
- );
-
- //
- // Make sure last descriptor in NewDescriptorBlock contains last descriptor from DescriptorBlock
- //
- CopyMem (
- &NewDescriptorBlock->Descriptor[Index],
- &NewDescriptorBlock->Descriptor[Index - 1],
- sizeof (EFI_SMRAM_DESCRIPTOR)
- );
-
- //
- // Fill next to last descriptor with an allocated descriptor that aligns the total size of SMRAM
- //
- NewDescriptorBlock->Descriptor[Index - 1].CpuStart = Base + Size;
- NewDescriptorBlock->Descriptor[Index - 1].PhysicalStart = Base + Size;
- NewDescriptorBlock->Descriptor[Index - 1].PhysicalSize = NewSize - Size;
- NewDescriptorBlock->Descriptor[Index - 1].RegionState = DescriptorBlock->Descriptor[MaxIndex].RegionState | EFI_ALLOCATED;
- NewDescriptorBlock->NumberOfSmmReservedRegions++;
-
- //
- // Invalidate the original gEfiSmmPeiSmramMemoryReserveGuid HOB
- //
- ZeroMem (&Hob.Guid->Name, sizeof (&Hob.Guid->Name));
- }
-
- Hob.Raw = GetFirstGuidHob (&gEfiSmmPeiSmramMemoryReserveGuid);
- DescriptorBlock = GET_GUID_HOB_DATA (Hob.Raw);
- DEBUG ((DEBUG_INFO, "SMM PEI SMRAM Memory Reserved HOB - Updated\n"));
- for (Index = 0; Index < DescriptorBlock->NumberOfSmmReservedRegions; Index++) {
- DEBUG((DEBUG_INFO, " SMRAM Descriptor[%02x]: Start=%016lx Size=%016lx State=%02x\n",
- Index,
- DescriptorBlock->Descriptor[Index].PhysicalStart,
- DescriptorBlock->Descriptor[Index].PhysicalSize,
- DescriptorBlock->Descriptor[Index].RegionState
- ));
- }
- }
- }
//
// Initialize SmbusPolicy PPI
@@ -1118,45 +954,6 @@ PlatformEarlyInitEntry (
return Status;
}
-/**
-
- Return the mainblockcompact Fv.
-
- @param FvNumber Our enumeration of the firmware volumes we care about.
-
- @param FvAddress Base Address of the memory containing the firmware volume
-
- @retval EFI_SUCCESS
- @retval EFI_NOT_FOUND
-
-**/
-EFI_STATUS
-EFIAPI
-FindFv (
- IN EFI_PEI_FIND_FV_PPI *This,
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN OUT UINT8 *FvNumber,
- OUT EFI_FIRMWARE_VOLUME_HEADER **FVAddress
- )
-{
- //
- // At present, we only have one Fv to search
- //
- if (*FvNumber == 0) {
- *FvNumber = 1;
- *FVAddress = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)FixedPcdGet32 (PcdFlashFvMainBase);
- return EFI_SUCCESS;
- }
- else if (*FvNumber == 1) {
- *FvNumber = 2;
- *FVAddress = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)FixedPcdGet32 (PcdFlashFvRecovery2Base);
- return EFI_SUCCESS;
- }
- else { // Not the one Fv we care about
- return EFI_NOT_FOUND;
- }
-}
-
EFI_STATUS
EFIAPI
CpuOnlyReset (
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
index 29749277d7..9631d49a84 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
PlatformEarlyInit.h
@@ -30,7 +28,7 @@ Abstract:
#define _EFI_PLATFORM_EARLY_INIT_H_
#define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
-#include <FrameworkPei.h>
+#include <PiPei.h>
#include "PlatformBaseAddresses.h"
#include "PchAccess.h"
#include "VlvAccess.h"
@@ -43,7 +41,6 @@ Abstract:
#include <Guid/PlatformInfo.h>
#include <Guid/SetupVariable.h>
#include <Ppi/AtaController.h>
-#include <Ppi/FindFv.h>
#include <Ppi/BootInRecoveryMode.h>
#include <Ppi/ReadOnlyVariable2.h>
#include <Ppi/Capsule.h>
@@ -60,7 +57,6 @@ Abstract:
#include <IndustryStandard/Pci22.h>
#include <Ppi/Speaker.h>
-#include <Guid/FirmwareFileSystem.h>
#include <Guid/MemoryTypeInformation.h>
#include <Ppi/Cache.h>
#include <Ppi/Smbus.h>
@@ -73,12 +69,10 @@ Abstract:
#include <Guid/GlobalVariable.h>
#include <Ppi/RecoveryModule.h>
#include <Ppi/DeviceRecoveryModule.h>
-#include <Guid/Capsule.h>
#include <Guid/RecoveryDevice.h>
#include <Ppi/MasterBootMode.h>
#include <Guid/PlatformCpuInfo.h>
#include <Guid/OsSelection.h>
-#include <Guid/SmramMemoryReserve.h>
#include <Register/Msr.h>
#define SMC_LAN_ON 0x46
@@ -1379,15 +1373,6 @@ CheckIfJumperSetForRecovery(
VOID
);
-EFI_STATUS
-EFIAPI
-FindFv (
- IN EFI_PEI_FIND_FV_PPI *This,
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN OUT UINT8 *FvNumber,
- OUT EFI_FIRMWARE_VOLUME_HEADER **FVAddress
- );
-
BOOLEAN
IsA16Inverted (
);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf
index 54277b1e8b..eeb9a4a023 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf
@@ -1,10 +1,8 @@
#
#
-# Copyright (c) 1999 - 2016, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
#
# Module Name:
#
@@ -17,13 +15,13 @@
#--*/
[defines]
-INF_VERSION = 0x00010005
-BASE_NAME = PlatformEarlyInit
-FILE_GUID = 0A5EA2E1-BE0B-44a0-A775-F429C9A018A0
-MODULE_TYPE = PEIM
-VERSION_STRING = 1.0
-PI_SPECIFICATION_VERSION = 0x0001000A
-ENTRY_POINT = PlatformEarlyInitEntry
+INF_VERSION = 0x00010005
+BASE_NAME = PlatformEarlyInit
+FILE_GUID = 0A5EA2E1-BE0B-44a0-A775-F429C9A018A0
+MODULE_TYPE = PEIM
+VERSION_STRING = 1.0
+PI_SPECIFICATION_VERSION = 0x0001000A
+ENTRY_POINT = PlatformEarlyInitEntry
[sources.common]
BootMode.c
@@ -44,19 +42,15 @@ [Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2SocBinPkg/Vlv2SocBinPkg.dec
UefiCpuPkg/UefiCpuPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
[LibraryClasses]
PeimEntryPoint
DebugLib
HobLib
IoLib
-# PeiKscLib
MultiPlatformLib
PcdLib
PchPlatformLib
@@ -71,14 +65,12 @@ [Ppis]
gEfiPeiResetPpiGuid
gEfiEndOfPeiSignalPpiGuid
gPeiSmbusPolicyPpiGuid
- gEfiFindFvPpiGuid
gPeiCapsulePpiGuid
gEfiPeiBootInRecoveryModePpiGuid
gEfiPeiRecoveryModulePpiGuid
gEfiPeiDeviceRecoveryModulePpiGuid
gPeiCachePpiGuid
gEfiPeiMasterBootModePpiGuid
- gEfiPeiSmbusPpiGuid
gPchInitPpiGuid
gPchUsbPolicyPpiGuid
@@ -96,7 +88,6 @@ [Guids]
gEfiNormalSetupGuid
gEfiMemoryTypeInformationGuid
gOsSelectionVariableGuid
- gEfiSmmPeiSmramMemoryReserveGuid
[Pcd.common]
gPlatformModuleTokenSpaceGuid.PcdFlashFvMainBase
@@ -111,7 +102,7 @@ [Pcd.common]
[Pcd]
gEfiVLVTokenSpaceGuid.PcdMeasuredBootEnable
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootState
+ gPlatformModuleTokenSpaceGuid.PcdBootState
[Depex]
gEfiPeiReadOnlyVariable2PpiGuid AND gPeiCachePpiGuid
--git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
index 283993b44c..a533f3918c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
**/
#ifndef __COMMON_HEADER_H_
@@ -13,18 +11,15 @@
-#include <FrameworkPei.h>
+#include <PiPei.h>
#include <IndustryStandard/SmBus.h>
#include <IndustryStandard/Pci22.h>
#include <Ppi/AtaController.h>
-#include <Guid/Capsule.h>
-#include <Ppi/Cache.h>
#include <Ppi/MasterBootMode.h>
#include <Guid/MemoryTypeInformation.h>
#include <Guid/RecoveryDevice.h>
#include <Ppi/ReadOnlyVariable2.h>
-#include <Ppi/FvLoadFile.h>
#include <Ppi/DeviceRecoveryModule.h>
#include <Ppi/Capsule.h>
#include <Ppi/Reset.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/MemoryCallback.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/MemoryCallback.c
index 7dcc2c3ce9..1932aa7125 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/MemoryCallback.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/MemoryCallback.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
This file includes a memory call back function notified when MRC is done,
following action is performed in this file,
1. ICH initialization after MRC.
@@ -21,7 +18,6 @@
#include "CommonHeader.h"
#include "Platform.h"
-#include <Ppi/Cache.h>
#include <Library/BaseCryptLib.h>
#include <Library/PciLib.h>
#include "VlvAccess.h"
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
index eba1dfff30..aa03f6ea95 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
**/
@@ -816,15 +813,6 @@ PeiInitPlatform (
sizeof (EFI_PLATFORM_INFO_HOB)
);
-
-#ifdef FTPM_ENABLE
- Status = FtpmPolicyInit(PeiServices, &SystemConfiguration);
- if (EFI_ERROR (Status)) {
- DEBUG((EFI_D_ERROR, "fTPM init failed.\n"));
- }
-#endif
-
-
//
// Set the new boot mode for MRC
//
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
index c976273ce3..28a5274c40 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
@@ -1,9 +1,9 @@
#
#
-# Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
+#
#
# This PEIM includes 3 parts, pre memory initialization, MRC
# wrapper and post memory initialization.
@@ -63,9 +63,7 @@ [Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- Vlv2SocBinPkg/Vlv2SocBinPkg.dec
UefiCpuPkg/UefiCpuPkg.dec
CryptoPkg/CryptoPkg.dec
@@ -89,14 +87,11 @@ [Ppis]
gEfiPeiReadOnlyVariable2PpiGuid
gEfiPeiResetPpiGuid
gEfiEndOfPeiSignalPpiGuid
- gEfiFindFvPpiGuid
gPeiCapsulePpiGuid
gEfiPeiBootInRecoveryModePpiGuid
gEfiPeiRecoveryModulePpiGuid
gEfiPeiDeviceRecoveryModulePpiGuid
- gPeiCachePpiGuid
gEfiPeiMasterBootModePpiGuid
- gEfiPeiSmbusPpiGuid
gPeiMfgMemoryTestPpiGuid
gPeiSha256HashPpiGuid
gVlvMmioPolicyPpiGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index 4653f63a66..9951aa4a58 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -2,14 +2,9 @@
# Platform Package
#
# This package provides platform specific modules.
-# Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>
#
-
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-
-#
#
#**/
@@ -66,9 +61,6 @@ [Protocols]
gEfiActiveBiosProtocolGuid = { 0xebbe2d1b, 0x1647, 0x4bda, { 0xab, 0x9a, 0x78, 0x63, 0xe3, 0x96, 0xd4, 0x1a } }
gEfiPlatformCpuProtocolGuid = { 0xbd26cdc9, 0xa092, 0x462a, { 0x87, 0x7a, 0x5a, 0xb6, 0xad, 0xce, 0x48, 0x12 } }
gDxePchPlatformPolicyProtocolGuid = { 0x4b0165a9, 0x61d6, 0x4e23, { 0xa0, 0xb5, 0x3e, 0xc7, 0x9c, 0x2e, 0x30, 0xd5 } }
- gEfiTpmMpDriverProtocolGuid = { 0xde161cfe, 0x1e60, 0x42a1, { 0x8c, 0xc3, 0xee, 0x7e, 0xf0, 0x73, 0x52, 0x12 } }
- gEfiLpcWpce791PolicyProtocolGuid = { 0xab2bee2f, 0xc1a6, 0x4399, { 0x85, 0x3d, 0xc0, 0x7c, 0x77, 0x4f, 0xfd, 0x0d } }
- gUsbPolicyGuid = { 0xf617b358, 0x12cf, 0x414a, { 0xa0, 0x69, 0x60, 0x67, 0x7b, 0xda, 0x13, 0xb4 } }
gEfiSpeakerInterfaceProtocolGuid = { 0x400b4476, 0x3081, 0x11d6, { 0x87, 0xed, 0x00, 0x06, 0x29, 0x45, 0xc3, 0xb9 } }
gDxeVlvPlatformPolicyGuid = { 0x5bab88ba, 0xe0e2, 0x4674, { 0xb6, 0xad, 0xb8, 0x12, 0xf6, 0x88, 0x1c, 0xd6 } }
gEfiSmbiosSlotPopulationGuid = { 0xef7bf7d6, 0xf8ff, 0x4a76, { 0x82, 0x47, 0xc0, 0xd0, 0xd1, 0xcc, 0x49, 0xc0 } }
@@ -80,9 +72,6 @@ [Protocols]
gEfiPlatformIdeInitProtocolGuid = { 0x377c66a3, 0x8fe7, 0x4ee8, { 0x85, 0xb8, 0xf1, 0xa2, 0x82, 0x56, 0x9e, 0x3b } }
gEfiPciPlatformProtocolGuid = { 0x07d75280, 0x27d4, 0x4d69, { 0x90, 0xd0, 0x56, 0x43, 0xe2, 0x38, 0xb3, 0x41 } }
gEnhancedSpeedstepProtocolGuid = { 0x91a1ddcf, 0x5374, 0x4939, { 0x89, 0x51, 0xd7, 0x29, 0x3f, 0x1a, 0x78, 0x6f } }
- gEfiAcpiSupportProtocolGuid = { 0xdbff9d55, 0x89b7, 0x46da, { 0xbd, 0xdf, 0x67, 0x7d, 0x3d, 0xc0, 0x24, 0x1d } }
- gEfiAcpiS3SaveProtocolGuid = { 0x125f2de1, 0xfb85, 0x440c, { 0xa5, 0x4c, 0x4d, 0x99, 0x35, 0x8a, 0x8d, 0x38 } }
- gEfiCpuIoProtocolGuid = { 0xB0732526, 0x38C8, 0x4b40, { 0x88, 0x77, 0x61, 0xC7, 0xB0, 0x6A, 0xAC, 0x45 } }
gPlatformGOPPolicyGuid = { 0xec2e931b, 0x3281, 0x48a5, { 0x81, 0x07, 0xdf, 0x8a, 0x8b, 0xed, 0x3c, 0x5d } }
gEfiGopDisplayBrightnessProtocolGuid = { 0x6ff23f1d, 0x877c, 0x4b1b, { 0x93, 0xfc, 0xf1, 0x42, 0xb2, 0xee, 0xa6, 0xa7 } }
gEfiUsbKeyboardConnectGuid = { 0xad9c4381, 0x1ede, 0x430c, { 0x8d, 0x42, 0x23, 0x76, 0x7c, 0x46, 0x5d, 0x52 } }
@@ -130,9 +119,6 @@ [PcdsFixedAtBuild]
gEfiPchTokenSpaceGuid.PcdPchAcpiIoPortBaseAddress|0x400|UINT16|0x0000000B
- ## FFS filename to find the shell application.
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0xB7, 0xD6, 0x7A, 0xC5, 0x15, 0x05, 0xA8, 0x40, 0x9D, 0x21, 0x55, 0x16, 0x52, 0x85, 0x4E, 0x37 }|VOID*|0x40000004
-
gEfiIchTokenSpaceGuid.PcdPeiIchUhciControllerIoPortBaseAddress|0x4000|UINT16|0x30000017
gEfiIchTokenSpaceGuid.PcdPeiIchEhciControllerMemoryBaseAddress|0xFC000000|UINT32|0x30000019
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index 5827386977..87b905c95b 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -9,45 +9,34 @@
#**/
[Defines]
-DEFINE FLASH_BASE = 0xFFC00000 #The base address of the 4Mb FLASH Device.
-DEFINE FLASH_SIZE = 0x00400000 #The flash size in bytes of the 4Mb FLASH Device.
+DEFINE FLASH_BASE = 0xFF800000 #The base address of the 4Mb FLASH Device.
+DEFINE FLASH_SIZE = 0x00800000 #The flash size in bytes of the 4Mb FLASH Device.
DEFINE FLASH_BLOCK_SIZE = 0x1000 #The block size in bytes of the 4Mb FLASH Device.
-DEFINE FLASH_NUM_BLOCKS = 0x400 #The number of blocks in 4Mb FLASH Device.
+DEFINE FLASH_NUM_BLOCKS = 0x800 #The number of blocks in 4Mb FLASH Device.
DEFINE FLASH_AREA_BASE_ADDRESS = 0xFF800000
DEFINE FLASH_AREA_SIZE = 0x00800000
-DEFINE FLASH_REGION_VLVMICROCODE_OFFSET = 0x00000000
+DEFINE FLASH_REGION_VLVMICROCODE_OFFSET = 0x00400000
DEFINE FLASH_REGION_VLVMICROCODE_SIZE = 0x00040000
DEFINE FLASH_REGION_VLVMICROCODE_BASE = 0xFFC00000
-DEFINE FLASH_REGION_VPD_OFFSET = 0x00040000
+DEFINE FLASH_REGION_VPD_OFFSET = 0x00440000
DEFINE FLASH_REGION_VPD_SIZE = 0x0003E000
-DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_OFFSET = 0x0007E000
+DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_OFFSET = 0x0047E000
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_SIZE = 0x00002000
-DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET = 0x00080000
+DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET = 0x00480000
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_SIZE = 0x00040000
-!if $(MINNOW2_FSP_BUILD) == TRUE
-DEFINE FLASH_REGION_FSPBIN_OFFSET = 0x000C0000
-DEFINE FLASH_REGION_FSPBIN_SIZE = 0x00048000
-DEFINE FLASH_REGION_FSPBIN_BASE = 0xFFCC0000
-
-DEFINE FLASH_REGION_AZALIABIN_OFFSET = 0x00108000
-DEFINE FLASH_REGION_AZALIABIN_SIZE = 0x00008000
-DEFINE FLASH_REGION_AZALIABIN_BASE = 0xFFD08000
-
-!endif
-
-DEFINE FLASH_REGION_FVMAIN_OFFSET = 0x00110000
+DEFINE FLASH_REGION_FVMAIN_OFFSET = 0x00510000
DEFINE FLASH_REGION_FVMAIN_SIZE = 0x00210000
-DEFINE FLASH_REGION_FV_RECOVERY2_OFFSET = 0x00320000
+DEFINE FLASH_REGION_FV_RECOVERY2_OFFSET = 0x00720000
DEFINE FLASH_REGION_FV_RECOVERY2_SIZE = 0x00070000
-DEFINE FLASH_REGION_FV_RECOVERY_OFFSET = 0x00390000
+DEFINE FLASH_REGION_FV_RECOVERY_OFFSET = 0x00790000
DEFINE FLASH_REGION_FV_RECOVERY_SIZE = 0x00070000
################################################################################
@@ -79,17 +68,6 @@ [FD.Vlv]
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE) + 0x60
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE) - 0x60
-!if $(MINNOW2_FSP_BUILD) == TRUE
-# put below PCD value setting into dsc file
-#SET gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE)
-#SET gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset = 0x60
-#SET gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress = $(FLASH_AREA_BASE_ADDRESS)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize = $(FLASH_AREA_SIZE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase = $(FLASH_REGION_FSPBIN_BASE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize = $(FLASH_REGION_FSPBIN_SIZE)
-
-!endif
################################################################################
#
# Following are lists of FD Region layout which correspond to the locations of different
@@ -106,6 +84,13 @@ [FD.Vlv]
# Fv Size can be adjusted; FVMAIN_COMPACT can be reduced to 0x120000, and FV_RECOVERY can be enlarged to 0x80000
#
################################################################################
+
+ #
+ # IFWI Header
+ #
+0x0000|0x1000
+FILE=Vlv2TbltDevicePkg/Stitch/IFWIHeader/IFWI_HEADER.bin
+
#
# CPU Microcodes
#
@@ -173,18 +158,6 @@ [FD.Vlv]
$(FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET)|$(FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_SIZE)
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
-!if $(MINNOW2_FSP_BUILD) == TRUE
-
- $(FLASH_REGION_FSPBIN_OFFSET)|$(FLASH_REGION_FSPBIN_SIZE)
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase|gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize
- FILE = Vlv2SocBinPkg/FspBinary/FvFsp.bin
-
-
- $(FLASH_REGION_AZALIABIN_OFFSET)|$(FLASH_REGION_AZALIABIN_SIZE)
- FILE = Vlv2TbltDevicePkg/FspAzaliaConfigData/AzaliaConfig.bin
-
-!endif
-
#
# Main Block
#
@@ -258,7 +231,7 @@ [FV.FVRECOVERY_COMPONENTS]
READ_LOCK_CAP = TRUE
READ_LOCK_STATUS = TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
INF MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
INF MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
INF MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
@@ -299,28 +272,22 @@ [FV.FVRECOVERY2]
-INF $(PLATFORM_PACKAGE)/PlatformInitPei/PlatformInitPei.inf
+INF Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
INF UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MpS3.inf
-!endif
+INF UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf
-# INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PiSmmCommunicationPei.inf
!if $(TPM_ENABLED) == TRUE
INF SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf
INF SecurityPkg/Tcg/TcgPei/TcgPei.inf
INF SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf
!endif
-!if $(FTPM_ENABLE) == TRUE
-INF SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf #use PCD config
-!endif
INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
!if $(ACPI50_ENABLE) == TRUE
@@ -359,31 +326,15 @@ [FV.FVRECOVERY]
READ_LOCK_STATUS = TRUE
FvNameGuid = B73FE497-B92E-416e-8326-45AD0D270091
-
-!if $(MINNOW2_FSP_BUILD) == TRUE
-INF IntelFspWrapperPkg/FspWrapperSecCore/FspWrapperSecCore.inf
-!else
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
-!endif
-
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
INF MdeModulePkg/Core/Pei/PeiMain.inf
-!if $(MINNOW2_FSP_BUILD) == TRUE
-INF Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
-INF IntelFspWrapperPkg/FspInitPei/FspInitPei.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
INF MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
-INF $(PLATFORM_PACKAGE)/PlatformPei/PlatformPei.inf
+INF Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf
-!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
!if $(SOURCE_DEBUG_ENABLE) == TRUE
INF SourceLevelDebugPkg/DebugAgentPei/DebugAgentPei.inf
@@ -397,12 +348,10 @@ [FV.FVRECOVERY]
!endif
!endif
-!if $(MINNOW2_FSP_BUILD) == FALSE
!if $(PCIESC_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf
!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf
INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf
@@ -440,10 +389,6 @@ [FV.FVMAIN]
# EDK II Related Platform codes
#
- !if $(MINNOW2_FSP_BUILD) == TRUE
- INF IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.inf
- !endif
-
INF MdeModulePkg/Core/Dxe/DxeMain.inf
INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
!if $(ACPI50_ENABLE) == TRUE
@@ -452,14 +397,14 @@ [FV.FVMAIN]
!endif
-INF IntelFrameworkModulePkg/Universal/CpuIoDxe/CpuIoDxe.inf
INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
INF MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
INF MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf
INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
INF UefiCpuPkg/CpuDxe/CpuDxe.inf
-INF $(PLATFORM_PACKAGE)/Metronome/Metronome.inf
+INF UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
+INF MdeModulePkg/Universal/Metronome/Metronome.inf
INF IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
!if $(ARCH) == IA32
INF USE=IA32 MdeModulePkg/Logo/Logo.inf
@@ -469,13 +414,12 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
-INF IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf
INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf
INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
-INF $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbSmm.inf
+INF Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbSmm.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
!if $(SECURE_BOOT_ENABLE)
INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf
!endif
@@ -485,89 +429,62 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
INF PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
-INF $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbRuntimeDxe.inf
+INF Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbRuntimeDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformSetupDxe/PlatformSetupDxe.inf
+INF Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
!if $(DATAHUB_ENABLE) == TRUE
INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf
!endif
-INF IntelFrameworkModulePkg/Universal/StatusCode/DatahubStatusCodeHandlerDxe/DatahubStatusCodeHandlerDxe.inf
INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
#
# EDK II Related Silicon codes
#
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
-!if $(USE_HPET_TIMER) == TRUE
INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
-!else
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmartTimer.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/IntelPchLegacyInterrupt.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
!if $(PCIESC_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
-!else
-INF IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf
-INF Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
-!endif
-!if $(MINNOW2_FSP_BUILD) == FALSE
- !if $(SEC_ENABLE) == TRUE
- INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/HeciDrv.inf
- INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SeCPolicyInitDxe.inf
- !endif
-!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
!if $(TPM_ENABLED) == TRUE
INF SecurityPkg/Tcg/TcgConfigDxe/TcgConfigDxe.inf
INF SecurityPkg/Tcg/TcgDxe/TcgDxe.inf
INF RuleOverride = DRIVER_ACPITABLE SecurityPkg/Tcg/TcgSmm/TcgSmm.inf
!endif
-!if $(FTPM_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/Tpm2DeviceSeCPei.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Tpm2DeviceSeCDxe.inf
-INF SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
-INF SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/FtpmSmm.inf
-!endif
#
# EDK II Related Platform codes
#
-INF $(PLATFORM_PACKAGE)/PlatformSmm/PlatformSmm.inf
-INF $(PLATFORM_PACKAGE)/PlatformInfoDxe/PlatformInfoDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformDxe/PlatformDxe.inf
-INF $(PLATFORM_PACKAGE)/PciPlatform/PciPlatform.inf
-INF $(PLATFORM_PACKAGE)/SaveMemoryConfig/SaveMemoryConfig.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
-INF $(PLATFORM_PACKAGE)/PpmPolicy/PpmPolicy.inf
-INF $(PLATFORM_PACKAGE)/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+INF Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
+INF Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
+INF Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+INF Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+INF Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+INF Vlv2TbltDevicePkg/SaveMemoryConfig/SaveMemoryConfig.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
+INF Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
!if $(GOP_DRIVER_ENABLE) == TRUE
- INF $(PLATFORM_PACKAGE)/PlatformGopPolicy/PlatformGopPolicy.inf
+ INF Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
FILE DRIVER = FF0C8745-3270-4439-B74F-3E45F8C77064 {
SECTION DXE_DEPEX_EXP = {gPlatformGOPPolicyGuid}
SECTION PE32 = Vlv2SocBinPkg/GOP/7.2.1011/RELEASE_VS2008x86/$(DXE_ARCHITECTURE)/IntelGopDriver.efi
@@ -575,7 +492,7 @@ [FV.FVMAIN]
}
!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
#
# SMM
#
@@ -586,25 +503,22 @@ [FV.FVMAIN]
INF UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
INF MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
INF UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
-INF $(PLATFORM_PACKAGE)/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
-#
-# Remove the following two SMM binary modules that prevent platform from booting to UEFI Shell
-#
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/GraphicDxeInitSmm.inf
#
# ACPI
#
INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
-INF $(PLATFORM_PACKAGE)/BootScriptSaveDxe/BootScriptSaveDxe.inf
+INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
INF IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
INF RuleOverride = ACPITABLE2 Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
-INF RuleOverride = ACPITABLE $(PLATFORM_RC_PACKAGE)/AcpiTablesPCAT/AcpiTables.inf
+INF RuleOverride = ACPITABLE Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
-INF $(PLATFORM_PACKAGE)/AcpiPlatform/AcpiPlatform.inf
+INF Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
@@ -613,26 +527,17 @@ [FV.FVMAIN]
#
INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
#
# ISA
#
-INF $(PLATFORM_PACKAGE)/Wpce791/Wpce791.inf
-INF IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
-INF IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
+INF Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
!if $(SOURCE_DEBUG_ENABLE) != TRUE
INF IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
!endif
-#INF IntelFrameworkModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
-#INF IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-#
-# SDIO
-#
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcHost.inf
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcMediaDevice.inf
#
# IDE/SCSI/AHCI
#
@@ -642,7 +547,7 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
!if $(SATA_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
#
#
@@ -659,7 +564,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
INF MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
-INF IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf
INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
@@ -682,9 +586,9 @@ [FV.FVMAIN]
# SMBIOS
#
INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
-INF $(PLATFORM_PACKAGE)/SmBiosMiscDxe/SmBiosMiscDxe.inf
+INF Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
@@ -719,8 +623,14 @@ [FV.FVMAIN]
!if $(NETWORK_ENABLE) == TRUE
FILE DRIVER = 22DE1691-D65D-456a-993E-A253DD1F308C {
SECTION PE32 = Vlv2SocBinPkg/UNDI/RtkUndiDxe/$(DXE_ARCHITECTURE)/RtkUndiDxe.efi
- SECTION UI = "UNDI"
+ SECTION UI = "RtkUndiDxe"
}
+ !if $(DXE_ARCHITECTURE) == "X64"
+ FILE DRIVER = 7C7467E9-8BB3-4BF1-8694-6FED7D25D13E {
+ SECTION PE32 = Vlv2SocBinPkg/UNDI/I211PcieUndiDxe/$(DXE_ARCHITECTURE)/E7006X3.EFI
+ SECTION UI = "E7006X3"
+ }
+ !endif
!endif
!if $(CAPSULE_ENABLE)
@@ -908,7 +818,7 @@ [Rule.Common.UEFI_DRIVER.BINARY]
[Rule.Common.UEFI_DRIVER.NATIVE_BINARY]
FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(WORKSPACE)/$(PLATFORM_PACKAGE)/IntelGopDepex/IntelGopDriver.depex
+ DXE_DEPEX DXE_DEPEX Optional $(WORKSPACE)/Vlv2TbltDevicePkg/IntelGopDepex/IntelGopDriver.depex
PE32 PE32 |.efi
UI STRING="$(MODULE_NAME)" Optional
VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
index 61eca30be1..d5068b514c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
@@ -1,11 +1,9 @@
#/** @file
# platform configuration file.
#
-# Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
-#
+# Copyright (c) 2012 - 2019, Intel Corporation. All rights reserved.<BR>
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
#
#**/
@@ -13,12 +11,6 @@
# TRUE is ENABLE. FASLE is DISABLE.
#
-#
-# FSP selection
-#
-DEFINE MINNOW2_FSP_BUILD = FALSE
-
-
DEFINE SCSI_ENABLE = TRUE
@@ -31,14 +23,6 @@
# Feature selection
#
-#
-# Select system timer which is used to produce Timer Arch Protocol:
-# TRUE - HPET timer is used.
-# FALSE - 8254 timer is used.
-#
-DEFINE USE_HPET_TIMER = TRUE
-
-
#
# Feature selection
#
@@ -65,7 +49,6 @@
DEFINE GOP_DRIVER_ENABLE = TRUE
DEFINE DATAHUB_ENABLE = TRUE
-DEFINE DATAHUB_STATUS_CODE_ENABLE = TRUE
DEFINE USB_ENABLE = TRUE
DEFINE ISA_SERIAL_STATUS_CODE_ENABLE = TRUE
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index a6859d3b6d..110efe28c3 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -30,17 +30,6 @@ [Defines]
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET = 0x00080000
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_SIZE = 0x00040000
-!if $(MINNOW2_FSP_BUILD) == TRUE
-DEFINE FLASH_REGION_FSPBIN_OFFSET = 0x000C0000
-DEFINE FLASH_REGION_FSPBIN_SIZE = 0x00048000
-DEFINE FLASH_REGION_FSPBIN_BASE = 0xFFCC0000
-
-DEFINE FLASH_REGION_AZALIABIN_OFFSET = 0x00108000
-DEFINE FLASH_REGION_AZALIABIN_SIZE = 0x00008000
-DEFINE FLASH_REGION_AZALIABIN_BASE = 0xFFD08000
-
-!endif
-
DEFINE FLASH_REGION_FVMAIN_OFFSET = 0x00110000
DEFINE FLASH_REGION_FVMAIN_SIZE = 0x00215000
@@ -79,17 +68,6 @@ [FD.Vlv]
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE) + 0x60
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE) - 0x60
-!if $(MINNOW2_FSP_BUILD) == TRUE
-# put below PCD value setting into dsc file
-#SET gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE)
-#SET gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset = 0x60
-#SET gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress = $(FLASH_AREA_BASE_ADDRESS)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize = $(FLASH_AREA_SIZE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase = $(FLASH_REGION_FSPBIN_BASE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize = $(FLASH_REGION_FSPBIN_SIZE)
-
-!endif
################################################################################
#
# Following are lists of FD Region layout which correspond to the locations of different
@@ -129,18 +107,6 @@ [FD.Vlv]
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
FILE = Vlv2TbltDevicePkg/Stitch/Gcc/NvStorageFtwSpare.bin
-!if $(MINNOW2_FSP_BUILD) == TRUE
-
- $(FLASH_REGION_FSPBIN_OFFSET)|$(FLASH_REGION_FSPBIN_SIZE)
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase|gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize
- FILE = Vlv2SocBinPkg/FspBinary/FvFsp.bin
-
-
- $(FLASH_REGION_AZALIABIN_OFFSET)|$(FLASH_REGION_AZALIABIN_SIZE)
- FILE = Vlv2TbltDevicePkg/FspAzaliaConfigData/AzaliaConfig.bin
-
-!endif
-
#
# Main Block
#
@@ -214,7 +180,7 @@ [FV.FVRECOVERY_COMPONENTS]
READ_LOCK_CAP = TRUE
READ_LOCK_STATUS = TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
INF MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
INF MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
INF MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
@@ -253,30 +219,21 @@ [FV.FVRECOVERY2]
READ_LOCK_STATUS = TRUE
FvNameGuid = B73FE497-B92E-416e-8326-45AD0D270092
-
-
-INF $(PLATFORM_PACKAGE)/PlatformInitPei/PlatformInitPei.inf
-
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
+INF Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
INF UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MpS3.inf
-!endif
+INF UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf
-# INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PiSmmCommunicationPei.inf
!if $(TPM_ENABLED) == TRUE
INF SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf
INF SecurityPkg/Tcg/TcgPei/TcgPei.inf
INF SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf
!endif
-!if $(FTPM_ENABLE) == TRUE
-INF SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf #use PCD config
-!endif
INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
!if $(ACPI50_ENABLE) == TRUE
@@ -315,31 +272,15 @@ [FV.FVRECOVERY]
READ_LOCK_STATUS = TRUE
FvNameGuid = B73FE497-B92E-416e-8326-45AD0D270091
-
-!if $(MINNOW2_FSP_BUILD) == TRUE
-INF IntelFspWrapperPkg/FspWrapperSecCore/FspWrapperSecCore.inf
-!else
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
-!endif
-
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
INF MdeModulePkg/Core/Pei/PeiMain.inf
-!if $(MINNOW2_FSP_BUILD) == TRUE
-INF Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
-INF IntelFspWrapperPkg/FspInitPei/FspInitPei.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
INF MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
-INF $(PLATFORM_PACKAGE)/PlatformPei/PlatformPei.inf
+INF Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf
-!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
!if $(SOURCE_DEBUG_ENABLE) == TRUE
INF SourceLevelDebugPkg/DebugAgentPei/DebugAgentPei.inf
@@ -353,12 +294,10 @@ [FV.FVRECOVERY]
!endif
!endif
-!if $(MINNOW2_FSP_BUILD) == FALSE
!if $(PCIESC_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf
!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf
INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf
@@ -396,10 +335,6 @@ [FV.FVMAIN]
# EDK II Related Platform codes
#
- !if $(MINNOW2_FSP_BUILD) == TRUE
- INF IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.inf
- !endif
-
INF MdeModulePkg/Core/Dxe/DxeMain.inf
INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
!if $(ACPI50_ENABLE) == TRUE
@@ -408,14 +343,14 @@ [FV.FVMAIN]
!endif
-INF IntelFrameworkModulePkg/Universal/CpuIoDxe/CpuIoDxe.inf
INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
INF MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
INF MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf
INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
INF UefiCpuPkg/CpuDxe/CpuDxe.inf
-INF $(PLATFORM_PACKAGE)/Metronome/Metronome.inf
+INF UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
+INF MdeModulePkg/Universal/Metronome/Metronome.inf
INF IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
!if $(ARCH) == IA32
INF USE=IA32 MdeModulePkg/Logo/Logo.inf
@@ -425,13 +360,12 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
-INF IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf
INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf
INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
-INF $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbSmm.inf
+INF Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbSmm.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
!if $(SECURE_BOOT_ENABLE)
INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf
!endif
@@ -441,89 +375,62 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
INF PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
-INF $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbRuntimeDxe.inf
+INF Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbRuntimeDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformSetupDxe/PlatformSetupDxe.inf
+INF Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
!if $(DATAHUB_ENABLE) == TRUE
INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf
!endif
-INF IntelFrameworkModulePkg/Universal/StatusCode/DatahubStatusCodeHandlerDxe/DatahubStatusCodeHandlerDxe.inf
INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
#
# EDK II Related Silicon codes
#
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
-!if $(USE_HPET_TIMER) == TRUE
INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
-!else
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmartTimer.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/IntelPchLegacyInterrupt.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
!if $(PCIESC_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
-!else
-INF IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf
-INF Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
-!endif
-!if $(MINNOW2_FSP_BUILD) == FALSE
- !if $(SEC_ENABLE) == TRUE
- INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/HeciDrv.inf
- INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SeCPolicyInitDxe.inf
- !endif
-!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
!if $(TPM_ENABLED) == TRUE
INF SecurityPkg/Tcg/TcgConfigDxe/TcgConfigDxe.inf
INF SecurityPkg/Tcg/TcgDxe/TcgDxe.inf
INF RuleOverride = DRIVER_ACPITABLE SecurityPkg/Tcg/TcgSmm/TcgSmm.inf
!endif
-!if $(FTPM_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/Tpm2DeviceSeCPei.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Tpm2DeviceSeCDxe.inf
-INF SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
-INF SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/FtpmSmm.inf
-!endif
#
# EDK II Related Platform codes
#
-INF $(PLATFORM_PACKAGE)/PlatformSmm/PlatformSmm.inf
-INF $(PLATFORM_PACKAGE)/PlatformInfoDxe/PlatformInfoDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformDxe/PlatformDxe.inf
-INF $(PLATFORM_PACKAGE)/PciPlatform/PciPlatform.inf
-INF $(PLATFORM_PACKAGE)/SaveMemoryConfig/SaveMemoryConfig.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
-INF $(PLATFORM_PACKAGE)/PpmPolicy/PpmPolicy.inf
-INF $(PLATFORM_PACKAGE)/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+INF Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
+INF Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
+INF Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+INF Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+INF Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+INF Vlv2TbltDevicePkg/SaveMemoryConfig/SaveMemoryConfig.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
+INF Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
!if $(GOP_DRIVER_ENABLE) == TRUE
- INF $(PLATFORM_PACKAGE)/PlatformGopPolicy/PlatformGopPolicy.inf
+ INF Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
FILE DRIVER = FF0C8745-3270-4439-B74F-3E45F8C77064 {
SECTION DXE_DEPEX_EXP = {gPlatformGOPPolicyGuid}
SECTION PE32 = Vlv2SocBinPkg/GOP/7.2.1011/RELEASE_VS2008x86/$(DXE_ARCHITECTURE)/IntelGopDriver.efi
@@ -531,7 +438,7 @@ [FV.FVMAIN]
}
!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
#
# SMM
#
@@ -542,25 +449,22 @@ [FV.FVMAIN]
INF UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
INF MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
INF UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
-INF $(PLATFORM_PACKAGE)/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
-#
-# Remove the following two SMM binary modules that prevent platform from booting to UEFI Shell
-#
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/GraphicDxeInitSmm.inf
#
# ACPI
#
INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
-INF $(PLATFORM_PACKAGE)/BootScriptSaveDxe/BootScriptSaveDxe.inf
+INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
INF IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
INF RuleOverride = ACPITABLE2 Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
-INF RuleOverride = ACPITABLE $(PLATFORM_RC_PACKAGE)/AcpiTablesPCAT/AcpiTables.inf
+INF RuleOverride = ACPITABLE Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
-INF $(PLATFORM_PACKAGE)/AcpiPlatform/AcpiPlatform.inf
+INF Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
@@ -569,26 +473,17 @@ [FV.FVMAIN]
#
INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
#
# ISA
#
-INF $(PLATFORM_PACKAGE)/Wpce791/Wpce791.inf
-INF IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
-INF IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
+INF Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
!if $(SOURCE_DEBUG_ENABLE) != TRUE
INF IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
!endif
-#INF IntelFrameworkModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
-#INF IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-#
-# SDIO
-#
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcHost.inf
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcMediaDevice.inf
#
# IDE/SCSI/AHCI
#
@@ -598,7 +493,7 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
!if $(SATA_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
#
#
@@ -615,7 +510,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
INF MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
-INF IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf
INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
@@ -638,9 +532,9 @@ [FV.FVMAIN]
# SMBIOS
#
INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
-INF $(PLATFORM_PACKAGE)/SmBiosMiscDxe/SmBiosMiscDxe.inf
+INF Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
@@ -675,8 +569,14 @@ [FV.FVMAIN]
!if $(NETWORK_ENABLE) == TRUE
FILE DRIVER = 22DE1691-D65D-456a-993E-A253DD1F308C {
SECTION PE32 = Vlv2SocBinPkg/UNDI/RtkUndiDxe/$(DXE_ARCHITECTURE)/RtkUndiDxe.efi
- SECTION UI = "UNDI"
+ SECTION UI = "RtkUndiDxe"
}
+ !if $(DXE_ARCHITECTURE) == "X64"
+ FILE DRIVER = 7C7467E9-8BB3-4BF1-8694-6FED7D25D13E {
+ SECTION PE32 = Vlv2SocBinPkg/UNDI/I211PcieUndiDxe/$(DXE_ARCHITECTURE)/E7006X3.EFI
+ SECTION UI = "E7006X3"
+ }
+ !endif
!endif
!if $(CAPSULE_ENABLE)
@@ -786,11 +686,7 @@ [Rule.Common.SEC]
[Rule.Common.SEC.BINARY]
FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED {
PE32 PE32 Align = 8 |.efi
-!if $(MINNOW2_FSP_BUILD) == TRUE
- RAW RAW |.raw
-!else
RAW BIN Align = 16 |.com
-!endif
}
[Rule.Common.PEI_CORE]
@@ -868,7 +764,7 @@ [Rule.Common.UEFI_DRIVER.BINARY]
[Rule.Common.UEFI_DRIVER.NATIVE_BINARY]
FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(WORKSPACE)/$(PLATFORM_PACKAGE)/IntelGopDepex/IntelGopDriver.depex
+ DXE_DEPEX DXE_DEPEX Optional $(WORKSPACE)/Vlv2TbltDevicePkg/IntelGopDepex/IntelGopDriver.depex
PE32 PE32 |.efi
UI STRING="$(MODULE_NAME)" Optional
VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index 0a57587e82..25d1beb400 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -18,25 +18,11 @@ [Defines]
PLATFORM_GUID = 465B0A0B-7AC1-443b-8F67-7B8DEC145F90
PLATFORM_VERSION = 0.1
DSC_SPECIFICATION = 0x00010005
-
- #
- # Set platform specific package/folder name, same as passed from PREBUILD script.
- # PLATFORM_PACKAGE would be the same as PLATFORM_NAME as well as package build folder
- # DEFINE only takes effect at R9 DSC and FDF.
- #
- DEFINE PLATFORM_PACKAGE = Vlv2TbltDevicePkg
- DEFINE PLATFORM_RC_PACKAGE = Vlv2DeviceRefCodePkg
- DEFINE PLATFORM_BINARY_PACKAGE = Vlv2SocBinPkg
- OUTPUT_DIRECTORY = Build/$(PLATFORM_PACKAGE)
+ OUTPUT_DIRECTORY = Build/Vlv2TbltDevicePkg
SUPPORTED_ARCHITECTURES = IA32|X64
BUILD_TARGETS = DEBUG|RELEASE
SKUID_IDENTIFIER = DEFAULT
- DEFINE CPU_ARCH =ValleyView2
- DEFINE PROJECT_SC_FAMILY =IntelPch
- DEFINE PROJECT_SC_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/SouthCluster
- DEFINE PROJECT_VLV_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/NorthCluster
-
DEFINE RC_BINARY_RELEASE = TRUE
#
# Platform On/Off features are defined here
@@ -47,22 +33,18 @@ [Defines]
# 3.BayleyBay
# ENBDT_PF_ENABLE = TRUE
#
- !include $(PLATFORM_PACKAGE)/AutoPlatformCFG.txt
- !include $(PLATFORM_PACKAGE)/PlatformPkgConfig.dsc
+ !include Vlv2TbltDevicePkg/AutoPlatformCFG.txt
+ !include Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
DEFINE PLATFORMX64_ENABLE = TRUE
!if $(X64_CONFIG) == TRUE
DEFINE DXE_ARCHITECTURE = X64
- DEFINE EDK_DXE_ARCHITECTURE = X64
- DEFINE UNDI_DXE_ARCHITECTURE = 64
!else
DEFINE DXE_ARCHITECTURE = IA32
- DEFINE EDK_DXE_ARCHITECTURE = Ia32
- DEFINE UNDI_DXE_ARCHITECTURE = 32
!endif
- FLASH_DEFINITION = $(PLATFORM_PACKAGE)/PlatformPkgGcc.fdf
+ FLASH_DEFINITION = Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
!if $(LFMA_ENABLE) == TRUE
FIX_LOAD_TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
DEFINE TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
@@ -73,10 +55,6 @@ [Defines]
DEFINE PLATFORM_PCIEXPRESS_BASE = 0E0000000
- DEFINE SEC_ENABLE = FALSE
- DEFINE SEC_DEBUG_INFO_ENABLE = FALSE
- DEFINE FTPM_ENABLE = FALSE
-
################################################################################
#
# SKU Identification section - list of all SKU IDs supported by this
@@ -100,7 +78,6 @@ [LibraryClasses.common]
DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
- DxeSmmDriverEntryPoint|IntelFrameworkPkg/Library/DxeSmmDriverEntryPoint/DxeSmmDriverEntryPoint.inf
#
# Basic
@@ -144,8 +121,7 @@ [LibraryClasses.common]
GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLib.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
#
# Framework
@@ -168,10 +144,6 @@ [LibraryClasses.common]
UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
!endif
-!if $(S3_ENABLE) == TRUE
- S3Lib|IntelFrameworkModulePkg/Library/PeiS3Lib/PeiS3Lib.inf
-!endif
-
OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
!if $(CAPSULE_ENABLE) == TRUE
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
@@ -199,27 +171,27 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|$(PLATFORM_PACKAGE)/Library/SmbusLib/SmbusLib.inf
- SmmLib|$(PLATFORM_PACKAGE)/Library/PchSmmLib/PchSmmLib.inf
+ SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
# Platform
#
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
- ResetSystemLib|$(PLATFORM_PACKAGE)/Library/ResetSystemLib/ResetSystemLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ ResetSystemLib|Vlv2TbltDevicePkg/Library/ResetSystemLib/ResetSystemLib.inf
- PlatformCmosLib|$(PLATFORM_PACKAGE)/Library/PlatformCmosLib/PlatformCmosLib.inf
+ PlatformCmosLib|Vlv2TbltDevicePkg/Library/PlatformCmosLib/PlatformCmosLib.inf
#
# Misc
#
- MonoStatusCodeLib|$(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf
+ MonoStatusCodeLib|Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
!if $(TARGET) == RELEASE
DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
@@ -231,10 +203,11 @@ [LibraryClasses.common]
!endif
+ PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
+
!if $(SOURCE_DEBUG_ENABLE) == TRUE
PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
DebugCommunicationLib|SourceLevelDebugPkg/Library/DebugCommunicationLibSerialPort/DebugCommunicationLibSerialPort.inf
- PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!else
PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf
@@ -249,10 +222,10 @@ [LibraryClasses.common]
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
!endif
- BiosIdLib|$(PLATFORM_PACKAGE)/Library/BiosIdLib/BiosIdLib.inf
- CpuIA32Lib|$(PLATFORM_PACKAGE)/Library/CpuIA32Lib/CpuIA32Lib.inf
+ BiosIdLib|Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
+ CpuIA32Lib|Vlv2TbltDevicePkg/Library/CpuIA32Lib/CpuIA32Lib.inf
- StallSmmLib|$(PLATFORM_PACKAGE)/Library/StallSmmLib/StallSmmLib.inf
+ StallSmmLib|Vlv2TbltDevicePkg/Library/StallSmmLib/StallSmmLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
@@ -266,13 +239,10 @@ [LibraryClasses.common]
AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
!endif
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
-!if $(RC_BINARY_RELEASE) == TRUE
- I2cLib|Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
-!endif
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
-!if $(FTPM_ENABLE) == TRUE || $(NETWORK_ISCSI_ENABLE) == TRUE
+!if $(NETWORK_ISCSI_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
@@ -283,12 +253,6 @@ [LibraryClasses.common]
Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
-!if $(MINNOW2_FSP_BUILD) == TRUE
- FspApiLib|IntelFspWrapperPkg/Library/BaseFspApiLib/BaseFspApiLib.inf
- FspPlatformInfoLib|IntelFspWrapperPkg/Library/BaseFspPlatformInfoLibSample/BaseFspPlatformInfoLibSample.inf
- FspPlatformSecLib|Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
- FspHobProcessLib|Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
-!endif
BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
@@ -309,14 +273,14 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
- MultiPlatformLib|$(PLATFORM_PACKAGE)/Library/MultiPlatformLib/MultiPlatformLib.inf
+ MultiPlatformLib|Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(TARGET) == RELEASE
@@ -324,7 +288,7 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf
@@ -333,13 +297,6 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
!endif
- !if $(MINNOW2_FSP_BUILD) == TRUE
- PlatformFspLib|Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
- !endif
-!if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCPei/Tpm2DeviceLibSeC.inf
-!endif
-
[LibraryClasses.X64]
#
# DXE phase common
@@ -356,7 +313,7 @@ [LibraryClasses.X64]
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf
- EfiRegTableLib|$(PLATFORM_PACKAGE)/Library/EfiRegTableLib/EfiRegTableLib.inf
+ EfiRegTableLib|Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
@@ -371,14 +328,14 @@ [LibraryClasses.X64.DXE_DRIVER]
CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
[LibraryClasses.X64.DXE_CORE]
HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
@@ -386,7 +343,7 @@ [LibraryClasses.X64.DXE_CORE]
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
@@ -411,7 +368,7 @@ [LibraryClasses.X64.DXE_SMM_DRIVER]
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SmmDebugAgentLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuExceptionHandlerLib.inf
@@ -485,12 +442,6 @@ [PcdsFeatureFlag.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|FALSE
-!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmEnableBspElection|FALSE
-!if $(DATAHUB_STATUS_CODE_ENABLE) == TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|TRUE
-!else
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|FALSE
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst|FALSE
!if $(TARGET) == RELEASE
@@ -516,59 +467,20 @@ [PcdsFeatureFlag.common]
!endif
- ## This PCD specifies whether PS2 keyboard does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2KbdExtendedVerification|FALSE
-
- ## This PCD specifies whether PS2 mouse does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2MouseExtendedVerification|FALSE
-
!if $(VARIABLE_INFO_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|FALSE
!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
-
!if $(SOURCE_DEBUG_ENABLE)
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmDebug|TRUE
!endif
+ gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
+
[PcdsFixedAtBuild.common]
-!if $(MINNOW2_FSP_BUILD) == TRUE
-# $(FLASH_REGION_VLVMICROCODE_BASE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress|0xFFC00000
-# $(FLASH_REGION_VLVMICROCODE_SIZE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize|0x00040000
- gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset|0x60
-# $(FLASH_AREA_BASE_ADDRESS)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress|0xFF800000
-# $(FLASH_AREA_SIZE)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize|0x00800000
-# $(FLASH_REGION_FSPBIN_BASE)
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase|0xFFCC0000
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
-!if $(MINNOW2_FSP_BUILD) == TRUE
- # in FSP, when this got used, the memory already is up
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
-!else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
-!endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
-
-!else
- !if $(MINNOW2_FSP_BUILD) == TRUE
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
- !else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
- !endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
- gEfiCpuTokenSpaceGuid.PcdPeiTemporaryRamStackSize|0x3C00
-!endif
-
-
!if $(SECURE_BOOT_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x22000
!else
@@ -576,11 +488,8 @@ [PcdsFixedAtBuild.common]
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize|0x00000800
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize|0x400
- gEfiCpuTokenSpaceGuid.PcdCpuIEDRamSize|0x400000
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdS3AcpiReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSupport|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport|FALSE
- gEfiCpuTokenSpaceGuid.PcdCpuSmmApSyncTimeout|1000
!if $(S4_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|TRUE
!else
@@ -598,13 +507,9 @@ [PcdsFixedAtBuild.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|60
!endif
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdEbdaReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdLoadModuleAtFixAddressEnable|$(TOP_MEMORY_ADDRESS)
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserSubtitleTextColor|0x0
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserFieldTextColor|0x01
- gEfiCpuTokenSpaceGuid.PcdCpuIEDEnabled|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVbeEnable|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVgaEnable|TRUE
!if $(SOURCE_DEBUG_ENABLE) == TRUE
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17
@@ -650,11 +555,6 @@ [PcdsFixedAtBuild.IA32]
[PcdsPatchableInModule.common]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0x$(PLATFORM_PCIEXPRESS_BASE)
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLegacyBiosCacheLegacyRegion|FALSE
-
- ## This PCD specifies whether to use the optimized timing for best PS2 detection performance.
- # Note this PCD could be set to TRUE for best boot performance and set to FALSE for best device compatibility.
- gEfiMdeModulePkgTokenSpaceGuid.PcdFastPS2Detection|TRUE
#######################################################################################################
#
@@ -829,10 +729,6 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdFTPMStatus|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateSmmDataPtr|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0
- gEfiCpuTokenSpaceGuid.PcdCpuS3DataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuHotPlugDataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuCallbackSignal|0
- gEfiCpuTokenSpaceGuid.PcdCpuConfigContextBuffer|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
@@ -845,24 +741,7 @@ [PcdsDynamicExDefault.X64.DEFAULT]
[Components.IA32]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
-
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspWrapperSecCore/FspWrapperSecCore.inf {
- !if $(TARGET) == DEBUG
-
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
- IntelFspWrapperPkg/FspInitPei/FspInitPei.inf {
- !if $(TARGET) == DEBUG
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- !endif
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
MdeModulePkg/Core/Pei/PeiMain.inf {
!if $(TARGET) == DEBUG
@@ -873,31 +752,23 @@ [Components.IA32]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
- $(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf {
+ Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf {
!if $(TARGET) == DEBUG
<PcdsFixedAtBuild>
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2E
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <BuildOptions>
- !if $(FTPM_ENABLE)==TRUE
- *_*_IA32_CC_FLAGS = /D FTPM_ENABLE
- !endif
}
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
-$(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
!endif
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformPei/PlatformPei.inf {
+ Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf {
<BuildOptions>
*_*_IA32_CC_FLAGS = -DRC_BINARY_RELEASE
!if $(TARGET) == DEBUG
@@ -917,10 +788,6 @@ [Components.IA32]
}
!endif
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/Tpm2DeviceSeCPei.inf
-!endif
-
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf
SecurityPkg/Tcg/TcgPei/TcgPei.inf {
@@ -931,7 +798,7 @@ [Components.IA32]
}
!endif
- $(PLATFORM_PACKAGE)/PlatformInitPei/PlatformInitPei.inf {
+ Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
<LibraryClasses>
@@ -940,34 +807,33 @@ [Components.IA32]
!endif
PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
}
- $(PLATFORM_PACKAGE)/FvInfoPei/FvInfoPei.inf
+ Vlv2TbltDevicePkg/FvInfoPei/FvInfoPei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
MdeModulePkg/Universal/PCD/Pei/Pcd.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
UefiCpuPkg/CpuIoPei/CpuIoPei.inf
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MpS3.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PiSmmCommunicationPei.inf
+ UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf
!if $(RECOVERY_ENABLE)
#
# Recovery
#
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
@@ -993,17 +859,6 @@ [Components.IA32]
MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
-!if $(FTPM_ENABLE) == TRUE
- SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- NULL|SecurityPkg/Library\HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
- }
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1013,7 +868,7 @@ [Components.IA32]
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/FirmwarePerformancePei.inf{
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1021,17 +876,6 @@ [Components.IA32]
MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf
!endif
[Components.X64]
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.inf {
- !if $(TARGET) == DEBUG
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
-
- !endif
#
# EDK II Related Platform codes
#
@@ -1049,24 +893,10 @@ [Components.X64]
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
}
- IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x27
- <LibraryClasses>
- !if $(TARGET) != RELEASE
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- <BuildOptions>
- ICC:*_*_*_CC_FLAGS = -D MDEPKG_NDEBUG
- GCC:RELEASE_*_*_CC_FLAGS = -D MDEPKG_NDEBUG
- }
MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
}
- IntelFrameworkModulePkg/Universal/CpuIoDxe/CpuIoDxe.inf
UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
@@ -1099,13 +929,9 @@ [Components.X64]
!if $(TPM_ENABLED) == TRUE
NULL|SecurityPkg/Library/DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.inf
-!endif
-!if $(FTPM_ENABLE) == TRUE
- NULL|SecurityPkg/Library/DxeTpm2MeasureBootLib/DxeTpm2MeasureBootLib.inf
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MpCpu.inf
- $(PLATFORM_PACKAGE)/Metronome/Metronome.inf
+ MdeModulePkg/Universal/Metronome/Metronome.inf
IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
<LibraryClasses>
@@ -1115,12 +941,8 @@ [Components.X64]
PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
- !if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- !else
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
- !endif
}
$(PLATFORM_PACKAGE)/UiApp/UiApp.inf
@@ -1132,11 +954,11 @@ [Components.X64]
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf {
<LibraryClasses>
NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbSmm.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbSmm.inf
MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf {
<LibraryClasses>
@@ -1158,9 +980,9 @@ [Components.X64]
PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbRuntimeDxe.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbRuntimeDxe.inf
- $(PLATFORM_PACKAGE)/PlatformSetupDxe/PlatformSetupDxe.inf
+ Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
!if $(DATAHUB_ENABLE) == TRUE
IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
@@ -1168,38 +990,30 @@ [Components.X64]
gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
}
!endif
- IntelFrameworkModulePkg/Universal/StatusCode/DatahubStatusCodeHandlerDxe/DatahubStatusCodeHandlerDxe.inf
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
- !if $(USE_HPET_TIMER) == TRUE
- PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
- !else
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmartTimer.inf
- !endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
+ PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/IntelPchLegacyInterrupt.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
-
- IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
#
# Performance Application; Set PERFORMANCE_ENABLE=TRUE for normal boot performance and smm performance data
@@ -1219,35 +1033,9 @@ [Components.X64]
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
-!if $(SEC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/HeciDrv.inf {
-!if $(SEC_DEBUG_INFO_ENABLE) == TRUE
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=1
-!else
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=0
-!endif
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SeCPolicyInitDxe.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Tpm2DeviceSeCDxe.inf
- SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
- SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf{
- <LibraryClasses>
- NULL|SecurityPkg/Library/HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library\DxePcdLib/DxePcdLib.inf
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/FtpmSmm.inf
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1274,24 +1062,23 @@ [Components.X64]
#
# EDK II Related Platform codes
#
- $(PLATFORM_PACKAGE)/PlatformSmm/PlatformSmm.inf{
+ Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf{
<LibraryClasses>
!if $(TARGET) != RELEASE
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_PACKAGE)/PlatformInfoDxe/PlatformInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformDxe/PlatformDxe.inf
+ Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
- $(PLATFORM_PACKAGE)/PciPlatform/PciPlatform.inf
- $(PLATFORM_PACKAGE)/SaveMemoryConfig/SaveMemoryConfig.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
- $(PLATFORM_PACKAGE)/PpmPolicy/PpmPolicy.inf
- $(PLATFORM_PACKAGE)/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+ Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+ Vlv2TbltDevicePkg/SaveMemoryConfig/SaveMemoryConfig.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
+ Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
!if $(GOP_DRIVER_ENABLE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformGopPolicy/PlatformGopPolicy.inf
+ Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
!endif
@@ -1302,13 +1089,15 @@ [Components.X64]
MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf
MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
UefiCpuPkg/CpuDxe/CpuDxe.inf
+ UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
- $(PLATFORM_PACKAGE)/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/GraphicDxeInitSmm.inf
#
# ACPI
@@ -1321,14 +1110,14 @@ [Components.X64]
<LibraryClasses>
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
+ MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- $(PLATFORM_PACKAGE)/BootScriptSaveDxe/BootScriptSaveDxe.inf
IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
- $(PLATFORM_RC_PACKAGE)/AcpiTablesPCAT/AcpiTables.inf
+ Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
- $(PLATFORM_PACKAGE)/AcpiPlatform/AcpiPlatform.inf
+ Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
@@ -1338,31 +1127,23 @@ [Components.X64]
MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
-#
-# ISA
-#
- $(PLATFORM_PACKAGE)/Wpce791/Wpce791.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-#
-# SDIO
-#
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcHost.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcMediaDevice.inf
+ #
+ # ISA
+ #
+ Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
+ MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
+
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1370,7 +1151,6 @@ [Components.X64]
# IDE/SCSI/AHCI
#
MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
- IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBusDxe.inf
MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
@@ -1394,7 +1174,7 @@ [Components.X64]
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000
}
!if $(SATA_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
!endif
MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
!if $(SCSI_ENABLE) == TRUE
@@ -1407,7 +1187,6 @@ [Components.X64]
MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
- IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf
MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
@@ -1431,9 +1210,9 @@ [Components.X64]
# SMBIOS
#
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
- $(PLATFORM_PACKAGE)/SmBiosMiscDxe/SmBiosMiscDxe.inf
+ Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
@@ -1448,12 +1227,6 @@ [Components.X64]
#
!include NetworkPkg/Network.dsc.inc
-!if $(NETWORK_ENABLE) == TRUE
- !if $(CSM_ENABLE) == TRUE
- IntelFrameworkModulePkg/Csm/BiosThunk/Snp16Dxe/Snp16Dxe.inf
- !endif
-!endif
-
!if $(CAPSULE_ENABLE) || $(MICOCODE_CAPSULE_ENABLE)
MdeModulePkg/Universal/EsrtFmpDxe/EsrtFmpDxe.inf
MdeModulePkg/Application/CapsuleApp/CapsuleApp.inf
@@ -1471,7 +1244,7 @@ [Components.X64]
<LibraryClasses>
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
!endif
@@ -1483,11 +1256,7 @@ [BuildOptions]
#
# Define token for different Platform
#
-!if $(MINNOW2_FSP_BUILD) == TRUE
- DEFINE MINNOW2_FSP_OPTION = -DMINNOW2_FSP_BUILD
-!else
DEFINE MINNOW2_FSP_OPTION =
-!endif
!if $(ENBDT_PF_BUILD) == TRUE
DEFINE ENBDT_PF_ENABLE = -DENBDT_PF_ENABLE=1
@@ -1526,11 +1295,6 @@ [BuildOptions]
DEFINE X64_BUILD_ENABLE =
!endif
-!if $(FTPM_ENABLE) == TRUE
- DEFINE DSC_FTPM_BUILD_OPTIONS = -DFTPM_ENABLE
-!else
- DEFINE DSC_FTPM_BUILD_OPTIONS =
-!endif
!if $(TPM_ENABLED) == TRUE
DEFINE DSC_TPM_BUILD_OPTIONS = -DTPM_ENABLED
!else
@@ -1538,7 +1302,7 @@ [BuildOptions]
!endif
- DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
+ DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
!if $(PERFORMANCE_ENABLE) == TRUE
DEFINE PDB_BUILD_OPTION = /Zi
!endif
@@ -1570,76 +1334,6 @@ [BuildOptions.common.EDKII.DXE_SMM_DRIVER, BuildOptions.common.EDKII.SMM_CORE]
MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000
-[BuildOptions.Common.EDK]
-
-#
-# Define token for different Platform
-#
-!if $(ENBDT_PF_BUILD) == TRUE
- DEFINE ENBDT_PF_ENABLE = -DENBDT_PF_ENABLE=1
-!else
- DEFINE ENBDT_PF_ENABLE = -DENBDT_PF_ENABLE=0
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
- RELEASE_*_*_DLINK_FLAGS = -DEBUG
-!endif
-
-!if $(S3_ENABLE) == TRUE
- DEFINE DSC_S3_BUILD_OPTIONS = -DEFI_S3_RESUME
-!else
- DEFINE DSC_S3_BUILD_OPTIONS =
-!endif
-
-!if $(ENBDT_S3_SUPPORT) == TRUE
- DEFINE ENBDT_S3_SUPPORT_OPTIONS = -DNOCS_S3_SUPPORT
-!else
- DEFINE ENBDT_S3_SUPPORT_OPTIONS =
-!endif
-
-!if $(X64_CONFIG) == TRUE
- DEFINE X64_BUILD_ENABLE = -DX64_BUILD_ENABLE=1
-!else
- DEFINE X64_BUILD_ENABLE =
-!endif
-
-
- DEFINE EDK_GLUE_LIB_DEBUG =
- DEFINE DEBUG_BUILD_OPTIONS = -D EFI_DEBUG -D DEBUG_MODE=1 /GL- $(EDK_GLUE_LIB_DEBUG) -DEDKII_GLUE_DebugPrintErrorLevel=(EFI_D_ERROR)
- DEFINE EDK_DSC_FEATURE_BUILD_OPTIONS = $(DSC_S3_BUILD_OPTIONS) $(DSC_ACPI_BUILD_OPTIONS) $(DSC_SEC_BUILD_OPTIONS) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(SOFTSDV_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(QT_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS) -D$(PROJECT_SC_CHIPSET)
-
- DEFINE EDK_DSC_OTHER_BUILD_OPTIONS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS) $(SV_BUILD_OPTIONS) $(INTEL_FASTBOOT_BUILD_OPTION)
- DEFINE EDK_DSC_GLOBAL_BUILD_OPTIONS = $(ENBDT_PF_ENABLE) $(EDK_DSC_FEATURE_BUILD_OPTIONS) $(EDK_DSC_OTHER_BUILD_OPTIONS) -D EFI_SPECIFICATION_VERSION=0x00020000 -D PI_SPECIFICATION_VERSION=0x00000009 -D TIANO_RELEASE_VERSION=0x00080006 -D SUPPORT_DEPRECATED_PCI_CFG_PPI -D CSM_SMMENTRY_PORT8DATA8 -D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE) -D MAX_VARIABLE_SIZE=0x2000 -D EFI_FIRMWARE_VENDOR="L/"INTEL/"" -D EFI_BUILD_VERSION="L/"EDKII/"" -DEFI_PEI_REPORT_STATUS_CODE_ON $(ENBDT_S3_SUPPORT_OPTIONS)
-
- *_*_IA32_ASM_FLAGS = -DEFI32 -D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h -DNOCS_S3_SUPPORT
- DEBUG_*_IA32_CC_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_CC_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_VFRPP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_VFRPP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_APP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_APP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_PP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_PP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_IA32_ASLPP_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASLCC_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASM16_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
-
- *_*_X64_ASM_FLAGS = -DEFIX64 -D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h -DNOCS_S3_SUPPORT
- DEBUG_*_X64_CC_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_CC_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_VFRPP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_VFRPP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_APP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_APP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_PP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_PP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_X64_ASLPP_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASLCC_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASM16_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
- # *_*_*_BUILD_FLAGS = -s
- *_*_*_VFR_FLAGS = -c
- *_*_*_BUILD_FLAGS = -c
-
[BuildOptions.Common.EDKII]
*_*_IA32_ASM_FLAGS = $(VP_BUILD_OPTIONS) -D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h -DNOCS_S3_SUPPORT
@@ -1654,25 +1348,3 @@ [BuildOptions.Common.EDKII]
*_*_X64_APP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_PP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_ASLPP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
-
-
-[Components.X64]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cBus.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cHost.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cPortA0Pio.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cMmioDeviceDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index 933a7ec760..8a5c42577d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -18,25 +18,11 @@ [Defines]
PLATFORM_GUID = 465B0A0B-7AC1-443b-8F67-7B8DEC145F90
PLATFORM_VERSION = 0.1
DSC_SPECIFICATION = 0x00010005
-
- #
- # Set platform specific package/folder name, same as passed from PREBUILD script.
- # PLATFORM_PACKAGE would be the same as PLATFORM_NAME as well as package build folder
- # DEFINE only takes effect at R9 DSC and FDF.
- #
- DEFINE PLATFORM_PACKAGE = Vlv2TbltDevicePkg
- DEFINE PLATFORM_RC_PACKAGE = Vlv2DeviceRefCodePkg
- DEFINE PLATFORM_BINARY_PACKAGE = Vlv2SocBinPkg
- OUTPUT_DIRECTORY = Build/$(PLATFORM_PACKAGE)
+ OUTPUT_DIRECTORY = Build/Vlv2TbltDevicePkgIA32
SUPPORTED_ARCHITECTURES = IA32
BUILD_TARGETS = DEBUG|RELEASE
SKUID_IDENTIFIER = DEFAULT
- DEFINE CPU_ARCH =ValleyView2
- DEFINE PROJECT_SC_FAMILY =IntelPch
- DEFINE PROJECT_SC_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/SouthCluster
- DEFINE PROJECT_VLV_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/NorthCluster
-
DEFINE RC_BINARY_RELEASE = TRUE
#
# Platform On/Off features are defined here
@@ -47,20 +33,16 @@ [Defines]
# 3.BayleyBay
# ENBDT_PF_ENABLE = TRUE
#
- !include $(PLATFORM_PACKAGE)/AutoPlatformCFG.txt
- !include $(PLATFORM_PACKAGE)/PlatformPkgConfig.dsc
+ !include Vlv2TbltDevicePkg/AutoPlatformCFG.txt
+ !include Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
!if $(X64_CONFIG) == TRUE
DEFINE DXE_ARCHITECTURE = X64
- DEFINE EDK_DXE_ARCHITECTURE = X64
- DEFINE UNDI_DXE_ARCHITECTURE = 64
!else
DEFINE DXE_ARCHITECTURE = IA32
- DEFINE EDK_DXE_ARCHITECTURE = Ia32
- DEFINE UNDI_DXE_ARCHITECTURE = 32
!endif
- FLASH_DEFINITION = $(PLATFORM_PACKAGE)/PlatformPkg.fdf
+ FLASH_DEFINITION = Vlv2TbltDevicePkg/PlatformPkg.fdf
!if $(LFMA_ENABLE) == TRUE
FIX_LOAD_TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
DEFINE TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
@@ -71,10 +53,6 @@ [Defines]
DEFINE PLATFORM_PCIEXPRESS_BASE = 0E0000000
- DEFINE SEC_ENABLE = FALSE
- DEFINE SEC_DEBUG_INFO_ENABLE = FALSE
- DEFINE FTPM_ENABLE = FALSE
-
################################################################################
#
# SKU Identification section - list of all SKU IDs supported by this
@@ -98,7 +76,6 @@ [LibraryClasses.common]
DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
- DxeSmmDriverEntryPoint|IntelFrameworkPkg/Library/DxeSmmDriverEntryPoint/DxeSmmDriverEntryPoint.inf
#
# Basic
@@ -142,8 +119,7 @@ [LibraryClasses.common]
GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLib.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
#
# Framework
@@ -166,10 +142,6 @@ [LibraryClasses.common]
UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
!endif
-!if $(S3_ENABLE) == TRUE
- S3Lib|IntelFrameworkModulePkg/Library/PeiS3Lib/PeiS3Lib.inf
-!endif
-
OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
!if $(CAPSULE_ENABLE) == TRUE
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
@@ -197,27 +169,27 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|$(PLATFORM_PACKAGE)/Library/SmbusLib/SmbusLib.inf
- SmmLib|$(PLATFORM_PACKAGE)/Library/PchSmmLib/PchSmmLib.inf
+ SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
# Platform
#
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
- ResetSystemLib|$(PLATFORM_PACKAGE)/Library/ResetSystemLib/ResetSystemLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ ResetSystemLib|Vlv2TbltDevicePkg/Library/ResetSystemLib/ResetSystemLib.inf
- PlatformCmosLib|$(PLATFORM_PACKAGE)/Library/PlatformCmosLib/PlatformCmosLib.inf
+ PlatformCmosLib|Vlv2TbltDevicePkg/Library/PlatformCmosLib/PlatformCmosLib.inf
#
# Misc
#
- MonoStatusCodeLib|$(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf
+ MonoStatusCodeLib|Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
!if $(TARGET) == RELEASE
DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
@@ -229,10 +201,11 @@ [LibraryClasses.common]
!endif
+ PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
+
!if $(SOURCE_DEBUG_ENABLE) == TRUE
PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
DebugCommunicationLib|SourceLevelDebugPkg/Library/DebugCommunicationLibSerialPort/DebugCommunicationLibSerialPort.inf
- PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!else
PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf
@@ -247,10 +220,10 @@ [LibraryClasses.common]
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
!endif
- BiosIdLib|$(PLATFORM_PACKAGE)/Library/BiosIdLib/BiosIdLib.inf
- CpuIA32Lib|$(PLATFORM_PACKAGE)/Library/CpuIA32Lib/CpuIA32Lib.inf
+ BiosIdLib|Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
+ CpuIA32Lib|Vlv2TbltDevicePkg/Library/CpuIA32Lib/CpuIA32Lib.inf
- StallSmmLib|$(PLATFORM_PACKAGE)/Library/StallSmmLib/StallSmmLib.inf
+ StallSmmLib|Vlv2TbltDevicePkg/Library/StallSmmLib/StallSmmLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
@@ -264,13 +237,10 @@ [LibraryClasses.common]
AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
!endif
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
-!if $(RC_BINARY_RELEASE) == TRUE
- I2cLib|Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
-!endif
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
-!if $(FTPM_ENABLE) == TRUE || $(NETWORK_ISCSI_ENABLE) == TRUE
+!if $(NETWORK_ISCSI_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
@@ -281,13 +251,6 @@ [LibraryClasses.common]
Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
-!if $(MINNOW2_FSP_BUILD) == TRUE
- FspApiLib|IntelFspWrapperPkg/Library/BaseFspApiLib/BaseFspApiLib.inf
- FspPlatformInfoLib|IntelFspWrapperPkg/Library/BaseFspPlatformInfoLibSample/BaseFspPlatformInfoLibSample.inf
- FspPlatformSecLib|Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
- FspHobProcessLib|Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
-!endif
-
BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
[LibraryClasses.IA32.SEC]
@@ -307,14 +270,14 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
- MultiPlatformLib|$(PLATFORM_PACKAGE)/Library/MultiPlatformLib/MultiPlatformLib.inf
+ MultiPlatformLib|Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(TARGET) == RELEASE
@@ -322,7 +285,7 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf
@@ -331,13 +294,6 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
!endif
- !if $(MINNOW2_FSP_BUILD) == TRUE
- PlatformFspLib|Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
- !endif
-!if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCPei/Tpm2DeviceLibSeC.inf
-!endif
-
[LibraryClasses.IA32]
#
# DXE phase common
@@ -354,7 +310,7 @@ [LibraryClasses.IA32]
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf
- EfiRegTableLib|$(PLATFORM_PACKAGE)/Library/EfiRegTableLib/EfiRegTableLib.inf
+ EfiRegTableLib|Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
@@ -369,14 +325,14 @@ [LibraryClasses.IA32.DXE_DRIVER]
CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
[LibraryClasses.IA32.DXE_CORE]
HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
@@ -384,7 +340,7 @@ [LibraryClasses.IA32.DXE_CORE]
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
@@ -409,7 +365,7 @@ [LibraryClasses.IA32.DXE_SMM_DRIVER]
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SmmDebugAgentLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuExceptionHandlerLib.inf
@@ -483,12 +439,6 @@ [PcdsFeatureFlag.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|FALSE
-!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmEnableBspElection|FALSE
-!if $(DATAHUB_STATUS_CODE_ENABLE) == TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|TRUE
-!else
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|FALSE
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst|FALSE
!if $(TARGET) == RELEASE
@@ -514,59 +464,20 @@ [PcdsFeatureFlag.common]
!endif
- ## This PCD specifies whether PS2 keyboard does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2KbdExtendedVerification|FALSE
-
- ## This PCD specifies whether PS2 mouse does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2MouseExtendedVerification|FALSE
-
!if $(VARIABLE_INFO_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|FALSE
!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
-
!if $(SOURCE_DEBUG_ENABLE)
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmDebug|TRUE
!endif
+ gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
+
[PcdsFixedAtBuild.common]
-!if $(MINNOW2_FSP_BUILD) == TRUE
-# $(FLASH_REGION_VLVMICROCODE_BASE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress|0xFFC00000
-# $(FLASH_REGION_VLVMICROCODE_SIZE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize|0x00040000
- gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset|0x60
-# $(FLASH_AREA_BASE_ADDRESS)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress|0xFF800000
-# $(FLASH_AREA_SIZE)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize|0x00800000
-# $(FLASH_REGION_FSPBIN_BASE)
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase|0xFFCC0000
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
-!if $(MINNOW2_FSP_BUILD) == TRUE
- # in FSP, when this got used, the memory already is up
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
-!else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
-!endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
-
-!else
- !if $(MINNOW2_FSP_BUILD) == TRUE
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
- !else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
- !endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
- gEfiCpuTokenSpaceGuid.PcdPeiTemporaryRamStackSize|0x3C00
-!endif
-
-
!if $(SECURE_BOOT_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x22000
!else
@@ -574,11 +485,8 @@ [PcdsFixedAtBuild.common]
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize|0x00000800
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize|0x400
- gEfiCpuTokenSpaceGuid.PcdCpuIEDRamSize|0x400000
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdS3AcpiReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSupport|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport|FALSE
- gEfiCpuTokenSpaceGuid.PcdCpuSmmApSyncTimeout|1000
!if $(S4_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|TRUE
!else
@@ -596,13 +504,9 @@ [PcdsFixedAtBuild.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|60
!endif
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdEbdaReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdLoadModuleAtFixAddressEnable|$(TOP_MEMORY_ADDRESS)
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserSubtitleTextColor|0x0
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserFieldTextColor|0x01
- gEfiCpuTokenSpaceGuid.PcdCpuIEDEnabled|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVbeEnable|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVgaEnable|TRUE
!if $(SOURCE_DEBUG_ENABLE) == TRUE
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17
@@ -648,11 +552,6 @@ [PcdsFixedAtBuild.IA32]
[PcdsPatchableInModule.common]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0x$(PLATFORM_PCIEXPRESS_BASE)
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLegacyBiosCacheLegacyRegion|FALSE
-
- ## This PCD specifies whether to use the optimized timing for best PS2 detection performance.
- # Note this PCD could be set to TRUE for best boot performance and set to FALSE for best device compatibility.
- gEfiMdeModulePkgTokenSpaceGuid.PcdFastPS2Detection|TRUE
#######################################################################################################
#
@@ -827,10 +726,6 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdFTPMStatus|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateSmmDataPtr|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0
- gEfiCpuTokenSpaceGuid.PcdCpuS3DataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuHotPlugDataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuCallbackSignal|0
- gEfiCpuTokenSpaceGuid.PcdCpuConfigContextBuffer|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
@@ -843,24 +738,7 @@ [PcdsDynamicExDefault.X64.DEFAULT]
[Components.IA32]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
-
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspWrapperSecCore/FspWrapperSecCore.inf {
- !if $(TARGET) == DEBUG
-
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
- IntelFspWrapperPkg/FspInitPei/FspInitPei.inf {
- !if $(TARGET) == DEBUG
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- !endif
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
MdeModulePkg/Core/Pei/PeiMain.inf {
!if $(TARGET) == DEBUG
@@ -871,31 +749,23 @@ [Components.IA32]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
- $(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf {
+ Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf {
!if $(TARGET) == DEBUG
<PcdsFixedAtBuild>
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2E
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <BuildOptions>
- !if $(FTPM_ENABLE)==TRUE
- *_*_IA32_CC_FLAGS = /D FTPM_ENABLE
- !endif
}
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
-$(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
!endif
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformPei/PlatformPei.inf {
+ Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf {
<BuildOptions>
*_*_IA32_CC_FLAGS = /DRC_BINARY_RELEASE
!if $(TARGET) == DEBUG
@@ -915,10 +785,6 @@ [Components.IA32]
}
!endif
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/Tpm2DeviceSeCPei.inf
-!endif
-
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf
SecurityPkg/Tcg/TcgPei/TcgPei.inf {
@@ -929,7 +795,7 @@ [Components.IA32]
}
!endif
- $(PLATFORM_PACKAGE)/PlatformInitPei/PlatformInitPei.inf {
+ Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
<LibraryClasses>
@@ -938,34 +804,33 @@ [Components.IA32]
!endif
PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
}
- $(PLATFORM_PACKAGE)/FvInfoPei/FvInfoPei.inf
+ Vlv2TbltDevicePkg/FvInfoPei/FvInfoPei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
MdeModulePkg/Universal/PCD/Pei/Pcd.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
UefiCpuPkg/CpuIoPei/CpuIoPei.inf
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MpS3.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PiSmmCommunicationPei.inf
+ UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf
!if $(RECOVERY_ENABLE)
#
# Recovery
#
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
@@ -991,17 +856,6 @@ [Components.IA32]
MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
-!if $(FTPM_ENABLE) == TRUE
- SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- NULL|SecurityPkg/Library\HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
- }
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1011,7 +865,7 @@ [Components.IA32]
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/FirmwarePerformancePei.inf{
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1019,17 +873,6 @@ [Components.IA32]
MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf
!endif
[Components.IA32]
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.inf {
- !if $(TARGET) == DEBUG
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
-
- !endif
#
# EDK II Related Platform codes
#
@@ -1047,24 +890,10 @@ [Components.IA32]
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
}
- IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x27
- <LibraryClasses>
- !if $(TARGET) != RELEASE
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- <BuildOptions>
- ICC:*_*_*_CC_FLAGS = /D MDEPKG_NDEBUG
- GCC:*_*_*_CC_FLAGS = -D MDEPKG_NDEBUG
- }
MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
}
- IntelFrameworkModulePkg/Universal/CpuIoDxe/CpuIoDxe.inf
UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
@@ -1084,13 +913,9 @@ [Components.IA32]
!if $(TPM_ENABLED) == TRUE
NULL|SecurityPkg/Library/DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.inf
-!endif
-!if $(FTPM_ENABLE) == TRUE
- NULL|SecurityPkg/Library/DxeTpm2MeasureBootLib/DxeTpm2MeasureBootLib.inf
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MpCpu.inf
- $(PLATFORM_PACKAGE)/Metronome/Metronome.inf
+ MdeModulePkg/Universal/Metronome/Metronome.inf
IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
<LibraryClasses>
@@ -1100,12 +925,8 @@ [Components.IA32]
PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
- !if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- !else
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
- !endif
}
$(PLATFORM_PACKAGE)/UiApp/UiApp.inf
@@ -1117,11 +938,11 @@ [Components.IA32]
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf {
<LibraryClasses>
NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbSmm.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbSmm.inf
MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf {
<LibraryClasses>
@@ -1143,9 +964,9 @@ [Components.IA32]
PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbRuntimeDxe.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbRuntimeDxe.inf
- $(PLATFORM_PACKAGE)/PlatformSetupDxe/PlatformSetupDxe.inf
+ Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
!if $(DATAHUB_ENABLE) == TRUE
IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
@@ -1153,38 +974,30 @@ [Components.IA32]
gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
}
!endif
- IntelFrameworkModulePkg/Universal/StatusCode/DatahubStatusCodeHandlerDxe/DatahubStatusCodeHandlerDxe.inf
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
- !if $(USE_HPET_TIMER) == TRUE
- PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
- !else
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmartTimer.inf
- !endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
+ PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/IntelPchLegacyInterrupt.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
-
- IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
#
# Performance Application; Set PERFORMANCE_ENABLE=TRUE for normal boot performance and smm performance data
@@ -1204,35 +1017,9 @@ [Components.IA32]
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
-!if $(SEC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/HeciDrv.inf {
-!if $(SEC_DEBUG_INFO_ENABLE) == TRUE
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=1
-!else
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=0
-!endif
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SeCPolicyInitDxe.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Tpm2DeviceSeCDxe.inf
- SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
- SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf{
- <LibraryClasses>
- NULL|SecurityPkg/Library/HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library\DxePcdLib/DxePcdLib.inf
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/FtpmSmm.inf
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1259,24 +1046,23 @@ [Components.IA32]
#
# EDK II Related Platform codes
#
- $(PLATFORM_PACKAGE)/PlatformSmm/PlatformSmm.inf{
+ Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf{
<LibraryClasses>
!if $(TARGET) != RELEASE
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_PACKAGE)/PlatformInfoDxe/PlatformInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformDxe/PlatformDxe.inf
+ Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
- $(PLATFORM_PACKAGE)/PciPlatform/PciPlatform.inf
- $(PLATFORM_PACKAGE)/SaveMemoryConfig/SaveMemoryConfig.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
- $(PLATFORM_PACKAGE)/PpmPolicy/PpmPolicy.inf
- $(PLATFORM_PACKAGE)/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+ Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+ Vlv2TbltDevicePkg/SaveMemoryConfig/SaveMemoryConfig.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
+ Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
!if $(GOP_DRIVER_ENABLE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformGopPolicy/PlatformGopPolicy.inf
+ Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
!endif
@@ -1287,13 +1073,15 @@ [Components.IA32]
MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf
MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
UefiCpuPkg/CpuDxe/CpuDxe.inf
+ UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
- $(PLATFORM_PACKAGE)/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/GraphicDxeInitSmm.inf
#
# ACPI
@@ -1306,14 +1094,14 @@ [Components.IA32]
<LibraryClasses>
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
+ MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- $(PLATFORM_PACKAGE)/BootScriptSaveDxe/BootScriptSaveDxe.inf
IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
- $(PLATFORM_RC_PACKAGE)/AcpiTablesPCAT/AcpiTables.inf
+ Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
- $(PLATFORM_PACKAGE)/AcpiPlatform/AcpiPlatform.inf
+ Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
@@ -1323,31 +1111,23 @@ [Components.IA32]
MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
-#
-# ISA
-#
- $(PLATFORM_PACKAGE)/Wpce791/Wpce791.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-#
-# SDIO
-#
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcHost.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcMediaDevice.inf
+ #
+ # ISA
+ #
+ Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
+ MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
+
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1355,7 +1135,6 @@ [Components.IA32]
# IDE/SCSI/AHCI
#
MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
- IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBusDxe.inf
MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
@@ -1379,7 +1158,7 @@ [Components.IA32]
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000
}
!if $(SATA_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
!endif
MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
!if $(SCSI_ENABLE) == TRUE
@@ -1392,7 +1171,6 @@ [Components.IA32]
MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
- IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf
MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
@@ -1416,9 +1194,9 @@ [Components.IA32]
# SMBIOS
#
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
- $(PLATFORM_PACKAGE)/SmBiosMiscDxe/SmBiosMiscDxe.inf
+ Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
@@ -1433,12 +1211,6 @@ [Components.IA32]
#
!include NetworkPkg/Network.dsc.inc
-!if $(NETWORK_ENABLE) == TRUE
- !if $(CSM_ENABLE) == TRUE
- IntelFrameworkModulePkg/Csm/BiosThunk/Snp16Dxe/Snp16Dxe.inf
- !endif
-!endif
-
!if $(CAPSULE_ENABLE) || $(MICOCODE_CAPSULE_ENABLE)
MdeModulePkg/Universal/EsrtFmpDxe/EsrtFmpDxe.inf
MdeModulePkg/Application/CapsuleApp/CapsuleApp.inf
@@ -1456,7 +1228,7 @@ [Components.IA32]
<LibraryClasses>
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
!endif
@@ -1468,11 +1240,7 @@ [BuildOptions]
#
# Define token for different Platform
#
-!if $(MINNOW2_FSP_BUILD) == TRUE
- DEFINE MINNOW2_FSP_OPTION = /DMINNOW2_FSP_BUILD
-!else
DEFINE MINNOW2_FSP_OPTION =
-!endif
!if $(ENBDT_PF_BUILD) == TRUE
DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=1
@@ -1511,11 +1279,6 @@ [BuildOptions]
DEFINE X64_BUILD_ENABLE =
!endif
-!if $(FTPM_ENABLE) == TRUE
- DEFINE DSC_FTPM_BUILD_OPTIONS = /DFTPM_ENABLE
-!else
- DEFINE DSC_FTPM_BUILD_OPTIONS =
-!endif
!if $(TPM_ENABLED) == TRUE
DEFINE DSC_TPM_BUILD_OPTIONS = /DTPM_ENABLED
!else
@@ -1523,7 +1286,7 @@ [BuildOptions]
!endif
- DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
+ DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
!if $(PERFORMANCE_ENABLE) == TRUE
DEFINE PDB_BUILD_OPTION = /Zi
!endif
@@ -1556,76 +1319,6 @@ [BuildOptions.common.EDKII.DXE_SMM_DRIVER, BuildOptions.common.EDKII.SMM_CORE]
MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000
-[BuildOptions.Common.EDK]
-
-#
-# Define token for different Platform
-#
-!if $(ENBDT_PF_BUILD) == TRUE
- DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=1
-!else
- DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=0
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
- RELEASE_*_*_DLINK_FLAGS = /DEBUG
-!endif
-
-!if $(S3_ENABLE) == TRUE
- DEFINE DSC_S3_BUILD_OPTIONS = /DEFI_S3_RESUME
-!else
- DEFINE DSC_S3_BUILD_OPTIONS =
-!endif
-
-!if $(ENBDT_S3_SUPPORT) == TRUE
- DEFINE ENBDT_S3_SUPPORT_OPTIONS = /DNOCS_S3_SUPPORT
-!else
- DEFINE ENBDT_S3_SUPPORT_OPTIONS =
-!endif
-
-!if $(X64_CONFIG) == TRUE
- DEFINE X64_BUILD_ENABLE = /DX64_BUILD_ENABLE=1
-!else
- DEFINE X64_BUILD_ENABLE =
-!endif
-
-
- DEFINE EDK_GLUE_LIB_DEBUG =
- DEFINE DEBUG_BUILD_OPTIONS = /D EFI_DEBUG /D DEBUG_MODE=1 /GL- $(EDK_GLUE_LIB_DEBUG) /DEDKII_GLUE_DebugPrintErrorLevel=(EFI_D_ERROR)
- DEFINE EDK_DSC_FEATURE_BUILD_OPTIONS = $(DSC_S3_BUILD_OPTIONS) $(DSC_ACPI_BUILD_OPTIONS) $(DSC_SEC_BUILD_OPTIONS) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(SOFTSDV_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(QT_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS) /D$(PROJECT_SC_CHIPSET)
-
- DEFINE EDK_DSC_OTHER_BUILD_OPTIONS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS) $(SV_BUILD_OPTIONS) $(INTEL_FASTBOOT_BUILD_OPTION)
- DEFINE EDK_DSC_GLOBAL_BUILD_OPTIONS = $(ENBDT_PF_ENABLE) $(EDK_DSC_FEATURE_BUILD_OPTIONS) $(EDK_DSC_OTHER_BUILD_OPTIONS) /D EFI_SPECIFICATION_VERSION=0x00020000 /D PI_SPECIFICATION_VERSION=0x00000009 /D TIANO_RELEASE_VERSION=0x00080006 /D SUPPORT_DEPRECATED_PCI_CFG_PPI /D CSM_SMMENTRY_PORT8DATA8 /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE) /D MAX_VARIABLE_SIZE=0x2000 /D EFI_FIRMWARE_VENDOR="L/"INTEL/"" /D EFI_BUILD_VERSION="L/"EDKII/"" /DEFI_PEI_REPORT_STATUS_CODE_ON $(ENBDT_S3_SUPPORT_OPTIONS)
-
- *_*_IA32_ASM_FLAGS = /DEFI32 /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
- DEBUG_*_IA32_CC_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_CC_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_VFRPP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_VFRPP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_APP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_APP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_PP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_PP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_IA32_ASLPP_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASLCC_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASM16_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
-
- *_*_X64_ASM_FLAGS = /DEFIX64 /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
- DEBUG_*_X64_CC_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_CC_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_VFRPP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_VFRPP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_APP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_APP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_PP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_PP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_X64_ASLPP_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASLCC_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASM16_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
- # *_*_*_BUILD_FLAGS = -s
- *_*_*_VFR_FLAGS = -c
- *_*_*_BUILD_FLAGS = -c
-
[BuildOptions.Common.EDKII]
*_*_IA32_ASM_FLAGS = $(VP_BUILD_OPTIONS) /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
@@ -1640,25 +1333,3 @@ [BuildOptions.Common.EDKII]
*_*_X64_APP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_PP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_ASLPP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
-
-
-[Components.IA32]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cBus.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cHost.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cPortA0Pio.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cMmioDeviceDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index 9ec48f9fee..c0fe0892ac 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -18,25 +18,11 @@ [Defines]
PLATFORM_GUID = 465B0A0B-7AC1-443b-8F67-7B8DEC145F90
PLATFORM_VERSION = 0.1
DSC_SPECIFICATION = 0x00010005
-
- #
- # Set platform specific package/folder name, same as passed from PREBUILD script.
- # PLATFORM_PACKAGE would be the same as PLATFORM_NAME as well as package build folder
- # DEFINE only takes effect at R9 DSC and FDF.
- #
- DEFINE PLATFORM_PACKAGE = Vlv2TbltDevicePkg
- DEFINE PLATFORM_RC_PACKAGE = Vlv2DeviceRefCodePkg
- DEFINE PLATFORM_BINARY_PACKAGE = Vlv2SocBinPkg
- OUTPUT_DIRECTORY = Build/$(PLATFORM_PACKAGE)
+ OUTPUT_DIRECTORY = Build/Vlv2TbltDevicePkg
SUPPORTED_ARCHITECTURES = IA32|X64
BUILD_TARGETS = DEBUG|RELEASE
SKUID_IDENTIFIER = DEFAULT
- DEFINE CPU_ARCH =ValleyView2
- DEFINE PROJECT_SC_FAMILY =IntelPch
- DEFINE PROJECT_SC_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/SouthCluster
- DEFINE PROJECT_VLV_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/NorthCluster
-
DEFINE RC_BINARY_RELEASE = TRUE
#
# Platform On/Off features are defined here
@@ -47,22 +33,18 @@ [Defines]
# 3.BayleyBay
# ENBDT_PF_ENABLE = TRUE
#
- !include $(PLATFORM_PACKAGE)/AutoPlatformCFG.txt
- !include $(PLATFORM_PACKAGE)/PlatformPkgConfig.dsc
+ !include Vlv2TbltDevicePkg/AutoPlatformCFG.txt
+ !include Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
DEFINE PLATFORMX64_ENABLE = TRUE
!if $(X64_CONFIG) == TRUE
DEFINE DXE_ARCHITECTURE = X64
- DEFINE EDK_DXE_ARCHITECTURE = X64
- DEFINE UNDI_DXE_ARCHITECTURE = 64
!else
DEFINE DXE_ARCHITECTURE = IA32
- DEFINE EDK_DXE_ARCHITECTURE = Ia32
- DEFINE UNDI_DXE_ARCHITECTURE = 32
!endif
- FLASH_DEFINITION = $(PLATFORM_PACKAGE)/PlatformPkg.fdf
+ FLASH_DEFINITION = Vlv2TbltDevicePkg/PlatformPkg.fdf
!if $(LFMA_ENABLE) == TRUE
FIX_LOAD_TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
DEFINE TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
@@ -73,10 +55,6 @@ [Defines]
DEFINE PLATFORM_PCIEXPRESS_BASE = 0E0000000
- DEFINE SEC_ENABLE = FALSE
- DEFINE SEC_DEBUG_INFO_ENABLE = FALSE
- DEFINE FTPM_ENABLE = FALSE
-
################################################################################
#
# SKU Identification section - list of all SKU IDs supported by this
@@ -100,7 +78,6 @@ [LibraryClasses.common]
DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
- DxeSmmDriverEntryPoint|IntelFrameworkPkg/Library/DxeSmmDriverEntryPoint/DxeSmmDriverEntryPoint.inf
#
# Basic
@@ -144,8 +121,7 @@ [LibraryClasses.common]
GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLib.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
#
# Framework
@@ -167,9 +143,6 @@ [LibraryClasses.common]
!if $(SCSI_ENABLE) == TRUE
UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
!endif
-!if $(S3_ENABLE) == TRUE
- S3Lib|IntelFrameworkModulePkg/Library/PeiS3Lib/PeiS3Lib.inf
-!endif
OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
!if $(CAPSULE_ENABLE) == TRUE
@@ -198,27 +171,27 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|$(PLATFORM_PACKAGE)/Library/SmbusLib/SmbusLib.inf
- SmmLib|$(PLATFORM_PACKAGE)/Library/PchSmmLib/PchSmmLib.inf
+ SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
# Platform
#
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
- ResetSystemLib|$(PLATFORM_PACKAGE)/Library/ResetSystemLib/ResetSystemLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ ResetSystemLib|Vlv2TbltDevicePkg/Library/ResetSystemLib/ResetSystemLib.inf
- PlatformCmosLib|$(PLATFORM_PACKAGE)/Library/PlatformCmosLib/PlatformCmosLib.inf
+ PlatformCmosLib|Vlv2TbltDevicePkg/Library/PlatformCmosLib/PlatformCmosLib.inf
#
# Misc
#
- MonoStatusCodeLib|$(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf
+ MonoStatusCodeLib|Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
!if $(TARGET) == RELEASE
DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
@@ -230,10 +203,11 @@ [LibraryClasses.common]
!endif
+ PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
+
!if $(SOURCE_DEBUG_ENABLE) == TRUE
PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
DebugCommunicationLib|SourceLevelDebugPkg/Library/DebugCommunicationLibSerialPort/DebugCommunicationLibSerialPort.inf
- PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!else
PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf
@@ -248,10 +222,10 @@ [LibraryClasses.common]
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
!endif
- BiosIdLib|$(PLATFORM_PACKAGE)/Library/BiosIdLib/BiosIdLib.inf
- CpuIA32Lib|$(PLATFORM_PACKAGE)/Library/CpuIA32Lib/CpuIA32Lib.inf
+ BiosIdLib|Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
+ CpuIA32Lib|Vlv2TbltDevicePkg/Library/CpuIA32Lib/CpuIA32Lib.inf
- StallSmmLib|$(PLATFORM_PACKAGE)/Library/StallSmmLib/StallSmmLib.inf
+ StallSmmLib|Vlv2TbltDevicePkg/Library/StallSmmLib/StallSmmLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
@@ -265,15 +239,10 @@ [LibraryClasses.common]
AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
!endif
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
-!if $(RC_BINARY_RELEASE) == TRUE
- I2cLib|Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
-!endif
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
- ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
- HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
-!if $(FTPM_ENABLE) == TRUE || $(NETWORK_ISCSI_ENABLE) == TRUE
+!if $(NETWORK_ISCSI_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
@@ -284,13 +253,6 @@ [LibraryClasses.common]
Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
-!if $(MINNOW2_FSP_BUILD) == TRUE
- FspApiLib|IntelFspWrapperPkg/Library/BaseFspApiLib/BaseFspApiLib.inf
- FspPlatformInfoLib|IntelFspWrapperPkg/Library/BaseFspPlatformInfoLibSample/BaseFspPlatformInfoLibSample.inf
- FspPlatformSecLib|Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
- FspHobProcessLib|Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
-!endif
-
BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
[LibraryClasses.IA32.SEC]
@@ -310,14 +272,14 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
- MultiPlatformLib|$(PLATFORM_PACKAGE)/Library/MultiPlatformLib/MultiPlatformLib.inf
+ MultiPlatformLib|Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(TARGET) == RELEASE
@@ -325,7 +287,7 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf
@@ -334,13 +296,6 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
!endif
- !if $(MINNOW2_FSP_BUILD) == TRUE
- PlatformFspLib|Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
- !endif
-!if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCPei/Tpm2DeviceLibSeC.inf
-!endif
-
[LibraryClasses.X64]
#
# DXE phase common
@@ -357,7 +312,7 @@ [LibraryClasses.X64]
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf
- EfiRegTableLib|$(PLATFORM_PACKAGE)/Library/EfiRegTableLib/EfiRegTableLib.inf
+ EfiRegTableLib|Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
@@ -372,14 +327,14 @@ [LibraryClasses.X64.DXE_DRIVER]
CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
[LibraryClasses.X64.DXE_CORE]
HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
@@ -387,7 +342,7 @@ [LibraryClasses.X64.DXE_CORE]
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
@@ -412,7 +367,7 @@ [LibraryClasses.X64.DXE_SMM_DRIVER]
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SmmDebugAgentLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuExceptionHandlerLib.inf
@@ -486,12 +441,6 @@ [PcdsFeatureFlag.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|FALSE
-!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmEnableBspElection|FALSE
-!if $(DATAHUB_STATUS_CODE_ENABLE) == TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|TRUE
-!else
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|FALSE
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst|FALSE
!if $(TARGET) == RELEASE
@@ -517,59 +466,20 @@ [PcdsFeatureFlag.common]
!endif
- ## This PCD specifies whether PS2 keyboard does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2KbdExtendedVerification|FALSE
-
- ## This PCD specifies whether PS2 mouse does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2MouseExtendedVerification|FALSE
-
!if $(VARIABLE_INFO_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|FALSE
!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
-
!if $(SOURCE_DEBUG_ENABLE)
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmDebug|TRUE
!endif
+ gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
+
[PcdsFixedAtBuild.common]
-!if $(MINNOW2_FSP_BUILD) == TRUE
-# $(FLASH_REGION_VLVMICROCODE_BASE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress|0xFFC00000
-# $(FLASH_REGION_VLVMICROCODE_SIZE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize|0x00040000
- gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset|0x60
-# $(FLASH_AREA_BASE_ADDRESS)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress|0xFF800000
-# $(FLASH_AREA_SIZE)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize|0x00800000
-# $(FLASH_REGION_FSPBIN_BASE)
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase|0xFFCC0000
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
-!if $(MINNOW2_FSP_BUILD) == TRUE
- # in FSP, when this got used, the memory already is up
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
-!else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
-!endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
-
-!else
- !if $(MINNOW2_FSP_BUILD) == TRUE
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
- !else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
- !endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
- gEfiCpuTokenSpaceGuid.PcdPeiTemporaryRamStackSize|0x3C00
-!endif
-
-
!if $(SECURE_BOOT_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x22000
!else
@@ -577,11 +487,8 @@ [PcdsFixedAtBuild.common]
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize|0x00000800
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize|0x400
- gEfiCpuTokenSpaceGuid.PcdCpuIEDRamSize|0x400000
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdS3AcpiReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSupport|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport|FALSE
- gEfiCpuTokenSpaceGuid.PcdCpuSmmApSyncTimeout|1000
!if $(S4_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|TRUE
!else
@@ -599,13 +506,9 @@ [PcdsFixedAtBuild.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|60
!endif
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdEbdaReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdLoadModuleAtFixAddressEnable|$(TOP_MEMORY_ADDRESS)
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserSubtitleTextColor|0x0
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserFieldTextColor|0x01
- gEfiCpuTokenSpaceGuid.PcdCpuIEDEnabled|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVbeEnable|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVgaEnable|TRUE
!if $(SOURCE_DEBUG_ENABLE) == TRUE
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17
@@ -651,11 +554,6 @@ [PcdsFixedAtBuild.IA32]
[PcdsPatchableInModule.common]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0x$(PLATFORM_PCIEXPRESS_BASE)
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLegacyBiosCacheLegacyRegion|FALSE
-
- ## This PCD specifies whether to use the optimized timing for best PS2 detection performance.
- # Note this PCD could be set to TRUE for best boot performance and set to FALSE for best device compatibility.
- gEfiMdeModulePkgTokenSpaceGuid.PcdFastPS2Detection|TRUE
#######################################################################################################
#
@@ -830,10 +728,6 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdFTPMStatus|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateSmmDataPtr|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0
- gEfiCpuTokenSpaceGuid.PcdCpuS3DataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuHotPlugDataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuCallbackSignal|0
- gEfiCpuTokenSpaceGuid.PcdCpuConfigContextBuffer|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
@@ -846,24 +740,7 @@ [PcdsDynamicExDefault.X64.DEFAULT]
[Components.IA32]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
-
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspWrapperSecCore/FspWrapperSecCore.inf {
- !if $(TARGET) == DEBUG
-
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
- IntelFspWrapperPkg/FspInitPei/FspInitPei.inf {
- !if $(TARGET) == DEBUG
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- !endif
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
MdeModulePkg/Core/Pei/PeiMain.inf {
!if $(TARGET) == DEBUG
@@ -874,31 +751,23 @@ [Components.IA32]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
- $(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf {
+ Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf {
!if $(TARGET) == DEBUG
<PcdsFixedAtBuild>
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2E
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <BuildOptions>
- !if $(FTPM_ENABLE)==TRUE
- *_*_IA32_CC_FLAGS = /D FTPM_ENABLE
- !endif
}
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
-$(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
!endif
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformPei/PlatformPei.inf {
+ Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf {
<BuildOptions>
*_*_IA32_CC_FLAGS = /DRC_BINARY_RELEASE
!if $(TARGET) == DEBUG
@@ -918,10 +787,6 @@ [Components.IA32]
}
!endif
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/Tpm2DeviceSeCPei.inf
-!endif
-
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf
SecurityPkg/Tcg/TcgPei/TcgPei.inf {
@@ -932,7 +797,7 @@ [Components.IA32]
}
!endif
- $(PLATFORM_PACKAGE)/PlatformInitPei/PlatformInitPei.inf {
+ Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
<LibraryClasses>
@@ -941,34 +806,33 @@ [Components.IA32]
!endif
PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
}
- $(PLATFORM_PACKAGE)/FvInfoPei/FvInfoPei.inf
+ Vlv2TbltDevicePkg/FvInfoPei/FvInfoPei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
MdeModulePkg/Universal/PCD/Pei/Pcd.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
UefiCpuPkg/CpuIoPei/CpuIoPei.inf
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MpS3.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PiSmmCommunicationPei.inf
+ UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf
!if $(RECOVERY_ENABLE)
#
# Recovery
#
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
@@ -994,17 +858,6 @@ [Components.IA32]
MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
-!if $(FTPM_ENABLE) == TRUE
- SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- NULL|SecurityPkg/Library\HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
- }
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1014,7 +867,7 @@ [Components.IA32]
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/FirmwarePerformancePei.inf{
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1022,17 +875,6 @@ [Components.IA32]
MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf
!endif
[Components.X64]
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.inf {
- !if $(TARGET) == DEBUG
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
-
- !endif
#
# EDK II Related Platform codes
#
@@ -1050,24 +892,10 @@ [Components.X64]
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
}
- IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x27
- <LibraryClasses>
- !if $(TARGET) != RELEASE
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- <BuildOptions>
- ICC:*_*_*_CC_FLAGS = /D MDEPKG_NDEBUG
- GCC:*_*_*_CC_FLAGS = -D MDEPKG_NDEBUG
- }
MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
}
- IntelFrameworkModulePkg/Universal/CpuIoDxe/CpuIoDxe.inf
UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
@@ -1100,13 +928,9 @@ [Components.X64]
!if $(TPM_ENABLED) == TRUE
NULL|SecurityPkg/Library/DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.inf
-!endif
-!if $(FTPM_ENABLE) == TRUE
- NULL|SecurityPkg/Library/DxeTpm2MeasureBootLib/DxeTpm2MeasureBootLib.inf
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MpCpu.inf
- $(PLATFORM_PACKAGE)/Metronome/Metronome.inf
+ MdeModulePkg/Universal/Metronome/Metronome.inf
IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
<LibraryClasses>
@@ -1116,12 +940,8 @@ [Components.X64]
PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
- !if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- !else
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
- !endif
}
$(PLATFORM_PACKAGE)/UiApp/UiApp.inf
@@ -1133,11 +953,11 @@ [Components.X64]
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf {
<LibraryClasses>
NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbSmm.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbSmm.inf
MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf {
<LibraryClasses>
@@ -1159,9 +979,9 @@ [Components.X64]
PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbRuntimeDxe.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbRuntimeDxe.inf
- $(PLATFORM_PACKAGE)/PlatformSetupDxe/PlatformSetupDxe.inf
+ Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
!if $(DATAHUB_ENABLE) == TRUE
IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
@@ -1169,38 +989,30 @@ [Components.X64]
gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
}
!endif
- IntelFrameworkModulePkg/Universal/StatusCode/DatahubStatusCodeHandlerDxe/DatahubStatusCodeHandlerDxe.inf
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
- !if $(USE_HPET_TIMER) == TRUE
- PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
- !else
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmartTimer.inf
- !endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
+ PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/IntelPchLegacyInterrupt.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
-
- IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
#
# Performance Application; Set PERFORMANCE_ENABLE=TRUE for normal boot performance and smm performance data
@@ -1220,35 +1032,9 @@ [Components.X64]
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
-!if $(SEC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/HeciDrv.inf {
-!if $(SEC_DEBUG_INFO_ENABLE) == TRUE
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=1
-!else
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=0
-!endif
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SeCPolicyInitDxe.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Tpm2DeviceSeCDxe.inf
- SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
- SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf{
- <LibraryClasses>
- NULL|SecurityPkg/Library/HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library\DxePcdLib/DxePcdLib.inf
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/FtpmSmm.inf
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1275,24 +1061,23 @@ [Components.X64]
#
# EDK II Related Platform codes
#
- $(PLATFORM_PACKAGE)/PlatformSmm/PlatformSmm.inf{
+ Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf{
<LibraryClasses>
!if $(TARGET) != RELEASE
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_PACKAGE)/PlatformInfoDxe/PlatformInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformDxe/PlatformDxe.inf
+ Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
- $(PLATFORM_PACKAGE)/PciPlatform/PciPlatform.inf
- $(PLATFORM_PACKAGE)/SaveMemoryConfig/SaveMemoryConfig.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
- $(PLATFORM_PACKAGE)/PpmPolicy/PpmPolicy.inf
- $(PLATFORM_PACKAGE)/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+ Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+ Vlv2TbltDevicePkg/SaveMemoryConfig/SaveMemoryConfig.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
+ Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
!if $(GOP_DRIVER_ENABLE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformGopPolicy/PlatformGopPolicy.inf
+ Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
!endif
@@ -1303,13 +1088,15 @@ [Components.X64]
MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf
MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
UefiCpuPkg/CpuDxe/CpuDxe.inf
+ UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
- $(PLATFORM_PACKAGE)/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/GraphicDxeInitSmm.inf
#
# ACPI
@@ -1322,14 +1109,14 @@ [Components.X64]
<LibraryClasses>
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
+ MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- $(PLATFORM_PACKAGE)/BootScriptSaveDxe/BootScriptSaveDxe.inf
IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
- $(PLATFORM_RC_PACKAGE)/AcpiTablesPCAT/AcpiTables.inf
+ Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
- $(PLATFORM_PACKAGE)/AcpiPlatform/AcpiPlatform.inf
+ Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
@@ -1339,31 +1126,23 @@ [Components.X64]
MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
-#
-# ISA
-#
- $(PLATFORM_PACKAGE)/Wpce791/Wpce791.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-#
-# SDIO
-#
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcHost.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcMediaDevice.inf
+ #
+ # ISA
+ #
+ Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
+ MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
+
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1371,7 +1150,6 @@ [Components.X64]
# IDE/SCSI/AHCI
#
MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
- IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBusDxe.inf
MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
@@ -1395,7 +1173,7 @@ [Components.X64]
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000
}
!if $(SATA_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
!endif
MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
!if $(SCSI_ENABLE) == TRUE
@@ -1408,7 +1186,6 @@ [Components.X64]
MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
- IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf
MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
@@ -1432,9 +1209,9 @@ [Components.X64]
# SMBIOS
#
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
- $(PLATFORM_PACKAGE)/SmBiosMiscDxe/SmBiosMiscDxe.inf
+ Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
@@ -1449,12 +1226,6 @@ [Components.X64]
#
!include NetworkPkg/Network.dsc.inc
-!if $(NETWORK_ENABLE) == TRUE
- !if $(CSM_ENABLE) == TRUE
- IntelFrameworkModulePkg/Csm/BiosThunk/Snp16Dxe/Snp16Dxe.inf
- !endif
-!endif
-
!if $(CAPSULE_ENABLE) || $(MICOCODE_CAPSULE_ENABLE)
MdeModulePkg/Universal/EsrtFmpDxe/EsrtFmpDxe.inf
MdeModulePkg/Application/CapsuleApp/CapsuleApp.inf
@@ -1472,7 +1243,7 @@ [Components.X64]
<LibraryClasses>
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
!endif
@@ -1484,11 +1255,7 @@ [BuildOptions]
#
# Define token for different Platform
#
-!if $(MINNOW2_FSP_BUILD) == TRUE
- DEFINE MINNOW2_FSP_OPTION = /DMINNOW2_FSP_BUILD
-!else
DEFINE MINNOW2_FSP_OPTION =
-!endif
!if $(ENBDT_PF_BUILD) == TRUE
DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=1
@@ -1527,11 +1294,6 @@ [BuildOptions]
DEFINE X64_BUILD_ENABLE =
!endif
-!if $(FTPM_ENABLE) == TRUE
- DEFINE DSC_FTPM_BUILD_OPTIONS = /DFTPM_ENABLE
-!else
- DEFINE DSC_FTPM_BUILD_OPTIONS =
-!endif
!if $(TPM_ENABLED) == TRUE
DEFINE DSC_TPM_BUILD_OPTIONS = /DTPM_ENABLED
!else
@@ -1539,7 +1301,7 @@ [BuildOptions]
!endif
- DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
+ DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
!if $(PERFORMANCE_ENABLE) == TRUE
DEFINE PDB_BUILD_OPTION = /Zi
!endif
@@ -1572,76 +1334,6 @@ [BuildOptions.common.EDKII.DXE_SMM_DRIVER, BuildOptions.common.EDKII.SMM_CORE]
MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000
-[BuildOptions.Common.EDK]
-
-#
-# Define token for different Platform
-#
-!if $(ENBDT_PF_BUILD) == TRUE
- DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=1
-!else
- DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=0
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
- RELEASE_*_*_DLINK_FLAGS = /DEBUG
-!endif
-
-!if $(S3_ENABLE) == TRUE
- DEFINE DSC_S3_BUILD_OPTIONS = /DEFI_S3_RESUME
-!else
- DEFINE DSC_S3_BUILD_OPTIONS =
-!endif
-
-!if $(ENBDT_S3_SUPPORT) == TRUE
- DEFINE ENBDT_S3_SUPPORT_OPTIONS = /DNOCS_S3_SUPPORT
-!else
- DEFINE ENBDT_S3_SUPPORT_OPTIONS =
-!endif
-
-!if $(X64_CONFIG) == TRUE
- DEFINE X64_BUILD_ENABLE = /DX64_BUILD_ENABLE=1
-!else
- DEFINE X64_BUILD_ENABLE =
-!endif
-
-
- DEFINE EDK_GLUE_LIB_DEBUG =
- DEFINE DEBUG_BUILD_OPTIONS = /D EFI_DEBUG /D DEBUG_MODE=1 /GL- $(EDK_GLUE_LIB_DEBUG) /DEDKII_GLUE_DebugPrintErrorLevel=(EFI_D_ERROR)
- DEFINE EDK_DSC_FEATURE_BUILD_OPTIONS = $(DSC_S3_BUILD_OPTIONS) $(DSC_ACPI_BUILD_OPTIONS) $(DSC_SEC_BUILD_OPTIONS) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(SOFTSDV_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(QT_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS) /D$(PROJECT_SC_CHIPSET)
-
- DEFINE EDK_DSC_OTHER_BUILD_OPTIONS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS) $(SV_BUILD_OPTIONS) $(INTEL_FASTBOOT_BUILD_OPTION)
- DEFINE EDK_DSC_GLOBAL_BUILD_OPTIONS = $(ENBDT_PF_ENABLE) $(EDK_DSC_FEATURE_BUILD_OPTIONS) $(EDK_DSC_OTHER_BUILD_OPTIONS) /D EFI_SPECIFICATION_VERSION=0x00020000 /D PI_SPECIFICATION_VERSION=0x00000009 /D TIANO_RELEASE_VERSION=0x00080006 /D SUPPORT_DEPRECATED_PCI_CFG_PPI /D CSM_SMMENTRY_PORT8DATA8 /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE) /D MAX_VARIABLE_SIZE=0x2000 /D EFI_FIRMWARE_VENDOR="L/"INTEL/"" /D EFI_BUILD_VERSION="L/"EDKII/"" /DEFI_PEI_REPORT_STATUS_CODE_ON $(ENBDT_S3_SUPPORT_OPTIONS)
-
- *_*_IA32_ASM_FLAGS = /DEFI32 /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
- DEBUG_*_IA32_CC_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_CC_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_VFRPP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_VFRPP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_APP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_APP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_PP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_PP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_IA32_ASLPP_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASLCC_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASM16_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
-
- *_*_X64_ASM_FLAGS = /DEFIX64 /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
- DEBUG_*_X64_CC_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_CC_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_VFRPP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_VFRPP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_APP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_APP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_PP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_PP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_X64_ASLPP_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASLCC_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASM16_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
- # *_*_*_BUILD_FLAGS = -s
- *_*_*_VFR_FLAGS = -c
- *_*_*_BUILD_FLAGS = -c
-
[BuildOptions.Common.EDKII]
*_*_IA32_ASM_FLAGS = $(VP_BUILD_OPTIONS) /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
@@ -1656,25 +1348,3 @@ [BuildOptions.Common.EDKII]
*_*_X64_APP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_PP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_ASLPP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
-
-
-[Components.X64]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cBus.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cHost.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cPortA0Pio.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cMmioDeviceDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
index 53372bb922..1ba75175e1 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
@@ -1,18 +1,15 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
**/
#ifndef _PLAT_OVER_MNGR_H_
#define _PLAT_OVER_MNGR_H_
-#include <FrameworkDxe.h>
+#include <PiDxe.h>
#include <Protocol/HiiConfigAccess.h>
#include <Protocol/HiiConfigRouting.h>
@@ -57,24 +54,11 @@
#include <CpuType.h>
#include <Guid/PlatformCpuInfo.h>
#include <Protocol/SimpleTextIn.h>
-#include <Protocol/FrameworkFormBrowser.h>
+
+typedef UINT16 STRING_REF;
+
extern EFI_HII_HANDLE mHiiHandle;
-UINT32
-ConvertBase10ToRaw (
- IN EFI_EXP_BASE10_DATA *Data);
-
-UINT32
-ConvertBase2ToRaw (
- IN EFI_EXP_BASE2_DATA *Data);
-
-EFI_STATUS
-GetStringFromToken (
- IN EFI_GUID *ProducerGuid,
- IN STRING_REF Token,
- OUT CHAR16 **String
- );
-
VOID
SwapEntries (
IN CHAR8 *Data
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
index 6d7e7c3f6c..ae100df26d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
@@ -1,11 +1,8 @@
#
#
-# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
-#
+# Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.<BR>
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
#
# This driver produces UEFI PLATFORM_DRIVER_OVERRIDE_PROTOCOL if this protocol doesn't exist.
# It doesn't install again if this protocol exists.
@@ -63,7 +60,6 @@ [Sources]
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec #for PchAccess.h
SecurityPkg/SecurityPkg.dec
@@ -94,10 +90,6 @@ [Guids]
#
# gEfiCallerIdGuid ## Private ## Variable:L"PlatDriOver"
gEfiIfrTianoGuid ## CONSUMES ## Guid
- gEfiProcessorSubClassGuid
- gEfiMiscSubClassGuid
- gEfiCacheSubClassGuid
- gEfiMemorySubClassGuid
gEfiPlatformInfoGuid
gEfiNormalSetupGuid
gEfiSecureBootEnableDisableGuid
@@ -123,8 +115,6 @@ [Protocols]
gEfiDevicePathToTextProtocolGuid ## CONSUMED
gEdkiiFormBrowserEx2ProtocolGuid
- gEfiDataHubProtocolGuid
- gEfiLegacyBiosProtocolGuid
gEfiSimpleNetworkProtocolGuid
gEfiDiskInfoProtocolGuid ## CONSUMED
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
index c404ada588..fb82cdb984 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
SetupInfoRecords.c
@@ -19,7 +16,6 @@ Revision History:
--*/
#include "PlatformSetupDxe.h"
-#include <Protocol/LegacyBios.h>
#include <Protocol/PciRootBridgeIo.h>
#include <Protocol/SimpleNetwork.h>
#include <Protocol/DevicePath.h>
@@ -31,7 +27,6 @@ Revision History:
#include <Protocol/Smbios.h>
#include <IndustryStandard/SmBios.h>
#include <Library/IoLib.h>
-#include <Library/I2CLib.h>
#include <Guid/GlobalVariable.h>
#include "Valleyview.h"
@@ -1172,11 +1167,6 @@ UpdatePlatformInformation (
{
UINT32 MicroCodeVersion;
CHAR16 Buffer[40];
- UINT8 IgdVBIOSRevH;
- UINT8 IgdVBIOSRevL;
- UINT16 EDX;
- EFI_IA32_REGISTER_SET RegSet;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios = NULL;
EFI_STATUS Status;
UINT8 CpuFlavor=0;
EFI_PEI_HOB_POINTERS GuidHob;
@@ -1202,35 +1192,6 @@ UpdatePlatformInformation (
}
}
- //
- //VBIOS version
- //
- Status = gBS->LocateProtocol(
- &gEfiLegacyBiosProtocolGuid,
- NULL,
- (void **)&LegacyBios
- );
- if (!EFI_ERROR (Status)) {
- RegSet.X.AX = 0x5f01;
- Status = LegacyBios->Int86 (LegacyBios, 0x10, &RegSet);
- ASSERT_EFI_ERROR(Status);
-
- //
- // simulate AMI int15 (ax=5f01) handler
- // check NbInt15.asm in AMI code for asm edition
- //
- EDX = (UINT16)((RegSet.E.EBX >> 16) & 0xffff);
- IgdVBIOSRevH = (UINT8)(((EDX & 0x0F00) >> 4) | (EDX & 0x000F));
- IgdVBIOSRevL = (UINT8)(((RegSet.X.BX & 0x0F00) >> 4) | (RegSet.X.BX & 0x000F));
-
- if (IgdVBIOSRevH==0 && IgdVBIOSRevL==0){
- HiiSetString(mHiiHandle, STRING_TOKEN(STR_CHIP_IGD_VBIOS_REV_VALUE), L"N/A", NULL);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%02X%02X", IgdVBIOSRevH,IgdVBIOSRevL);
- HiiSetString(mHiiHandle, STRING_TOKEN(STR_CHIP_IGD_VBIOS_REV_VALUE), Buffer, NULL);
- }
- }
-
Status = GetGOPDriverName(Name);
if (!EFI_ERROR(Status))
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
index 8b46fbdfd1..14b9250e99 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
Platform.c
@@ -70,26 +68,9 @@ UINT8 mTco1Sources[] = {
IchnNmi
};
-UINTN
-DevicePathSize (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- );
-
VOID
S4S5ProgClock();
-EFI_STATUS
-InitRuntimeScriptTable (
- IN EFI_SYSTEM_TABLE *SystemTable
- );
-
-VOID
-S5SleepWakeOnRtcCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
- );
-
-
VOID
EnableS5WakeOnRtc();
@@ -98,12 +79,6 @@ HexToBcd(
UINT8 HexValue
);
-UINT8
-BcdToHex(
- IN UINT8 BcdValue
- );
-
-
VOID
CpuSmmSxWorkAround(
);
@@ -779,46 +754,6 @@ DummyTco1Callback (
{
}
-UINTN
-DevicePathSize (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *Start;
-
- if (DevicePath == NULL) {
- return 0;
- }
-
- //
- // Search for the end of the device path structure
- //
- Start = DevicePath;
- while (!IsDevicePathEnd (DevicePath)) {
- DevicePath = NextDevicePathNode (DevicePath);
- }
-
- //
- // Compute the size and add back in the size of the end device path structure
- //
- return ((UINTN)DevicePath - (UINTN)Start) + sizeof(EFI_DEVICE_PATH_PROTOCOL);
-}
-
-/**
-
- @param DispatchHandle The handle of this callback, obtained when registering
- @param DispatchContext The predefined context which contained sleep type and phase
-
-**/
-VOID
-S5SleepWakeOnRtcCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
- )
-{
- EnableS5WakeOnRtc();
-}
-
/**
@retval 1. Check Alarm interrupt is not set.
@@ -981,17 +916,3 @@ HexToBcd(
return ((UINT8)(LowByte + (HighByte << 4)));
}
-UINT8
-BcdToHex(
- IN UINT8 BcdValue
- )
-{
- UINTN HighByte;
- UINTN LowByte;
-
- HighByte = (UINTN)((BcdValue >> 4) * 10);
- LowByte = (UINTN)(BcdValue & 0x0F);
-
- return ((UINT8)(LowByte + HighByte));
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
index 1b7b05d9b3..3c4f55cf54 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
@@ -1,11 +1,8 @@
#
#
-# Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
#
# Module Name:
#
@@ -51,16 +48,8 @@ [LibraryClasses]
[Guids]
gEfiSetupVariableGuid
- gDmiDataGuid
- gEfiAcpiVariableCompatiblityGuid
- gEfiPciLanInfoGuid
- gEfiPciLanInfoGuid
-
-[FeaturePcd]
- gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode
[Protocols]
- gEfiSmmBase2ProtocolGuid
gEfiSmmIchnDispatchProtocolGuid
gEfiGlobalNvsAreaProtocolGuid
gEfiSmmSwDispatchProtocolGuid
@@ -75,13 +64,11 @@ [Packages]
IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
[Pcd.common]
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
[Depex]
- gEfiSmmBase2ProtocolGuid AND
gEfiSmmAccess2ProtocolGuid AND
gEfiSmmPowerButtonDispatchProtocolGuid AND
gEfiSmmSxDispatchProtocolGuid AND
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/S3Save.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/S3Save.c
index 19089233b2..7bd0270655 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/S3Save.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/S3Save.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
IchS3Save.c
@@ -23,52 +20,6 @@ Revision History
extern UINT16 mAcpiBaseAddr;
EFI_PHYSICAL_ADDRESS mRuntimeScriptTableBase;
-EFI_STATUS
-InitRuntimeScriptTable (
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
- UINT32 VarAttrib;
- UINTN VarSize;
- ACPI_VARIABLE_SET_COMPATIBILITY *AcpiVariableBase;
-
- //
- // Allocate runtime ACPI script table space. We need it to save some
- // settings done by CSM, which runs after normal script table closed
- //
- Status = gBS->AllocatePages (
- AllocateAnyPages,
- EfiACPIReclaimMemory,
- 1,
- &mRuntimeScriptTableBase
- );
- if (EFI_ERROR(Status)) {
- return EFI_OUT_OF_RESOURCES ;
- }
-
- //
- // Save runtime script table base into global ACPI variable
- //
- VarAttrib = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS
- | EFI_VARIABLE_NON_VOLATILE;
- VarSize = sizeof (UINTN);
- Status = SystemTable->RuntimeServices->GetVariable (
- ACPI_GLOBAL_VARIABLE,
- &gEfiAcpiVariableCompatiblityGuid,
- &VarAttrib,
- &VarSize,
- &AcpiVariableBase
- );
- if (EFI_ERROR(Status)) {
- return Status;
- }
-
- AcpiVariableBase->RuntimeScriptTableBase = mRuntimeScriptTableBase;
-
- return EFI_SUCCESS;
-}
-
EFI_STATUS
SaveRuntimeScriptTable (
VOID
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
index 8bf2ebafc1..bcb1d8ae92 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
SmmPlatform.h
@@ -35,7 +33,6 @@ Abstract:
#include <Protocol/PciRootBridgeIo.h>
#include <Protocol/LoadedImage.h>
#include "Protocol/GlobalNvsArea.h"
-#include <Guid/AcpiVariableCompatibility.h>
#include <Guid/SetupVariable.h>
#include <Guid/EfiVpdData.h>
#include <Guid/PciLanInfo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf b/Platform/Intel/Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
index 331076a2d4..2c0a13f6af 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
@@ -1,9 +1,8 @@
#/*++
#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
#
# Module Name:
#
@@ -29,7 +28,6 @@ [Sources]
[Packages]
MdePkg/MdePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2SocBinPkg/Vlv2SocBinPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
[LibraryClasses]
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c
index aa8c213d83..4e02486853 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c
@@ -1,10 +1,8 @@
/*++
-Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -138,7 +136,7 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer)
&MacStr
);
if (EFI_ERROR (Status)) {
- return Status;
+ MacStr = L"000000000000";
}
SerialNumber = MacStr;
SerialNumStrLen = StrLen(SerialNumber);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
index 15c180129c..81b66ce9af 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
@@ -1,13 +1,9 @@
/*++
-Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved.
-
+Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved.
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
Module Name:
MiscOemType0x94Function.c
@@ -36,7 +32,6 @@ Abstract:
#include <Protocol/I2cBus.h>
#include <Library/IoLib.h>
-#include <Library/I2CLib.h>
#include <Library/CpuIA32.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Guid/PlatformInfo.h>
@@ -527,11 +522,6 @@ UpdatePlatformInformation (
{
UINT32 MicroCodeVersion;
CHAR16 Buffer[40];
- UINT8 IgdVBIOSRevH;
- UINT8 IgdVBIOSRevL;
- UINT16 EDX;
- EFI_IA32_REGISTER_SET RegSet;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios = NULL;
EFI_STATUS Status;
UINT8 CpuFlavor=0;
EFI_PEI_HOB_POINTERS GuidHob;
@@ -561,34 +551,6 @@ UpdatePlatformInformation (
}
}
- //
- //VBIOS version
- //
- Status = gBS->LocateProtocol(
- &gEfiLegacyBiosProtocolGuid,
- NULL,
- (VOID **)&LegacyBios
- );
-
- RegSet.X.AX = 0x5f01;
- Status = LegacyBios->Int86 (LegacyBios, 0x10, &RegSet);
- ASSERT_EFI_ERROR(Status);
-
- //
- // simulate AMI int15 (ax=5f01) handler
- // check NbInt15.asm in AMI code for asm edition
- //
- EDX = (UINT16)((RegSet.E.EBX >> 16) & 0xffff);
- IgdVBIOSRevH = (UINT8)(((EDX & 0x0F00) >> 4) | (EDX & 0x000F));
- IgdVBIOSRevL = (UINT8)(((RegSet.X.BX & 0x0F00) >> 4) | (RegSet.X.BX & 0x000F));
-
- if (IgdVBIOSRevH==0 && IgdVBIOSRevL==0) {
- HiiSetString(mHiiHandle, STRING_TOKEN(STR_CHIP_IGD_VBIOS_REV_VALUE), L"N/A", NULL);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%02X%02X", IgdVBIOSRevH,IgdVBIOSRevL);
- HiiSetString(mHiiHandle, STRING_TOKEN(STR_CHIP_IGD_VBIOS_REV_VALUE), Buffer, NULL);
- }
-
Status = TGetGOPDriverName(Name);
if(!EFI_ERROR(Status))
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSystemManufacturerFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSystemManufacturerFunction.c
index 63c4f50ed5..f537e0db76 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSystemManufacturerFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSystemManufacturerFunction.c
@@ -1,10 +1,8 @@
/*++
-Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -219,8 +217,8 @@ AddSmbiosManuCallback (
NULL,
&MacStr
);
- if (EFI_ERROR (Status)) {
- return Status;
+ if (EFI_ERROR (Status)) {
+ MacStr = L"000000000000";
}
SerialNumber = MacStr;
SerialNumStrLen = StrLen(SerialNumber);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
index 9d2f5410a0..99b1a18185 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
@@ -2,12 +2,9 @@
# Component name for module MiscSubclass
#
# FIX ME!
-# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
-#
+# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-#
#
##
@@ -87,9 +84,8 @@ [Packages]
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- NetworkPkg/NetworkPkg.dec
+ NetworkPkg/NetworkPkg.dec
[LibraryClasses]
HiiLib
@@ -107,13 +103,10 @@ [LibraryClasses]
PrintLib
CpuIA32Lib
PchPlatformLib
- I2cLib
NetLib
HobLib
[Guids]
- gEfiProcessorSubClassGuid
- gEfiCacheSubClassGuid
gEfiNormalSetupGuid
gEfiPlatformInfoGuid
gEfiVlv2VariableGuid
@@ -137,4 +130,4 @@ [Pcd]
gEfiVLVTokenSpaceGuid.PcdProductSerialNumber
[Depex]
- gEfiSmbiosProtocolGuid AND gMemInfoProtocolGuid AND gEfiMpServiceProtocolGuid AND gEfiSimpleNetworkProtocolGuid
+ gEfiSmbiosProtocolGuid AND gMemInfoProtocolGuid AND gEfiMpServiceProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
index ba81bd9def..8fe1482106 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
@@ -1,13 +1,10 @@
/*++
-Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved
-
+Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
IgdOpRegion.c
@@ -35,14 +32,12 @@ Abstract:
#include "IgdOpRegion.h"
#include "VlvPlatformInit.h"
-#include <FrameworkDxe.h>
-#include <Uefi.h>
+#include <PiDxe.h>
#include <PchRegs.h>
#include <Guid/DataHubRecords.h>
#include <Protocol/IgdOpRegion.h>
-#include <Protocol/FrameworkHii.h>
#include <Protocol/FirmwareVolume2.h>
#include <Protocol/PlatformGopPolicy.h>
#include <Protocol/PciIo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.h b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.h
index cd1d208d61..597bdaf46a 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.h
@@ -1,13 +1,10 @@
/*++
-Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-
+Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
IgdOpRegion.h
@@ -36,7 +33,7 @@ Abstract:
#include "VlvPlatformInit.h"
#include "VlvCommonDefinitions.h"
#include <Uefi/UefiInternalFormRepresentation.h>
-#include <FrameworkDxe.h>
+#include <PiDxe.h>
//
//
@@ -177,24 +174,6 @@ GetSVER (
OUT UINT8 *SVER
);
-/**
- Acquire the string associated with the ProducerGuid and return it.
-
- @param ProducerGuid The Guid to search the HII database for
- @param Token The token value of the string to extract
- @param String The string that is extracted
-
- @retval EFI_SUCCESS The function completed successfully
- @retval EFI_NOT_FOUND The requested string was not found
-
-**/
-EFI_STATUS
-GetStringFromToken (
- IN EFI_GUID *ProducerGuid,
- IN STRING_REF Token,
- OUT CHAR16 **String
- );
-
/**
Graphics OpRegion / Software SCI driver installation function.
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
index 9d277dd7cf..1e86adadb3 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
@@ -2,11 +2,10 @@
#
#/*++
#
-# Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
+
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
#
# Module Name:
#
@@ -34,7 +33,6 @@ [Sources]
[Packages]
MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
index d8594053b0..8cf8938a4e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
+++ b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
@@ -212,8 +212,12 @@ if defined VS140COMNTOOLS (
goto :BldFail
)
-echo Ensuring correct build directory is present for GenBiosId...
-set BUILD_PATH=%WORKSPACE%\Build\%PLATFORM_NAME%\%TARGET%_%TOOL_CHAIN_TAG%
+echo Ensuring correct build directory is present
+if "%Arch%"=="IA32" (
+ set BUILD_PATH=%WORKSPACE%\Build\%PLATFORM_NAME%IA32\%TARGET%_%TOOL_CHAIN_TAG%
+) else (
+ set BUILD_PATH=%WORKSPACE%\Build\%PLATFORM_NAME%\%TARGET%_%TOOL_CHAIN_TAG%
+)
echo Modifing Conf files for this build...
:: Remove lines with these tags from target.txt
@@ -240,16 +244,6 @@ move /Y %WORKSPACE%\Conf\target.txt.tmp %WORKSPACE%\Conf\target.txt >nul
:: Build BIOS
::**********************************************************************
-echo Creating BiosId...
-if not exist %BUILD_PATH%\IA32 mkdir %BUILD_PATH%\IA32
-%PLATFORM_PACKAGE%\GenBiosId.exe -i %WORKSPACE%\Conf\BiosId.env -o %BUILD_PATH%\IA32\BiosId.bin -ob %WORKSPACE%\Conf\BiosId.bat
-if "%Arch%"=="X64" (
- if not exist %BUILD_PATH%\X64 mkdir %BUILD_PATH%\X64
- %PLATFORM_PACKAGE%\GenBiosId.exe -i %WORKSPACE%\Conf\BiosId.env -o %BUILD_PATH%\X64\BiosId.bin -ob %WORKSPACE%\Conf\BiosId.bat
-)
-
-if %ERRORLEVEL% NEQ 0 goto BldFail
-
echo.
echo Invoking EDK2 build...
call build %Build_Flags%
@@ -267,31 +261,14 @@ pushd %PLATFORM_PACKAGE%
%PLATFORM_PACKAGE%\fce read -i %BUILD_PATH%\FV\Vlv.fd > %BUILD_PATH%\FV\HiiDefaultData.txt
:: save changes to VlvXXX.fd
-%PLATFORM_PACKAGE%\fce update -i %BUILD_PATH%\FV\Vlv.fd -s %BUILD_PATH%\FV\HiiDefaultData.txt -o %BUILD_PATH%\FV\Vlv%Arch%.fd
+%PLATFORM_PACKAGE%\fce update -i %BUILD_PATH%\FV\Vlv.fd -s %BUILD_PATH%\FV\HiiDefaultData.txt -o %BUILD_PATH%\FV\Vlv.ROM
popd
if %ERRORLEVEL% NEQ 0 goto BldFail
::echo FD successfully updated with default Hii values.
-:: Set the Board_Id, Build_Type, Version_Major, and Version_Minor environment variables
-find /v "#" %WORKSPACE%\Conf\BiosId.env > ver_strings
-for /f "tokens=1,3" %%i in (ver_strings) do set %%i=%%j
-del /f/q ver_strings >nul
-
-set BIOS_Name=%BOARD_ID%_%Arch%_%BUILD_TYPE%_%VERSION_MAJOR%_%VERSION_MINOR%.ROM
-copy /y/b %BUILD_PATH%\FV\Vlv%Arch%.fd %PLATFORM_PACKAGE%\Stitch\%BIOS_Name% >nul
-copy /y/b %BUILD_PATH%\FV\Vlv%Arch%.fd %BUILD_PATH%\FV\Vlv.ROM >nul
-
-echo.
-echo Build location: %BUILD_PATH%
-echo BIOS ROM Created: %BIOS_Name%
-echo.
-echo -------------------- The EDKII BIOS build has successfully completed. --------------------
-echo.
-
@REM build capsule here
-echo > %BUILD_PATH%\FV\SYSTEMFIRMWAREUPDATECARGO.Fv
-build -p %PLATFORM_PACKAGE%\PlatformCapsule.dsc
+call build -p %PLATFORM_PACKAGE%\PlatformCapsule.dsc
goto Exit
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-platforms Patch 02/14] Vlv2TbltDevicePkg: Reduce Intel Framework dependencies
2019-07-01 2:55 ` [edk2-platforms Patch 02/14] Vlv2TbltDevicePkg: Reduce Intel Framework dependencies Michael D Kinney
@ 2019-07-01 4:06 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:06 UTC (permalink / raw)
To: Kinney, Michael D, devel@edk2.groups.io; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: Kinney, Michael D
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-platforms Patch 02/14] Vlv2TbltDevicePkg: Reduce Intel Framework dependencies
* Use BaseSerialPortLib16550 from MdeModulePkg.
* Remove unused DxeSmmDriverEntryPoint library instance mapping
from the IntelFrameworkPkg.
* Remove all references to PS/2 Keyboard/Mouse that are not
available on MinnowMax.
* Remove VgaClassDxe module from IntelFrameworkModulePkg that is
not used.
* Remove DatahubStatusCodeHandlerDxe module from the
IntelFrameworkModulePkg that is not used.
* Remove LegacyRegionDxe module from the IntelFrameworkModulePkg
The Legacy Region Protocol produced by this module is not used.
* Remove VLV2 specific Metronome module that uses the CPU I/O
Protocol defined in the IntelFrameworkPkg. Instead, use the
Metronome module from the MdeModulePkg that produces the
Metronome Arch Protocol from a TimerLib instance.
* Remove use of MpCpu.inf from DSC/FDF file.
* Update DSC/FDF/source files to assume MINNOW2_FSP_BUILD is FALSE.
* Update DSC/FDF/source files to assume FTPM_ENABLE is FALSE.
* Remove TXT binary
* Use PcAtChisetPkg HpetDxe module instead of the VLV2 specific
SmartTimer module that has an IntelFramework dependency.
* Remove SEC_ENABLE define and dependent modules.
* Remove IdeBusDxe module from DSC files. IdeBusDxe is listed
in DSC file, but not the FDF file, so it is not used. This
removes an IntelFrameworkModulkePkg dependency.
* Remove commented out SDIO and PiSmmCommunicationPei modules
* Remove unused Intel Framework S3Lib
* Remove use of PCD from the IntelFrameworkModulePkg
PcdEbdaReservedMemorySize.
* Remove EdkCompatibilityPkg related [BuildOptions] sections
* Remove unused DEFINES from DSC/FDF
* Remove unused references to Ppi/Cache.h from Vlv2SocBinPkg.dec
* Remove unused references to gPeiCachePpiGuid from Vlv2SocBinPkg.dec
* Remove unused references to gEfiHtBistHobGuid from Vlv2SocBinPkg.dec
* Remove unused references to gEfiCpuTokenSpaceGuid PCDs from
Vlv2SocBinPkg.dec
* Remove unused IntelPchLegacyInterrupt module
* Remove CpuIoDxe module from IntelFrameworkModulePkg
* Remove duplicate declaration of gEfiAcpiSupportProtocolGuid
from Vlv2Tblt2DevicePkg
* Remove duplicate declaration of PcdShellFile from Vlv2Tblt2DevicePkg
* Remove unused gEfiAcpiTableProtocolGuid from AcpiPlatform.inf
* Add E7006X3 UNDI module to FDF files
* Remove gEfiSimpleNetworkProtocolGuid dependency.
If gEfiSimpleNetworkProtocolGuid is not produced, still
allow all SMBIOS records to be produced. The MAC address
from Simple Network Protocol is being used as a system
serial number. If Simple Network Protocol is not available,
then default to a serial number of 0.
* Remove unused dependency on IntelFspWrapperPkg
* Remove Intel Framework S3 support.
* Remove use of the gEfiSmmPeiSmramMemoryReserveGuid GUIDed HOB.
* Remove production of unused gEfiFindFvPpiGuid.
* Update IA32 only builds to use a unique BUILD_OUTPUT directory
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../AcpiPlatform/AcpiPlatform.c | 33 +-
.../AcpiPlatform/AcpiPlatform.h | 8 +-
.../AcpiPlatform/AcpiPlatform.inf | 5 -
.../Intel/Vlv2TbltDevicePkg/Build_IFWI.bat | 33 --
.../Include/Library/EfiRegTableLib.h | 11 +-
.../Library/EfiRegTableLib/EfiRegTableLib.inf | 12 +-
.../MultiPlatformLib/MultiPlatformLib.h | 7 +-
.../MultiPlatformLib/MultiPlatformLib.inf | 9 +-
.../Library/PlatformBdsLib/BdsPlatform.c | 6 -
.../MonoStatusCode/MonoStatusCode.h | 47 +-
.../MonoStatusCode/MonoStatusCode.inf | 9 +-
.../PciPlatform/PciPlatform.inf | 8 +-
.../PlatformCpuInfoDxe/PlatformCpuInfoDxe.h | 17 +-
.../PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf | 8 +-
.../PlatformDxe/Configuration.h | 8 +-
.../Vlv2TbltDevicePkg/PlatformDxe/Platform.c | 524 +----------------
.../PlatformDxe/PlatformDxe.h | 515 +----------------
.../PlatformDxe/PlatformDxe.inf | 20 +-
.../PlatformGopPolicy/PlatformGopPolicy.inf | 12 +-
.../PlatformInitPei/MemoryCallback.c | 8 +-
.../PlatformInitPei/PlatformEarlyInit.c | 209 +------
.../PlatformInitPei/PlatformEarlyInit.h | 21 +-
.../PlatformInitPei/PlatformInitPei.inf | 29 +-
| 11 +-
.../PlatformPei/MemoryCallback.c | 8 +-
.../Vlv2TbltDevicePkg/PlatformPei/Platform.c | 16 +-
.../PlatformPei/PlatformPei.inf | 11 +-
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 16 +-
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 254 +++------
.../Vlv2TbltDevicePkg/PlatformPkgConfig.dsc | 21 +-
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 234 +++-----
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 532 ++++-------------
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 533 ++++-------------
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 534 ++++--------------
.../PlatformSetupDxe/PlatformSetupDxe.h | 28 +-
.../PlatformSetupDxe/PlatformSetupDxe.inf | 14 +-
.../PlatformSetupDxe/SetupInfoRecords.c | 43 +-
.../Vlv2TbltDevicePkg/PlatformSmm/Platform.c | 83 +--
.../PlatformSmm/PlatformSmm.inf | 17 +-
.../Vlv2TbltDevicePkg/PlatformSmm/S3Save.c | 53 +-
.../PlatformSmm/SmmPlatform.h | 7 +-
.../Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf | 6 +-
.../MiscBaseBoardManufacturerFunction.c | 8 +-
.../SmBiosMiscDxe/MiscOemType0x94Function.c | 42 +-
.../MiscSystemManufacturerFunction.c | 10 +-
.../SmBiosMiscDxe/SmBiosMiscDxe.inf | 15 +-
.../VlvPlatformInitDxe/IgdOpRegion.c | 11 +-
.../VlvPlatformInitDxe/IgdOpRegion.h | 27 +-
.../VlvPlatformInitDxe/VlvPlatformInitDxe.inf | 8 +-
Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat | 39 +-
50 files changed, 599 insertions(+), 3541 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
index 5c03f66edb..1f4d575b73 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
@@ -638,7 +638,6 @@ OnReadyToBoot (
EFI_STATUS Status;
EFI_ACPI_TABLE_VERSION TableVersion;
EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
- EFI_ACPI_S3_SAVE_PROTOCOL *AcpiS3Save;
SYSTEM_CONFIGURATION SetupVarBuffer;
UINTN VariableSize;
EFI_PLATFORM_CPU_INFO *PlatformCpuInfoPtr = NULL;
@@ -722,15 +721,6 @@ OnReadyToBoot (
TableVersion
);
ASSERT_EFI_ERROR (Status);
-
- //
- // S3 script save.
- //
- Status = gBS->LocateProtocol (&gEfiAcpiS3SaveProtocolGuid, NULL, (VOID **) &AcpiS3Save);
- if (!EFI_ERROR (Status)) {
- AcpiS3Save->S3Save (AcpiS3Save, NULL);
- }
-
}
VOID
@@ -1261,12 +1251,23 @@ AcpiPlatformEntryPoint (
}
}
- Status = EfiCreateEventReadyToBootEx (
- TPL_NOTIFY,
- OnReadyToBoot,
- NULL,
- &Event
- );
+ //
+ // Publish ACPI 1.0 or 2.0 Tables.
+ //
+// Status = AcpiSupport->PublishTables (
+// AcpiSupport,
+// TableVersion
+// );
+// ASSERT_EFI_ERROR (Status);
+
+// Status = EfiCreateEventReadyToBootEx (
+// TPL_NOTIFY,
+// OnReadyToBoot,
+// NULL,
+// &Event
+// );
+ Event = NULL;
+ OnReadyToBoot (Event, NULL);
//
// Finished.
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
index 598756846a..f45590ea24 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
@@ -1,12 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
AcpiPlatform.h
@@ -26,7 +23,6 @@ Abstract:
//
// Statements that include other header files.
//
-#include <FrameworkDxe.h>
#include <PiDxe.h>
#include <Base.h>
#include <Library/UefiLib.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
index c59920db03..817ad58a81 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
@@ -37,7 +37,6 @@ [Packages]
IntelFrameworkPkg/IntelFrameworkPkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
[LibraryClasses]
@@ -63,13 +62,9 @@ [Guids]
gEfiVlv2VariableGuid
[Protocols]
- gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEnhancedSpeedstepProtocolGuid
gEfiPlatformCpuProtocolGuid
gEfiAcpiSupportProtocolGuid
- gEfiAcpiS3SaveProtocolGuid
- gEfiCpuIoProtocolGuid
- gEfiPs2PolicyProtocolGuid
gEfiFirmwareVolume2ProtocolGuid
gEfiMpServiceProtocolGuid
gEfiGlobalNvsAreaProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat b/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat
index 887206703a..44759c617f 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Build_IFWI.bat
@@ -114,7 +114,6 @@ if /i "%~1"=="/yL" (
goto OptLoop
)
-
:: Require 2 input parameters
if "%~2"=="" goto Usage
@@ -122,10 +121,6 @@ if "%~2"=="" goto Usage
set Platform_Type=%~1
set Build_Target=%~2
-if "%~3"=="" (
- set "IFWI_Suffix= "
-) else set "IFWI_Suffix=/S %~3"
-
:: Build BIOS
echo ======================================================================
echo Build_IFWI: Calling BIOS build Script...
@@ -139,34 +134,6 @@ if %ERRORLEVEL% NEQ 0 (
)
echo.
echo Finished Building BIOS.
-@REM Set BIOS_ID environment variable here.
-call %WORKSPACE%\Conf\BiosId.bat
-echo BIOS_ID=%BIOS_ID%
-
-:: Set the Board_Id, Build_Type, Version_Major, and Version_Minor environment variables
-find /v "#" %WORKSPACE%\Conf\BiosId.env > ver_strings
-for /f "tokens=1,3" %%i in (ver_strings) do set %%i=%%j
-del /f/q ver_strings >nul
-set BIOS_Name=%BOARD_ID%_%Arch%_%BUILD_TYPE%_%VERSION_MAJOR%_%VERSION_MINOR%.ROM
-
-:: Start Integration process
-echo ======================================================================
-echo Build_IFWI: Calling IFWI Stitching Script...
-pushd %PLATFORM_PATH%\%PLATFORM_PACKAGE%\Stitch
-
- :: IFWIStitch.bat [/nG] [/nM] [/nB] [/B BIOS.rom] [/C StitchConfig] [/S IFWISuffix]
- call IFWIStitch.bat %Stitch_Flags% /B %BIOS_Name% %IFWI_Suffix%
-
- @echo off
-popd
-if %ERRORLEVEL% NEQ 0 (
- echo echo -- Error Stitching %BIOS_Nam% & echo.
- set exitCode=1
-)
-echo.
-echo Build_IFWI is finished.
-echo The final IFWI file is located in %ROOT_DIR%\Vlv2TbltDevicePkg\Stitch\
-echo ======================================================================
goto Exit
:Usage
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
index 915f8b39d9..12e44efed0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
@@ -1,12 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
EfiRegTableLib.h
@@ -31,10 +28,6 @@ Abstract:
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
#include <Library/UefiLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Protocol/CpuIo.h>
-#include <Protocol/BootScriptSave.h>
-#include <Framework/BootScript.h>
#include <Protocol/PciRootBridgeIo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
index 9cb8841d65..472fc4e0f6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
@@ -2,12 +2,9 @@
#
#/*++
#
-# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
-#
+# Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.<BR>
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-
#
# Module Name:
#
@@ -40,8 +37,3 @@ [Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
-
-
-[LibraryClasses]
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
index 807ca20acb..3fa9f7b129 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
@@ -3,11 +3,11 @@
This file includes package header files, library classes.
- Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
+
**/
#ifndef _MULTIPLATFORM_LIB_H_
@@ -52,7 +52,6 @@
#include <Ppi/Speaker.h>
#include <Guid/FirmwareFileSystem.h>
#include <Guid/MemoryTypeInformation.h>
-#include <Ppi/Cache.h>
#include <Ppi/Reset.h>
#include <Ppi/EndOfPeiPhase.h>
#include <Ppi/MemoryDiscovered.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
index 758e47ca70..a4942a097c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
@@ -1,11 +1,8 @@
#
#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-#
#
# Module Name:
#
@@ -59,13 +56,11 @@ [Packages]
Vlv2TbltDevicePkg/PlatformPkg.dec
IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- Vlv2SocBinPkg/Vlv2SocBinPkg.dec
[LibraryClasses]
DebugLib
HobLib
IoLib
-# PeiKscLib
[Ppis]
gEfiPeiReadOnlyVariable2PpiGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
index 4d5997d6e9..4adca1b465 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
@@ -1789,9 +1789,6 @@ PlatformBdsPolicyBehavior (
#ifdef TPM_ENABLED
TcgPhysicalPresenceLibProcessRequest();
#endif
- #ifdef FTPM_ENABLE
- Tcg2PhysicalPresenceLibProcessRequest(NULL);
- #endif
if (EsrtManagement != NULL) {
EsrtManagement->LockEsrtRepository();
@@ -1997,9 +1994,6 @@ FULL_CONFIGURATION:
}
#ifdef TPM_ENABLED
TcgPhysicalPresenceLibProcessRequest();
- #endif
- #ifdef FTPM_ENABLE
- Tcg2PhysicalPresenceLibProcessRequest(NULL);
#endif
if (EsrtManagement != NULL) {
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.h b/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.h
index 0b256093a6..80a84d0d21 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
MonoStatusCode.h
@@ -24,41 +22,18 @@ Abstract:
//
// Statements that include other files.
//
-#include "PiPei.h"
+#include <PiPei.h>
-#include "Pi/PiBootMode.h"
-
-#include "Ppi/StatusCode.h"
-#include "Ppi/MemoryDiscovered.h"
-#include "Ppi/FvLoadFile.h"
-
-#include "Library/HobLib.h"
-#include "Library/DebugLib.h"
-#include "Library/IoLib.h"
-#include "Library/SerialPortLib.h"
-#include "Protocol/StatusCode.h"
-
-
-#ifndef _STATUS_CODE_ENABLER_H_
-#define _STATUS_CODE_ENABLER_H_
-
-#ifdef EFI_DEBUG
-
-#define EFI_STATUS_CODE_ENABLER_HOB_GUID \
- { \
- 0x5ffc6cf3, 0x71ad, 0x46f5, 0xbd, 0x8b, 0x7e, 0x8f, 0xfe, 0x19, 0x7, 0xd7 \
- }
-
-extern EFI_GUID gEfiSerialStatusCodeEnablerHobGuid;
-
-typedef struct _EFI_STATUS_CODE_INFO {
- BOOLEAN StatusCodeDisable;
-} EFI_STATUS_CODE_INFO;
-
-#endif
-#endif
+#include <Pi/PiBootMode.h>
+#include <Ppi/StatusCode.h>
+#include <Ppi/MemoryDiscovered.h>
+#include <Library/HobLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/SerialPortLib.h>
+#include <Protocol/StatusCode.h>
//
// Platform specific function Declarations. These must be implemented in a
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf b/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
index f1be5b8d6c..d429310ac4 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
@@ -1,9 +1,8 @@
#
#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
#
# Module Name:
#
@@ -34,10 +33,8 @@ [sources.common]
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
- Vlv2SocBinPkg/Vlv2SocBinPkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
[LibraryClasses]
PeimEntryPoint
@@ -52,7 +49,6 @@ [LibraryClasses]
[Ppis]
gEfiPeiMemoryDiscoveredPpiGuid
gEfiPeiStatusCodePpiGuid
- gEfiPeiFvFileLoaderPpiGuid
[Protocols]
gEfiStatusCodeRuntimeProtocolGuid
@@ -62,7 +58,6 @@ [Pcd]
[Guids]
gEfiPlatformCpuInfoGuid
- gEfiHtBistHobGuid
gEfiStatusCodeDataTypeStringGuid ## CONSUMES
[Depex]
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
index a0837917d8..18012a1d53 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
@@ -1,11 +1,8 @@
#/*++
#
-# Copyright (c) 2003 - 2018, Intel Corporation. All rights reserved
-#
+# Copyright (c) 2003 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-
#
# Module Name:
#
@@ -46,7 +43,6 @@ [Packages]
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
[LibraryClasses]
HobLib
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.h
index b13611f4f8..dfe3d1a0c7 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.h
@@ -1,12 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
PlatformCpuInfoDxe.h
@@ -18,12 +15,10 @@ Abstract:
#ifndef _PLATFORM_CPU_INFO_DRIVER_H_
#define _PLATFORM_CPU_INFO_DRIVER_H_
-#include "PiDxe.h"
-#include "Library/HobLib.h"
-#include "Guid/GlobalVariable.h"
-#include "Guid/AcpiVariableCompatibility.h"
-#include "Guid/PlatformCpuInfo.h"
-#include "Library/UefiRuntimeServicesTableLib.h"
+#include <PiDxe.h>
+#include <Library/HobLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Guid/PlatformCpuInfo.h>
#include <Guid/Vlv2Variable.h>
#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
index f2ade1b105..ac9c7f1ba1 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
@@ -1,10 +1,8 @@
#/*++
#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-
#
# Module Name:
#
@@ -36,9 +34,7 @@ [Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2SocBinPkg/Vlv2SocBinPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
[LibraryClasses]
HobLib
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Configuration.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Configuration.h
index 23e03111c9..676f500530 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Configuration.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Configuration.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
Configuration.h
@@ -89,8 +87,6 @@ Abstract:
#define VAR_EQ_CONFIG_MODE_DECIMAL_NAME L"67"
#define VAR_EQ_CPU_EE_NAME 0x0045 // E
#define VAR_EQ_CPU_EE_DECIMAL_NAME L"69"
-#define VAR_EQ_FLOPPY_MODE_NAME 0x0046 // F
-#define VAR_EQ_FLOPPY_MODE_DECIMAL_NAME L"70"
#define VAR_EQ_HT_MODE_NAME 0x0048 // H
#define VAR_EQ_HT_MODE_DECIMAL_NAME L"72"
#define VAR_EQ_AHCI_MODE_NAME 0x0049 // I
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
index 2a4a0b92e1..1d90117af6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
@@ -1,13 +1,9 @@
/** @file
- Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
@@ -23,9 +19,7 @@ Abstract:
#include "PlatformDxe.h"
#include "Platform.h"
#include "PchCommonDefinitions.h"
-#include <Protocol/UsbPolicy.h>
#include <Protocol/PchPlatformPolicy.h>
-#include <Protocol/TpmMp.h>
#include <Protocol/CpuIo2.h>
#include <Library/S3BootScriptLib.h>
#include <Guid/PciLanInfo.h>
@@ -63,10 +57,8 @@ GPIO_CONF_PAD_INIT mTB_BL_GpioInitData_SC_TRI_Exit_boot_Service[] =
EFI_GUID mSystemHiiExportDatabase = EFI_HII_EXPORT_DATABASE_GUID;
EFI_GUID mPlatformDriverGuid = EFI_PLATFORM_DRIVER_GUID;
SYSTEM_CONFIGURATION mSystemConfiguration;
-SYSTEM_PASSWORDS mSystemPassword;
EFI_HANDLE mImageHandle;
BOOLEAN mMfgMode = FALSE;
-VOID *mDxePlatformStringPack;
UINT32 mPlatformBootMode = PLATFORM_NORMAL_MODE;
extern CHAR16 gItkDataVarName[];
@@ -77,8 +69,6 @@ EFI_EVENT mReadyToBootEvent;
UINT8 mSmbusRsvdAddresses[] = PLATFORM_SMBUS_RSVD_ADDRESSES;
UINT8 mNumberSmbusAddress = sizeof( mSmbusRsvdAddresses ) / sizeof( mSmbusRsvdAddresses[0] );
-UINT32 mSubsystemVidDid;
-UINT32 mSubsystemAudioVidDid;
UINTN mPciLanCount = 0;
VOID *mPciLanInfo = NULL;
@@ -89,9 +79,6 @@ static EFI_SPEAKER_IF_PROTOCOL mSpeakerInterface = {
GenerateBeepTone
};
-EFI_USB_POLICY_PROTOCOL mUsbPolicyData = {0};
-
-
CFIO_PNP_INIT mTB_BL_GpioInitData_SC_TRI_S0ix_Exit_boot_Service[] =
{
{0x410 ,0x20038e10}, //vlv.gpio.gpscore.cfio_regs_pad_lpc_clkout1_pconf0
@@ -179,11 +166,6 @@ VOID
UpdateDVMTSetup(
);
-VOID
-InitPlatformUsbPolicy (
- VOID
- );
-
VOID
InitRC6Policy(
VOID
@@ -427,14 +409,8 @@ SpiBiosProtectionFunction(
BiosFlaLower0 = PcdGet32(PcdFlashMicroCodeAddress)-PcdGet32(PcdFlashAreaBaseAddress);
BiosFlaLimit0 = PcdGet32(PcdFlashMicroCodeSize)-1;
- #ifdef MINNOW2_FSP_BUILD
- BiosFlaLower1 = PcdGet32(PcdFlashFvFspBase)-PcdGet32(PcdFlashAreaBaseAddress);
- BiosFlaLimit1 = (PcdGet32(PcdFlashFvRecoveryBase)-PcdGet32(PcdFlashFvFspBase)+PcdGet32(PcdFlashFvRecoverySize))-1;
- #else
BiosFlaLower1 = PcdGet32(PcdFlashFvMainBase)-PcdGet32(PcdFlashAreaBaseAddress);
BiosFlaLimit1 = (PcdGet32(PcdFlashFvRecoveryBase)-PcdGet32(PcdFlashFvMainBase)+PcdGet32(PcdFlashFvRecoverySize))-1;
- #endif
-
mPciD31F0RegBase = MmPciAddress (0,
DEFAULT_PCI_BUS_NUMBER_PCH,
@@ -611,8 +587,6 @@ TristateLpcGpioS0i3Config (
}
-EFI_BOOT_SCRIPT_SAVE_PROTOCOL *mBootScriptSave;
-
/**
Event Notification during exit boot service to enabel ACPI mode
@@ -862,8 +836,6 @@ InitializePlatform (
//
// Add usb policy
//
- InitPlatformUsbPolicy();
- InitSioPlatformPolicy();
InitializeClockRouting();
InitializeSlotInfo();
InitTcoReset();
@@ -949,7 +921,7 @@ InitializePlatform (
);
if (!EFI_ERROR (Status)) {
Status = gBS->RegisterProtocolNotify (
- &gExitPmAuthProtocolGuid,
+ &gEfiEndOfDxeEventGroupGuid,
RtcEvent,
&RtcCallbackReg
);
@@ -1042,58 +1014,6 @@ ReadyToBootFunction (
VOID *Context
)
{
- EFI_STATUS Status;
- EFI_ISA_ACPI_PROTOCOL *IsaAcpi;
- EFI_ISA_ACPI_DEVICE_ID IsaDevice;
- UINTN Size;
- UINT16 State;
- EFI_TPM_MP_DRIVER_PROTOCOL *TpmMpDriver;
- EFI_CPU_IO_PROTOCOL *CpuIo;
- UINT8 Data;
- UINT8 ReceiveBuffer [64];
- UINT32 ReceiveBufferSize;
-
- UINT8 TpmForceClearCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0A,
- 0x00, 0x00, 0x00, 0x5D};
- UINT8 TpmPhysicalPresenceCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0C,
- 0x40, 0x00, 0x00, 0x0A,
- 0x00, 0x00};
- UINT8 TpmPhysicalDisableCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0A,
- 0x00, 0x00, 0x00, 0x70};
- UINT8 TpmPhysicalEnableCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0A,
- 0x00, 0x00, 0x00, 0x6F};
- UINT8 TpmPhysicalSetDeactivatedCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0B,
- 0x00, 0x00, 0x00, 0x72,
- 0x00};
- UINT8 TpmSetOwnerInstallCommand [] = {0x00, 0xC1,
- 0x00, 0x00, 0x00, 0x0B,
- 0x00, 0x00, 0x00, 0x71,
- 0x00};
-
- Size = sizeof(UINT16);
- Status = gRT->GetVariable (
- VAR_EQ_FLOPPY_MODE_DECIMAL_NAME,
- &gEfiNormalSetupGuid,
- NULL,
- &Size,
- &State
- );
-
- //
- // Disable Floppy Controller if needed
- //
- Status = gBS->LocateProtocol (&gEfiIsaAcpiProtocolGuid, NULL, (VOID **) &IsaAcpi);
- if (!EFI_ERROR(Status) && (State == 0x00)) {
- IsaDevice.HID = EISA_PNP_ID(0x604);
- IsaDevice.UID = 0;
- Status = IsaAcpi->EnableDevice(IsaAcpi, &IsaDevice, FALSE);
- }
-
//
// save LAN info to a variable
//
@@ -1111,386 +1031,6 @@ ReadyToBootFunction (
gBS->FreePool (mPciLanInfo);
mPciLanInfo = NULL;
}
-
-
- //
- // Handle ACPI OS TPM requests here
- //
- Status = gBS->LocateProtocol (
- &gEfiCpuIoProtocolGuid,
- NULL,
- (VOID **)&CpuIo
- );
- Status = gBS->LocateProtocol (
- &gEfiTpmMpDriverProtocolGuid,
- NULL,
- (VOID **)&TpmMpDriver
- );
- if (!EFI_ERROR (Status))
- {
- Data = ReadCmosBank1Byte (CpuIo, ACPI_TPM_REQUEST);
-
- //
- // Clear pending ACPI TPM request indicator
- //
- WriteCmosBank1Byte (CpuIo, ACPI_TPM_REQUEST, 0x00);
- if (Data != 0)
- {
- WriteCmosBank1Byte (CpuIo, ACPI_TPM_LAST_REQUEST, Data);
-
- //
- // Assert Physical Presence for these commands
- //
- TpmPhysicalPresenceCommand [11] = 0x20;
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver, TpmPhysicalPresenceCommand,
- sizeof (TpmPhysicalPresenceCommand),
- ReceiveBuffer, &ReceiveBufferSize
- );
- //
- // PF PhysicalPresence = TRUE
- //
- TpmPhysicalPresenceCommand [11] = 0x08;
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver, TpmPhysicalPresenceCommand,
- sizeof (TpmPhysicalPresenceCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- if (Data == 0x01)
- {
- //
- // TPM_PhysicalEnable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver, TpmPhysicalEnableCommand,
- sizeof (TpmPhysicalEnableCommand),
- ReceiveBuffer, &ReceiveBufferSize
- );
- }
- if (Data == 0x02)
- {
- //
- // TPM_PhysicalDisable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver, TpmPhysicalDisableCommand,
- sizeof (TpmPhysicalDisableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- }
- if (Data == 0x03)
- {
- //
- // TPM_PhysicalSetDeactivated=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer, &ReceiveBufferSize
- );
- gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);
- }
- if (Data == 0x04)
- {
- //
- // TPM_PhysicalSetDeactivated=TRUE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x01;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x05)
- {
- //
- // TPM_ForceClear
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmForceClearCommand,
- sizeof (TpmForceClearCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x06)
- {
- //
- // TPM_PhysicalEnable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalEnableCommand,
- sizeof (TpmPhysicalEnableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalSetDeactivated=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x07)
- {
- //
- // TPM_PhysicalSetDeactivated=TRUE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x01;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalDisable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalDisableCommand,
- sizeof (TpmPhysicalDisableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x08)
- {
- //
- // TPM_SetOwnerInstall=TRUE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmSetOwnerInstallCommand [10] = 0x01;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmSetOwnerInstallCommand,
- sizeof (TpmSetOwnerInstallCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- }
- if (Data == 0x09)
- {
- //
- // TPM_SetOwnerInstall=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmSetOwnerInstallCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmSetOwnerInstallCommand,
- sizeof (TpmSetOwnerInstallCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- }
- if (Data == 0x0A)
- {
- //
- // TPM_PhysicalEnable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalEnableCommand,
- sizeof (TpmPhysicalEnableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalSetDeactivated=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // Do TPM_SetOwnerInstall=TRUE on next reboot
- //
-
- WriteCmosBank1Byte (CpuIo, ACPI_TPM_REQUEST, 0xF0);
-
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x0B)
- {
- //
- // TPM_SetOwnerInstall=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmSetOwnerInstallCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmSetOwnerInstallCommand,
- sizeof (TpmSetOwnerInstallCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalSetDeactivated=TRUE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x01;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalDisable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalDisableCommand,
- sizeof (TpmPhysicalDisableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0x0E)
- {
- //
- // TPM_ForceClear
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmForceClearCommand,
- sizeof (TpmForceClearCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalEnable
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalEnableCommand,
- sizeof (TpmPhysicalEnableCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- //
- // TPM_PhysicalSetDeactivated=FALSE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmPhysicalSetDeactivatedCommand [10] = 0x00;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalSetDeactivatedCommand,
- sizeof (TpmPhysicalSetDeactivatedCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- gRT->ResetSystem (
- EfiResetWarm,
- EFI_SUCCESS,
- 0,
- NULL
- );
- }
- if (Data == 0xF0)
- {
- //
- // Second part of ACPI TPM request 0x0A: OEM custom TPM_SetOwnerInstall=TRUE
- //
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- TpmSetOwnerInstallCommand [10] = 0x01;
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmSetOwnerInstallCommand,
- sizeof (TpmSetOwnerInstallCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- WriteCmosBank1Byte (CpuIo, ACPI_TPM_LAST_REQUEST, 0x0A);
- }
- //
- // Deassert Physical Presence
- //
- TpmPhysicalPresenceCommand [11] = 0x10;
- ReceiveBufferSize = sizeof(ReceiveBuffer);
- Status = TpmMpDriver->Transmit (
- TpmMpDriver,
- TpmPhysicalPresenceCommand,
- sizeof (TpmPhysicalPresenceCommand),
- ReceiveBuffer,
- &ReceiveBufferSize
- );
- }
- }
-
- return;
}
/**
@@ -1722,66 +1262,6 @@ UpdateDVMTSetup(
}
}
-VOID
-InitPlatformUsbPolicy (
- VOID
- )
-
-{
- EFI_HANDLE Handle;
- EFI_STATUS Status;
-
- Handle = NULL;
-
- mUsbPolicyData.Version = (UINT8)USB_POLICY_PROTOCOL_REVISION_2;
- mUsbPolicyData.UsbMassStorageEmulationType = mSystemConfiguration.UsbBIOSINT13DeviceEmulation;
- if(mUsbPolicyData.UsbMassStorageEmulationType == 3) {
- mUsbPolicyData.UsbEmulationSize = mSystemConfiguration.UsbBIOSINT13DeviceEmulationSize;
- } else {
- mUsbPolicyData.UsbEmulationSize = 0;
- }
- mUsbPolicyData.UsbZipEmulationType = mSystemConfiguration.UsbZipEmulation;
- mUsbPolicyData.UsbOperationMode = HIGH_SPEED;
-
- //
- // Some chipset need Period smi, 0 = LEGACY_PERIOD_UN_SUPP
- //
- mUsbPolicyData.USBPeriodSupport = LEGACY_PERIOD_UN_SUPP;
-
- //
- // Some platform need legacyfree, 0 = LEGACY_FREE_UN_SUPP
- //
- mUsbPolicyData.LegacyFreeSupport = LEGACY_FREE_UN_SUPP;
-
- //
- // Set Code base , TIANO_CODE_BASE =0x01, ICBD =0x00
- //
- mUsbPolicyData.CodeBase = (UINT8)ICBD_CODE_BASE;
-
- //
- // Some chispet 's LpcAcpibase are diffrent,set by platform or chipset,
- // default is Ich acpibase =0x040. acpitimerreg=0x08.
- mUsbPolicyData.LpcAcpiBase = 0x40;
- mUsbPolicyData.AcpiTimerReg = 0x08;
-
- //
- // Set for reduce usb post time
- //
- mUsbPolicyData.UsbTimeTue = 0x00;
- mUsbPolicyData.InternelHubExist = 0x00; //TigerPoint doesn't have RMH
- mUsbPolicyData.EnumWaitPortStableStall = 100;
-
-
- Status = gBS->InstallProtocolInterface (
- &Handle,
- &gUsbPolicyGuid,
- EFI_NATIVE_INTERFACE,
- &mUsbPolicyData
- );
- ASSERT_EFI_ERROR(Status);
-
-}
-
UINT8
ReadCmosBank1Byte (
IN EFI_CPU_IO_PROTOCOL *CpuIo,
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
index 8f5df3257e..621fb08274 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
@@ -1,10 +1,8 @@
/*++
- Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -42,25 +40,17 @@ Abstract:
#include <Library/BiosIdLib.h>
#include <Protocol/GlobalNvsArea.h>
#include <Protocol/PciRootBridgeIo.h>
-#include <Protocol/IsaAcpi.h>
-#include <Framework/FrameworkInternalFormRepresentation.h>
-#include <Protocol/FrameworkHii.h>
-#include <Protocol/FrameworkFormCallback.h>
-#include <Protocol/CpuIo.h>
-#include <Protocol/BootScriptSave.h>
-#include <Framework/BootScript.h>
+#include <Protocol/CpuIo2.h>
#include <Guid/GlobalVariable.h>
#include <Guid/BoardFeatures.h>
#include <Guid/DataHubRecords.h>
#include <Protocol/DataHub.h>
#include <Protocol/PciIo.h>
#include <Protocol/Speaker.h>
-#include <Protocol/ExitPmAuth.h>
#include <IndustryStandard/Pci22.h>
#include <Guid/SetupVariable.h>
#include <Guid/PlatformInfo.h>
#include "Configuration.h"
-#define _EFI_H_ //skip efi.h
#include "PchAccess.h"
#include "VlvAccess.h"
#include "BoardIdDecode.h"
@@ -86,25 +76,9 @@ Abstract:
#define B_RTC_DATE_ALARM_MASK 0x3F
-//
-// Default CPU Alternate Duty Cycle (255=100%, 0=0%)
-//
-#define DEF_CPU_ALT_DUTY_CYCLE 0xFF
-
-#define MAX_ONBOARD_SATA_DEVICE 2
-
-#define DXE_DEVICE_ENABLED 1
-#define DXE_DEVICE_DISABLED 0
-
-#define AZALIA_MAX_LOOP_TIME 0x10000
-
//
// Platform driver GUID
//
-#define EFI_PLATFORM_DRIVER_GUID \
- { 0x056E7324, 0xA718, 0x465b, 0x9A, 0x84, 0x22, 0x8F, 0x06, 0x64, 0x2B, 0x4F }
-
-#define PASSWORD_MAX_SIZE 20
#define PLATFORM_NORMAL_MODE 0x01
#define PLATFORM_SAFE_MODE 0x02
#define PLATFORM_RECOVERY_MODE 0x04
@@ -119,33 +93,10 @@ Abstract:
#define EFI_CU_PLATFORM_DXE_STEP4 (EFI_OEM_SPECIFIC | 0x00000015)
#define EFI_CU_PLATFORM_DXE_INIT_DONE (EFI_OEM_SPECIFIC | 0x00000016)
-
-#define EFI_SECTION_STRING 0x1C
-#define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
-#define PREFIX_BLANK 0x04
-
#pragma pack(1)
typedef UINT64 EFI_BOARD_FEATURES;
-//
-//BUGBUG: should remove these EDK hii definition once Hii transtion is done
-//
-typedef UINT16 STRING_REF;
-typedef UINT16 EFI_FORM_LABEL;
-
-typedef enum {
- EfiUserPassword,
- EfiAdminPassword
-} EFI_PASSWORD_TYPE;
-
-typedef struct {
- CHAR16 TempPassword[PASSWORD_MAX_SIZE];
- CHAR16 EncodedPassword[PASSWORD_MAX_SIZE];
- VOID *PasswordLocation;
- EFI_PASSWORD_TYPE PasswordType;
-} EFI_PASSWORD_DATA;
-
typedef struct {
CHAR8 AaNumber[7];
UINT8 BoardId;
@@ -155,111 +106,11 @@ typedef struct {
UINT64 AcpiOemTableId;
} BOARD_ID_DECODE;
-typedef
-EFI_STATUS
-(EFIAPI *EFI_FORM_ROUTINE) (
- SYSTEM_CONFIGURATION *SetupBuffer
- );
-
-typedef struct{
- UINT16 DeviceNumber;
- UINT16 FunctionNumber;
-}PCI_DEVICE_FUNC_INFO;
-
-typedef struct{
- CHAR16 PortNumber[4];
- STRING_REF SataDeviceInfoStringId;
-}SATA_DEVICE_STRING_INFO;
-
-typedef struct {
- UINT16 Signature;
- UINT8 Size;
- UINT32 EntryPoint;
- UINT8 Reserve[17];
- UINT16 PciDataOff;
- UINT16 ExpansionOff;
-} PNP_OPTION_ROM_HEADER;
-
-typedef struct {
- UINT32 Signature;
- UINT8 Revision;
- UINT8 Length;
- UINT16 NextHeader;
- UINT8 Reserve;
- UINT8 CheckSum;
- UINT32 DeviceId;
- UINT16 ManufactureStrOff;
- UINT16 ProductStrOff;
-} PNP_EXPANSION_HEADER;
-
-typedef struct {
- BOOLEAN Enable;
- UINT8 VerbTableNum;
- UINT16 CodecSSID;
- EFI_PHYSICAL_ADDRESS HDABar;
- EFI_PHYSICAL_ADDRESS UpperHDABar;
- UINT8 SDIPresent;
- BOOLEAN Pme;
- BOOLEAN LegacyFrontPanelAudio;
- BOOLEAN HighDefinitionFrontPanelAudio;
-} EFI_AZALIA_S3;
-
-//
-//following structs are from R8. Remove them once R8->R9 transition is done
-//
-typedef struct {
- CHAR16 *OptionString; // Passed in string to generate a token for in a truly dynamic form creation
- STRING_REF StringToken; // This is used when creating a single op-code without generating a StringToken (have one already)
- UINT16 Value;
- UINT8 Flags;
- UINT16 Key;
-} IFR_OPTION;
-
-
-
-typedef struct {
- UINT8 Number;
- UINT32 HorizontalResolution;
- UINT32 VerticalResolution;
-} PANEL_RESOLUTION;
-
#pragma pack()
//
// Prototypes
//
-EFI_STATUS
-EFIAPI
-EfiMain (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- );
-
-EFI_STATUS
-ProcessEventLog (
- );
-
-EFI_STATUS
-FindDataRecords (
- );
-
-EFI_STATUS
-ProcessPasswords(
- );
-
-VOID
-MemorySetup(
- );
-
-
-UINTN
-EfiValueToString (
- IN OUT CHAR16 *Buffer,
- IN INT64 Value,
- IN UINTN Flags,
- IN UINTN Width
- );
-
VOID
EFIAPI
ReadyToBootFunction (
@@ -267,60 +118,6 @@ ReadyToBootFunction (
VOID *Context
);
-VOID
-InstallHiiDataAndGetSettings(
- IN EFI_HII_STRING_PACK *StringPack,
- //
- ... // 0 or more of => IN EFI_HII_IFR_PACK *IfrPack,
- // Terminate list with NULL
- //
- );
-
-EFI_STATUS
-ReadOrInitSetupVariable(
- IN UINTN RequiredVariableSize,
- IN UINTN RequiredPasswordSize,
- IN VOID *DefaultData,
- IN VOID *MfgDefaultData,
- OUT VOID *SetupVariableData,
- OUT VOID *SystemPassword
- );
-
-VOID
-EfiLogicalOrMem(
- IN VOID *Destination,
- IN VOID *Source,
- IN UINTN Length
- );
-
-EFI_STATUS
-GetStringFromToken (
- IN EFI_GUID *ProducerGuid,
- IN STRING_REF Token,
- OUT CHAR16 **String
- );
-
-UINT32
-ConvertBase2ToRaw (
- IN EFI_EXP_BASE2_DATA *Data);
-
-UINT32
-ConvertBase10ToRaw (
- IN EFI_EXP_BASE10_DATA *Data);
-
-CHAR16 *
-GetStringById (
- IN STRING_REF Id,
- EFI_HII_HANDLE StringPackHandle
- );
-
-VOID
-EFIAPI
-SetupDataFilter (
- IN EFI_EVENT Event,
- IN VOID* Context
- );
-
VOID
EFIAPI
IdeDataFilter (
@@ -328,20 +125,6 @@ IdeDataFilter (
IN VOID* Context
);
-VOID
-EFIAPI
-UpdateAhciRaidDiskInfo (
- IN EFI_EVENT Event,
- IN VOID* Context
- );
-
-VOID
-EFIAPI
-EventLogFilter (
- IN EFI_EVENT Event,
- IN VOID* Context
- );
-
VOID
SwapEntries (
IN CHAR8 *Data
@@ -353,45 +136,12 @@ AsciiToUnicode (
IN CHAR16 *UnicodeString
);
-UINT16
-ConfigModeStateGet();
-
-VOID
-SetSkus();
-
-VOID
-CPUSetupItems();
-
-EFI_STATUS
-SecurityDriverCallback (
- IN EFI_FORM_CALLBACK_PROTOCOL *This,
- IN UINT16 KeyValue,
- IN EFI_IFR_DATA_ARRAY *Data,
- OUT EFI_HII_CALLBACK_PACKET **Packet
- );
-
-VOID
-SetPasswordState (
- );
-
-VOID
-EncodePassword (
- IN CHAR16 *Password
- );
-
VOID
EFIAPI
PciBusEvent (
IN EFI_EVENT Event,
IN VOID* Context
);
-VOID
-AsfInitialize(
- );
-
-VOID
-InitializeAsf (
- );
UINT8
ReadCmosBank1Byte (
@@ -410,204 +160,6 @@ VOID
InitializeBoardId (
);
-EFI_STATUS
-InstallBootCallbackRoutine(
- );
-
-EFI_STATUS
-InstallConfigurationCallbackRoutine(
- );
-
-EFI_STATUS
-InstallPerformanceCallbackRoutine(
- );
-
-EFI_STATUS
-InstallSecurityCallbackRoutine (
- );
-
-EFI_STATUS
-InstallMainCallbackRoutine (
- );
-
-EFI_STATUS
-MemoryConfigurationUpdate (
- UINT16 *Key,
- EFI_FORM_LABEL *Label,
- UINT16 *OpcodeCount,
- UINT8 **OpcodeData,
- EFI_FORM_ROUTINE *Routine
- );
-
-EFI_STATUS
-MemoryConfigurationCallbackRoutine (
- SYSTEM_CONFIGURATION *SetupBuffer
- );
-
-EFI_STATUS
-MemoryConfigurationCalculateSpeed(
- SYSTEM_CONFIGURATION *SetupBuffer
- );
-
-VOID
-UpdateMemoryString(
- IN STRING_REF TokenToUpdate,
- IN CHAR16 *NewString
- );
-
-VOID
-InitFeaturePolicy (
- IN EFI_PLATFORM_INFO_HOB *PlatformInfo
- );
-
-VOID
-InitializeSetupVarHide (
- );
-
-VOID
-PreparePCIePCISlotInformation(
- VOID
- );
-
-
-EFI_STATUS
-BootConfigurationUpdate (
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-EFI_STATUS
-InitializeBootConfiguration(
- VOID
- );
-
-UINT16
-GetStringSize(
- IN CHAR16 *ThisString
- );
-
-UINT16
-GetDriveCount (
- IN STRING_REF *BootMap
- );
-
-CHAR16 *
-GetBootString (
- IN STRING_REF Id,
- OUT UINTN *Length
- );
-
-EFI_STATUS
-BootCfgCreateTwoOptionOneOf(
- IN UINT16 QuestionId,
- IN EFI_FORM_LABEL Label,
- IN STRING_REF OptionPrompt,
- IN STRING_REF OptionHelp,
- IN STRING_REF OptionOneString,
- IN STRING_REF OptionTwoString,
- IN UINT8 OptionOneFlags,
- IN UINT8 OptionTwoFlags,
- IN UINT16 KeyValueOne,
- IN UINT16 KeyValueTwo
- );
-
-EFI_STATUS
-ReplaceOpcodeWithText(
- IN STRING_REF OptionPrompt,
- IN STRING_REF OptionHelp,
- IN STRING_REF OptionOneString,
- IN EFI_FORM_LABEL Label
- );
-
-EFI_STATUS
-CreateDriveBootOrderOpcode(
- IN VOID *Data,
- IN STRING_REF *BootMap,
- IN EFI_FORM_LABEL Label,
- IN UINT16 QuestionId,
- IN STRING_REF OptionOneString,
- IN STRING_REF OptionTwoString
- );
-
-VOID
-SetHyperBootCfgFlags(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-VOID
-GetHyperBootCfgFlags(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-VOID
-PrepareBootCfgForHyperBoot(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-BOOLEAN
-BootCfgChanged(
- IN SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-EFI_STATUS
-InsertOpcodeAtIndex(
- IN SYSTEM_CONFIGURATION *SystemConfiguration,
- IN OUT IFR_OPTION *OptionList,
- IN IFR_OPTION IfrOption,
- IN UINT16 OptionCount
- );
-
-VOID
-ConfigureBootOrderStrings(
- IN SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-VOID
-InitializeAllBootStrings(
- VOID
- );
-
-VOID
-SaveUsbCfgSettings(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-VOID
-RestoreUsbCfgSettings(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-EFI_STATUS
-UpdateBootDevicePriority(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-EFI_STATUS
-DisableHyperBoot(
- IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
- );
-
-BOOLEAN
-CheckForUserPassword(
- VOID
- );
-
-EFI_STATUS
-EFIAPI
-HyperBootPasswordCallback(
- IN OUT VOID* Data
- );
-
-EFI_STATUS
-EFIAPI
-HyperBootF9Callback (
- IN VOID* Data
- );
-
-EFI_STATUS
-InstallHiiEvents(
- VOID
- );
-
EFI_STATUS
EFIAPI
ProgramToneFrequency (
@@ -637,73 +189,13 @@ AdjustDefaultRtcTimeCallback (
IN VOID *Context
);
-typedef struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL GOP_DISPLAY_BRIGHTNESS_PROTOCOL;
-
-typedef
-EFI_STATUS
-(EFIAPI *GET_MAXIMUM_BRIGHTNESS_LEVEL) (
- IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This,
- OUT UINT32 *MaxBrightnessLevel
- );
-
-
-typedef
-EFI_STATUS
-(EFIAPI *GET_CURRENT_BRIGHTNESS_LEVEL) (
- IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This,
- OUT UINT32 *MaxBrightnessLevel
- );
-
-typedef
-EFI_STATUS
-(EFIAPI *SET_BRIGHTNESS_LEVEL) (
- IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This,
- IN UINT32 BrightnessLevel
- );
-
-struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL {
- UINT32 Revision;
- GET_MAXIMUM_BRIGHTNESS_LEVEL GetMaxBrightnessLevel;
- GET_CURRENT_BRIGHTNESS_LEVEL GetCurrentBrightnessLevel;
- SET_BRIGHTNESS_LEVEL SetBrightnessLevel;
-};
-
//
// Global externs
//
-extern UINT8 MaintenanceBin[];
-extern UINT8 MainBin[];
-extern UINT8 ConfigurationBin[];
-extern UINT8 MemoryConfigurationBin[];
-extern UINT8 PerformanceBin[];
-extern UINT8 SecurityBin[];
-extern UINT8 BootBin[];
-extern UINT8 PowerBin[];
-extern UINT8 SystemSetupBin[];
-
-extern VOID *mDxePlatformStringPack;
-extern EFI_HII_PROTOCOL *mHii;
extern SYSTEM_CONFIGURATION mSystemConfiguration;
-extern FRAMEWORK_EFI_HII_HANDLE mMaintenanceHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mMainHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mConfigurationHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mPerformanceHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mPowerHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mBootHiiHandle;
-extern FRAMEWORK_EFI_HII_HANDLE mSecurityHiiHandle;
-
-extern SYSTEM_PASSWORDS mSystemPassword;
-extern EFI_PASSWORD_DATA mAdminPassword;
-extern EFI_PASSWORD_DATA mUserPassword;
extern EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *mPciRootBridgeIo;
-//
-//extern EFI_REG_TABLE mSubsystemIdRegs[];
-//
-extern UINT32 mSubsystemVidDid;
-extern UINT32 mSubsystemAudioVidDid;
-
extern UINT8 mBoardIdIndex;
extern BOOLEAN mFoundAANum;
extern EFI_BOARD_FEATURES mBoardFeatures;
@@ -718,5 +210,4 @@ extern BOOLEAN mMfgMode;
extern UINT32 mPlatformBootMode;
extern CHAR8 BoardAaNumber[];
-extern EFI_GUID gEfiGlobalNvsAreaProtocolGuid;
#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index 4d1949d05d..e8652f2a84 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -1,6 +1,6 @@
## @file
#
-# Copyright (c) 1999 - 2016, Intel Corporation. All rights reserved
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -50,13 +50,10 @@ [sources.common]
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
SecurityPkg/SecurityPkg.dec
CryptoPkg/CryptoPkg.dec
- IntelFspWrapperPkg/IntelFspWrapperPkg.dec
[LibraryClasses]
BaseLib
@@ -91,24 +88,18 @@ [Guids]
gEfiEventExitBootServicesGuid
gEfiVlv2VariableGuid
gEfiSecureBootEnableDisableGuid
+ gEfiEndOfDxeEventGroupGuid
[Protocols]
gEfiPciRootBridgeIoProtocolGuid # CONSUMES ## GUID
gEfiVariableArchProtocolGuid
gEfiVariableWriteArchProtocolGuid
gEfiHiiConfigAccessProtocolGuid
- gEfiBootScriptSaveProtocolGuid
- gEfiCpuIoProtocolGuid
+ gEfiCpuIo2ProtocolGuid
gEfiDevicePathProtocolGuid
gEfiDiskInfoProtocolGuid
- gEfiPs2PolicyProtocolGuid
- gEfiIsaAcpiProtocolGuid
- gEfiDataHubProtocolGuid
gEfiPciIoProtocolGuid
gDxePchPlatformPolicyProtocolGuid
- gEfiTpmMpDriverProtocolGuid
- gEfiLpcWpce791PolicyProtocolGuid
- gUsbPolicyGuid
gEfiSpeakerInterfaceProtocolGuid
gDxeVlvPlatformPolicyGuid
gEfiSmbiosSlotPopulationGuid
@@ -121,7 +112,6 @@ [Protocols]
gEfiGlobalNvsAreaProtocolGuid
gEfiCpuIo2ProtocolGuid
gIgdOpRegionProtocolGuid
- gExitPmAuthProtocolGuid
gEdkiiVariableLockProtocolGuid
[Pcd.common]
@@ -134,15 +124,13 @@ [Pcd.common]
gPlatformModuleTokenSpaceGuid.PcdFlashFvMainBase
gPlatformModuleTokenSpaceGuid.PcdFlashFvRecoveryBase
gPlatformModuleTokenSpaceGuid.PcdFlashFvRecoverySize
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase
[Depex]
gEfiPciRootBridgeIoProtocolGuid AND
gEfiVariableArchProtocolGuid AND
gEfiVariableWriteArchProtocolGuid AND
- gEfiBootScriptSaveProtocolGuid AND
- gEfiCpuIoProtocolGuid AND
+ gEfiCpuIo2ProtocolGuid AND
gDxePchPlatformPolicyProtocolGuid AND
gEfiGlobalNvsAreaProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
index 948793f719..c00553e224 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
@@ -1,15 +1,10 @@
#
#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
-
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = PlatformGOPPolicy
@@ -29,14 +24,13 @@ [Sources.common]
[Packages]
MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
+
[LibraryClasses]
BaseLib
DebugLib
UefiDriverEntryPoint
UefiRuntimeServicesTableLib
-# DxeKscLib
[Guids]
gBmpImageGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryCallback.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryCallback.c
index 070848ed1e..074bf7debb 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryCallback.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryCallback.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
MemoryCallback.c
@@ -158,12 +156,10 @@ MemoryDiscoveredPpiNotifyCallback (
IoWrite16 (ACPI_BASE_ADDRESS + R_PCH_ACPI_PM1_CNT, Pm1Cnt);
}
- #ifndef MINNOW2_FSP_BUILD
//
// Set PEI cache mode here
//
SetPeiCacheMode (PeiServices);
- #endif
//
// Pulish memory tyoe info
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c
index a359c95920..ec636a4cd9 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
PlatformEarlyInit.c
@@ -70,10 +67,6 @@ static EFI_PEI_PPI_DESCRIPTOR mInstallSpeakerInterfacePpi = {
static EFI_PEI_RESET_PPI mResetPpi = { IchReset };
-static EFI_PEI_FIND_FV_PPI mEfiFindFvPpi = {
- (EFI_PEI_FIND_FV_FINDFV)FindFv
-};
-
static EFI_PEI_PPI_DESCRIPTOR mPpiList[] = {
{
EFI_PEI_PPI_DESCRIPTOR_PPI,
@@ -81,14 +74,9 @@ static EFI_PEI_PPI_DESCRIPTOR mPpiList[] = {
NULL
},
{
- EFI_PEI_PPI_DESCRIPTOR_PPI,
+ (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
&gEfiPeiResetPpiGuid,
&mResetPpi
- },
- {
- (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
- &gEfiFindFvPpiGuid,
- &mEfiFindFvPpi
}
};
@@ -815,158 +803,6 @@ PlatformEarlyInitEntry (
EFI_PLATFORM_INFO_HOB *PlatformInfo;
EFI_PEI_HOB_POINTERS Hob;
EFI_PLATFORM_CPU_INFO PlatformCpuInfo;
- EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *DescriptorBlock;
- EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *NewDescriptorBlock;
- UINTN Index;
- UINTN MaxIndex;
- UINT64 Base;
- UINT64 Size;
- UINT64 NewSize;
-
- //
- // Make sure base and size of the SMRAM region is aligned
- //
- Hob.Raw = GetFirstGuidHob (&gEfiSmmPeiSmramMemoryReserveGuid);
- if (Hob.Raw != NULL) {
- DescriptorBlock = GET_GUID_HOB_DATA (Hob.Raw);
- DEBUG ((DEBUG_INFO, "SMM PEI SMRAM Memory Reserved HOB\n"));
- for (Index = 0; Index < DescriptorBlock->NumberOfSmmReservedRegions; Index++) {
- DEBUG((DEBUG_INFO, " SMRAM Descriptor[%02x]: Start=%016lx Size=%016lx State=%02x\n",
- Index,
- DescriptorBlock->Descriptor[Index].PhysicalStart,
- DescriptorBlock->Descriptor[Index].PhysicalSize,
- DescriptorBlock->Descriptor[Index].RegionState
- ));
- }
-
- //
- // Find the largest usable range of SMRAM between 1MB and 4GB
- //
- for (Index = 0, MaxIndex = 0, Size = 0; Index < DescriptorBlock->NumberOfSmmReservedRegions; Index++) {
- //
- // Skip any SMRAM region that is already allocated, needs testing, or needs ECC initialization
- //
- if ((DescriptorBlock->Descriptor[Index].RegionState & (EFI_ALLOCATED | EFI_NEEDS_TESTING | EFI_NEEDS_ECC_INITIALIZATION)) != 0) {
- continue;
- }
- //
- // Skip any SMRAM region below 1MB
- //
- if (DescriptorBlock->Descriptor[Index].CpuStart < BASE_1MB) {
- continue;
- }
- //
- // Skip any SMRAM region that is above 4GB or crosses the 4GB boundary
- //
- if ((DescriptorBlock->Descriptor[Index].CpuStart + DescriptorBlock->Descriptor[Index].PhysicalSize) >= BASE_4GB) {
- continue;
- }
- //
- // Cache the largest SMRAM region index
- //
- if (DescriptorBlock->Descriptor[Index].PhysicalSize >= DescriptorBlock->Descriptor[MaxIndex].PhysicalSize) {
- MaxIndex = Index;
- }
- }
-
- //
- // Find the extent of the contiguous SMRAM region that surrounds the largest usable SMRAM range
- //
- Base = DescriptorBlock->Descriptor[MaxIndex].CpuStart;
- Size = DescriptorBlock->Descriptor[MaxIndex].PhysicalSize;
- for (Index = 0; Index < DescriptorBlock->NumberOfSmmReservedRegions; Index++) {
- if (DescriptorBlock->Descriptor[Index].CpuStart < Base &&
- Base == (DescriptorBlock->Descriptor[Index].CpuStart + DescriptorBlock->Descriptor[Index].PhysicalSize)) {
- Base = DescriptorBlock->Descriptor[Index].CpuStart;
- Size += DescriptorBlock->Descriptor[Index].PhysicalSize;
- } else if ((Base + Size) == DescriptorBlock->Descriptor[Index].CpuStart) {
- Size += DescriptorBlock->Descriptor[Index].PhysicalSize;
- }
- }
-
- //
- // Round SMRAM region up to nearest power of 2 that is at least 4KB
- //
- NewSize = MAX (LShiftU64 (1, HighBitSet64 (Size - 1) + 1), SIZE_4KB);
- if ((Base & ~(NewSize - 1)) != Base) {
- //
- // SMRAM region Base Address has smaller alignment than SMRAM region Size
- // This is not compatible with SMRR settings
- //
- DEBUG((DEBUG_ERROR, "ERROR: SMRAM Region Size has larger alignment than SMRAM Region Base\n"));
- DEBUG((DEBUG_ERROR, " SMRAM Region Base=%016lx Size=%016lx\n", Base, NewSize));
- ASSERT (FALSE);
- } else if (Size != NewSize) {
- //
- // See if the size difference can be added to an adjacent descriptor that is already allocated
- //
- for (Index = 0; Index < DescriptorBlock->NumberOfSmmReservedRegions; Index++) {
- if ((DescriptorBlock->Descriptor[Index].CpuStart + DescriptorBlock->Descriptor[Index].PhysicalSize) == (Base + Size)) {
- if (((DescriptorBlock->Descriptor[Index].RegionState) & EFI_ALLOCATED) != 0) {
- DescriptorBlock->Descriptor[Index].PhysicalSize += (NewSize - Size);
- Size = NewSize;
- break;
- }
- }
- }
-
- if (Size != NewSize) {
- //
- // Add an allocated descriptor to the SMM PEI SMRAM Memory Reserved HOB to accomodate the larger size.
- //
- Index = DescriptorBlock->NumberOfSmmReservedRegions;
- NewDescriptorBlock = (EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *)BuildGuidHob (
- &gEfiSmmPeiSmramMemoryReserveGuid,
- sizeof (EFI_SMRAM_HOB_DESCRIPTOR_BLOCK) + ((Index + 1) * sizeof (EFI_SMRAM_DESCRIPTOR))
- );
- ASSERT (NewDescriptorBlock != NULL);
-
- //
- // Copy old EFI_SMRAM_HOB_DESCRIPTOR_BLOCK to new allocated region
- //
- CopyMem (
- NewDescriptorBlock,
- DescriptorBlock,
- sizeof (EFI_SMRAM_HOB_DESCRIPTOR_BLOCK) + (Index * sizeof (EFI_SMRAM_DESCRIPTOR))
- );
-
- //
- // Make sure last descriptor in NewDescriptorBlock contains last descriptor from DescriptorBlock
- //
- CopyMem (
- &NewDescriptorBlock->Descriptor[Index],
- &NewDescriptorBlock->Descriptor[Index - 1],
- sizeof (EFI_SMRAM_DESCRIPTOR)
- );
-
- //
- // Fill next to last descriptor with an allocated descriptor that aligns the total size of SMRAM
- //
- NewDescriptorBlock->Descriptor[Index - 1].CpuStart = Base + Size;
- NewDescriptorBlock->Descriptor[Index - 1].PhysicalStart = Base + Size;
- NewDescriptorBlock->Descriptor[Index - 1].PhysicalSize = NewSize - Size;
- NewDescriptorBlock->Descriptor[Index - 1].RegionState = DescriptorBlock->Descriptor[MaxIndex].RegionState | EFI_ALLOCATED;
- NewDescriptorBlock->NumberOfSmmReservedRegions++;
-
- //
- // Invalidate the original gEfiSmmPeiSmramMemoryReserveGuid HOB
- //
- ZeroMem (&Hob.Guid->Name, sizeof (&Hob.Guid->Name));
- }
-
- Hob.Raw = GetFirstGuidHob (&gEfiSmmPeiSmramMemoryReserveGuid);
- DescriptorBlock = GET_GUID_HOB_DATA (Hob.Raw);
- DEBUG ((DEBUG_INFO, "SMM PEI SMRAM Memory Reserved HOB - Updated\n"));
- for (Index = 0; Index < DescriptorBlock->NumberOfSmmReservedRegions; Index++) {
- DEBUG((DEBUG_INFO, " SMRAM Descriptor[%02x]: Start=%016lx Size=%016lx State=%02x\n",
- Index,
- DescriptorBlock->Descriptor[Index].PhysicalStart,
- DescriptorBlock->Descriptor[Index].PhysicalSize,
- DescriptorBlock->Descriptor[Index].RegionState
- ));
- }
- }
- }
//
// Initialize SmbusPolicy PPI
@@ -1118,45 +954,6 @@ PlatformEarlyInitEntry (
return Status;
}
-/**
-
- Return the mainblockcompact Fv.
-
- @param FvNumber Our enumeration of the firmware volumes we care about.
-
- @param FvAddress Base Address of the memory containing the firmware volume
-
- @retval EFI_SUCCESS
- @retval EFI_NOT_FOUND
-
-**/
-EFI_STATUS
-EFIAPI
-FindFv (
- IN EFI_PEI_FIND_FV_PPI *This,
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN OUT UINT8 *FvNumber,
- OUT EFI_FIRMWARE_VOLUME_HEADER **FVAddress
- )
-{
- //
- // At present, we only have one Fv to search
- //
- if (*FvNumber == 0) {
- *FvNumber = 1;
- *FVAddress = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)FixedPcdGet32 (PcdFlashFvMainBase);
- return EFI_SUCCESS;
- }
- else if (*FvNumber == 1) {
- *FvNumber = 2;
- *FVAddress = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)FixedPcdGet32 (PcdFlashFvRecovery2Base);
- return EFI_SUCCESS;
- }
- else { // Not the one Fv we care about
- return EFI_NOT_FOUND;
- }
-}
-
EFI_STATUS
EFIAPI
CpuOnlyReset (
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
index 29749277d7..9631d49a84 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
PlatformEarlyInit.h
@@ -30,7 +28,7 @@ Abstract:
#define _EFI_PLATFORM_EARLY_INIT_H_
#define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
-#include <FrameworkPei.h>
+#include <PiPei.h>
#include "PlatformBaseAddresses.h"
#include "PchAccess.h"
#include "VlvAccess.h"
@@ -43,7 +41,6 @@ Abstract:
#include <Guid/PlatformInfo.h>
#include <Guid/SetupVariable.h>
#include <Ppi/AtaController.h>
-#include <Ppi/FindFv.h>
#include <Ppi/BootInRecoveryMode.h>
#include <Ppi/ReadOnlyVariable2.h>
#include <Ppi/Capsule.h>
@@ -60,7 +57,6 @@ Abstract:
#include <IndustryStandard/Pci22.h>
#include <Ppi/Speaker.h>
-#include <Guid/FirmwareFileSystem.h>
#include <Guid/MemoryTypeInformation.h>
#include <Ppi/Cache.h>
#include <Ppi/Smbus.h>
@@ -73,12 +69,10 @@ Abstract:
#include <Guid/GlobalVariable.h>
#include <Ppi/RecoveryModule.h>
#include <Ppi/DeviceRecoveryModule.h>
-#include <Guid/Capsule.h>
#include <Guid/RecoveryDevice.h>
#include <Ppi/MasterBootMode.h>
#include <Guid/PlatformCpuInfo.h>
#include <Guid/OsSelection.h>
-#include <Guid/SmramMemoryReserve.h>
#include <Register/Msr.h>
#define SMC_LAN_ON 0x46
@@ -1379,15 +1373,6 @@ CheckIfJumperSetForRecovery(
VOID
);
-EFI_STATUS
-EFIAPI
-FindFv (
- IN EFI_PEI_FIND_FV_PPI *This,
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN OUT UINT8 *FvNumber,
- OUT EFI_FIRMWARE_VOLUME_HEADER **FVAddress
- );
-
BOOLEAN
IsA16Inverted (
);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf
index 54277b1e8b..eeb9a4a023 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf
@@ -1,10 +1,8 @@
#
#
-# Copyright (c) 1999 - 2016, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
#
# Module Name:
#
@@ -17,13 +15,13 @@
#--*/
[defines]
-INF_VERSION = 0x00010005
-BASE_NAME = PlatformEarlyInit
-FILE_GUID = 0A5EA2E1-BE0B-44a0-A775-F429C9A018A0
-MODULE_TYPE = PEIM
-VERSION_STRING = 1.0
-PI_SPECIFICATION_VERSION = 0x0001000A
-ENTRY_POINT = PlatformEarlyInitEntry
+INF_VERSION = 0x00010005
+BASE_NAME = PlatformEarlyInit
+FILE_GUID = 0A5EA2E1-BE0B-44a0-A775-F429C9A018A0
+MODULE_TYPE = PEIM
+VERSION_STRING = 1.0
+PI_SPECIFICATION_VERSION = 0x0001000A
+ENTRY_POINT = PlatformEarlyInitEntry
[sources.common]
BootMode.c
@@ -44,19 +42,15 @@ [Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2SocBinPkg/Vlv2SocBinPkg.dec
UefiCpuPkg/UefiCpuPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
[LibraryClasses]
PeimEntryPoint
DebugLib
HobLib
IoLib
-# PeiKscLib
MultiPlatformLib
PcdLib
PchPlatformLib
@@ -71,14 +65,12 @@ [Ppis]
gEfiPeiResetPpiGuid
gEfiEndOfPeiSignalPpiGuid
gPeiSmbusPolicyPpiGuid
- gEfiFindFvPpiGuid
gPeiCapsulePpiGuid
gEfiPeiBootInRecoveryModePpiGuid
gEfiPeiRecoveryModulePpiGuid
gEfiPeiDeviceRecoveryModulePpiGuid
gPeiCachePpiGuid
gEfiPeiMasterBootModePpiGuid
- gEfiPeiSmbusPpiGuid
gPchInitPpiGuid
gPchUsbPolicyPpiGuid
@@ -96,7 +88,6 @@ [Guids]
gEfiNormalSetupGuid
gEfiMemoryTypeInformationGuid
gOsSelectionVariableGuid
- gEfiSmmPeiSmramMemoryReserveGuid
[Pcd.common]
gPlatformModuleTokenSpaceGuid.PcdFlashFvMainBase
@@ -111,7 +102,7 @@ [Pcd.common]
[Pcd]
gEfiVLVTokenSpaceGuid.PcdMeasuredBootEnable
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootState
+ gPlatformModuleTokenSpaceGuid.PcdBootState
[Depex]
gEfiPeiReadOnlyVariable2PpiGuid AND gPeiCachePpiGuid
--git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
index 283993b44c..a533f3918c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
**/
#ifndef __COMMON_HEADER_H_
@@ -13,18 +11,15 @@
-#include <FrameworkPei.h>
+#include <PiPei.h>
#include <IndustryStandard/SmBus.h>
#include <IndustryStandard/Pci22.h>
#include <Ppi/AtaController.h>
-#include <Guid/Capsule.h>
-#include <Ppi/Cache.h>
#include <Ppi/MasterBootMode.h>
#include <Guid/MemoryTypeInformation.h>
#include <Guid/RecoveryDevice.h>
#include <Ppi/ReadOnlyVariable2.h>
-#include <Ppi/FvLoadFile.h>
#include <Ppi/DeviceRecoveryModule.h>
#include <Ppi/Capsule.h>
#include <Ppi/Reset.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/MemoryCallback.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/MemoryCallback.c
index 7dcc2c3ce9..1932aa7125 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/MemoryCallback.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/MemoryCallback.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
This file includes a memory call back function notified when MRC is done,
following action is performed in this file,
1. ICH initialization after MRC.
@@ -21,7 +18,6 @@
#include "CommonHeader.h"
#include "Platform.h"
-#include <Ppi/Cache.h>
#include <Library/BaseCryptLib.h>
#include <Library/PciLib.h>
#include "VlvAccess.h"
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
index eba1dfff30..aa03f6ea95 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
**/
@@ -816,15 +813,6 @@ PeiInitPlatform (
sizeof (EFI_PLATFORM_INFO_HOB)
);
-
-#ifdef FTPM_ENABLE
- Status = FtpmPolicyInit(PeiServices, &SystemConfiguration);
- if (EFI_ERROR (Status)) {
- DEBUG((EFI_D_ERROR, "fTPM init failed.\n"));
- }
-#endif
-
-
//
// Set the new boot mode for MRC
//
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
index c976273ce3..28a5274c40 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
@@ -1,9 +1,9 @@
#
#
-# Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
+#
#
# This PEIM includes 3 parts, pre memory initialization, MRC
# wrapper and post memory initialization.
@@ -63,9 +63,7 @@ [Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- Vlv2SocBinPkg/Vlv2SocBinPkg.dec
UefiCpuPkg/UefiCpuPkg.dec
CryptoPkg/CryptoPkg.dec
@@ -89,14 +87,11 @@ [Ppis]
gEfiPeiReadOnlyVariable2PpiGuid
gEfiPeiResetPpiGuid
gEfiEndOfPeiSignalPpiGuid
- gEfiFindFvPpiGuid
gPeiCapsulePpiGuid
gEfiPeiBootInRecoveryModePpiGuid
gEfiPeiRecoveryModulePpiGuid
gEfiPeiDeviceRecoveryModulePpiGuid
- gPeiCachePpiGuid
gEfiPeiMasterBootModePpiGuid
- gEfiPeiSmbusPpiGuid
gPeiMfgMemoryTestPpiGuid
gPeiSha256HashPpiGuid
gVlvMmioPolicyPpiGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index 4653f63a66..9951aa4a58 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -2,14 +2,9 @@
# Platform Package
#
# This package provides platform specific modules.
-# Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>
#
-
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-
-#
#
#**/
@@ -66,9 +61,6 @@ [Protocols]
gEfiActiveBiosProtocolGuid = { 0xebbe2d1b, 0x1647, 0x4bda, { 0xab, 0x9a, 0x78, 0x63, 0xe3, 0x96, 0xd4, 0x1a } }
gEfiPlatformCpuProtocolGuid = { 0xbd26cdc9, 0xa092, 0x462a, { 0x87, 0x7a, 0x5a, 0xb6, 0xad, 0xce, 0x48, 0x12 } }
gDxePchPlatformPolicyProtocolGuid = { 0x4b0165a9, 0x61d6, 0x4e23, { 0xa0, 0xb5, 0x3e, 0xc7, 0x9c, 0x2e, 0x30, 0xd5 } }
- gEfiTpmMpDriverProtocolGuid = { 0xde161cfe, 0x1e60, 0x42a1, { 0x8c, 0xc3, 0xee, 0x7e, 0xf0, 0x73, 0x52, 0x12 } }
- gEfiLpcWpce791PolicyProtocolGuid = { 0xab2bee2f, 0xc1a6, 0x4399, { 0x85, 0x3d, 0xc0, 0x7c, 0x77, 0x4f, 0xfd, 0x0d } }
- gUsbPolicyGuid = { 0xf617b358, 0x12cf, 0x414a, { 0xa0, 0x69, 0x60, 0x67, 0x7b, 0xda, 0x13, 0xb4 } }
gEfiSpeakerInterfaceProtocolGuid = { 0x400b4476, 0x3081, 0x11d6, { 0x87, 0xed, 0x00, 0x06, 0x29, 0x45, 0xc3, 0xb9 } }
gDxeVlvPlatformPolicyGuid = { 0x5bab88ba, 0xe0e2, 0x4674, { 0xb6, 0xad, 0xb8, 0x12, 0xf6, 0x88, 0x1c, 0xd6 } }
gEfiSmbiosSlotPopulationGuid = { 0xef7bf7d6, 0xf8ff, 0x4a76, { 0x82, 0x47, 0xc0, 0xd0, 0xd1, 0xcc, 0x49, 0xc0 } }
@@ -80,9 +72,6 @@ [Protocols]
gEfiPlatformIdeInitProtocolGuid = { 0x377c66a3, 0x8fe7, 0x4ee8, { 0x85, 0xb8, 0xf1, 0xa2, 0x82, 0x56, 0x9e, 0x3b } }
gEfiPciPlatformProtocolGuid = { 0x07d75280, 0x27d4, 0x4d69, { 0x90, 0xd0, 0x56, 0x43, 0xe2, 0x38, 0xb3, 0x41 } }
gEnhancedSpeedstepProtocolGuid = { 0x91a1ddcf, 0x5374, 0x4939, { 0x89, 0x51, 0xd7, 0x29, 0x3f, 0x1a, 0x78, 0x6f } }
- gEfiAcpiSupportProtocolGuid = { 0xdbff9d55, 0x89b7, 0x46da, { 0xbd, 0xdf, 0x67, 0x7d, 0x3d, 0xc0, 0x24, 0x1d } }
- gEfiAcpiS3SaveProtocolGuid = { 0x125f2de1, 0xfb85, 0x440c, { 0xa5, 0x4c, 0x4d, 0x99, 0x35, 0x8a, 0x8d, 0x38 } }
- gEfiCpuIoProtocolGuid = { 0xB0732526, 0x38C8, 0x4b40, { 0x88, 0x77, 0x61, 0xC7, 0xB0, 0x6A, 0xAC, 0x45 } }
gPlatformGOPPolicyGuid = { 0xec2e931b, 0x3281, 0x48a5, { 0x81, 0x07, 0xdf, 0x8a, 0x8b, 0xed, 0x3c, 0x5d } }
gEfiGopDisplayBrightnessProtocolGuid = { 0x6ff23f1d, 0x877c, 0x4b1b, { 0x93, 0xfc, 0xf1, 0x42, 0xb2, 0xee, 0xa6, 0xa7 } }
gEfiUsbKeyboardConnectGuid = { 0xad9c4381, 0x1ede, 0x430c, { 0x8d, 0x42, 0x23, 0x76, 0x7c, 0x46, 0x5d, 0x52 } }
@@ -130,9 +119,6 @@ [PcdsFixedAtBuild]
gEfiPchTokenSpaceGuid.PcdPchAcpiIoPortBaseAddress|0x400|UINT16|0x0000000B
- ## FFS filename to find the shell application.
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0xB7, 0xD6, 0x7A, 0xC5, 0x15, 0x05, 0xA8, 0x40, 0x9D, 0x21, 0x55, 0x16, 0x52, 0x85, 0x4E, 0x37 }|VOID*|0x40000004
-
gEfiIchTokenSpaceGuid.PcdPeiIchUhciControllerIoPortBaseAddress|0x4000|UINT16|0x30000017
gEfiIchTokenSpaceGuid.PcdPeiIchEhciControllerMemoryBaseAddress|0xFC000000|UINT32|0x30000019
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index 5827386977..87b905c95b 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -9,45 +9,34 @@
#**/
[Defines]
-DEFINE FLASH_BASE = 0xFFC00000 #The base address of the 4Mb FLASH Device.
-DEFINE FLASH_SIZE = 0x00400000 #The flash size in bytes of the 4Mb FLASH Device.
+DEFINE FLASH_BASE = 0xFF800000 #The base address of the 4Mb FLASH Device.
+DEFINE FLASH_SIZE = 0x00800000 #The flash size in bytes of the 4Mb FLASH Device.
DEFINE FLASH_BLOCK_SIZE = 0x1000 #The block size in bytes of the 4Mb FLASH Device.
-DEFINE FLASH_NUM_BLOCKS = 0x400 #The number of blocks in 4Mb FLASH Device.
+DEFINE FLASH_NUM_BLOCKS = 0x800 #The number of blocks in 4Mb FLASH Device.
DEFINE FLASH_AREA_BASE_ADDRESS = 0xFF800000
DEFINE FLASH_AREA_SIZE = 0x00800000
-DEFINE FLASH_REGION_VLVMICROCODE_OFFSET = 0x00000000
+DEFINE FLASH_REGION_VLVMICROCODE_OFFSET = 0x00400000
DEFINE FLASH_REGION_VLVMICROCODE_SIZE = 0x00040000
DEFINE FLASH_REGION_VLVMICROCODE_BASE = 0xFFC00000
-DEFINE FLASH_REGION_VPD_OFFSET = 0x00040000
+DEFINE FLASH_REGION_VPD_OFFSET = 0x00440000
DEFINE FLASH_REGION_VPD_SIZE = 0x0003E000
-DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_OFFSET = 0x0007E000
+DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_OFFSET = 0x0047E000
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_SIZE = 0x00002000
-DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET = 0x00080000
+DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET = 0x00480000
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_SIZE = 0x00040000
-!if $(MINNOW2_FSP_BUILD) == TRUE
-DEFINE FLASH_REGION_FSPBIN_OFFSET = 0x000C0000
-DEFINE FLASH_REGION_FSPBIN_SIZE = 0x00048000
-DEFINE FLASH_REGION_FSPBIN_BASE = 0xFFCC0000
-
-DEFINE FLASH_REGION_AZALIABIN_OFFSET = 0x00108000
-DEFINE FLASH_REGION_AZALIABIN_SIZE = 0x00008000
-DEFINE FLASH_REGION_AZALIABIN_BASE = 0xFFD08000
-
-!endif
-
-DEFINE FLASH_REGION_FVMAIN_OFFSET = 0x00110000
+DEFINE FLASH_REGION_FVMAIN_OFFSET = 0x00510000
DEFINE FLASH_REGION_FVMAIN_SIZE = 0x00210000
-DEFINE FLASH_REGION_FV_RECOVERY2_OFFSET = 0x00320000
+DEFINE FLASH_REGION_FV_RECOVERY2_OFFSET = 0x00720000
DEFINE FLASH_REGION_FV_RECOVERY2_SIZE = 0x00070000
-DEFINE FLASH_REGION_FV_RECOVERY_OFFSET = 0x00390000
+DEFINE FLASH_REGION_FV_RECOVERY_OFFSET = 0x00790000
DEFINE FLASH_REGION_FV_RECOVERY_SIZE = 0x00070000
################################################################################
@@ -79,17 +68,6 @@ [FD.Vlv]
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE) + 0x60
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE) - 0x60
-!if $(MINNOW2_FSP_BUILD) == TRUE
-# put below PCD value setting into dsc file
-#SET gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE)
-#SET gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset = 0x60
-#SET gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress = $(FLASH_AREA_BASE_ADDRESS)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize = $(FLASH_AREA_SIZE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase = $(FLASH_REGION_FSPBIN_BASE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize = $(FLASH_REGION_FSPBIN_SIZE)
-
-!endif
################################################################################
#
# Following are lists of FD Region layout which correspond to the locations of different
@@ -106,6 +84,13 @@ [FD.Vlv]
# Fv Size can be adjusted; FVMAIN_COMPACT can be reduced to 0x120000, and FV_RECOVERY can be enlarged to 0x80000
#
################################################################################
+
+ #
+ # IFWI Header
+ #
+0x0000|0x1000
+FILE=Vlv2TbltDevicePkg/Stitch/IFWIHeader/IFWI_HEADER.bin
+
#
# CPU Microcodes
#
@@ -173,18 +158,6 @@ [FD.Vlv]
$(FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET)|$(FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_SIZE)
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
-!if $(MINNOW2_FSP_BUILD) == TRUE
-
- $(FLASH_REGION_FSPBIN_OFFSET)|$(FLASH_REGION_FSPBIN_SIZE)
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase|gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize
- FILE = Vlv2SocBinPkg/FspBinary/FvFsp.bin
-
-
- $(FLASH_REGION_AZALIABIN_OFFSET)|$(FLASH_REGION_AZALIABIN_SIZE)
- FILE = Vlv2TbltDevicePkg/FspAzaliaConfigData/AzaliaConfig.bin
-
-!endif
-
#
# Main Block
#
@@ -258,7 +231,7 @@ [FV.FVRECOVERY_COMPONENTS]
READ_LOCK_CAP = TRUE
READ_LOCK_STATUS = TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
INF MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
INF MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
INF MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
@@ -299,28 +272,22 @@ [FV.FVRECOVERY2]
-INF $(PLATFORM_PACKAGE)/PlatformInitPei/PlatformInitPei.inf
+INF Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
INF UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MpS3.inf
-!endif
+INF UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf
-# INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PiSmmCommunicationPei.inf
!if $(TPM_ENABLED) == TRUE
INF SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf
INF SecurityPkg/Tcg/TcgPei/TcgPei.inf
INF SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf
!endif
-!if $(FTPM_ENABLE) == TRUE
-INF SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf #use PCD config
-!endif
INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
!if $(ACPI50_ENABLE) == TRUE
@@ -359,31 +326,15 @@ [FV.FVRECOVERY]
READ_LOCK_STATUS = TRUE
FvNameGuid = B73FE497-B92E-416e-8326-45AD0D270091
-
-!if $(MINNOW2_FSP_BUILD) == TRUE
-INF IntelFspWrapperPkg/FspWrapperSecCore/FspWrapperSecCore.inf
-!else
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
-!endif
-
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
INF MdeModulePkg/Core/Pei/PeiMain.inf
-!if $(MINNOW2_FSP_BUILD) == TRUE
-INF Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
-INF IntelFspWrapperPkg/FspInitPei/FspInitPei.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
INF MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
-INF $(PLATFORM_PACKAGE)/PlatformPei/PlatformPei.inf
+INF Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf
-!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
!if $(SOURCE_DEBUG_ENABLE) == TRUE
INF SourceLevelDebugPkg/DebugAgentPei/DebugAgentPei.inf
@@ -397,12 +348,10 @@ [FV.FVRECOVERY]
!endif
!endif
-!if $(MINNOW2_FSP_BUILD) == FALSE
!if $(PCIESC_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf
!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf
INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf
@@ -440,10 +389,6 @@ [FV.FVMAIN]
# EDK II Related Platform codes
#
- !if $(MINNOW2_FSP_BUILD) == TRUE
- INF IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.inf
- !endif
-
INF MdeModulePkg/Core/Dxe/DxeMain.inf
INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
!if $(ACPI50_ENABLE) == TRUE
@@ -452,14 +397,14 @@ [FV.FVMAIN]
!endif
-INF IntelFrameworkModulePkg/Universal/CpuIoDxe/CpuIoDxe.inf
INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
INF MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
INF MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf
INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
INF UefiCpuPkg/CpuDxe/CpuDxe.inf
-INF $(PLATFORM_PACKAGE)/Metronome/Metronome.inf
+INF UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
+INF MdeModulePkg/Universal/Metronome/Metronome.inf
INF IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
!if $(ARCH) == IA32
INF USE=IA32 MdeModulePkg/Logo/Logo.inf
@@ -469,13 +414,12 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
-INF IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf
INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf
INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
-INF $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbSmm.inf
+INF Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbSmm.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
!if $(SECURE_BOOT_ENABLE)
INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf
!endif
@@ -485,89 +429,62 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
INF PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
-INF $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbRuntimeDxe.inf
+INF Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbRuntimeDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformSetupDxe/PlatformSetupDxe.inf
+INF Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
!if $(DATAHUB_ENABLE) == TRUE
INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf
!endif
-INF IntelFrameworkModulePkg/Universal/StatusCode/DatahubStatusCodeHandlerDxe/DatahubStatusCodeHandlerDxe.inf
INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
#
# EDK II Related Silicon codes
#
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
-!if $(USE_HPET_TIMER) == TRUE
INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
-!else
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmartTimer.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/IntelPchLegacyInterrupt.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
!if $(PCIESC_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
-!else
-INF IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf
-INF Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
-!endif
-!if $(MINNOW2_FSP_BUILD) == FALSE
- !if $(SEC_ENABLE) == TRUE
- INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/HeciDrv.inf
- INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SeCPolicyInitDxe.inf
- !endif
-!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
!if $(TPM_ENABLED) == TRUE
INF SecurityPkg/Tcg/TcgConfigDxe/TcgConfigDxe.inf
INF SecurityPkg/Tcg/TcgDxe/TcgDxe.inf
INF RuleOverride = DRIVER_ACPITABLE SecurityPkg/Tcg/TcgSmm/TcgSmm.inf
!endif
-!if $(FTPM_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/Tpm2DeviceSeCPei.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Tpm2DeviceSeCDxe.inf
-INF SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
-INF SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/FtpmSmm.inf
-!endif
#
# EDK II Related Platform codes
#
-INF $(PLATFORM_PACKAGE)/PlatformSmm/PlatformSmm.inf
-INF $(PLATFORM_PACKAGE)/PlatformInfoDxe/PlatformInfoDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformDxe/PlatformDxe.inf
-INF $(PLATFORM_PACKAGE)/PciPlatform/PciPlatform.inf
-INF $(PLATFORM_PACKAGE)/SaveMemoryConfig/SaveMemoryConfig.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
-INF $(PLATFORM_PACKAGE)/PpmPolicy/PpmPolicy.inf
-INF $(PLATFORM_PACKAGE)/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+INF Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
+INF Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
+INF Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+INF Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+INF Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+INF Vlv2TbltDevicePkg/SaveMemoryConfig/SaveMemoryConfig.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
+INF Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
!if $(GOP_DRIVER_ENABLE) == TRUE
- INF $(PLATFORM_PACKAGE)/PlatformGopPolicy/PlatformGopPolicy.inf
+ INF Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
FILE DRIVER = FF0C8745-3270-4439-B74F-3E45F8C77064 {
SECTION DXE_DEPEX_EXP = {gPlatformGOPPolicyGuid}
SECTION PE32 = Vlv2SocBinPkg/GOP/7.2.1011/RELEASE_VS2008x86/$(DXE_ARCHITECTURE)/IntelGopDriver.efi
@@ -575,7 +492,7 @@ [FV.FVMAIN]
}
!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
#
# SMM
#
@@ -586,25 +503,22 @@ [FV.FVMAIN]
INF UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
INF MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
INF UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
-INF $(PLATFORM_PACKAGE)/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
-#
-# Remove the following two SMM binary modules that prevent platform from booting to UEFI Shell
-#
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/GraphicDxeInitSmm.inf
#
# ACPI
#
INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
-INF $(PLATFORM_PACKAGE)/BootScriptSaveDxe/BootScriptSaveDxe.inf
+INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
INF IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
INF RuleOverride = ACPITABLE2 Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
-INF RuleOverride = ACPITABLE $(PLATFORM_RC_PACKAGE)/AcpiTablesPCAT/AcpiTables.inf
+INF RuleOverride = ACPITABLE Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
-INF $(PLATFORM_PACKAGE)/AcpiPlatform/AcpiPlatform.inf
+INF Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
@@ -613,26 +527,17 @@ [FV.FVMAIN]
#
INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
#
# ISA
#
-INF $(PLATFORM_PACKAGE)/Wpce791/Wpce791.inf
-INF IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
-INF IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
+INF Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
!if $(SOURCE_DEBUG_ENABLE) != TRUE
INF IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
!endif
-#INF IntelFrameworkModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
-#INF IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-#
-# SDIO
-#
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcHost.inf
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcMediaDevice.inf
#
# IDE/SCSI/AHCI
#
@@ -642,7 +547,7 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
!if $(SATA_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
#
#
@@ -659,7 +564,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
INF MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
-INF IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf
INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
@@ -682,9 +586,9 @@ [FV.FVMAIN]
# SMBIOS
#
INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
-INF $(PLATFORM_PACKAGE)/SmBiosMiscDxe/SmBiosMiscDxe.inf
+INF Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
@@ -719,8 +623,14 @@ [FV.FVMAIN]
!if $(NETWORK_ENABLE) == TRUE
FILE DRIVER = 22DE1691-D65D-456a-993E-A253DD1F308C {
SECTION PE32 = Vlv2SocBinPkg/UNDI/RtkUndiDxe/$(DXE_ARCHITECTURE)/RtkUndiDxe.efi
- SECTION UI = "UNDI"
+ SECTION UI = "RtkUndiDxe"
}
+ !if $(DXE_ARCHITECTURE) == "X64"
+ FILE DRIVER = 7C7467E9-8BB3-4BF1-8694-6FED7D25D13E {
+ SECTION PE32 = Vlv2SocBinPkg/UNDI/I211PcieUndiDxe/$(DXE_ARCHITECTURE)/E7006X3.EFI
+ SECTION UI = "E7006X3"
+ }
+ !endif
!endif
!if $(CAPSULE_ENABLE)
@@ -908,7 +818,7 @@ [Rule.Common.UEFI_DRIVER.BINARY]
[Rule.Common.UEFI_DRIVER.NATIVE_BINARY]
FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(WORKSPACE)/$(PLATFORM_PACKAGE)/IntelGopDepex/IntelGopDriver.depex
+ DXE_DEPEX DXE_DEPEX Optional $(WORKSPACE)/Vlv2TbltDevicePkg/IntelGopDepex/IntelGopDriver.depex
PE32 PE32 |.efi
UI STRING="$(MODULE_NAME)" Optional
VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
index 61eca30be1..d5068b514c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
@@ -1,11 +1,9 @@
#/** @file
# platform configuration file.
#
-# Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
-#
+# Copyright (c) 2012 - 2019, Intel Corporation. All rights reserved.<BR>
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
#
#**/
@@ -13,12 +11,6 @@
# TRUE is ENABLE. FASLE is DISABLE.
#
-#
-# FSP selection
-#
-DEFINE MINNOW2_FSP_BUILD = FALSE
-
-
DEFINE SCSI_ENABLE = TRUE
@@ -31,14 +23,6 @@
# Feature selection
#
-#
-# Select system timer which is used to produce Timer Arch Protocol:
-# TRUE - HPET timer is used.
-# FALSE - 8254 timer is used.
-#
-DEFINE USE_HPET_TIMER = TRUE
-
-
#
# Feature selection
#
@@ -65,7 +49,6 @@
DEFINE GOP_DRIVER_ENABLE = TRUE
DEFINE DATAHUB_ENABLE = TRUE
-DEFINE DATAHUB_STATUS_CODE_ENABLE = TRUE
DEFINE USB_ENABLE = TRUE
DEFINE ISA_SERIAL_STATUS_CODE_ENABLE = TRUE
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index a6859d3b6d..110efe28c3 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -30,17 +30,6 @@ [Defines]
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET = 0x00080000
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_SIZE = 0x00040000
-!if $(MINNOW2_FSP_BUILD) == TRUE
-DEFINE FLASH_REGION_FSPBIN_OFFSET = 0x000C0000
-DEFINE FLASH_REGION_FSPBIN_SIZE = 0x00048000
-DEFINE FLASH_REGION_FSPBIN_BASE = 0xFFCC0000
-
-DEFINE FLASH_REGION_AZALIABIN_OFFSET = 0x00108000
-DEFINE FLASH_REGION_AZALIABIN_SIZE = 0x00008000
-DEFINE FLASH_REGION_AZALIABIN_BASE = 0xFFD08000
-
-!endif
-
DEFINE FLASH_REGION_FVMAIN_OFFSET = 0x00110000
DEFINE FLASH_REGION_FVMAIN_SIZE = 0x00215000
@@ -79,17 +68,6 @@ [FD.Vlv]
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE) + 0x60
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE) - 0x60
-!if $(MINNOW2_FSP_BUILD) == TRUE
-# put below PCD value setting into dsc file
-#SET gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE)
-#SET gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset = 0x60
-#SET gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress = $(FLASH_AREA_BASE_ADDRESS)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize = $(FLASH_AREA_SIZE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase = $(FLASH_REGION_FSPBIN_BASE)
-#SET gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize = $(FLASH_REGION_FSPBIN_SIZE)
-
-!endif
################################################################################
#
# Following are lists of FD Region layout which correspond to the locations of different
@@ -129,18 +107,6 @@ [FD.Vlv]
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
FILE = Vlv2TbltDevicePkg/Stitch/Gcc/NvStorageFtwSpare.bin
-!if $(MINNOW2_FSP_BUILD) == TRUE
-
- $(FLASH_REGION_FSPBIN_OFFSET)|$(FLASH_REGION_FSPBIN_SIZE)
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase|gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize
- FILE = Vlv2SocBinPkg/FspBinary/FvFsp.bin
-
-
- $(FLASH_REGION_AZALIABIN_OFFSET)|$(FLASH_REGION_AZALIABIN_SIZE)
- FILE = Vlv2TbltDevicePkg/FspAzaliaConfigData/AzaliaConfig.bin
-
-!endif
-
#
# Main Block
#
@@ -214,7 +180,7 @@ [FV.FVRECOVERY_COMPONENTS]
READ_LOCK_CAP = TRUE
READ_LOCK_STATUS = TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
INF MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
INF MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
INF MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
@@ -253,30 +219,21 @@ [FV.FVRECOVERY2]
READ_LOCK_STATUS = TRUE
FvNameGuid = B73FE497-B92E-416e-8326-45AD0D270092
-
-
-INF $(PLATFORM_PACKAGE)/PlatformInitPei/PlatformInitPei.inf
-
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
+INF Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
INF UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MpS3.inf
-!endif
+INF UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf
-# INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PiSmmCommunicationPei.inf
!if $(TPM_ENABLED) == TRUE
INF SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf
INF SecurityPkg/Tcg/TcgPei/TcgPei.inf
INF SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf
!endif
-!if $(FTPM_ENABLE) == TRUE
-INF SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf #use PCD config
-!endif
INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
!if $(ACPI50_ENABLE) == TRUE
@@ -315,31 +272,15 @@ [FV.FVRECOVERY]
READ_LOCK_STATUS = TRUE
FvNameGuid = B73FE497-B92E-416e-8326-45AD0D270091
-
-!if $(MINNOW2_FSP_BUILD) == TRUE
-INF IntelFspWrapperPkg/FspWrapperSecCore/FspWrapperSecCore.inf
-!else
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
-!endif
-
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
INF MdeModulePkg/Core/Pei/PeiMain.inf
-!if $(MINNOW2_FSP_BUILD) == TRUE
-INF Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
-INF IntelFspWrapperPkg/FspInitPei/FspInitPei.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
INF MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
-INF $(PLATFORM_PACKAGE)/PlatformPei/PlatformPei.inf
+INF Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf
-!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
!if $(SOURCE_DEBUG_ENABLE) == TRUE
INF SourceLevelDebugPkg/DebugAgentPei/DebugAgentPei.inf
@@ -353,12 +294,10 @@ [FV.FVRECOVERY]
!endif
!endif
-!if $(MINNOW2_FSP_BUILD) == FALSE
!if $(PCIESC_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf
!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf
INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf
@@ -396,10 +335,6 @@ [FV.FVMAIN]
# EDK II Related Platform codes
#
- !if $(MINNOW2_FSP_BUILD) == TRUE
- INF IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.inf
- !endif
-
INF MdeModulePkg/Core/Dxe/DxeMain.inf
INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
!if $(ACPI50_ENABLE) == TRUE
@@ -408,14 +343,14 @@ [FV.FVMAIN]
!endif
-INF IntelFrameworkModulePkg/Universal/CpuIoDxe/CpuIoDxe.inf
INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
INF MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
INF MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf
INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
INF UefiCpuPkg/CpuDxe/CpuDxe.inf
-INF $(PLATFORM_PACKAGE)/Metronome/Metronome.inf
+INF UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
+INF MdeModulePkg/Universal/Metronome/Metronome.inf
INF IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
!if $(ARCH) == IA32
INF USE=IA32 MdeModulePkg/Logo/Logo.inf
@@ -425,13 +360,12 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
-INF IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf
INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf
INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
-INF $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbSmm.inf
+INF Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbSmm.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
!if $(SECURE_BOOT_ENABLE)
INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf
!endif
@@ -441,89 +375,62 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
INF PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
-INF $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbRuntimeDxe.inf
+INF Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbRuntimeDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformSetupDxe/PlatformSetupDxe.inf
+INF Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
!if $(DATAHUB_ENABLE) == TRUE
INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf
!endif
-INF IntelFrameworkModulePkg/Universal/StatusCode/DatahubStatusCodeHandlerDxe/DatahubStatusCodeHandlerDxe.inf
INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
#
# EDK II Related Silicon codes
#
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
-!if $(USE_HPET_TIMER) == TRUE
INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
-!else
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmartTimer.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/IntelPchLegacyInterrupt.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
-!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
!if $(PCIESC_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
-!if $(MINNOW2_FSP_BUILD) == FALSE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
-!else
-INF IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf
-INF Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
-!endif
-!if $(MINNOW2_FSP_BUILD) == FALSE
- !if $(SEC_ENABLE) == TRUE
- INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/HeciDrv.inf
- INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SeCPolicyInitDxe.inf
- !endif
-!endif
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
!if $(TPM_ENABLED) == TRUE
INF SecurityPkg/Tcg/TcgConfigDxe/TcgConfigDxe.inf
INF SecurityPkg/Tcg/TcgDxe/TcgDxe.inf
INF RuleOverride = DRIVER_ACPITABLE SecurityPkg/Tcg/TcgSmm/TcgSmm.inf
!endif
-!if $(FTPM_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/Tpm2DeviceSeCPei.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Tpm2DeviceSeCDxe.inf
-INF SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
-INF SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/FtpmSmm.inf
-!endif
#
# EDK II Related Platform codes
#
-INF $(PLATFORM_PACKAGE)/PlatformSmm/PlatformSmm.inf
-INF $(PLATFORM_PACKAGE)/PlatformInfoDxe/PlatformInfoDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
-INF $(PLATFORM_PACKAGE)/PlatformDxe/PlatformDxe.inf
-INF $(PLATFORM_PACKAGE)/PciPlatform/PciPlatform.inf
-INF $(PLATFORM_PACKAGE)/SaveMemoryConfig/SaveMemoryConfig.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
-INF $(PLATFORM_PACKAGE)/PpmPolicy/PpmPolicy.inf
-INF $(PLATFORM_PACKAGE)/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+INF Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
+INF Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
+INF Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+INF Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+INF Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+INF Vlv2TbltDevicePkg/SaveMemoryConfig/SaveMemoryConfig.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
+INF Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
!if $(GOP_DRIVER_ENABLE) == TRUE
- INF $(PLATFORM_PACKAGE)/PlatformGopPolicy/PlatformGopPolicy.inf
+ INF Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
FILE DRIVER = FF0C8745-3270-4439-B74F-3E45F8C77064 {
SECTION DXE_DEPEX_EXP = {gPlatformGOPPolicyGuid}
SECTION PE32 = Vlv2SocBinPkg/GOP/7.2.1011/RELEASE_VS2008x86/$(DXE_ARCHITECTURE)/IntelGopDriver.efi
@@ -531,7 +438,7 @@ [FV.FVMAIN]
}
!endif
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
#
# SMM
#
@@ -542,25 +449,22 @@ [FV.FVMAIN]
INF UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
INF MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
INF UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
-INF $(PLATFORM_PACKAGE)/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
-#
-# Remove the following two SMM binary modules that prevent platform from booting to UEFI Shell
-#
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/GraphicDxeInitSmm.inf
#
# ACPI
#
INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
-INF $(PLATFORM_PACKAGE)/BootScriptSaveDxe/BootScriptSaveDxe.inf
+INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
INF IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
INF RuleOverride = ACPITABLE2 Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
-INF RuleOverride = ACPITABLE $(PLATFORM_RC_PACKAGE)/AcpiTablesPCAT/AcpiTables.inf
+INF RuleOverride = ACPITABLE Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
-INF $(PLATFORM_PACKAGE)/AcpiPlatform/AcpiPlatform.inf
+INF Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
@@ -569,26 +473,17 @@ [FV.FVMAIN]
#
INF MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
#
# ISA
#
-INF $(PLATFORM_PACKAGE)/Wpce791/Wpce791.inf
-INF IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
-INF IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
+INF Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
!if $(SOURCE_DEBUG_ENABLE) != TRUE
INF IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
!endif
-#INF IntelFrameworkModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
-#INF IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-#
-# SDIO
-#
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcHost.inf
-#INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcMediaDevice.inf
#
# IDE/SCSI/AHCI
#
@@ -598,7 +493,7 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
!if $(SATA_ENABLE) == TRUE
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
#
#
@@ -615,7 +510,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
INF MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
-INF IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf
INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
@@ -638,9 +532,9 @@ [FV.FVMAIN]
# SMBIOS
#
INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
-INF $(PLATFORM_PACKAGE)/SmBiosMiscDxe/SmBiosMiscDxe.inf
+INF Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
-INF RuleOverride = BINARY $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
+INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
@@ -675,8 +569,14 @@ [FV.FVMAIN]
!if $(NETWORK_ENABLE) == TRUE
FILE DRIVER = 22DE1691-D65D-456a-993E-A253DD1F308C {
SECTION PE32 = Vlv2SocBinPkg/UNDI/RtkUndiDxe/$(DXE_ARCHITECTURE)/RtkUndiDxe.efi
- SECTION UI = "UNDI"
+ SECTION UI = "RtkUndiDxe"
}
+ !if $(DXE_ARCHITECTURE) == "X64"
+ FILE DRIVER = 7C7467E9-8BB3-4BF1-8694-6FED7D25D13E {
+ SECTION PE32 = Vlv2SocBinPkg/UNDI/I211PcieUndiDxe/$(DXE_ARCHITECTURE)/E7006X3.EFI
+ SECTION UI = "E7006X3"
+ }
+ !endif
!endif
!if $(CAPSULE_ENABLE)
@@ -786,11 +686,7 @@ [Rule.Common.SEC]
[Rule.Common.SEC.BINARY]
FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED {
PE32 PE32 Align = 8 |.efi
-!if $(MINNOW2_FSP_BUILD) == TRUE
- RAW RAW |.raw
-!else
RAW BIN Align = 16 |.com
-!endif
}
[Rule.Common.PEI_CORE]
@@ -868,7 +764,7 @@ [Rule.Common.UEFI_DRIVER.BINARY]
[Rule.Common.UEFI_DRIVER.NATIVE_BINARY]
FILE DRIVER = $(NAMED_GUID) {
- DXE_DEPEX DXE_DEPEX Optional $(WORKSPACE)/$(PLATFORM_PACKAGE)/IntelGopDepex/IntelGopDriver.depex
+ DXE_DEPEX DXE_DEPEX Optional $(WORKSPACE)/Vlv2TbltDevicePkg/IntelGopDepex/IntelGopDriver.depex
PE32 PE32 |.efi
UI STRING="$(MODULE_NAME)" Optional
VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index 0a57587e82..25d1beb400 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -18,25 +18,11 @@ [Defines]
PLATFORM_GUID = 465B0A0B-7AC1-443b-8F67-7B8DEC145F90
PLATFORM_VERSION = 0.1
DSC_SPECIFICATION = 0x00010005
-
- #
- # Set platform specific package/folder name, same as passed from PREBUILD script.
- # PLATFORM_PACKAGE would be the same as PLATFORM_NAME as well as package build folder
- # DEFINE only takes effect at R9 DSC and FDF.
- #
- DEFINE PLATFORM_PACKAGE = Vlv2TbltDevicePkg
- DEFINE PLATFORM_RC_PACKAGE = Vlv2DeviceRefCodePkg
- DEFINE PLATFORM_BINARY_PACKAGE = Vlv2SocBinPkg
- OUTPUT_DIRECTORY = Build/$(PLATFORM_PACKAGE)
+ OUTPUT_DIRECTORY = Build/Vlv2TbltDevicePkg
SUPPORTED_ARCHITECTURES = IA32|X64
BUILD_TARGETS = DEBUG|RELEASE
SKUID_IDENTIFIER = DEFAULT
- DEFINE CPU_ARCH =ValleyView2
- DEFINE PROJECT_SC_FAMILY =IntelPch
- DEFINE PROJECT_SC_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/SouthCluster
- DEFINE PROJECT_VLV_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/NorthCluster
-
DEFINE RC_BINARY_RELEASE = TRUE
#
# Platform On/Off features are defined here
@@ -47,22 +33,18 @@ [Defines]
# 3.BayleyBay
# ENBDT_PF_ENABLE = TRUE
#
- !include $(PLATFORM_PACKAGE)/AutoPlatformCFG.txt
- !include $(PLATFORM_PACKAGE)/PlatformPkgConfig.dsc
+ !include Vlv2TbltDevicePkg/AutoPlatformCFG.txt
+ !include Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
DEFINE PLATFORMX64_ENABLE = TRUE
!if $(X64_CONFIG) == TRUE
DEFINE DXE_ARCHITECTURE = X64
- DEFINE EDK_DXE_ARCHITECTURE = X64
- DEFINE UNDI_DXE_ARCHITECTURE = 64
!else
DEFINE DXE_ARCHITECTURE = IA32
- DEFINE EDK_DXE_ARCHITECTURE = Ia32
- DEFINE UNDI_DXE_ARCHITECTURE = 32
!endif
- FLASH_DEFINITION = $(PLATFORM_PACKAGE)/PlatformPkgGcc.fdf
+ FLASH_DEFINITION = Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
!if $(LFMA_ENABLE) == TRUE
FIX_LOAD_TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
DEFINE TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
@@ -73,10 +55,6 @@ [Defines]
DEFINE PLATFORM_PCIEXPRESS_BASE = 0E0000000
- DEFINE SEC_ENABLE = FALSE
- DEFINE SEC_DEBUG_INFO_ENABLE = FALSE
- DEFINE FTPM_ENABLE = FALSE
-
################################################################################
#
# SKU Identification section - list of all SKU IDs supported by this
@@ -100,7 +78,6 @@ [LibraryClasses.common]
DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
- DxeSmmDriverEntryPoint|IntelFrameworkPkg/Library/DxeSmmDriverEntryPoint/DxeSmmDriverEntryPoint.inf
#
# Basic
@@ -144,8 +121,7 @@ [LibraryClasses.common]
GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLib.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
#
# Framework
@@ -168,10 +144,6 @@ [LibraryClasses.common]
UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
!endif
-!if $(S3_ENABLE) == TRUE
- S3Lib|IntelFrameworkModulePkg/Library/PeiS3Lib/PeiS3Lib.inf
-!endif
-
OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
!if $(CAPSULE_ENABLE) == TRUE
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
@@ -199,27 +171,27 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|$(PLATFORM_PACKAGE)/Library/SmbusLib/SmbusLib.inf
- SmmLib|$(PLATFORM_PACKAGE)/Library/PchSmmLib/PchSmmLib.inf
+ SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
# Platform
#
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
- ResetSystemLib|$(PLATFORM_PACKAGE)/Library/ResetSystemLib/ResetSystemLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ ResetSystemLib|Vlv2TbltDevicePkg/Library/ResetSystemLib/ResetSystemLib.inf
- PlatformCmosLib|$(PLATFORM_PACKAGE)/Library/PlatformCmosLib/PlatformCmosLib.inf
+ PlatformCmosLib|Vlv2TbltDevicePkg/Library/PlatformCmosLib/PlatformCmosLib.inf
#
# Misc
#
- MonoStatusCodeLib|$(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf
+ MonoStatusCodeLib|Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
!if $(TARGET) == RELEASE
DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
@@ -231,10 +203,11 @@ [LibraryClasses.common]
!endif
+ PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
+
!if $(SOURCE_DEBUG_ENABLE) == TRUE
PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
DebugCommunicationLib|SourceLevelDebugPkg/Library/DebugCommunicationLibSerialPort/DebugCommunicationLibSerialPort.inf
- PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!else
PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf
@@ -249,10 +222,10 @@ [LibraryClasses.common]
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
!endif
- BiosIdLib|$(PLATFORM_PACKAGE)/Library/BiosIdLib/BiosIdLib.inf
- CpuIA32Lib|$(PLATFORM_PACKAGE)/Library/CpuIA32Lib/CpuIA32Lib.inf
+ BiosIdLib|Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
+ CpuIA32Lib|Vlv2TbltDevicePkg/Library/CpuIA32Lib/CpuIA32Lib.inf
- StallSmmLib|$(PLATFORM_PACKAGE)/Library/StallSmmLib/StallSmmLib.inf
+ StallSmmLib|Vlv2TbltDevicePkg/Library/StallSmmLib/StallSmmLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
@@ -266,13 +239,10 @@ [LibraryClasses.common]
AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
!endif
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
-!if $(RC_BINARY_RELEASE) == TRUE
- I2cLib|Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
-!endif
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
-!if $(FTPM_ENABLE) == TRUE || $(NETWORK_ISCSI_ENABLE) == TRUE
+!if $(NETWORK_ISCSI_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
@@ -283,12 +253,6 @@ [LibraryClasses.common]
Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
-!if $(MINNOW2_FSP_BUILD) == TRUE
- FspApiLib|IntelFspWrapperPkg/Library/BaseFspApiLib/BaseFspApiLib.inf
- FspPlatformInfoLib|IntelFspWrapperPkg/Library/BaseFspPlatformInfoLibSample/BaseFspPlatformInfoLibSample.inf
- FspPlatformSecLib|Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
- FspHobProcessLib|Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
-!endif
BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
@@ -309,14 +273,14 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
- MultiPlatformLib|$(PLATFORM_PACKAGE)/Library/MultiPlatformLib/MultiPlatformLib.inf
+ MultiPlatformLib|Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(TARGET) == RELEASE
@@ -324,7 +288,7 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf
@@ -333,13 +297,6 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
!endif
- !if $(MINNOW2_FSP_BUILD) == TRUE
- PlatformFspLib|Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
- !endif
-!if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCPei/Tpm2DeviceLibSeC.inf
-!endif
-
[LibraryClasses.X64]
#
# DXE phase common
@@ -356,7 +313,7 @@ [LibraryClasses.X64]
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf
- EfiRegTableLib|$(PLATFORM_PACKAGE)/Library/EfiRegTableLib/EfiRegTableLib.inf
+ EfiRegTableLib|Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
@@ -371,14 +328,14 @@ [LibraryClasses.X64.DXE_DRIVER]
CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
[LibraryClasses.X64.DXE_CORE]
HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
@@ -386,7 +343,7 @@ [LibraryClasses.X64.DXE_CORE]
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
@@ -411,7 +368,7 @@ [LibraryClasses.X64.DXE_SMM_DRIVER]
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SmmDebugAgentLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuExceptionHandlerLib.inf
@@ -485,12 +442,6 @@ [PcdsFeatureFlag.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|FALSE
-!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmEnableBspElection|FALSE
-!if $(DATAHUB_STATUS_CODE_ENABLE) == TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|TRUE
-!else
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|FALSE
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst|FALSE
!if $(TARGET) == RELEASE
@@ -516,59 +467,20 @@ [PcdsFeatureFlag.common]
!endif
- ## This PCD specifies whether PS2 keyboard does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2KbdExtendedVerification|FALSE
-
- ## This PCD specifies whether PS2 mouse does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2MouseExtendedVerification|FALSE
-
!if $(VARIABLE_INFO_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|FALSE
!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
-
!if $(SOURCE_DEBUG_ENABLE)
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmDebug|TRUE
!endif
+ gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
+
[PcdsFixedAtBuild.common]
-!if $(MINNOW2_FSP_BUILD) == TRUE
-# $(FLASH_REGION_VLVMICROCODE_BASE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress|0xFFC00000
-# $(FLASH_REGION_VLVMICROCODE_SIZE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize|0x00040000
- gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset|0x60
-# $(FLASH_AREA_BASE_ADDRESS)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress|0xFF800000
-# $(FLASH_AREA_SIZE)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize|0x00800000
-# $(FLASH_REGION_FSPBIN_BASE)
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase|0xFFCC0000
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
-!if $(MINNOW2_FSP_BUILD) == TRUE
- # in FSP, when this got used, the memory already is up
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
-!else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
-!endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
-
-!else
- !if $(MINNOW2_FSP_BUILD) == TRUE
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
- !else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
- !endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
- gEfiCpuTokenSpaceGuid.PcdPeiTemporaryRamStackSize|0x3C00
-!endif
-
-
!if $(SECURE_BOOT_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x22000
!else
@@ -576,11 +488,8 @@ [PcdsFixedAtBuild.common]
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize|0x00000800
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize|0x400
- gEfiCpuTokenSpaceGuid.PcdCpuIEDRamSize|0x400000
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdS3AcpiReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSupport|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport|FALSE
- gEfiCpuTokenSpaceGuid.PcdCpuSmmApSyncTimeout|1000
!if $(S4_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|TRUE
!else
@@ -598,13 +507,9 @@ [PcdsFixedAtBuild.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|60
!endif
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdEbdaReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdLoadModuleAtFixAddressEnable|$(TOP_MEMORY_ADDRESS)
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserSubtitleTextColor|0x0
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserFieldTextColor|0x01
- gEfiCpuTokenSpaceGuid.PcdCpuIEDEnabled|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVbeEnable|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVgaEnable|TRUE
!if $(SOURCE_DEBUG_ENABLE) == TRUE
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17
@@ -650,11 +555,6 @@ [PcdsFixedAtBuild.IA32]
[PcdsPatchableInModule.common]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0x$(PLATFORM_PCIEXPRESS_BASE)
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLegacyBiosCacheLegacyRegion|FALSE
-
- ## This PCD specifies whether to use the optimized timing for best PS2 detection performance.
- # Note this PCD could be set to TRUE for best boot performance and set to FALSE for best device compatibility.
- gEfiMdeModulePkgTokenSpaceGuid.PcdFastPS2Detection|TRUE
#######################################################################################################
#
@@ -829,10 +729,6 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdFTPMStatus|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateSmmDataPtr|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0
- gEfiCpuTokenSpaceGuid.PcdCpuS3DataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuHotPlugDataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuCallbackSignal|0
- gEfiCpuTokenSpaceGuid.PcdCpuConfigContextBuffer|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
@@ -845,24 +741,7 @@ [PcdsDynamicExDefault.X64.DEFAULT]
[Components.IA32]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
-
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspWrapperSecCore/FspWrapperSecCore.inf {
- !if $(TARGET) == DEBUG
-
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
- IntelFspWrapperPkg/FspInitPei/FspInitPei.inf {
- !if $(TARGET) == DEBUG
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- !endif
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
MdeModulePkg/Core/Pei/PeiMain.inf {
!if $(TARGET) == DEBUG
@@ -873,31 +752,23 @@ [Components.IA32]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
- $(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf {
+ Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf {
!if $(TARGET) == DEBUG
<PcdsFixedAtBuild>
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2E
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <BuildOptions>
- !if $(FTPM_ENABLE)==TRUE
- *_*_IA32_CC_FLAGS = /D FTPM_ENABLE
- !endif
}
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
-$(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
!endif
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformPei/PlatformPei.inf {
+ Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf {
<BuildOptions>
*_*_IA32_CC_FLAGS = -DRC_BINARY_RELEASE
!if $(TARGET) == DEBUG
@@ -917,10 +788,6 @@ [Components.IA32]
}
!endif
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/Tpm2DeviceSeCPei.inf
-!endif
-
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf
SecurityPkg/Tcg/TcgPei/TcgPei.inf {
@@ -931,7 +798,7 @@ [Components.IA32]
}
!endif
- $(PLATFORM_PACKAGE)/PlatformInitPei/PlatformInitPei.inf {
+ Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
<LibraryClasses>
@@ -940,34 +807,33 @@ [Components.IA32]
!endif
PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
}
- $(PLATFORM_PACKAGE)/FvInfoPei/FvInfoPei.inf
+ Vlv2TbltDevicePkg/FvInfoPei/FvInfoPei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
MdeModulePkg/Universal/PCD/Pei/Pcd.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
UefiCpuPkg/CpuIoPei/CpuIoPei.inf
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MpS3.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PiSmmCommunicationPei.inf
+ UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf
!if $(RECOVERY_ENABLE)
#
# Recovery
#
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
@@ -993,17 +859,6 @@ [Components.IA32]
MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
-!if $(FTPM_ENABLE) == TRUE
- SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- NULL|SecurityPkg/Library\HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
- }
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1013,7 +868,7 @@ [Components.IA32]
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/FirmwarePerformancePei.inf{
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1021,17 +876,6 @@ [Components.IA32]
MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf
!endif
[Components.X64]
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.inf {
- !if $(TARGET) == DEBUG
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
-
- !endif
#
# EDK II Related Platform codes
#
@@ -1049,24 +893,10 @@ [Components.X64]
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
}
- IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x27
- <LibraryClasses>
- !if $(TARGET) != RELEASE
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- <BuildOptions>
- ICC:*_*_*_CC_FLAGS = -D MDEPKG_NDEBUG
- GCC:RELEASE_*_*_CC_FLAGS = -D MDEPKG_NDEBUG
- }
MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
}
- IntelFrameworkModulePkg/Universal/CpuIoDxe/CpuIoDxe.inf
UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
@@ -1099,13 +929,9 @@ [Components.X64]
!if $(TPM_ENABLED) == TRUE
NULL|SecurityPkg/Library/DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.inf
-!endif
-!if $(FTPM_ENABLE) == TRUE
- NULL|SecurityPkg/Library/DxeTpm2MeasureBootLib/DxeTpm2MeasureBootLib.inf
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MpCpu.inf
- $(PLATFORM_PACKAGE)/Metronome/Metronome.inf
+ MdeModulePkg/Universal/Metronome/Metronome.inf
IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
<LibraryClasses>
@@ -1115,12 +941,8 @@ [Components.X64]
PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
- !if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- !else
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
- !endif
}
$(PLATFORM_PACKAGE)/UiApp/UiApp.inf
@@ -1132,11 +954,11 @@ [Components.X64]
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf {
<LibraryClasses>
NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbSmm.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbSmm.inf
MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf {
<LibraryClasses>
@@ -1158,9 +980,9 @@ [Components.X64]
PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbRuntimeDxe.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbRuntimeDxe.inf
- $(PLATFORM_PACKAGE)/PlatformSetupDxe/PlatformSetupDxe.inf
+ Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
!if $(DATAHUB_ENABLE) == TRUE
IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
@@ -1168,38 +990,30 @@ [Components.X64]
gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
}
!endif
- IntelFrameworkModulePkg/Universal/StatusCode/DatahubStatusCodeHandlerDxe/DatahubStatusCodeHandlerDxe.inf
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
- !if $(USE_HPET_TIMER) == TRUE
- PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
- !else
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmartTimer.inf
- !endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
+ PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/IntelPchLegacyInterrupt.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
-
- IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
#
# Performance Application; Set PERFORMANCE_ENABLE=TRUE for normal boot performance and smm performance data
@@ -1219,35 +1033,9 @@ [Components.X64]
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
-!if $(SEC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/HeciDrv.inf {
-!if $(SEC_DEBUG_INFO_ENABLE) == TRUE
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=1
-!else
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=0
-!endif
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SeCPolicyInitDxe.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Tpm2DeviceSeCDxe.inf
- SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
- SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf{
- <LibraryClasses>
- NULL|SecurityPkg/Library/HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library\DxePcdLib/DxePcdLib.inf
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/FtpmSmm.inf
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1274,24 +1062,23 @@ [Components.X64]
#
# EDK II Related Platform codes
#
- $(PLATFORM_PACKAGE)/PlatformSmm/PlatformSmm.inf{
+ Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf{
<LibraryClasses>
!if $(TARGET) != RELEASE
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_PACKAGE)/PlatformInfoDxe/PlatformInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformDxe/PlatformDxe.inf
+ Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
- $(PLATFORM_PACKAGE)/PciPlatform/PciPlatform.inf
- $(PLATFORM_PACKAGE)/SaveMemoryConfig/SaveMemoryConfig.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
- $(PLATFORM_PACKAGE)/PpmPolicy/PpmPolicy.inf
- $(PLATFORM_PACKAGE)/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+ Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+ Vlv2TbltDevicePkg/SaveMemoryConfig/SaveMemoryConfig.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
+ Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
!if $(GOP_DRIVER_ENABLE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformGopPolicy/PlatformGopPolicy.inf
+ Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
!endif
@@ -1302,13 +1089,15 @@ [Components.X64]
MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf
MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
UefiCpuPkg/CpuDxe/CpuDxe.inf
+ UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
- $(PLATFORM_PACKAGE)/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/GraphicDxeInitSmm.inf
#
# ACPI
@@ -1321,14 +1110,14 @@ [Components.X64]
<LibraryClasses>
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
+ MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- $(PLATFORM_PACKAGE)/BootScriptSaveDxe/BootScriptSaveDxe.inf
IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
- $(PLATFORM_RC_PACKAGE)/AcpiTablesPCAT/AcpiTables.inf
+ Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
- $(PLATFORM_PACKAGE)/AcpiPlatform/AcpiPlatform.inf
+ Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
@@ -1338,31 +1127,23 @@ [Components.X64]
MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
-#
-# ISA
-#
- $(PLATFORM_PACKAGE)/Wpce791/Wpce791.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-#
-# SDIO
-#
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcHost.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcMediaDevice.inf
+ #
+ # ISA
+ #
+ Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
+ MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
+
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1370,7 +1151,6 @@ [Components.X64]
# IDE/SCSI/AHCI
#
MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
- IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBusDxe.inf
MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
@@ -1394,7 +1174,7 @@ [Components.X64]
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000
}
!if $(SATA_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
!endif
MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
!if $(SCSI_ENABLE) == TRUE
@@ -1407,7 +1187,6 @@ [Components.X64]
MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
- IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf
MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
@@ -1431,9 +1210,9 @@ [Components.X64]
# SMBIOS
#
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
- $(PLATFORM_PACKAGE)/SmBiosMiscDxe/SmBiosMiscDxe.inf
+ Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
@@ -1448,12 +1227,6 @@ [Components.X64]
#
!include NetworkPkg/Network.dsc.inc
-!if $(NETWORK_ENABLE) == TRUE
- !if $(CSM_ENABLE) == TRUE
- IntelFrameworkModulePkg/Csm/BiosThunk/Snp16Dxe/Snp16Dxe.inf
- !endif
-!endif
-
!if $(CAPSULE_ENABLE) || $(MICOCODE_CAPSULE_ENABLE)
MdeModulePkg/Universal/EsrtFmpDxe/EsrtFmpDxe.inf
MdeModulePkg/Application/CapsuleApp/CapsuleApp.inf
@@ -1471,7 +1244,7 @@ [Components.X64]
<LibraryClasses>
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
!endif
@@ -1483,11 +1256,7 @@ [BuildOptions]
#
# Define token for different Platform
#
-!if $(MINNOW2_FSP_BUILD) == TRUE
- DEFINE MINNOW2_FSP_OPTION = -DMINNOW2_FSP_BUILD
-!else
DEFINE MINNOW2_FSP_OPTION =
-!endif
!if $(ENBDT_PF_BUILD) == TRUE
DEFINE ENBDT_PF_ENABLE = -DENBDT_PF_ENABLE=1
@@ -1526,11 +1295,6 @@ [BuildOptions]
DEFINE X64_BUILD_ENABLE =
!endif
-!if $(FTPM_ENABLE) == TRUE
- DEFINE DSC_FTPM_BUILD_OPTIONS = -DFTPM_ENABLE
-!else
- DEFINE DSC_FTPM_BUILD_OPTIONS =
-!endif
!if $(TPM_ENABLED) == TRUE
DEFINE DSC_TPM_BUILD_OPTIONS = -DTPM_ENABLED
!else
@@ -1538,7 +1302,7 @@ [BuildOptions]
!endif
- DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
+ DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
!if $(PERFORMANCE_ENABLE) == TRUE
DEFINE PDB_BUILD_OPTION = /Zi
!endif
@@ -1570,76 +1334,6 @@ [BuildOptions.common.EDKII.DXE_SMM_DRIVER, BuildOptions.common.EDKII.SMM_CORE]
MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000
-[BuildOptions.Common.EDK]
-
-#
-# Define token for different Platform
-#
-!if $(ENBDT_PF_BUILD) == TRUE
- DEFINE ENBDT_PF_ENABLE = -DENBDT_PF_ENABLE=1
-!else
- DEFINE ENBDT_PF_ENABLE = -DENBDT_PF_ENABLE=0
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
- RELEASE_*_*_DLINK_FLAGS = -DEBUG
-!endif
-
-!if $(S3_ENABLE) == TRUE
- DEFINE DSC_S3_BUILD_OPTIONS = -DEFI_S3_RESUME
-!else
- DEFINE DSC_S3_BUILD_OPTIONS =
-!endif
-
-!if $(ENBDT_S3_SUPPORT) == TRUE
- DEFINE ENBDT_S3_SUPPORT_OPTIONS = -DNOCS_S3_SUPPORT
-!else
- DEFINE ENBDT_S3_SUPPORT_OPTIONS =
-!endif
-
-!if $(X64_CONFIG) == TRUE
- DEFINE X64_BUILD_ENABLE = -DX64_BUILD_ENABLE=1
-!else
- DEFINE X64_BUILD_ENABLE =
-!endif
-
-
- DEFINE EDK_GLUE_LIB_DEBUG =
- DEFINE DEBUG_BUILD_OPTIONS = -D EFI_DEBUG -D DEBUG_MODE=1 /GL- $(EDK_GLUE_LIB_DEBUG) -DEDKII_GLUE_DebugPrintErrorLevel=(EFI_D_ERROR)
- DEFINE EDK_DSC_FEATURE_BUILD_OPTIONS = $(DSC_S3_BUILD_OPTIONS) $(DSC_ACPI_BUILD_OPTIONS) $(DSC_SEC_BUILD_OPTIONS) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(SOFTSDV_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(QT_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS) -D$(PROJECT_SC_CHIPSET)
-
- DEFINE EDK_DSC_OTHER_BUILD_OPTIONS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS) $(SV_BUILD_OPTIONS) $(INTEL_FASTBOOT_BUILD_OPTION)
- DEFINE EDK_DSC_GLOBAL_BUILD_OPTIONS = $(ENBDT_PF_ENABLE) $(EDK_DSC_FEATURE_BUILD_OPTIONS) $(EDK_DSC_OTHER_BUILD_OPTIONS) -D EFI_SPECIFICATION_VERSION=0x00020000 -D PI_SPECIFICATION_VERSION=0x00000009 -D TIANO_RELEASE_VERSION=0x00080006 -D SUPPORT_DEPRECATED_PCI_CFG_PPI -D CSM_SMMENTRY_PORT8DATA8 -D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE) -D MAX_VARIABLE_SIZE=0x2000 -D EFI_FIRMWARE_VENDOR="L/"INTEL/"" -D EFI_BUILD_VERSION="L/"EDKII/"" -DEFI_PEI_REPORT_STATUS_CODE_ON $(ENBDT_S3_SUPPORT_OPTIONS)
-
- *_*_IA32_ASM_FLAGS = -DEFI32 -D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h -DNOCS_S3_SUPPORT
- DEBUG_*_IA32_CC_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_CC_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_VFRPP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_VFRPP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_APP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_APP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_PP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_PP_FLAGS = -D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_IA32_ASLPP_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASLCC_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASM16_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
-
- *_*_X64_ASM_FLAGS = -DEFIX64 -D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h -DNOCS_S3_SUPPORT
- DEBUG_*_X64_CC_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_CC_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_VFRPP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_VFRPP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_APP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_APP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_PP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_PP_FLAGS = -D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_X64_ASLPP_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASLCC_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASM16_FLAGS = -D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
- # *_*_*_BUILD_FLAGS = -s
- *_*_*_VFR_FLAGS = -c
- *_*_*_BUILD_FLAGS = -c
-
[BuildOptions.Common.EDKII]
*_*_IA32_ASM_FLAGS = $(VP_BUILD_OPTIONS) -D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h -DNOCS_S3_SUPPORT
@@ -1654,25 +1348,3 @@ [BuildOptions.Common.EDKII]
*_*_X64_APP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_PP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_ASLPP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
-
-
-[Components.X64]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cBus.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cHost.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cPortA0Pio.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cMmioDeviceDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index 933a7ec760..8a5c42577d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -18,25 +18,11 @@ [Defines]
PLATFORM_GUID = 465B0A0B-7AC1-443b-8F67-7B8DEC145F90
PLATFORM_VERSION = 0.1
DSC_SPECIFICATION = 0x00010005
-
- #
- # Set platform specific package/folder name, same as passed from PREBUILD script.
- # PLATFORM_PACKAGE would be the same as PLATFORM_NAME as well as package build folder
- # DEFINE only takes effect at R9 DSC and FDF.
- #
- DEFINE PLATFORM_PACKAGE = Vlv2TbltDevicePkg
- DEFINE PLATFORM_RC_PACKAGE = Vlv2DeviceRefCodePkg
- DEFINE PLATFORM_BINARY_PACKAGE = Vlv2SocBinPkg
- OUTPUT_DIRECTORY = Build/$(PLATFORM_PACKAGE)
+ OUTPUT_DIRECTORY = Build/Vlv2TbltDevicePkgIA32
SUPPORTED_ARCHITECTURES = IA32
BUILD_TARGETS = DEBUG|RELEASE
SKUID_IDENTIFIER = DEFAULT
- DEFINE CPU_ARCH =ValleyView2
- DEFINE PROJECT_SC_FAMILY =IntelPch
- DEFINE PROJECT_SC_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/SouthCluster
- DEFINE PROJECT_VLV_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/NorthCluster
-
DEFINE RC_BINARY_RELEASE = TRUE
#
# Platform On/Off features are defined here
@@ -47,20 +33,16 @@ [Defines]
# 3.BayleyBay
# ENBDT_PF_ENABLE = TRUE
#
- !include $(PLATFORM_PACKAGE)/AutoPlatformCFG.txt
- !include $(PLATFORM_PACKAGE)/PlatformPkgConfig.dsc
+ !include Vlv2TbltDevicePkg/AutoPlatformCFG.txt
+ !include Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
!if $(X64_CONFIG) == TRUE
DEFINE DXE_ARCHITECTURE = X64
- DEFINE EDK_DXE_ARCHITECTURE = X64
- DEFINE UNDI_DXE_ARCHITECTURE = 64
!else
DEFINE DXE_ARCHITECTURE = IA32
- DEFINE EDK_DXE_ARCHITECTURE = Ia32
- DEFINE UNDI_DXE_ARCHITECTURE = 32
!endif
- FLASH_DEFINITION = $(PLATFORM_PACKAGE)/PlatformPkg.fdf
+ FLASH_DEFINITION = Vlv2TbltDevicePkg/PlatformPkg.fdf
!if $(LFMA_ENABLE) == TRUE
FIX_LOAD_TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
DEFINE TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
@@ -71,10 +53,6 @@ [Defines]
DEFINE PLATFORM_PCIEXPRESS_BASE = 0E0000000
- DEFINE SEC_ENABLE = FALSE
- DEFINE SEC_DEBUG_INFO_ENABLE = FALSE
- DEFINE FTPM_ENABLE = FALSE
-
################################################################################
#
# SKU Identification section - list of all SKU IDs supported by this
@@ -98,7 +76,6 @@ [LibraryClasses.common]
DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
- DxeSmmDriverEntryPoint|IntelFrameworkPkg/Library/DxeSmmDriverEntryPoint/DxeSmmDriverEntryPoint.inf
#
# Basic
@@ -142,8 +119,7 @@ [LibraryClasses.common]
GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLib.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
#
# Framework
@@ -166,10 +142,6 @@ [LibraryClasses.common]
UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
!endif
-!if $(S3_ENABLE) == TRUE
- S3Lib|IntelFrameworkModulePkg/Library/PeiS3Lib/PeiS3Lib.inf
-!endif
-
OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
!if $(CAPSULE_ENABLE) == TRUE
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
@@ -197,27 +169,27 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|$(PLATFORM_PACKAGE)/Library/SmbusLib/SmbusLib.inf
- SmmLib|$(PLATFORM_PACKAGE)/Library/PchSmmLib/PchSmmLib.inf
+ SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
# Platform
#
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
- ResetSystemLib|$(PLATFORM_PACKAGE)/Library/ResetSystemLib/ResetSystemLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ ResetSystemLib|Vlv2TbltDevicePkg/Library/ResetSystemLib/ResetSystemLib.inf
- PlatformCmosLib|$(PLATFORM_PACKAGE)/Library/PlatformCmosLib/PlatformCmosLib.inf
+ PlatformCmosLib|Vlv2TbltDevicePkg/Library/PlatformCmosLib/PlatformCmosLib.inf
#
# Misc
#
- MonoStatusCodeLib|$(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf
+ MonoStatusCodeLib|Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
!if $(TARGET) == RELEASE
DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
@@ -229,10 +201,11 @@ [LibraryClasses.common]
!endif
+ PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
+
!if $(SOURCE_DEBUG_ENABLE) == TRUE
PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
DebugCommunicationLib|SourceLevelDebugPkg/Library/DebugCommunicationLibSerialPort/DebugCommunicationLibSerialPort.inf
- PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!else
PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf
@@ -247,10 +220,10 @@ [LibraryClasses.common]
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
!endif
- BiosIdLib|$(PLATFORM_PACKAGE)/Library/BiosIdLib/BiosIdLib.inf
- CpuIA32Lib|$(PLATFORM_PACKAGE)/Library/CpuIA32Lib/CpuIA32Lib.inf
+ BiosIdLib|Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
+ CpuIA32Lib|Vlv2TbltDevicePkg/Library/CpuIA32Lib/CpuIA32Lib.inf
- StallSmmLib|$(PLATFORM_PACKAGE)/Library/StallSmmLib/StallSmmLib.inf
+ StallSmmLib|Vlv2TbltDevicePkg/Library/StallSmmLib/StallSmmLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
@@ -264,13 +237,10 @@ [LibraryClasses.common]
AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
!endif
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
-!if $(RC_BINARY_RELEASE) == TRUE
- I2cLib|Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
-!endif
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
-!if $(FTPM_ENABLE) == TRUE || $(NETWORK_ISCSI_ENABLE) == TRUE
+!if $(NETWORK_ISCSI_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
@@ -281,13 +251,6 @@ [LibraryClasses.common]
Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
-!if $(MINNOW2_FSP_BUILD) == TRUE
- FspApiLib|IntelFspWrapperPkg/Library/BaseFspApiLib/BaseFspApiLib.inf
- FspPlatformInfoLib|IntelFspWrapperPkg/Library/BaseFspPlatformInfoLibSample/BaseFspPlatformInfoLibSample.inf
- FspPlatformSecLib|Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
- FspHobProcessLib|Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
-!endif
-
BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
[LibraryClasses.IA32.SEC]
@@ -307,14 +270,14 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
- MultiPlatformLib|$(PLATFORM_PACKAGE)/Library/MultiPlatformLib/MultiPlatformLib.inf
+ MultiPlatformLib|Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(TARGET) == RELEASE
@@ -322,7 +285,7 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf
@@ -331,13 +294,6 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
!endif
- !if $(MINNOW2_FSP_BUILD) == TRUE
- PlatformFspLib|Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
- !endif
-!if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCPei/Tpm2DeviceLibSeC.inf
-!endif
-
[LibraryClasses.IA32]
#
# DXE phase common
@@ -354,7 +310,7 @@ [LibraryClasses.IA32]
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf
- EfiRegTableLib|$(PLATFORM_PACKAGE)/Library/EfiRegTableLib/EfiRegTableLib.inf
+ EfiRegTableLib|Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
@@ -369,14 +325,14 @@ [LibraryClasses.IA32.DXE_DRIVER]
CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
[LibraryClasses.IA32.DXE_CORE]
HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
@@ -384,7 +340,7 @@ [LibraryClasses.IA32.DXE_CORE]
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
@@ -409,7 +365,7 @@ [LibraryClasses.IA32.DXE_SMM_DRIVER]
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SmmDebugAgentLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuExceptionHandlerLib.inf
@@ -483,12 +439,6 @@ [PcdsFeatureFlag.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|FALSE
-!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmEnableBspElection|FALSE
-!if $(DATAHUB_STATUS_CODE_ENABLE) == TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|TRUE
-!else
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|FALSE
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst|FALSE
!if $(TARGET) == RELEASE
@@ -514,59 +464,20 @@ [PcdsFeatureFlag.common]
!endif
- ## This PCD specifies whether PS2 keyboard does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2KbdExtendedVerification|FALSE
-
- ## This PCD specifies whether PS2 mouse does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2MouseExtendedVerification|FALSE
-
!if $(VARIABLE_INFO_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|FALSE
!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
-
!if $(SOURCE_DEBUG_ENABLE)
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmDebug|TRUE
!endif
+ gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
+
[PcdsFixedAtBuild.common]
-!if $(MINNOW2_FSP_BUILD) == TRUE
-# $(FLASH_REGION_VLVMICROCODE_BASE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress|0xFFC00000
-# $(FLASH_REGION_VLVMICROCODE_SIZE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize|0x00040000
- gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset|0x60
-# $(FLASH_AREA_BASE_ADDRESS)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress|0xFF800000
-# $(FLASH_AREA_SIZE)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize|0x00800000
-# $(FLASH_REGION_FSPBIN_BASE)
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase|0xFFCC0000
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
-!if $(MINNOW2_FSP_BUILD) == TRUE
- # in FSP, when this got used, the memory already is up
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
-!else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
-!endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
-
-!else
- !if $(MINNOW2_FSP_BUILD) == TRUE
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
- !else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
- !endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
- gEfiCpuTokenSpaceGuid.PcdPeiTemporaryRamStackSize|0x3C00
-!endif
-
-
!if $(SECURE_BOOT_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x22000
!else
@@ -574,11 +485,8 @@ [PcdsFixedAtBuild.common]
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize|0x00000800
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize|0x400
- gEfiCpuTokenSpaceGuid.PcdCpuIEDRamSize|0x400000
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdS3AcpiReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSupport|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport|FALSE
- gEfiCpuTokenSpaceGuid.PcdCpuSmmApSyncTimeout|1000
!if $(S4_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|TRUE
!else
@@ -596,13 +504,9 @@ [PcdsFixedAtBuild.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|60
!endif
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdEbdaReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdLoadModuleAtFixAddressEnable|$(TOP_MEMORY_ADDRESS)
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserSubtitleTextColor|0x0
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserFieldTextColor|0x01
- gEfiCpuTokenSpaceGuid.PcdCpuIEDEnabled|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVbeEnable|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVgaEnable|TRUE
!if $(SOURCE_DEBUG_ENABLE) == TRUE
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17
@@ -648,11 +552,6 @@ [PcdsFixedAtBuild.IA32]
[PcdsPatchableInModule.common]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0x$(PLATFORM_PCIEXPRESS_BASE)
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLegacyBiosCacheLegacyRegion|FALSE
-
- ## This PCD specifies whether to use the optimized timing for best PS2 detection performance.
- # Note this PCD could be set to TRUE for best boot performance and set to FALSE for best device compatibility.
- gEfiMdeModulePkgTokenSpaceGuid.PcdFastPS2Detection|TRUE
#######################################################################################################
#
@@ -827,10 +726,6 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdFTPMStatus|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateSmmDataPtr|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0
- gEfiCpuTokenSpaceGuid.PcdCpuS3DataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuHotPlugDataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuCallbackSignal|0
- gEfiCpuTokenSpaceGuid.PcdCpuConfigContextBuffer|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
@@ -843,24 +738,7 @@ [PcdsDynamicExDefault.X64.DEFAULT]
[Components.IA32]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
-
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspWrapperSecCore/FspWrapperSecCore.inf {
- !if $(TARGET) == DEBUG
-
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
- IntelFspWrapperPkg/FspInitPei/FspInitPei.inf {
- !if $(TARGET) == DEBUG
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- !endif
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
MdeModulePkg/Core/Pei/PeiMain.inf {
!if $(TARGET) == DEBUG
@@ -871,31 +749,23 @@ [Components.IA32]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
- $(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf {
+ Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf {
!if $(TARGET) == DEBUG
<PcdsFixedAtBuild>
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2E
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <BuildOptions>
- !if $(FTPM_ENABLE)==TRUE
- *_*_IA32_CC_FLAGS = /D FTPM_ENABLE
- !endif
}
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
-$(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
!endif
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformPei/PlatformPei.inf {
+ Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf {
<BuildOptions>
*_*_IA32_CC_FLAGS = /DRC_BINARY_RELEASE
!if $(TARGET) == DEBUG
@@ -915,10 +785,6 @@ [Components.IA32]
}
!endif
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/Tpm2DeviceSeCPei.inf
-!endif
-
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf
SecurityPkg/Tcg/TcgPei/TcgPei.inf {
@@ -929,7 +795,7 @@ [Components.IA32]
}
!endif
- $(PLATFORM_PACKAGE)/PlatformInitPei/PlatformInitPei.inf {
+ Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
<LibraryClasses>
@@ -938,34 +804,33 @@ [Components.IA32]
!endif
PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
}
- $(PLATFORM_PACKAGE)/FvInfoPei/FvInfoPei.inf
+ Vlv2TbltDevicePkg/FvInfoPei/FvInfoPei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
MdeModulePkg/Universal/PCD/Pei/Pcd.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
UefiCpuPkg/CpuIoPei/CpuIoPei.inf
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MpS3.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PiSmmCommunicationPei.inf
+ UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf
!if $(RECOVERY_ENABLE)
#
# Recovery
#
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
@@ -991,17 +856,6 @@ [Components.IA32]
MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
-!if $(FTPM_ENABLE) == TRUE
- SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- NULL|SecurityPkg/Library\HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
- }
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1011,7 +865,7 @@ [Components.IA32]
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/FirmwarePerformancePei.inf{
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1019,17 +873,6 @@ [Components.IA32]
MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf
!endif
[Components.IA32]
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.inf {
- !if $(TARGET) == DEBUG
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
-
- !endif
#
# EDK II Related Platform codes
#
@@ -1047,24 +890,10 @@ [Components.IA32]
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
}
- IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x27
- <LibraryClasses>
- !if $(TARGET) != RELEASE
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- <BuildOptions>
- ICC:*_*_*_CC_FLAGS = /D MDEPKG_NDEBUG
- GCC:*_*_*_CC_FLAGS = -D MDEPKG_NDEBUG
- }
MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
}
- IntelFrameworkModulePkg/Universal/CpuIoDxe/CpuIoDxe.inf
UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
@@ -1084,13 +913,9 @@ [Components.IA32]
!if $(TPM_ENABLED) == TRUE
NULL|SecurityPkg/Library/DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.inf
-!endif
-!if $(FTPM_ENABLE) == TRUE
- NULL|SecurityPkg/Library/DxeTpm2MeasureBootLib/DxeTpm2MeasureBootLib.inf
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MpCpu.inf
- $(PLATFORM_PACKAGE)/Metronome/Metronome.inf
+ MdeModulePkg/Universal/Metronome/Metronome.inf
IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
<LibraryClasses>
@@ -1100,12 +925,8 @@ [Components.IA32]
PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
- !if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- !else
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
- !endif
}
$(PLATFORM_PACKAGE)/UiApp/UiApp.inf
@@ -1117,11 +938,11 @@ [Components.IA32]
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf {
<LibraryClasses>
NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbSmm.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbSmm.inf
MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf {
<LibraryClasses>
@@ -1143,9 +964,9 @@ [Components.IA32]
PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbRuntimeDxe.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbRuntimeDxe.inf
- $(PLATFORM_PACKAGE)/PlatformSetupDxe/PlatformSetupDxe.inf
+ Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
!if $(DATAHUB_ENABLE) == TRUE
IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
@@ -1153,38 +974,30 @@ [Components.IA32]
gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
}
!endif
- IntelFrameworkModulePkg/Universal/StatusCode/DatahubStatusCodeHandlerDxe/DatahubStatusCodeHandlerDxe.inf
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
- !if $(USE_HPET_TIMER) == TRUE
- PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
- !else
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmartTimer.inf
- !endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
+ PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/IntelPchLegacyInterrupt.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
-
- IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
#
# Performance Application; Set PERFORMANCE_ENABLE=TRUE for normal boot performance and smm performance data
@@ -1204,35 +1017,9 @@ [Components.IA32]
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
-!if $(SEC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/HeciDrv.inf {
-!if $(SEC_DEBUG_INFO_ENABLE) == TRUE
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=1
-!else
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=0
-!endif
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SeCPolicyInitDxe.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Tpm2DeviceSeCDxe.inf
- SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
- SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf{
- <LibraryClasses>
- NULL|SecurityPkg/Library/HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library\DxePcdLib/DxePcdLib.inf
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/FtpmSmm.inf
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1259,24 +1046,23 @@ [Components.IA32]
#
# EDK II Related Platform codes
#
- $(PLATFORM_PACKAGE)/PlatformSmm/PlatformSmm.inf{
+ Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf{
<LibraryClasses>
!if $(TARGET) != RELEASE
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_PACKAGE)/PlatformInfoDxe/PlatformInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformDxe/PlatformDxe.inf
+ Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
- $(PLATFORM_PACKAGE)/PciPlatform/PciPlatform.inf
- $(PLATFORM_PACKAGE)/SaveMemoryConfig/SaveMemoryConfig.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
- $(PLATFORM_PACKAGE)/PpmPolicy/PpmPolicy.inf
- $(PLATFORM_PACKAGE)/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+ Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+ Vlv2TbltDevicePkg/SaveMemoryConfig/SaveMemoryConfig.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
+ Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
!if $(GOP_DRIVER_ENABLE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformGopPolicy/PlatformGopPolicy.inf
+ Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
!endif
@@ -1287,13 +1073,15 @@ [Components.IA32]
MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf
MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
UefiCpuPkg/CpuDxe/CpuDxe.inf
+ UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
- $(PLATFORM_PACKAGE)/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/GraphicDxeInitSmm.inf
#
# ACPI
@@ -1306,14 +1094,14 @@ [Components.IA32]
<LibraryClasses>
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
+ MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- $(PLATFORM_PACKAGE)/BootScriptSaveDxe/BootScriptSaveDxe.inf
IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
- $(PLATFORM_RC_PACKAGE)/AcpiTablesPCAT/AcpiTables.inf
+ Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
- $(PLATFORM_PACKAGE)/AcpiPlatform/AcpiPlatform.inf
+ Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
@@ -1323,31 +1111,23 @@ [Components.IA32]
MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
-#
-# ISA
-#
- $(PLATFORM_PACKAGE)/Wpce791/Wpce791.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-#
-# SDIO
-#
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcHost.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcMediaDevice.inf
+ #
+ # ISA
+ #
+ Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
+ MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
+
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1355,7 +1135,6 @@ [Components.IA32]
# IDE/SCSI/AHCI
#
MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
- IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBusDxe.inf
MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
@@ -1379,7 +1158,7 @@ [Components.IA32]
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000
}
!if $(SATA_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
!endif
MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
!if $(SCSI_ENABLE) == TRUE
@@ -1392,7 +1171,6 @@ [Components.IA32]
MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
- IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf
MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
@@ -1416,9 +1194,9 @@ [Components.IA32]
# SMBIOS
#
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
- $(PLATFORM_PACKAGE)/SmBiosMiscDxe/SmBiosMiscDxe.inf
+ Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
@@ -1433,12 +1211,6 @@ [Components.IA32]
#
!include NetworkPkg/Network.dsc.inc
-!if $(NETWORK_ENABLE) == TRUE
- !if $(CSM_ENABLE) == TRUE
- IntelFrameworkModulePkg/Csm/BiosThunk/Snp16Dxe/Snp16Dxe.inf
- !endif
-!endif
-
!if $(CAPSULE_ENABLE) || $(MICOCODE_CAPSULE_ENABLE)
MdeModulePkg/Universal/EsrtFmpDxe/EsrtFmpDxe.inf
MdeModulePkg/Application/CapsuleApp/CapsuleApp.inf
@@ -1456,7 +1228,7 @@ [Components.IA32]
<LibraryClasses>
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
!endif
@@ -1468,11 +1240,7 @@ [BuildOptions]
#
# Define token for different Platform
#
-!if $(MINNOW2_FSP_BUILD) == TRUE
- DEFINE MINNOW2_FSP_OPTION = /DMINNOW2_FSP_BUILD
-!else
DEFINE MINNOW2_FSP_OPTION =
-!endif
!if $(ENBDT_PF_BUILD) == TRUE
DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=1
@@ -1511,11 +1279,6 @@ [BuildOptions]
DEFINE X64_BUILD_ENABLE =
!endif
-!if $(FTPM_ENABLE) == TRUE
- DEFINE DSC_FTPM_BUILD_OPTIONS = /DFTPM_ENABLE
-!else
- DEFINE DSC_FTPM_BUILD_OPTIONS =
-!endif
!if $(TPM_ENABLED) == TRUE
DEFINE DSC_TPM_BUILD_OPTIONS = /DTPM_ENABLED
!else
@@ -1523,7 +1286,7 @@ [BuildOptions]
!endif
- DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
+ DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
!if $(PERFORMANCE_ENABLE) == TRUE
DEFINE PDB_BUILD_OPTION = /Zi
!endif
@@ -1556,76 +1319,6 @@ [BuildOptions.common.EDKII.DXE_SMM_DRIVER, BuildOptions.common.EDKII.SMM_CORE]
MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000
-[BuildOptions.Common.EDK]
-
-#
-# Define token for different Platform
-#
-!if $(ENBDT_PF_BUILD) == TRUE
- DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=1
-!else
- DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=0
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
- RELEASE_*_*_DLINK_FLAGS = /DEBUG
-!endif
-
-!if $(S3_ENABLE) == TRUE
- DEFINE DSC_S3_BUILD_OPTIONS = /DEFI_S3_RESUME
-!else
- DEFINE DSC_S3_BUILD_OPTIONS =
-!endif
-
-!if $(ENBDT_S3_SUPPORT) == TRUE
- DEFINE ENBDT_S3_SUPPORT_OPTIONS = /DNOCS_S3_SUPPORT
-!else
- DEFINE ENBDT_S3_SUPPORT_OPTIONS =
-!endif
-
-!if $(X64_CONFIG) == TRUE
- DEFINE X64_BUILD_ENABLE = /DX64_BUILD_ENABLE=1
-!else
- DEFINE X64_BUILD_ENABLE =
-!endif
-
-
- DEFINE EDK_GLUE_LIB_DEBUG =
- DEFINE DEBUG_BUILD_OPTIONS = /D EFI_DEBUG /D DEBUG_MODE=1 /GL- $(EDK_GLUE_LIB_DEBUG) /DEDKII_GLUE_DebugPrintErrorLevel=(EFI_D_ERROR)
- DEFINE EDK_DSC_FEATURE_BUILD_OPTIONS = $(DSC_S3_BUILD_OPTIONS) $(DSC_ACPI_BUILD_OPTIONS) $(DSC_SEC_BUILD_OPTIONS) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(SOFTSDV_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(QT_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS) /D$(PROJECT_SC_CHIPSET)
-
- DEFINE EDK_DSC_OTHER_BUILD_OPTIONS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS) $(SV_BUILD_OPTIONS) $(INTEL_FASTBOOT_BUILD_OPTION)
- DEFINE EDK_DSC_GLOBAL_BUILD_OPTIONS = $(ENBDT_PF_ENABLE) $(EDK_DSC_FEATURE_BUILD_OPTIONS) $(EDK_DSC_OTHER_BUILD_OPTIONS) /D EFI_SPECIFICATION_VERSION=0x00020000 /D PI_SPECIFICATION_VERSION=0x00000009 /D TIANO_RELEASE_VERSION=0x00080006 /D SUPPORT_DEPRECATED_PCI_CFG_PPI /D CSM_SMMENTRY_PORT8DATA8 /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE) /D MAX_VARIABLE_SIZE=0x2000 /D EFI_FIRMWARE_VENDOR="L/"INTEL/"" /D EFI_BUILD_VERSION="L/"EDKII/"" /DEFI_PEI_REPORT_STATUS_CODE_ON $(ENBDT_S3_SUPPORT_OPTIONS)
-
- *_*_IA32_ASM_FLAGS = /DEFI32 /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
- DEBUG_*_IA32_CC_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_CC_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_VFRPP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_VFRPP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_APP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_APP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_PP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_PP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_IA32_ASLPP_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASLCC_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASM16_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
-
- *_*_X64_ASM_FLAGS = /DEFIX64 /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
- DEBUG_*_X64_CC_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_CC_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_VFRPP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_VFRPP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_APP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_APP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_PP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_PP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_X64_ASLPP_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASLCC_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASM16_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
- # *_*_*_BUILD_FLAGS = -s
- *_*_*_VFR_FLAGS = -c
- *_*_*_BUILD_FLAGS = -c
-
[BuildOptions.Common.EDKII]
*_*_IA32_ASM_FLAGS = $(VP_BUILD_OPTIONS) /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
@@ -1640,25 +1333,3 @@ [BuildOptions.Common.EDKII]
*_*_X64_APP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_PP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_ASLPP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
-
-
-[Components.IA32]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cBus.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cHost.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cPortA0Pio.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cMmioDeviceDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index 9ec48f9fee..c0fe0892ac 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -18,25 +18,11 @@ [Defines]
PLATFORM_GUID = 465B0A0B-7AC1-443b-8F67-7B8DEC145F90
PLATFORM_VERSION = 0.1
DSC_SPECIFICATION = 0x00010005
-
- #
- # Set platform specific package/folder name, same as passed from PREBUILD script.
- # PLATFORM_PACKAGE would be the same as PLATFORM_NAME as well as package build folder
- # DEFINE only takes effect at R9 DSC and FDF.
- #
- DEFINE PLATFORM_PACKAGE = Vlv2TbltDevicePkg
- DEFINE PLATFORM_RC_PACKAGE = Vlv2DeviceRefCodePkg
- DEFINE PLATFORM_BINARY_PACKAGE = Vlv2SocBinPkg
- OUTPUT_DIRECTORY = Build/$(PLATFORM_PACKAGE)
+ OUTPUT_DIRECTORY = Build/Vlv2TbltDevicePkg
SUPPORTED_ARCHITECTURES = IA32|X64
BUILD_TARGETS = DEBUG|RELEASE
SKUID_IDENTIFIER = DEFAULT
- DEFINE CPU_ARCH =ValleyView2
- DEFINE PROJECT_SC_FAMILY =IntelPch
- DEFINE PROJECT_SC_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/SouthCluster
- DEFINE PROJECT_VLV_ROOT =../$(PLATFORM_RC_PACKAGE)/ValleyView2Soc/NorthCluster
-
DEFINE RC_BINARY_RELEASE = TRUE
#
# Platform On/Off features are defined here
@@ -47,22 +33,18 @@ [Defines]
# 3.BayleyBay
# ENBDT_PF_ENABLE = TRUE
#
- !include $(PLATFORM_PACKAGE)/AutoPlatformCFG.txt
- !include $(PLATFORM_PACKAGE)/PlatformPkgConfig.dsc
+ !include Vlv2TbltDevicePkg/AutoPlatformCFG.txt
+ !include Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
DEFINE PLATFORMX64_ENABLE = TRUE
!if $(X64_CONFIG) == TRUE
DEFINE DXE_ARCHITECTURE = X64
- DEFINE EDK_DXE_ARCHITECTURE = X64
- DEFINE UNDI_DXE_ARCHITECTURE = 64
!else
DEFINE DXE_ARCHITECTURE = IA32
- DEFINE EDK_DXE_ARCHITECTURE = Ia32
- DEFINE UNDI_DXE_ARCHITECTURE = 32
!endif
- FLASH_DEFINITION = $(PLATFORM_PACKAGE)/PlatformPkg.fdf
+ FLASH_DEFINITION = Vlv2TbltDevicePkg/PlatformPkg.fdf
!if $(LFMA_ENABLE) == TRUE
FIX_LOAD_TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
DEFINE TOP_MEMORY_ADDRESS = 0xFFFFFFFFFFFFFFFF
@@ -73,10 +55,6 @@ [Defines]
DEFINE PLATFORM_PCIEXPRESS_BASE = 0E0000000
- DEFINE SEC_ENABLE = FALSE
- DEFINE SEC_DEBUG_INFO_ENABLE = FALSE
- DEFINE FTPM_ENABLE = FALSE
-
################################################################################
#
# SKU Identification section - list of all SKU IDs supported by this
@@ -100,7 +78,6 @@ [LibraryClasses.common]
DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
- DxeSmmDriverEntryPoint|IntelFrameworkPkg/Library/DxeSmmDriverEntryPoint/DxeSmmDriverEntryPoint.inf
#
# Basic
@@ -144,8 +121,7 @@ [LibraryClasses.common]
GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLib.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
#
# Framework
@@ -167,9 +143,6 @@ [LibraryClasses.common]
!if $(SCSI_ENABLE) == TRUE
UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
!endif
-!if $(S3_ENABLE) == TRUE
- S3Lib|IntelFrameworkModulePkg/Library/PeiS3Lib/PeiS3Lib.inf
-!endif
OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
!if $(CAPSULE_ENABLE) == TRUE
@@ -198,27 +171,27 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|$(PLATFORM_PACKAGE)/Library/SmbusLib/SmbusLib.inf
- SmmLib|$(PLATFORM_PACKAGE)/Library/PchSmmLib/PchSmmLib.inf
+ SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
# Platform
#
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
- ResetSystemLib|$(PLATFORM_PACKAGE)/Library/ResetSystemLib/ResetSystemLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ ResetSystemLib|Vlv2TbltDevicePkg/Library/ResetSystemLib/ResetSystemLib.inf
- PlatformCmosLib|$(PLATFORM_PACKAGE)/Library/PlatformCmosLib/PlatformCmosLib.inf
+ PlatformCmosLib|Vlv2TbltDevicePkg/Library/PlatformCmosLib/PlatformCmosLib.inf
#
# Misc
#
- MonoStatusCodeLib|$(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf
+ MonoStatusCodeLib|Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf
!if $(TARGET) == RELEASE
DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
@@ -230,10 +203,11 @@ [LibraryClasses.common]
!endif
+ PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
+
!if $(SOURCE_DEBUG_ENABLE) == TRUE
PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
DebugCommunicationLib|SourceLevelDebugPkg/Library/DebugCommunicationLibSerialPort/DebugCommunicationLibSerialPort.inf
- PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!else
PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf
@@ -248,10 +222,10 @@ [LibraryClasses.common]
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
!endif
- BiosIdLib|$(PLATFORM_PACKAGE)/Library/BiosIdLib/BiosIdLib.inf
- CpuIA32Lib|$(PLATFORM_PACKAGE)/Library/CpuIA32Lib/CpuIA32Lib.inf
+ BiosIdLib|Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
+ CpuIA32Lib|Vlv2TbltDevicePkg/Library/CpuIA32Lib/CpuIA32Lib.inf
- StallSmmLib|$(PLATFORM_PACKAGE)/Library/StallSmmLib/StallSmmLib.inf
+ StallSmmLib|Vlv2TbltDevicePkg/Library/StallSmmLib/StallSmmLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
@@ -265,15 +239,10 @@ [LibraryClasses.common]
AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
!endif
VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
-!if $(RC_BINARY_RELEASE) == TRUE
- I2cLib|Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
-!endif
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
- ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
- HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
-!if $(FTPM_ENABLE) == TRUE || $(NETWORK_ISCSI_ENABLE) == TRUE
+!if $(NETWORK_ISCSI_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
@@ -284,13 +253,6 @@ [LibraryClasses.common]
Tpm2CommandLib|SecurityPkg/Library/Tpm2CommandLib/Tpm2CommandLib.inf
-!if $(MINNOW2_FSP_BUILD) == TRUE
- FspApiLib|IntelFspWrapperPkg/Library/BaseFspApiLib/BaseFspApiLib.inf
- FspPlatformInfoLib|IntelFspWrapperPkg/Library/BaseFspPlatformInfoLibSample/BaseFspPlatformInfoLibSample.inf
- FspPlatformSecLib|Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
- FspHobProcessLib|Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
-!endif
-
BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
[LibraryClasses.IA32.SEC]
@@ -310,14 +272,14 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf
- MultiPlatformLib|$(PLATFORM_PACKAGE)/Library/MultiPlatformLib/MultiPlatformLib.inf
+ MultiPlatformLib|Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(TARGET) == RELEASE
@@ -325,7 +287,7 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
!else
DebugLib|MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf
@@ -334,13 +296,6 @@ [LibraryClasses.IA32.PEIM, LibraryClasses.IA32.PEI_CORE, LibraryClasses.IA32.SEC
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib.inf
!endif
- !if $(MINNOW2_FSP_BUILD) == TRUE
- PlatformFspLib|Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
- !endif
-!if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCPei/Tpm2DeviceLibSeC.inf
-!endif
-
[LibraryClasses.X64]
#
# DXE phase common
@@ -357,7 +312,7 @@ [LibraryClasses.X64]
!endif
LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf
- EfiRegTableLib|$(PLATFORM_PACKAGE)/Library/EfiRegTableLib/EfiRegTableLib.inf
+ EfiRegTableLib|Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
@@ -372,14 +327,14 @@ [LibraryClasses.X64.DXE_DRIVER]
CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
- FlashDeviceLib|$(PLATFORM_PACKAGE)/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
+ FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLibDxe.inf
[LibraryClasses.X64.DXE_CORE]
HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
@@ -387,7 +342,7 @@ [LibraryClasses.X64.DXE_CORE]
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
!if $(PERFORMANCE_ENABLE) == TRUE
PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
!if $(SOURCE_DEBUG_ENABLE) == TRUE
@@ -412,7 +367,7 @@ [LibraryClasses.X64.DXE_SMM_DRIVER]
!if $(SOURCE_DEBUG_ENABLE) == TRUE
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SmmDebugAgentLib.inf
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
!endif
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuExceptionHandlerLib.inf
@@ -486,12 +441,6 @@ [PcdsFeatureFlag.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdSupportUpdateCapsuleReset|FALSE
-!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmEnableBspElection|FALSE
-!if $(DATAHUB_STATUS_CODE_ENABLE) == TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|TRUE
-!else
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseDataHub|FALSE
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst|FALSE
!if $(TARGET) == RELEASE
@@ -517,59 +466,20 @@ [PcdsFeatureFlag.common]
!endif
- ## This PCD specifies whether PS2 keyboard does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2KbdExtendedVerification|FALSE
-
- ## This PCD specifies whether PS2 mouse does a extended verification during start.
- gEfiMdeModulePkgTokenSpaceGuid.PcdPs2MouseExtendedVerification|FALSE
-
!if $(VARIABLE_INFO_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|TRUE
!else
gEfiMdeModulePkgTokenSpaceGuid.PcdVariableCollectStatistics|FALSE
!endif
- gEfiCpuTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
-
!if $(SOURCE_DEBUG_ENABLE)
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmDebug|TRUE
!endif
+ gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE
+ gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmBlockStartupThisAp|TRUE
+
[PcdsFixedAtBuild.common]
-!if $(MINNOW2_FSP_BUILD) == TRUE
-# $(FLASH_REGION_VLVMICROCODE_BASE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress|0xFFC00000
-# $(FLASH_REGION_VLVMICROCODE_SIZE)
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize|0x00040000
- gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset|0x60
-# $(FLASH_AREA_BASE_ADDRESS)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress|0xFF800000
-# $(FLASH_AREA_SIZE)
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize|0x00800000
-# $(FLASH_REGION_FSPBIN_BASE)
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase|0xFFCC0000
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
-!if $(MINNOW2_FSP_BUILD) == TRUE
- # in FSP, when this got used, the memory already is up
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
-!else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
-!endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
-
-!else
- !if $(MINNOW2_FSP_BUILD) == TRUE
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0x00080000
- !else
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamBase|0xFEF80000
- !endif
- gEfiCpuTokenSpaceGuid.PcdTemporaryRamSize|0x00010000
- gEfiCpuTokenSpaceGuid.PcdPeiTemporaryRamStackSize|0x3C00
-!endif
-
-
!if $(SECURE_BOOT_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x22000
!else
@@ -577,11 +487,8 @@ [PcdsFixedAtBuild.common]
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdHwErrStorageSize|0x00000800
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize|0x400
- gEfiCpuTokenSpaceGuid.PcdCpuIEDRamSize|0x400000
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdS3AcpiReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSupport|FALSE
gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport|FALSE
- gEfiCpuTokenSpaceGuid.PcdCpuSmmApSyncTimeout|1000
!if $(S4_ENABLE) == TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|TRUE
!else
@@ -599,13 +506,9 @@ [PcdsFixedAtBuild.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPerformanceLogEntries|60
!endif
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdEbdaReservedMemorySize|0x10000
gEfiMdeModulePkgTokenSpaceGuid.PcdLoadModuleAtFixAddressEnable|$(TOP_MEMORY_ADDRESS)
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserSubtitleTextColor|0x0
gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserFieldTextColor|0x01
- gEfiCpuTokenSpaceGuid.PcdCpuIEDEnabled|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVbeEnable|TRUE
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBiosVideoCheckVgaEnable|TRUE
!if $(SOURCE_DEBUG_ENABLE) == TRUE
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x17
@@ -651,11 +554,6 @@ [PcdsFixedAtBuild.IA32]
[PcdsPatchableInModule.common]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0x$(PLATFORM_PCIEXPRESS_BASE)
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLegacyBiosCacheLegacyRegion|FALSE
-
- ## This PCD specifies whether to use the optimized timing for best PS2 detection performance.
- # Note this PCD could be set to TRUE for best boot performance and set to FALSE for best device compatibility.
- gEfiMdeModulePkgTokenSpaceGuid.PcdFastPS2Detection|TRUE
#######################################################################################################
#
@@ -830,10 +728,6 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdFTPMStatus|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateSmmDataPtr|0
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0
- gEfiCpuTokenSpaceGuid.PcdCpuS3DataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuHotPlugDataAddress|0
- gEfiCpuTokenSpaceGuid.PcdCpuCallbackSignal|0
- gEfiCpuTokenSpaceGuid.PcdCpuConfigContextBuffer|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
@@ -846,24 +740,7 @@ [PcdsDynamicExDefault.X64.DEFAULT]
[Components.IA32]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
-
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspWrapperSecCore/FspWrapperSecCore.inf {
- !if $(TARGET) == DEBUG
-
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
- IntelFspWrapperPkg/FspInitPei/FspInitPei.inf {
- !if $(TARGET) == DEBUG
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
- !endif
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SecCore.inf
MdeModulePkg/Core/Pei/PeiMain.inf {
!if $(TARGET) == DEBUG
@@ -874,31 +751,23 @@ [Components.IA32]
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
- $(PLATFORM_PACKAGE)/MonoStatusCode/MonoStatusCode.inf {
+ Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.inf {
!if $(TARGET) == DEBUG
<PcdsFixedAtBuild>
gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2E
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MemoryInit.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <BuildOptions>
- !if $(FTPM_ENABLE)==TRUE
- *_*_IA32_CC_FLAGS = /D FTPM_ENABLE
- !endif
}
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
-$(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/SeCUma.inf
!endif
!if $(RC_BINARY_RELEASE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformPei/PlatformPei.inf {
+ Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf {
<BuildOptions>
*_*_IA32_CC_FLAGS = /DRC_BINARY_RELEASE
!if $(TARGET) == DEBUG
@@ -918,10 +787,6 @@ [Components.IA32]
}
!endif
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/Tpm2DeviceSeCPei.inf
-!endif
-
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/PhysicalPresencePei/PhysicalPresencePei.inf
SecurityPkg/Tcg/TcgPei/TcgPei.inf {
@@ -932,7 +797,7 @@ [Components.IA32]
}
!endif
- $(PLATFORM_PACKAGE)/PlatformInitPei/PlatformInitPei.inf {
+ Vlv2TbltDevicePkg/PlatformInitPei/PlatformInitPei.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x803805c6
<LibraryClasses>
@@ -941,34 +806,33 @@ [Components.IA32]
!endif
PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
}
- $(PLATFORM_PACKAGE)/FvInfoPei/FvInfoPei.inf
+ Vlv2TbltDevicePkg/FvInfoPei/FvInfoPei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/VlvInitPeim.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchEarlyInitPeim.inf {
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
}
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchInitPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSmbusArpDisabled.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchSpiPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PeiSmmControl.inf
MdeModulePkg/Universal/PCD/Pei/Pcd.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/CpuPeim.inf
UefiCpuPkg/CpuIoPei/CpuIoPei.inf
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/MpS3.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PiSmmCommunicationPei.inf
+ UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf
!if $(RECOVERY_ENABLE)
#
# Recovery
#
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/IA32/PchUsb.inf
MdeModulePkg/Bus/Pci/EhciPei/EhciPei.inf
MdeModulePkg/Bus/Usb/UsbBusPei/UsbBusPei.inf
MdeModulePkg/Bus/Usb/UsbBotPei/UsbBotPei.inf
@@ -994,17 +858,6 @@ [Components.IA32]
MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf
-!if $(FTPM_ENABLE) == TRUE
- SecurityPkg/Tcg/Tcg2Pei/Tcg2Pei.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- NULL|SecurityPkg/Library\HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
- }
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1014,7 +867,7 @@ [Components.IA32]
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTablePei/FirmwarePerformancePei.inf{
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1022,17 +875,6 @@ [Components.IA32]
MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf
!endif
[Components.X64]
- !if $(MINNOW2_FSP_BUILD) == TRUE
- IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.inf {
- !if $(TARGET) == DEBUG
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
- <LibraryClasses>
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- }
-
- !endif
#
# EDK II Related Platform codes
#
@@ -1050,24 +892,10 @@ [Components.X64]
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
}
- IntelFrameworkModulePkg/Universal/Acpi/AcpiS3SaveDxe/AcpiS3SaveDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x27
- <LibraryClasses>
- !if $(TARGET) != RELEASE
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- !endif
- <BuildOptions>
- ICC:*_*_*_CC_FLAGS = /D MDEPKG_NDEBUG
- GCC:*_*_*_CC_FLAGS = -D MDEPKG_NDEBUG
- }
MdeModulePkg/Universal/PCD/Dxe/Pcd.inf {
<LibraryClasses>
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
}
- IntelFrameworkModulePkg/Universal/CpuIoDxe/CpuIoDxe.inf
UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf
MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
@@ -1100,13 +928,9 @@ [Components.X64]
!if $(TPM_ENABLED) == TRUE
NULL|SecurityPkg/Library/DxeTpmMeasureBootLib/DxeTpmMeasureBootLib.inf
-!endif
-!if $(FTPM_ENABLE) == TRUE
- NULL|SecurityPkg/Library/DxeTpm2MeasureBootLib/DxeTpm2MeasureBootLib.inf
!endif
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MpCpu.inf
- $(PLATFORM_PACKAGE)/Metronome/Metronome.inf
+ MdeModulePkg/Universal/Metronome/Metronome.inf
IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
<LibraryClasses>
@@ -1116,12 +940,8 @@ [Components.X64]
PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
- !if $(FTPM_ENABLE) == TRUE
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- !else
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
- !endif
}
$(PLATFORM_PACKAGE)/UiApp/UiApp.inf
@@ -1133,11 +953,11 @@ [Components.X64]
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf {
<LibraryClasses>
NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbSmm.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbSmm.inf
MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiSmm.inf
!if $(SECURE_BOOT_ENABLE) == TRUE
SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf {
<LibraryClasses>
@@ -1159,9 +979,9 @@ [Components.X64]
PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
- $(PLATFORM_PACKAGE)/FvbRuntimeDxe/FvbRuntimeDxe.inf
+ Vlv2TbltDevicePkg/FvbRuntimeDxe/FvbRuntimeDxe.inf
- $(PLATFORM_PACKAGE)/PlatformSetupDxe/PlatformSetupDxe.inf
+ Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
!if $(DATAHUB_ENABLE) == TRUE
IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
@@ -1169,38 +989,30 @@ [Components.X64]
gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
}
!endif
- IntelFrameworkModulePkg/Universal/StatusCode/DatahubStatusCodeHandlerDxe/DatahubStatusCodeHandlerDxe.inf
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
- !if $(USE_HPET_TIMER) == TRUE
- PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
- !else
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmartTimer.inf
- !endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
+ PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmControl.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/IntelPchLegacyInterrupt.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmbusDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchReset.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitDxe.inf{
<PcdsPatchableInModule>
gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchInitSmm.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSmiDispatcher.inf
!if $(PCIESC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPcieSmm.inf
!endif
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
-
- IntelFrameworkModulePkg/Universal/LegacyRegionDxe/LegacyRegionDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchSpiRuntime.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchPolicyInitDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchBiosWriteProtect.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmmAccess.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PciHostBridge.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/VlvInitDxe.inf
#
# Performance Application; Set PERFORMANCE_ENABLE=TRUE for normal boot performance and smm performance data
@@ -1220,35 +1032,9 @@ [Components.X64]
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PnpDxe.inf
-!if $(SEC_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/HeciDrv.inf {
-!if $(SEC_DEBUG_INFO_ENABLE) == TRUE
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=1
-!else
- <BuildOptions>
- *_*_X64_CC_FLAGS = /DSEC_DEBUG_INFO=0
-!endif
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SeCPolicyInitDxe.inf
-!endif
-
-!if $(FTPM_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Tpm2DeviceSeCDxe.inf
- SecurityPkg/Tcg/MemoryOverwriteControl/TcgMor.inf
- SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf{
- <LibraryClasses>
- NULL|SecurityPkg/Library/HashInstanceLibSha1/HashInstanceLibSha1.inf
- NULL|SecurityPkg/Library/HashInstanceLibSha256/HashInstanceLibSha256.inf
- PcdLib|MdePkg/Library\DxePcdLib/DxePcdLib.inf
- Tpm2DeviceLib|Vlv2TbltDevicePkg/Library/Tpm2DeviceLibSeCDxe/Tpm2DeviceLibSeC.inf
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/FtpmSmm.inf
-!endif
!if $(TPM_ENABLED) == TRUE
SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigPei.inf {
<LibraryClasses>
@@ -1275,24 +1061,23 @@ [Components.X64]
#
# EDK II Related Platform codes
#
- $(PLATFORM_PACKAGE)/PlatformSmm/PlatformSmm.inf{
+ Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf{
<LibraryClasses>
!if $(TARGET) != RELEASE
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
!endif
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
- $(PLATFORM_PACKAGE)/PlatformInfoDxe/PlatformInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
- $(PLATFORM_PACKAGE)/PlatformDxe/PlatformDxe.inf
+ Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf
+ Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
- $(PLATFORM_PACKAGE)/PciPlatform/PciPlatform.inf
- $(PLATFORM_PACKAGE)/SaveMemoryConfig/SaveMemoryConfig.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
- $(PLATFORM_PACKAGE)/PpmPolicy/PpmPolicy.inf
- $(PLATFORM_PACKAGE)/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+ Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+ Vlv2TbltDevicePkg/SaveMemoryConfig/SaveMemoryConfig.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PlatformCpuPolicy.inf
+ Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
!if $(GOP_DRIVER_ENABLE) == TRUE
- $(PLATFORM_PACKAGE)/PlatformGopPolicy/PlatformGopPolicy.inf
+ Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
!endif
@@ -1303,13 +1088,15 @@ [Components.X64]
MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf
MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf
UefiCpuPkg/CpuDxe/CpuDxe.inf
+ UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf
MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf
- $(PLATFORM_PACKAGE)/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PowerManagement2.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/DigitalThermalSensor.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/GraphicDxeInitSmm.inf
#
# ACPI
@@ -1322,14 +1109,14 @@ [Components.X64]
<LibraryClasses>
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
+ MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- $(PLATFORM_PACKAGE)/BootScriptSaveDxe/BootScriptSaveDxe.inf
IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
- $(PLATFORM_RC_PACKAGE)/AcpiTablesPCAT/AcpiTables.inf
+ Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
- $(PLATFORM_PACKAGE)/AcpiPlatform/AcpiPlatform.inf
+ Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf
@@ -1339,31 +1126,23 @@ [Components.X64]
MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/ISPDxe.inf
-#
-# ISA
-#
- $(PLATFORM_PACKAGE)/Wpce791/Wpce791.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2MouseDxe/Ps2MouseDxe.inf
- IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
-#
-# SDIO
-#
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcHost.inf
-# $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/MmcMediaDevice.inf
+ #
+ # ISA
+ #
+ Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
+ MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
+
!if $(ACPI50_ENABLE) == TRUE
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableSmm/FirmwarePerformanceSmm.inf {
<LibraryClasses>
- TimerLib|$(PLATFORM_PACKAGE)/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
+ TimerLib|Vlv2TbltDevicePkg/Library/IntelPchAcpiTimerLib/IntelPchAcpiTimerLib.inf
}
!endif
@@ -1371,7 +1150,6 @@ [Components.X64]
# IDE/SCSI/AHCI
#
MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
- IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBusDxe.inf
MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
@@ -1395,7 +1173,7 @@ [Components.X64]
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000
}
!if $(SATA_ENABLE) == TRUE
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SataController.inf
!endif
MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
!if $(SCSI_ENABLE) == TRUE
@@ -1408,7 +1186,6 @@ [Components.X64]
MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
- IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf
MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
@@ -1432,9 +1209,9 @@ [Components.X64]
# SMBIOS
#
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
- $(PLATFORM_PACKAGE)/SmBiosMiscDxe/SmBiosMiscDxe.inf
+ Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
+ Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
@@ -1449,12 +1226,6 @@ [Components.X64]
#
!include NetworkPkg/Network.dsc.inc
-!if $(NETWORK_ENABLE) == TRUE
- !if $(CSM_ENABLE) == TRUE
- IntelFrameworkModulePkg/Csm/BiosThunk/Snp16Dxe/Snp16Dxe.inf
- !endif
-!endif
-
!if $(CAPSULE_ENABLE) || $(MICOCODE_CAPSULE_ENABLE)
MdeModulePkg/Universal/EsrtFmpDxe/EsrtFmpDxe.inf
MdeModulePkg/Application/CapsuleApp/CapsuleApp.inf
@@ -1472,7 +1243,7 @@ [Components.X64]
<LibraryClasses>
DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|$(PLATFORM_PACKAGE)/Library/SerialPortLib/SerialPortLib.inf
+ SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
}
!endif
@@ -1484,11 +1255,7 @@ [BuildOptions]
#
# Define token for different Platform
#
-!if $(MINNOW2_FSP_BUILD) == TRUE
- DEFINE MINNOW2_FSP_OPTION = /DMINNOW2_FSP_BUILD
-!else
DEFINE MINNOW2_FSP_OPTION =
-!endif
!if $(ENBDT_PF_BUILD) == TRUE
DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=1
@@ -1527,11 +1294,6 @@ [BuildOptions]
DEFINE X64_BUILD_ENABLE =
!endif
-!if $(FTPM_ENABLE) == TRUE
- DEFINE DSC_FTPM_BUILD_OPTIONS = /DFTPM_ENABLE
-!else
- DEFINE DSC_FTPM_BUILD_OPTIONS =
-!endif
!if $(TPM_ENABLED) == TRUE
DEFINE DSC_TPM_BUILD_OPTIONS = /DTPM_ENABLED
!else
@@ -1539,7 +1301,7 @@ [BuildOptions]
!endif
- DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
+ DEFINE EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS = $(MINNOW2_FSP_OPTION) $(MINNOW2_BUILD_OPTION) $(ENBDT_PF_ENABLE) $(EXTERNAL_VGA_BUILD_OPTION) $(PCIE_ENUM_WA_BUILD_OPTION) $(X0_WA_ENABLE_BUILD_OPTION) $(A0_WA_ENABLE_BUILD_OPTION) $(MICROCODE_FREE_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(SYSCTL_ID_BUILD_OPTION) $(CLKGEN_CONFIG_EXTRA_BUILD_OPTION) $(SYSCTL_X0_CONVERT_BOARD_OPTION) $(ENBDT_S3_SUPPORT_OPTIONS) $(SATA_SUPPORT_BUILD_OPTION) $(PCIESC_SUPPORT_BUILD_OPTION) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS)
!if $(PERFORMANCE_ENABLE) == TRUE
DEFINE PDB_BUILD_OPTION = /Zi
!endif
@@ -1572,76 +1334,6 @@ [BuildOptions.common.EDKII.DXE_SMM_DRIVER, BuildOptions.common.EDKII.SMM_CORE]
MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000
-[BuildOptions.Common.EDK]
-
-#
-# Define token for different Platform
-#
-!if $(ENBDT_PF_BUILD) == TRUE
- DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=1
-!else
- DEFINE ENBDT_PF_ENABLE = /DENBDT_PF_ENABLE=0
-!endif
-
-!if $(PERFORMANCE_ENABLE) == TRUE
- RELEASE_*_*_DLINK_FLAGS = /DEBUG
-!endif
-
-!if $(S3_ENABLE) == TRUE
- DEFINE DSC_S3_BUILD_OPTIONS = /DEFI_S3_RESUME
-!else
- DEFINE DSC_S3_BUILD_OPTIONS =
-!endif
-
-!if $(ENBDT_S3_SUPPORT) == TRUE
- DEFINE ENBDT_S3_SUPPORT_OPTIONS = /DNOCS_S3_SUPPORT
-!else
- DEFINE ENBDT_S3_SUPPORT_OPTIONS =
-!endif
-
-!if $(X64_CONFIG) == TRUE
- DEFINE X64_BUILD_ENABLE = /DX64_BUILD_ENABLE=1
-!else
- DEFINE X64_BUILD_ENABLE =
-!endif
-
-
- DEFINE EDK_GLUE_LIB_DEBUG =
- DEFINE DEBUG_BUILD_OPTIONS = /D EFI_DEBUG /D DEBUG_MODE=1 /GL- $(EDK_GLUE_LIB_DEBUG) /DEDKII_GLUE_DebugPrintErrorLevel=(EFI_D_ERROR)
- DEFINE EDK_DSC_FEATURE_BUILD_OPTIONS = $(DSC_S3_BUILD_OPTIONS) $(DSC_ACPI_BUILD_OPTIONS) $(DSC_SEC_BUILD_OPTIONS) $(DSC_FTPM_BUILD_OPTIONS) $(DSC_FTPM_ERROR_WR_BUILD_OPTIONS) $(DSC_TPM_BUILD_OPTIONS) $(SOFTSDV_BUILD_OPTIONS) $(SIMICS_BUILD_OPTIONS) $(HYBRID_BUILD_OPTIONS) $(COMPACT_BUILD_OPTIONS) $(VP_BUILD_OPTIONS) $(QT_BUILD_OPTIONS) $(DSC_BYTI_SECURE_BOOT_BUILD_OPTIONS) /D$(PROJECT_SC_CHIPSET)
-
- DEFINE EDK_DSC_OTHER_BUILD_OPTIONS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS) $(SV_BUILD_OPTIONS) $(INTEL_FASTBOOT_BUILD_OPTION)
- DEFINE EDK_DSC_GLOBAL_BUILD_OPTIONS = $(ENBDT_PF_ENABLE) $(EDK_DSC_FEATURE_BUILD_OPTIONS) $(EDK_DSC_OTHER_BUILD_OPTIONS) /D EFI_SPECIFICATION_VERSION=0x00020000 /D PI_SPECIFICATION_VERSION=0x00000009 /D TIANO_RELEASE_VERSION=0x00080006 /D SUPPORT_DEPRECATED_PCI_CFG_PPI /D CSM_SMMENTRY_PORT8DATA8 /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE) /D MAX_VARIABLE_SIZE=0x2000 /D EFI_FIRMWARE_VENDOR="L/"INTEL/"" /D EFI_BUILD_VERSION="L/"EDKII/"" /DEFI_PEI_REPORT_STATUS_CODE_ON $(ENBDT_S3_SUPPORT_OPTIONS)
-
- *_*_IA32_ASM_FLAGS = /DEFI32 /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
- DEBUG_*_IA32_CC_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_CC_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_VFRPP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_VFRPP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_APP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_APP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_IA32_PP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_IA32_PP_FLAGS = /D EFI32 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_IA32_ASLPP_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASLCC_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_IA32_ASM16_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
-
- *_*_X64_ASM_FLAGS = /DEFIX64 /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
- DEBUG_*_X64_CC_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_CC_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_VFRPP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_VFRPP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_APP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_APP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- DEBUG_*_X64_PP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS) $(DEBUG_BUILD_OPTIONS)
- RELEASE_*_X64_PP_FLAGS = /D EFIX64 $(EDK_DSC_GLOBAL_BUILD_OPTIONS)
- *_*_X64_ASLPP_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASLCC_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=0x$(PLATFORM_PCIEXPRESS_BASE)
- *_*_X64_ASM16_FLAGS = /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h
- # *_*_*_BUILD_FLAGS = -s
- *_*_*_VFR_FLAGS = -c
- *_*_*_BUILD_FLAGS = -c
-
[BuildOptions.Common.EDKII]
*_*_IA32_ASM_FLAGS = $(VP_BUILD_OPTIONS) /D EDKII_GLUE_PciExpressBaseAddress=$(PLATFORM_PCIEXPRESS_BASE)h /DNOCS_S3_SUPPORT
@@ -1656,25 +1348,3 @@ [BuildOptions.Common.EDKII]
*_*_X64_APP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_PP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
*_*_X64_ASLPP_FLAGS = $(EDK_EDKII_DSC_FEATURE_BUILD_OPTIONS)
-
-
-[Components.X64]
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cBus.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cHost.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0xF0000043
- }
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cPortA0Pio.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
- $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/I2cMmioDeviceDxe.inf {
- <PcdsPatchableInModule>
- gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x00000043
- }
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
index 53372bb922..1ba75175e1 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
@@ -1,18 +1,15 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
**/
#ifndef _PLAT_OVER_MNGR_H_
#define _PLAT_OVER_MNGR_H_
-#include <FrameworkDxe.h>
+#include <PiDxe.h>
#include <Protocol/HiiConfigAccess.h>
#include <Protocol/HiiConfigRouting.h>
@@ -57,24 +54,11 @@
#include <CpuType.h>
#include <Guid/PlatformCpuInfo.h>
#include <Protocol/SimpleTextIn.h>
-#include <Protocol/FrameworkFormBrowser.h>
+
+typedef UINT16 STRING_REF;
+
extern EFI_HII_HANDLE mHiiHandle;
-UINT32
-ConvertBase10ToRaw (
- IN EFI_EXP_BASE10_DATA *Data);
-
-UINT32
-ConvertBase2ToRaw (
- IN EFI_EXP_BASE2_DATA *Data);
-
-EFI_STATUS
-GetStringFromToken (
- IN EFI_GUID *ProducerGuid,
- IN STRING_REF Token,
- OUT CHAR16 **String
- );
-
VOID
SwapEntries (
IN CHAR8 *Data
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
index 6d7e7c3f6c..ae100df26d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
@@ -1,11 +1,8 @@
#
#
-# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
-#
+# Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.<BR>
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
#
# This driver produces UEFI PLATFORM_DRIVER_OVERRIDE_PROTOCOL if this protocol doesn't exist.
# It doesn't install again if this protocol exists.
@@ -63,7 +60,6 @@ [Sources]
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec #for PchAccess.h
SecurityPkg/SecurityPkg.dec
@@ -94,10 +90,6 @@ [Guids]
#
# gEfiCallerIdGuid ## Private ## Variable:L"PlatDriOver"
gEfiIfrTianoGuid ## CONSUMES ## Guid
- gEfiProcessorSubClassGuid
- gEfiMiscSubClassGuid
- gEfiCacheSubClassGuid
- gEfiMemorySubClassGuid
gEfiPlatformInfoGuid
gEfiNormalSetupGuid
gEfiSecureBootEnableDisableGuid
@@ -123,8 +115,6 @@ [Protocols]
gEfiDevicePathToTextProtocolGuid ## CONSUMED
gEdkiiFormBrowserEx2ProtocolGuid
- gEfiDataHubProtocolGuid
- gEfiLegacyBiosProtocolGuid
gEfiSimpleNetworkProtocolGuid
gEfiDiskInfoProtocolGuid ## CONSUMED
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
index c404ada588..fb82cdb984 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
SetupInfoRecords.c
@@ -19,7 +16,6 @@ Revision History:
--*/
#include "PlatformSetupDxe.h"
-#include <Protocol/LegacyBios.h>
#include <Protocol/PciRootBridgeIo.h>
#include <Protocol/SimpleNetwork.h>
#include <Protocol/DevicePath.h>
@@ -31,7 +27,6 @@ Revision History:
#include <Protocol/Smbios.h>
#include <IndustryStandard/SmBios.h>
#include <Library/IoLib.h>
-#include <Library/I2CLib.h>
#include <Guid/GlobalVariable.h>
#include "Valleyview.h"
@@ -1172,11 +1167,6 @@ UpdatePlatformInformation (
{
UINT32 MicroCodeVersion;
CHAR16 Buffer[40];
- UINT8 IgdVBIOSRevH;
- UINT8 IgdVBIOSRevL;
- UINT16 EDX;
- EFI_IA32_REGISTER_SET RegSet;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios = NULL;
EFI_STATUS Status;
UINT8 CpuFlavor=0;
EFI_PEI_HOB_POINTERS GuidHob;
@@ -1202,35 +1192,6 @@ UpdatePlatformInformation (
}
}
- //
- //VBIOS version
- //
- Status = gBS->LocateProtocol(
- &gEfiLegacyBiosProtocolGuid,
- NULL,
- (void **)&LegacyBios
- );
- if (!EFI_ERROR (Status)) {
- RegSet.X.AX = 0x5f01;
- Status = LegacyBios->Int86 (LegacyBios, 0x10, &RegSet);
- ASSERT_EFI_ERROR(Status);
-
- //
- // simulate AMI int15 (ax=5f01) handler
- // check NbInt15.asm in AMI code for asm edition
- //
- EDX = (UINT16)((RegSet.E.EBX >> 16) & 0xffff);
- IgdVBIOSRevH = (UINT8)(((EDX & 0x0F00) >> 4) | (EDX & 0x000F));
- IgdVBIOSRevL = (UINT8)(((RegSet.X.BX & 0x0F00) >> 4) | (RegSet.X.BX & 0x000F));
-
- if (IgdVBIOSRevH==0 && IgdVBIOSRevL==0){
- HiiSetString(mHiiHandle, STRING_TOKEN(STR_CHIP_IGD_VBIOS_REV_VALUE), L"N/A", NULL);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%02X%02X", IgdVBIOSRevH,IgdVBIOSRevL);
- HiiSetString(mHiiHandle, STRING_TOKEN(STR_CHIP_IGD_VBIOS_REV_VALUE), Buffer, NULL);
- }
- }
-
Status = GetGOPDriverName(Name);
if (!EFI_ERROR(Status))
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
index 8b46fbdfd1..14b9250e99 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
Platform.c
@@ -70,26 +68,9 @@ UINT8 mTco1Sources[] = {
IchnNmi
};
-UINTN
-DevicePathSize (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- );
-
VOID
S4S5ProgClock();
-EFI_STATUS
-InitRuntimeScriptTable (
- IN EFI_SYSTEM_TABLE *SystemTable
- );
-
-VOID
-S5SleepWakeOnRtcCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
- );
-
-
VOID
EnableS5WakeOnRtc();
@@ -98,12 +79,6 @@ HexToBcd(
UINT8 HexValue
);
-UINT8
-BcdToHex(
- IN UINT8 BcdValue
- );
-
-
VOID
CpuSmmSxWorkAround(
);
@@ -779,46 +754,6 @@ DummyTco1Callback (
{
}
-UINTN
-DevicePathSize (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *Start;
-
- if (DevicePath == NULL) {
- return 0;
- }
-
- //
- // Search for the end of the device path structure
- //
- Start = DevicePath;
- while (!IsDevicePathEnd (DevicePath)) {
- DevicePath = NextDevicePathNode (DevicePath);
- }
-
- //
- // Compute the size and add back in the size of the end device path structure
- //
- return ((UINTN)DevicePath - (UINTN)Start) + sizeof(EFI_DEVICE_PATH_PROTOCOL);
-}
-
-/**
-
- @param DispatchHandle The handle of this callback, obtained when registering
- @param DispatchContext The predefined context which contained sleep type and phase
-
-**/
-VOID
-S5SleepWakeOnRtcCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
- )
-{
- EnableS5WakeOnRtc();
-}
-
/**
@retval 1. Check Alarm interrupt is not set.
@@ -981,17 +916,3 @@ HexToBcd(
return ((UINT8)(LowByte + (HighByte << 4)));
}
-UINT8
-BcdToHex(
- IN UINT8 BcdValue
- )
-{
- UINTN HighByte;
- UINTN LowByte;
-
- HighByte = (UINTN)((BcdValue >> 4) * 10);
- LowByte = (UINTN)(BcdValue & 0x0F);
-
- return ((UINT8)(LowByte + HighByte));
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
index 1b7b05d9b3..3c4f55cf54 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
@@ -1,11 +1,8 @@
#
#
-# Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
#
# Module Name:
#
@@ -51,16 +48,8 @@ [LibraryClasses]
[Guids]
gEfiSetupVariableGuid
- gDmiDataGuid
- gEfiAcpiVariableCompatiblityGuid
- gEfiPciLanInfoGuid
- gEfiPciLanInfoGuid
-
-[FeaturePcd]
- gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode
[Protocols]
- gEfiSmmBase2ProtocolGuid
gEfiSmmIchnDispatchProtocolGuid
gEfiGlobalNvsAreaProtocolGuid
gEfiSmmSwDispatchProtocolGuid
@@ -75,13 +64,11 @@ [Packages]
IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
[Pcd.common]
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
[Depex]
- gEfiSmmBase2ProtocolGuid AND
gEfiSmmAccess2ProtocolGuid AND
gEfiSmmPowerButtonDispatchProtocolGuid AND
gEfiSmmSxDispatchProtocolGuid AND
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/S3Save.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/S3Save.c
index 19089233b2..7bd0270655 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/S3Save.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/S3Save.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
IchS3Save.c
@@ -23,52 +20,6 @@ Revision History
extern UINT16 mAcpiBaseAddr;
EFI_PHYSICAL_ADDRESS mRuntimeScriptTableBase;
-EFI_STATUS
-InitRuntimeScriptTable (
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
- UINT32 VarAttrib;
- UINTN VarSize;
- ACPI_VARIABLE_SET_COMPATIBILITY *AcpiVariableBase;
-
- //
- // Allocate runtime ACPI script table space. We need it to save some
- // settings done by CSM, which runs after normal script table closed
- //
- Status = gBS->AllocatePages (
- AllocateAnyPages,
- EfiACPIReclaimMemory,
- 1,
- &mRuntimeScriptTableBase
- );
- if (EFI_ERROR(Status)) {
- return EFI_OUT_OF_RESOURCES ;
- }
-
- //
- // Save runtime script table base into global ACPI variable
- //
- VarAttrib = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS
- | EFI_VARIABLE_NON_VOLATILE;
- VarSize = sizeof (UINTN);
- Status = SystemTable->RuntimeServices->GetVariable (
- ACPI_GLOBAL_VARIABLE,
- &gEfiAcpiVariableCompatiblityGuid,
- &VarAttrib,
- &VarSize,
- &AcpiVariableBase
- );
- if (EFI_ERROR(Status)) {
- return Status;
- }
-
- AcpiVariableBase->RuntimeScriptTableBase = mRuntimeScriptTableBase;
-
- return EFI_SUCCESS;
-}
-
EFI_STATUS
SaveRuntimeScriptTable (
VOID
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
index 8bf2ebafc1..bcb1d8ae92 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
SmmPlatform.h
@@ -35,7 +33,6 @@ Abstract:
#include <Protocol/PciRootBridgeIo.h>
#include <Protocol/LoadedImage.h>
#include "Protocol/GlobalNvsArea.h"
-#include <Guid/AcpiVariableCompatibility.h>
#include <Guid/SetupVariable.h>
#include <Guid/EfiVpdData.h>
#include <Guid/PciLanInfo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf b/Platform/Intel/Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
index 331076a2d4..2c0a13f6af 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf
@@ -1,9 +1,8 @@
#/*++
#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
#
# Module Name:
#
@@ -29,7 +28,6 @@ [Sources]
[Packages]
MdePkg/MdePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2SocBinPkg/Vlv2SocBinPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
[LibraryClasses]
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c
index aa8c213d83..4e02486853 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c
@@ -1,10 +1,8 @@
/*++
-Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -138,7 +136,7 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBaseBoardManufacturer)
&MacStr
);
if (EFI_ERROR (Status)) {
- return Status;
+ MacStr = L"000000000000";
}
SerialNumber = MacStr;
SerialNumStrLen = StrLen(SerialNumber);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
index 15c180129c..81b66ce9af 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
@@ -1,13 +1,9 @@
/*++
-Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved.
-
+Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved.
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
Module Name:
MiscOemType0x94Function.c
@@ -36,7 +32,6 @@ Abstract:
#include <Protocol/I2cBus.h>
#include <Library/IoLib.h>
-#include <Library/I2CLib.h>
#include <Library/CpuIA32.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Guid/PlatformInfo.h>
@@ -527,11 +522,6 @@ UpdatePlatformInformation (
{
UINT32 MicroCodeVersion;
CHAR16 Buffer[40];
- UINT8 IgdVBIOSRevH;
- UINT8 IgdVBIOSRevL;
- UINT16 EDX;
- EFI_IA32_REGISTER_SET RegSet;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios = NULL;
EFI_STATUS Status;
UINT8 CpuFlavor=0;
EFI_PEI_HOB_POINTERS GuidHob;
@@ -561,34 +551,6 @@ UpdatePlatformInformation (
}
}
- //
- //VBIOS version
- //
- Status = gBS->LocateProtocol(
- &gEfiLegacyBiosProtocolGuid,
- NULL,
- (VOID **)&LegacyBios
- );
-
- RegSet.X.AX = 0x5f01;
- Status = LegacyBios->Int86 (LegacyBios, 0x10, &RegSet);
- ASSERT_EFI_ERROR(Status);
-
- //
- // simulate AMI int15 (ax=5f01) handler
- // check NbInt15.asm in AMI code for asm edition
- //
- EDX = (UINT16)((RegSet.E.EBX >> 16) & 0xffff);
- IgdVBIOSRevH = (UINT8)(((EDX & 0x0F00) >> 4) | (EDX & 0x000F));
- IgdVBIOSRevL = (UINT8)(((RegSet.X.BX & 0x0F00) >> 4) | (RegSet.X.BX & 0x000F));
-
- if (IgdVBIOSRevH==0 && IgdVBIOSRevL==0) {
- HiiSetString(mHiiHandle, STRING_TOKEN(STR_CHIP_IGD_VBIOS_REV_VALUE), L"N/A", NULL);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%02X%02X", IgdVBIOSRevH,IgdVBIOSRevL);
- HiiSetString(mHiiHandle, STRING_TOKEN(STR_CHIP_IGD_VBIOS_REV_VALUE), Buffer, NULL);
- }
-
Status = TGetGOPDriverName(Name);
if(!EFI_ERROR(Status))
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSystemManufacturerFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSystemManufacturerFunction.c
index 63c4f50ed5..f537e0db76 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSystemManufacturerFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSystemManufacturerFunction.c
@@ -1,10 +1,8 @@
/*++
-Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -219,8 +217,8 @@ AddSmbiosManuCallback (
NULL,
&MacStr
);
- if (EFI_ERROR (Status)) {
- return Status;
+ if (EFI_ERROR (Status)) {
+ MacStr = L"000000000000";
}
SerialNumber = MacStr;
SerialNumStrLen = StrLen(SerialNumber);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
index 9d2f5410a0..99b1a18185 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
@@ -2,12 +2,9 @@
# Component name for module MiscSubclass
#
# FIX ME!
-# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
-#
+# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-#
#
##
@@ -87,9 +84,8 @@ [Packages]
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- NetworkPkg/NetworkPkg.dec
+ NetworkPkg/NetworkPkg.dec
[LibraryClasses]
HiiLib
@@ -107,13 +103,10 @@ [LibraryClasses]
PrintLib
CpuIA32Lib
PchPlatformLib
- I2cLib
NetLib
HobLib
[Guids]
- gEfiProcessorSubClassGuid
- gEfiCacheSubClassGuid
gEfiNormalSetupGuid
gEfiPlatformInfoGuid
gEfiVlv2VariableGuid
@@ -137,4 +130,4 @@ [Pcd]
gEfiVLVTokenSpaceGuid.PcdProductSerialNumber
[Depex]
- gEfiSmbiosProtocolGuid AND gMemInfoProtocolGuid AND gEfiMpServiceProtocolGuid AND gEfiSimpleNetworkProtocolGuid
+ gEfiSmbiosProtocolGuid AND gMemInfoProtocolGuid AND gEfiMpServiceProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
index ba81bd9def..8fe1482106 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
@@ -1,13 +1,10 @@
/*++
-Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved
-
+Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
IgdOpRegion.c
@@ -35,14 +32,12 @@ Abstract:
#include "IgdOpRegion.h"
#include "VlvPlatformInit.h"
-#include <FrameworkDxe.h>
-#include <Uefi.h>
+#include <PiDxe.h>
#include <PchRegs.h>
#include <Guid/DataHubRecords.h>
#include <Protocol/IgdOpRegion.h>
-#include <Protocol/FrameworkHii.h>
#include <Protocol/FirmwareVolume2.h>
#include <Protocol/PlatformGopPolicy.h>
#include <Protocol/PciIo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.h b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.h
index cd1d208d61..597bdaf46a 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.h
@@ -1,13 +1,10 @@
/*++
-Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-
+Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
IgdOpRegion.h
@@ -36,7 +33,7 @@ Abstract:
#include "VlvPlatformInit.h"
#include "VlvCommonDefinitions.h"
#include <Uefi/UefiInternalFormRepresentation.h>
-#include <FrameworkDxe.h>
+#include <PiDxe.h>
//
//
@@ -177,24 +174,6 @@ GetSVER (
OUT UINT8 *SVER
);
-/**
- Acquire the string associated with the ProducerGuid and return it.
-
- @param ProducerGuid The Guid to search the HII database for
- @param Token The token value of the string to extract
- @param String The string that is extracted
-
- @retval EFI_SUCCESS The function completed successfully
- @retval EFI_NOT_FOUND The requested string was not found
-
-**/
-EFI_STATUS
-GetStringFromToken (
- IN EFI_GUID *ProducerGuid,
- IN STRING_REF Token,
- OUT CHAR16 **String
- );
-
/**
Graphics OpRegion / Software SCI driver installation function.
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
index 9d277dd7cf..1e86adadb3 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
@@ -2,11 +2,10 @@
#
#/*++
#
-# Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved
-#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
+
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
#
# Module Name:
#
@@ -34,7 +33,6 @@ [Sources]
[Packages]
MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
index d8594053b0..8cf8938a4e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
+++ b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
@@ -212,8 +212,12 @@ if defined VS140COMNTOOLS (
goto :BldFail
)
-echo Ensuring correct build directory is present for GenBiosId...
-set BUILD_PATH=%WORKSPACE%\Build\%PLATFORM_NAME%\%TARGET%_%TOOL_CHAIN_TAG%
+echo Ensuring correct build directory is present
+if "%Arch%"=="IA32" (
+ set BUILD_PATH=%WORKSPACE%\Build\%PLATFORM_NAME%IA32\%TARGET%_%TOOL_CHAIN_TAG%
+) else (
+ set BUILD_PATH=%WORKSPACE%\Build\%PLATFORM_NAME%\%TARGET%_%TOOL_CHAIN_TAG%
+)
echo Modifing Conf files for this build...
:: Remove lines with these tags from target.txt
@@ -240,16 +244,6 @@ move /Y %WORKSPACE%\Conf\target.txt.tmp %WORKSPACE%\Conf\target.txt >nul
:: Build BIOS
::**********************************************************************
-echo Creating BiosId...
-if not exist %BUILD_PATH%\IA32 mkdir %BUILD_PATH%\IA32
-%PLATFORM_PACKAGE%\GenBiosId.exe -i %WORKSPACE%\Conf\BiosId.env -o %BUILD_PATH%\IA32\BiosId.bin -ob %WORKSPACE%\Conf\BiosId.bat
-if "%Arch%"=="X64" (
- if not exist %BUILD_PATH%\X64 mkdir %BUILD_PATH%\X64
- %PLATFORM_PACKAGE%\GenBiosId.exe -i %WORKSPACE%\Conf\BiosId.env -o %BUILD_PATH%\X64\BiosId.bin -ob %WORKSPACE%\Conf\BiosId.bat
-)
-
-if %ERRORLEVEL% NEQ 0 goto BldFail
-
echo.
echo Invoking EDK2 build...
call build %Build_Flags%
@@ -267,31 +261,14 @@ pushd %PLATFORM_PACKAGE%
%PLATFORM_PACKAGE%\fce read -i %BUILD_PATH%\FV\Vlv.fd > %BUILD_PATH%\FV\HiiDefaultData.txt
:: save changes to VlvXXX.fd
-%PLATFORM_PACKAGE%\fce update -i %BUILD_PATH%\FV\Vlv.fd -s %BUILD_PATH%\FV\HiiDefaultData.txt -o %BUILD_PATH%\FV\Vlv%Arch%.fd
+%PLATFORM_PACKAGE%\fce update -i %BUILD_PATH%\FV\Vlv.fd -s %BUILD_PATH%\FV\HiiDefaultData.txt -o %BUILD_PATH%\FV\Vlv.ROM
popd
if %ERRORLEVEL% NEQ 0 goto BldFail
::echo FD successfully updated with default Hii values.
-:: Set the Board_Id, Build_Type, Version_Major, and Version_Minor environment variables
-find /v "#" %WORKSPACE%\Conf\BiosId.env > ver_strings
-for /f "tokens=1,3" %%i in (ver_strings) do set %%i=%%j
-del /f/q ver_strings >nul
-
-set BIOS_Name=%BOARD_ID%_%Arch%_%BUILD_TYPE%_%VERSION_MAJOR%_%VERSION_MINOR%.ROM
-copy /y/b %BUILD_PATH%\FV\Vlv%Arch%.fd %PLATFORM_PACKAGE%\Stitch\%BIOS_Name% >nul
-copy /y/b %BUILD_PATH%\FV\Vlv%Arch%.fd %BUILD_PATH%\FV\Vlv.ROM >nul
-
-echo.
-echo Build location: %BUILD_PATH%
-echo BIOS ROM Created: %BIOS_Name%
-echo.
-echo -------------------- The EDKII BIOS build has successfully completed. --------------------
-echo.
-
@REM build capsule here
-echo > %BUILD_PATH%\FV\SYSTEMFIRMWAREUPDATECARGO.Fv
-build -p %PLATFORM_PACKAGE%\PlatformCapsule.dsc
+call build -p %PLATFORM_PACKAGE%\PlatformCapsule.dsc
goto Exit
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 03/14] Vlv2TbltDevicePkg: Remove unused modules/libraries
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
2019-07-01 2:55 ` [edk2-platforms Patch 01/14] Vlv2DeviceRefCodePkg: Add gEfiSmmIchnDispatchProtocolGuid Michael D Kinney
2019-07-01 2:55 ` [edk2-platforms Patch 02/14] Vlv2TbltDevicePkg: Reduce Intel Framework dependencies Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:07 ` Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 04/14] Vlv2TbltDevicePkg: Switch from ISA to SIO modules Michael D Kinney
` (11 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
* Delete platform specific SerialPortLib
* Delete platform specific Metronome module
* Delete platform specific BootScriptSaveDxe module
* Delete SmmSwDispatch2OnSmmSwDispatchThunk module
* Delete SmramSaveInfoHandlerSmm module
* Delete unused FSP content
* Delete unused I2C content
* Delete unused Stitch content
* Delete unused portions of PlatformSmm module
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../BootScriptSaveDxe/BootScriptSaveDxe.inf | 60 --
.../InternalBootScriptSave.h | 102 ---
.../BootScriptSaveDxe/ScriptSave.c | 626 ---------------
.../FspAzaliaConfigData/AzaliaConfig.bin | Bin 3708 -> 0 bytes
.../FspSupport/BootModePei/BootModePei.c | 42 -
.../FspSupport/BootModePei/BootModePei.inf | 40 -
.../FspHobProcessLibVlv2.c | 421 ----------
.../FspHobProcessLibVlv2.inf | 74 --
.../FspPlatformSecLibVlv2.c | 144 ----
.../FspPlatformSecLibVlv2.inf | 82 --
.../Ia32/AsmSaveSecContext.asm | 45 --
.../SecFspPlatformSecLibVlv2/Ia32/Fsp.inc | 45 --
.../Ia32/PeiCoreEntry.asm | 135 ----
.../Ia32/SecEntry.asm | 338 --------
.../SecFspPlatformSecLibVlv2/Ia32/Stack.S | 71 --
.../SecFspPlatformSecLibVlv2/Ia32/Stack.asm | 76 --
.../SecFspPlatformSecLibVlv2/PlatformInit.c | 36 -
.../SecFspPlatformSecLibVlv2/SaveSecContext.c | 108 ---
.../SecGetPerformance.c | 83 --
.../SecPlatformInformation.c | 77 --
.../SecFspPlatformSecLibVlv2/SecRamInitData.c | 16 -
.../SecTempRamSupport.c | 149 ----
.../SecFspPlatformSecLibVlv2/UartInit.c | 192 -----
.../Include/Protocol/TpmMp.h | 136 ----
.../Include/Protocol/UsbPolicy.h | 126 ---
.../Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c | 46 --
.../Library/I2CLib/I2CLibNull.inf | 39 -
.../Library/I2CLibDxe/I2CLib.c | 735 ------------------
.../Library/I2CLibDxe/I2CLibDxe.inf | 39 -
.../Library/I2CLibDxe/I2CRegs.h | 126 ---
.../Library/I2CLibPei/I2CAccess.h | 44 --
.../Library/I2CLibPei/I2CDelayPei.c | 46 --
.../Library/I2CLibPei/I2CDelayPei.h | 30 -
.../Library/I2CLibPei/I2CIoLibPei.c | 178 -----
.../Library/I2CLibPei/I2CIoLibPei.h | 153 ----
.../Library/I2CLibPei/I2CLibPei.c | 638 ---------------
.../Library/I2CLibPei/I2CLibPei.h | 280 -------
.../Library/I2CLibPei/I2CLibPei.inf | 40 -
.../Library/PlatformFspLib/PlatformFspLib.c | 44 --
.../Library/PlatformFspLib/PlatformFspLib.inf | 49 --
.../SerialPortLib/PlatformSerialPortLib.h | 53 --
.../Library/SerialPortLib/SerialPortLib.c | 246 ------
.../Library/SerialPortLib/SerialPortLib.inf | 52 --
.../Library/SerialPortLib/SioInit.c | 127 ---
.../Library/SerialPortLib/SioInit.h | 62 --
.../Metronome/LegacyMetronome.c | 185 -----
.../Metronome/LegacyMetronome.h | 64 --
.../Vlv2TbltDevicePkg/Metronome/Metronome.inf | 49 --
.../PlatformSmm/SmmScriptSave.c | 252 ------
.../PlatformSmm/SmmScriptSave.h | 50 --
.../SmmSwDispatch2OnSmmSwDispatchThunk.c | 459 -----------
.../SmmSwDispatch2OnSmmSwDispatchThunk.inf | 54 --
.../SmramSaveInfoHandlerSmm.c | 164 ----
.../SmramSaveInfoHandlerSmm.inf | 60 --
| Bin 3928064 -> 0 bytes
.../Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat | 270 -------
.../Stitch/MNW2_Stitch_Config.txt | 10 -
57 files changed, 7868 deletions(-)
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/BootScriptSaveDxe.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/InternalBootScriptSave.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/ScriptSave.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspAzaliaConfigData/AzaliaConfig.bin
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/AsmSaveSecContext.asm
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Fsp.inc
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/PeiCoreEntry.asm
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/SecEntry.asm
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.S
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.asm
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/PlatformInit.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SaveSecContext.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecGetPerformance.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecPlatformInformation.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecRamInitData.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecTempRamSupport.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/UartInit.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/TpmMp.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/UsbPolicy.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLib.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLibDxe.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CRegs.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CAccess.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/PlatformSerialPortLib.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Metronome/Metronome.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIHeader/Vacant.bin
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Stitch/MNW2_Stitch_Config.txt
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/BootScriptSaveDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/BootScriptSaveDxe.inf
deleted file mode 100644
index d2fa621096..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/BootScriptSaveDxe.inf
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-#
-## @file
-# Component description file for ScriptSave Lite module.
-#
-# This is an implementation of the Boot Script Save protocol.
-# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = BootScriptSaveDxe
- FILE_GUID = 42BB673D-09F3-4e2e-9FEE-D081131DED5B
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
-
- ENTRY_POINT = InitializeScriptSave
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- ScriptSave.c
- InternalBootScriptSave.h
-
-
-[Packages]
- MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- MdeModulePkg/MdeModulePkg.dec
-
-
-[LibraryClasses]
- PcdLib
- UefiRuntimeServicesTableLib
- UefiBootServicesTableLib
- MemoryAllocationLib
- UefiDriverEntryPoint
- BaseMemoryLib
- DebugLib
- BaseLib
- S3BootScriptLib
-
-[Protocols]
- gEfiBootScriptSaveProtocolGuid # PROTOCOL ALWAYS_PRODUCED
-
-
-[Depex]
- TRUE
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/InternalBootScriptSave.h b/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/InternalBootScriptSave.h
deleted file mode 100644
index f232281e2b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/InternalBootScriptSave.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/** @file
-//
-//
- Internal header file for S3 Boot Script Saver driver.
-
- Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-
-#ifndef _INTERNAL_BOOT_SCRIPT_SAVE_H_
-#define _INTERNAL_BOOT_SCRIPT_SAVE_H_
-#include <FrameworkDxe.h>
-
-#include <Protocol/BootScriptSave.h>
-#include <Protocol/FirmwareVolume.h>
-
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/S3BootScriptLib.h>
-#include <Library/PcdLib.h>
-#include <Library/SmbusLib.h>
-#include <IndustryStandard/SmBus.h>
-
-/**
- Adds a record into a specified Framework boot script table.
-
- This function is used to store a boot script record into a given boot
- script table. If the table specified by TableName is nonexistent in the
- system, a new table will automatically be created and then the script record
- will be added into the new table. A boot script table can add new script records
- until EFI_BOOT_SCRIPT_SAVE_PROTOCOL.CloseTable() is called. Currently, the only
- meaningful table name is EFI_ACPI_S3_RESUME_SCRIPT_TABLE. This function is
- responsible for allocating necessary memory for the script.
-
- This function has a variable parameter list. The exact parameter list depends on
- the OpCode that is passed into the function. If an unsupported OpCode or illegal
- parameter list is passed in, this function returns EFI_INVALID_PARAMETER.
- If there are not enough resources available for storing more scripts, this function returns
- EFI_OUT_OF_RESOURCES.
-
- @param[in] This A pointer to the EFI_BOOT_SCRIPT_SAVE_PROTOCOL instance.
- @param[in] TableName Name of the script table. Currently, the only meaningful value is
- EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
- @param[in] OpCode The operation code (opcode) number.
- @param[in] ... Argument list that is specific to each opcode.
-
- @retval EFI_SUCCESS The operation succeeded. A record was added into the
- specified script table.
- @retval EFI_INVALID_PARAMETER The parameter is illegal or the given boot script is not supported.
- If the opcode is unknow or not supported because of the PCD
- Feature Flags.
- @retval EFI_OUT_OF_RESOURCES There is insufficient memory to store the boot script.
-
-**/
-EFI_STATUS
-EFIAPI
-BootScriptWrite (
- IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This,
- IN UINT16 TableName,
- IN UINT16 OpCode,
- ...
- );
-
-/**
- Closes the specified script table.
-
- This function closes the specified boot script table and returns the base address
- of the table. It allocates a new pool to duplicate all the boot scripts in the specified
- table. Once this function is called, the specified table will be destroyed after it is
- copied into the allocated pool. As a result, any attempts to add a script record into a
- closed table will cause a new table to be created. The base address of the allocated pool
- will be returned in Address. After using the boot script table, the caller is responsible
- for freeing the pool that is allocated by this function. If the boot script table,
- such as EFI_ACPI_S3_RESUME_SCRIPT_TABLE, is required to be stored in a nonperturbed
- memory region, the caller should copy the table into the nonperturbed memory region by itself.
-
- @param[in] This A pointer to the EFI_BOOT_SCRIPT_SAVE_PROTOCOL instance.
- @param[in] TableName Name of the script table. Currently, the only meaningful value is
- EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
- @param[in] Address A pointer to the physical address where the table begins.
-
- @retval EFI_SUCCESS The table was successfully returned.
- @retval EFI_NOT_FOUND The specified table was not created previously.
- @retval EFI_OUT_OF_RESOURCE Memory is insufficient to hold the reorganized boot script table.
- @retval EFI_UNSUPPORTED The table type is not EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
-
-**/
-EFI_STATUS
-EFIAPI
-BootScriptCloseTable (
- IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This,
- IN UINT16 TableName,
- OUT EFI_PHYSICAL_ADDRESS *Address
- );
-#endif //_INTERNAL_BOOT_SCRIPT_SAVE_H_
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/ScriptSave.c b/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/ScriptSave.c
deleted file mode 100644
index 837a8c95cd..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/ScriptSave.c
+++ /dev/null
@@ -1,626 +0,0 @@
-/** @file
- Implementation for S3 Boot Script Saver driver.
-
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-
-#include "InternalBootScriptSave.h"
-
-EFI_HANDLE mHandle = NULL;
-EFI_BOOT_SCRIPT_SAVE_PROTOCOL mS3ScriptSave = {
- BootScriptWrite,
- BootScriptCloseTable
- };
-
-/**
- Internal function to add IO write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptIoWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINTN Count;
- UINT8 *Buffer;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Count = VA_ARG (Marker, UINTN);
- Buffer = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSaveIoWrite (Width, Address, Count, Buffer);
-}
-
-/**
- Internal function to add IO read/write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptIoReadWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINT8 *Data;
- UINT8 *DataMask;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Data = VA_ARG (Marker, UINT8 *);
- DataMask = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSaveIoReadWrite (Width, Address, Data, DataMask);
-}
-
-/**
- Internal function to add memory write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptMemWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINTN Count;
- UINT8 *Buffer;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Count = VA_ARG (Marker, UINTN);
- Buffer = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSaveMemWrite (Width, Address, Count, Buffer);
-}
-
-/**
- Internal function to add memory read/write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptMemReadWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINT8 *Data;
- UINT8 *DataMask;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Data = VA_ARG (Marker, UINT8 *);
- DataMask = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSaveMemReadWrite (Width, Address, Data, DataMask);
-}
-
-/**
- Internal function to add PciCfg write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptPciCfgWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINTN Count;
- UINT8 *Buffer;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Count = VA_ARG (Marker, UINTN);
- Buffer = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSavePciCfgWrite (Width, Address, Count, Buffer);
-}
-
-/**
- Internal function to PciCfg read/write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptPciCfgReadWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINT8 *Data;
- UINT8 *DataMask;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Data = VA_ARG (Marker, UINT8 *);
- DataMask = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSavePciCfgReadWrite (Width, Address, Data, DataMask);
-}
-
-/**
- Internal function to add PciCfg2 write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptPciCfg2Write (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINTN Count;
- UINT8 *Buffer;
- UINT16 Segment;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Count = VA_ARG (Marker, UINTN);
- Buffer = VA_ARG (Marker, UINT8 *);
- Segment = VA_ARG (Marker, UINT16);
-
- return S3BootScriptSavePciCfg2Write (Width, Segment, Address, Count, Buffer);
-}
-
-/**
- Internal function to PciCfg2 read/write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptPciCfg2ReadWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT16 Segment;
- UINT64 Address;
- UINT8 *Data;
- UINT8 *DataMask;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Segment = VA_ARG (Marker, UINT16);
- Data = VA_ARG (Marker, UINT8 *);
- DataMask = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSavePciCfg2ReadWrite (Width, Segment, Address, Data, DataMask);
-}
-
-/**
- Internal function to add smbus execute opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptSmbusExecute (
- IN VA_LIST Marker
- )
-{
- EFI_SMBUS_DEVICE_ADDRESS SlaveAddress;
- EFI_SMBUS_DEVICE_COMMAND Command;
- EFI_SMBUS_OPERATION Operation;
- BOOLEAN PecCheck;
- VOID *Buffer;
- UINTN *DataSize;
- UINTN SmBusAddress;
-
- SlaveAddress.SmbusDeviceAddress = VA_ARG (Marker, UINTN);
- Command = VA_ARG (Marker, EFI_SMBUS_DEVICE_COMMAND);
- Operation = VA_ARG (Marker, EFI_SMBUS_OPERATION);
- PecCheck = VA_ARG (Marker, BOOLEAN);
- SmBusAddress = SMBUS_LIB_ADDRESS (SlaveAddress.SmbusDeviceAddress,Command,0,PecCheck);
- DataSize = VA_ARG (Marker, UINTN *);
- Buffer = VA_ARG (Marker, VOID *);
-
- return S3BootScriptSaveSmbusExecute (SmBusAddress, Operation, DataSize, Buffer);
-}
-
-/**
- Internal function to add stall opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptStall (
- IN VA_LIST Marker
- )
-{
- UINT32 Duration;
-
- Duration = VA_ARG (Marker, UINT32);
-
- return S3BootScriptSaveStall (Duration);
-}
-
-/**
- Internal function to add Save jmp address according to DISPATCH_OPCODE.
- We ignore "Context" parameter.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptDispatch (
- IN VA_LIST Marker
- )
-{
- VOID *EntryPoint;
-
- EntryPoint = (VOID*)(UINTN)VA_ARG (Marker, EFI_PHYSICAL_ADDRESS);
- return S3BootScriptSaveDispatch (EntryPoint);
-}
-
-/**
- Internal function to add memory pool operation to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptMemPoll (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINT8 *BitMask;
- UINT8 *BitValue;
- UINTN Duration;
- UINT64 LoopTimes;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- BitMask = VA_ARG (Marker, UINT8 *);
- BitValue = VA_ARG (Marker, UINT8 *);
- Duration = (UINTN)VA_ARG (Marker, UINT64);
- LoopTimes = VA_ARG (Marker, UINT64);
-
- return S3BootScriptSaveMemPoll (Width, Address, BitMask, BitValue, Duration, LoopTimes);
-}
-
-/**
- Internal function to add Save jmp address according to DISPATCH_OPCODE2.
- The "Context" parameter is not ignored.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptDispatch2 (
- IN VA_LIST Marker
- )
-{
- VOID *EntryPoint;
- VOID *Context;
-
- EntryPoint = (VOID*)(UINTN)VA_ARG (Marker, EFI_PHYSICAL_ADDRESS);
- Context = (VOID*)(UINTN)VA_ARG (Marker, EFI_PHYSICAL_ADDRESS);
-
- return S3BootScriptSaveDispatch2 (EntryPoint, Context);
-}
-
-/**
- Internal function to add the opcode link node to the link list.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enought resource to complete the operations.
- @retval EFI_SUCCESS The opcode entry is added to the link list
- successfully.
-**/
-EFI_STATUS
-BootScriptInformation (
- IN VA_LIST Marker
- )
-{
- UINT32 InformationLength;
- EFI_PHYSICAL_ADDRESS Information;
-
- InformationLength = VA_ARG (Marker, UINT32);
- Information = VA_ARG (Marker, EFI_PHYSICAL_ADDRESS);
- return S3BootScriptSaveInformation (InformationLength, (VOID*)(UINTN)Information);
-}
-
-/**
- Adds a record into a specified Framework boot script table.
-
- This function is used to store a boot script record into a given boot
- script table. If the table specified by TableName is nonexistent in the
- system, a new table will automatically be created and then the script record
- will be added into the new table. A boot script table can add new script records
- until EFI_BOOT_SCRIPT_SAVE_PROTOCOL.CloseTable() is called. Currently, the only
- meaningful table name is EFI_ACPI_S3_RESUME_SCRIPT_TABLE. This function is
- responsible for allocating necessary memory for the script.
-
- This function has a variable parameter list. The exact parameter list depends on
- the OpCode that is passed into the function. If an unsupported OpCode or illegal
- parameter list is passed in, this function returns EFI_INVALID_PARAMETER.
- If there are not enough resources available for storing more scripts, this function returns
- EFI_OUT_OF_RESOURCES.
-
- @param This A pointer to the EFI_BOOT_SCRIPT_SAVE_PROTOCOL instance.
- @param TableName Name of the script table. Currently, the only meaningful value is
- EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
- @param OpCode The operation code (opcode) number.
- @param ... Argument list that is specific to each opcode.
-
- @retval EFI_SUCCESS The operation succeeded. A record was added into the
- specified script table.
- @retval EFI_INVALID_PARAMETER The parameter is illegal or the given boot script is not supported.
- If the opcode is unknow or not supported because of the PCD
- Feature Flags.
- @retval EFI_OUT_OF_RESOURCES There is insufficient memory to store the boot script.
-
-**/
-EFI_STATUS
-EFIAPI
-BootScriptWrite (
- IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This,
- IN UINT16 TableName,
- IN UINT16 OpCode,
- ...
- )
-{
- EFI_STATUS Status;
- VA_LIST Marker;
-
- if (TableName != FRAMEWORK_EFI_ACPI_S3_RESUME_SCRIPT_TABLE) {
- //
- // Only S3 boot script is supported for now.
- //
- return EFI_OUT_OF_RESOURCES;
- }
-
- //
- // Build script according to opcode.
- //
- switch (OpCode) {
-
- case EFI_BOOT_SCRIPT_IO_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptIoWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_IO_READ_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptIoReadWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptMemWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_MEM_READ_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptMemReadWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptPciCfgWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptPciCfgReadWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_SMBUS_EXECUTE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptSmbusExecute (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_STALL_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptStall (Marker);
- VA_END (Marker);
-
- break;
-
- case EFI_BOOT_SCRIPT_DISPATCH_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptDispatch (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_DISPATCH_2_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptDispatch2 (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_INFORMATION_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptInformation (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_MEM_POLL_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptMemPoll (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptPciCfg2Write (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptPciCfg2ReadWrite (Marker);
- VA_END (Marker);
- break;
-
- default:
- Status = EFI_INVALID_PARAMETER;
- break;
- }
-
- return Status;
-}
-
-/**
- Closes the specified script table.
-
- This function closes the specified boot script table and returns the base address
- of the table. It allocates a new pool to duplicate all the boot scripts in the specified
- table. Once this function is called, the specified table will be destroyed after it is
- copied into the allocated pool. As a result, any attempts to add a script record into a
- closed table will cause a new table to be created. The base address of the allocated pool
- will be returned in Address. After using the boot script table, the caller is responsible
- for freeing the pool that is allocated by this function. If the boot script table,
- such as EFI_ACPI_S3_RESUME_SCRIPT_TABLE, is required to be stored in a nonperturbed
- memory region, the caller should copy the table into the nonperturbed memory region by itself.
-
- @param This A pointer to the EFI_BOOT_SCRIPT_SAVE_PROTOCOL instance.
- @param TableName Name of the script table. Currently, the only meaningful value is
- EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
- @param Address A pointer to the physical address where the table begins.
-
- @retval EFI_SUCCESS The table was successfully returned.
- @retval EFI_NOT_FOUND The specified table was not created previously.
- @retval EFI_OUT_OF_RESOURCE Memory is insufficient to hold the reorganized boot script table.
- @retval EFI_UNSUPPORTED The table type is not EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
-
-**/
-EFI_STATUS
-EFIAPI
-BootScriptCloseTable (
- IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This,
- IN UINT16 TableName,
- OUT EFI_PHYSICAL_ADDRESS *Address
- )
-{
- if (TableName != FRAMEWORK_EFI_ACPI_S3_RESUME_SCRIPT_TABLE) {
- //
- // Only S3 boot script is supported for now.
- //
- return EFI_NOT_FOUND;
- }
- *Address = (EFI_PHYSICAL_ADDRESS)(UINTN)S3BootScriptCloseTable ();
-
- if (*Address == 0) {
- return EFI_NOT_FOUND;
- }
- return EFI_SUCCESS;
-}
-
-/**
- This routine is entry point of ScriptSave driver.
-
- @param ImageHandle Handle for this drivers loaded image protocol.
- @param SystemTable EFI system table.
-
- @retval EFI_OUT_OF_RESOURCES No enough resource.
- @retval EFI_SUCCESS Succesfully installed the ScriptSave driver.
- @retval other Errors occured.
-
-**/
-EFI_STATUS
-EFIAPI
-InitializeScriptSave (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- return gBS->InstallProtocolInterface (
- &mHandle,
- &gEfiBootScriptSaveProtocolGuid,
- EFI_NATIVE_INTERFACE,
- &mS3ScriptSave
- );
-
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspAzaliaConfigData/AzaliaConfig.bin b/Platform/Intel/Vlv2TbltDevicePkg/FspAzaliaConfigData/AzaliaConfig.bin
deleted file mode 100644
index da24c02b5d25ce888c630c664095902b4bb035e7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3708
zcmd^>Pl#JZ9LMK3`)XRdt$F?9>(+TQNqa~UwYzRL6+{xdH3}71P@h!~iwKK?QYsja
zyX|(<qQVxzbj5>fq4Da)Ts;(X@!&zpF$WI;5lLww$LD8u(;7lcLET;q4D-G_leaV9
z`ONQ|ZR6t$o%9hYzfnH1u=S6uQmNdpwECI9F1+yKF{PAjL*H2Jq)QXOgh~bLdf(Yj
zx{Q{={HK>X>1pl1uVg3l=gxJ~cL&<PZ)v%co*%q_JNnyNCp|Z$e>&eufBh)t{i$qa
zymz6Ko;kF<fYxKYbk8T9^zHTcrQ*MT^i#$MdK~@MXPtDW{K}NLuFTl3<m0X=(-m=j
zxoZ39zGO`wT@kSrDa94Z8J=B&PSA<u4bN^KJufTqyc{q*yDGXWlW|oJ8lGK47HtDf
zGYxc2)@+UWHJLIsS#>R$wk^39x8#&*q1$rZw$W`_Fm2JUDS6xE|21XSG|_dwU+4RE
znKN}^tDE}4qiNQxW^7I6<C;>Yro`3NRa-~bRo2weO(nLeSfk1ro?RE+MR!%+@QkN|
zrz?1RVBOP<7MszNaYi3BJiC@!v@JCm(@cx`ZMA0GY9(%~l4+||7vWKaClMY+c+gjQ
z+voj#HEa4xy9}OWcz*^@GMnznsNr~Yq{O;PtS`?xHS5iqf=FDD$QES96{Kg1=%Vbl
zMS0m3VWGl$E3CW1e9u<Gcp?p(Fh7yUJWDV&4O^=))-zRfRj$~oyy~jx8oGwAp=;=d
zgfMm;)-J+a4^~2$ISxBz80x{6z}V-ob`s`B_psR-kDkb~#xiTnvqsGtCt0KC8g{rB
zP3}XBd%`+dBTUHSrj18!G|jbT+HgnXu7tKL6RwMAeYprzYp?|qQi3JV)FNz&%jj7X
zX^A6!(MI~Di}ai+pbL7+7W9NGXwC#()Zf`6<3)4@UD4NUh4BhH(b+iB$8Ey<5`7Om
zdQz(``s;53YS<Qi?D>E-M4TfHuF7zggR5<Dbs4T!2V8}46~a{+uCj2&9^kCPc!hIM
z_&yD;%5c?#s}Qb2xGE303gIe*t1?_onwngSH)>SiJXdw*(`=pbI(mb%kTWcEhBrA2
zIYZCcqnz27oLR(~l{m8=XBH05tjw7?&V+lSxhFc{O#D8_N*nw2{oOo<qvGU<2cvs-
z?0LODv*+M8doKOUJ#Jx-XV~NJ!5(viJsyY4fIW_$SqhgaTq?L!aQOgxCKq*<{&yGX
zkp9CRfsW}z{=PoG_IH0bPe#Y_=;&{`NR8(s_2z*{We?Ke!e^Mkh0nBIcm&&M8Xkpk
zF$Whu%LFd=n5yL9Lf}H+A~)n2c_4@3;w!jVgA4M2EaX1N8(HTwj~tK_ag)35GwbjA
z<7<!4yD>cc9uFV911CMxhZ~yh!&U!3uUB~VR348M9xdb1!oZ`MA&-1bp24F$9_ib7
z<ZJTq-I*QoNaN8iJj&vc3_L2~(UBpKUc#eGc(jH`zW(_d9mX{LDbsp*BzSZdk50Na
zcXQ(|dCtUn&NkhnXLF`O4mZf-207bMj(qny&$*(TN|D!!-0qRzC2~AVUbAKu`urxx
z`Ax-mm+>y+Jd@Xo-0u1OCdZW_uj7pLY=(Nlvx(3VIzscz9+{7(zIzV1OU&2I*UZ;H
zWLQt8t)~8r)UF%R=vCNs4M)egTR9b1a<AD+Zl9~<;0B$b6LgZBH1p_r^nC7h$MgT}
zgGV!?HL*tx4`Z4waK8)dxiws$?v`7l^(fC>yTo1d^~nE5K0H#7;CB7D2Hf7NN4M@8
zHA%Q@KgMm@!(F>wZry{scKj6e==4xMQYkzSwVSzj1<zInp82egsOc-z^wE0cJ=zy<
zWce8N=$~Zy5}xe6gC{=Avx6)jBg^0SxppDYAJgysBGC8IOFqyO^vV7}@Au<me3Aa)
og+TA{`cR;E`u>AJKSaMh8|ZiFi`_ua(_elr(C^Vdb2!j{0U29Y3;+NC
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.c
deleted file mode 100644
index bf6c7efba5..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/** @file
- This PEIM will parse the hoblist from fsp and report them into pei core.
- This file contains the main entrypoint of the PEIM.
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-
-#include <PiPei.h>
-#include <Ppi/MasterBootMode.h>
-
-static EFI_PEI_PPI_DESCRIPTOR mPpiList[] = {
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
- &gEfiPeiMasterBootModePpiGuid,
- NULL
- },
-};
-
-/**
- This is the entrypoint of PEIM
-
- @param FileHandle Handle of the file being invoked.
- @param PeiServices Describes the list of possible PEI Services.
-
- @retval EFI_SUCCESS if it completed successfully.
-**/
-EFI_STATUS
-EFIAPI
-BootModePeiEntryPoint (
- IN EFI_PEI_FILE_HANDLE FileHandle,
- IN CONST EFI_PEI_SERVICES **PeiServices
- )
-{
- (*PeiServices)->SetBootMode(PeiServices, BOOT_WITH_FULL_CONFIGURATION);
-
- (*PeiServices)->InstallPpi (PeiServices, &mPpiList[0]);
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
deleted file mode 100644
index 27200bca15..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
+++ /dev/null
@@ -1,40 +0,0 @@
-## @file
-# FSP PEI Module
-#
-# Parses the hoblist from fsp and report them into pei core. It will install
-# the memory as required.
-#
-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = BootModePeim
- FILE_GUID = 2B1D0832-2184-4C8F-A90D-8E4AF9DE5BCD
- MODULE_TYPE = PEIM
- VERSION_STRING = 1.0
- ENTRY_POINT = BootModePeiEntryPoint
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32
-#
-
-[Sources]
- BootModePei.c
-
-[Packages]
- MdePkg/MdePkg.dec
-
-[LibraryClasses]
- PeimEntryPoint
-
-[Ppis]
- gEfiPeiMasterBootModePpiGuid
-
-[Depex]
- TRUE
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.c
deleted file mode 100644
index 8a97e25bd4..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.c
+++ /dev/null
@@ -1,421 +0,0 @@
-/** @file
- Null instance of Platform Sec Lib.
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-
-#include <Library/PeiServicesLib.h>
-#include <Library/PeiServicesTablePointerLib.h>
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/HobLib.h>
-#include <Library/PcdLib.h>
-#include <Library/FspPlatformInfoLib.h>
-
-#include <Guid/GuidHobFsp.h>
-#include <Guid/MemoryTypeInformation.h>
-#include <Ppi/Capsule.h>
-
-#include <PlatformFspLib.h>
-#include <Guid/SmramMemoryReserve.h>
-EFI_GUID gFspReservedMemoryResourceHobTsegGuid = {0xd038747c, 0xd00c, 0x4980, {0xb3, 0x19, 0x49, 0x01, 0x99, 0xa4, 0x7d, 0x55}};
-
-//
-// Additional pages are used by DXE memory manager.
-// It should be consistent between RetrieveRequiredMemorySize() and GetPeiMemSize()
-//
-#define PEI_ADDITIONAL_MEMORY_SIZE (16 * EFI_PAGE_SIZE)
-
-/**
- Get the mem size in memory type infromation table.
-
- @param PeiServices PEI Services table.
-
- @return the mem size in memory type infromation table.
-**/
-UINT64
-GetMemorySizeInMemoryTypeInformation (
- IN EFI_PEI_SERVICES **PeiServices
- )
-{
- EFI_PEI_HOB_POINTERS Hob;
- EFI_MEMORY_TYPE_INFORMATION *MemoryData;
- UINT8 Index;
- UINTN TempPageNum;
-
- MemoryData = NULL;
- (*PeiServices)->GetHobList ((CONST EFI_PEI_SERVICES **)PeiServices, (VOID **) &Hob.Raw);
- while (!END_OF_HOB_LIST (Hob)) {
- if (Hob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION &&
- CompareGuid (&Hob.Guid->Name, &gEfiMemoryTypeInformationGuid)) {
- MemoryData = (EFI_MEMORY_TYPE_INFORMATION *) (Hob.Raw + sizeof (EFI_HOB_GENERIC_HEADER) + sizeof (EFI_GUID));
- break;
- }
-
- Hob.Raw = GET_NEXT_HOB (Hob);
- }
-
- if (MemoryData == NULL) {
- return 0;
- }
-
- TempPageNum = 0;
- for (Index = 0; MemoryData[Index].Type != EfiMaxMemoryType; Index++) {
- //
- // Accumulate default memory size requirements
- //
- TempPageNum += MemoryData[Index].NumberOfPages;
- }
-
- return TempPageNum * EFI_PAGE_SIZE;
-}
-
-/**
- Get the mem size need to be reserved in PEI phase.
-
- @param PeiServices PEI Services table.
-
- @return the mem size need to be reserved in PEI phase.
-**/
-UINT64
-RetrieveRequiredMemorySize (
- IN EFI_PEI_SERVICES **PeiServices
- )
-{
- UINT64 Size;
-
- Size = GetMemorySizeInMemoryTypeInformation (PeiServices);
- return Size + PEI_ADDITIONAL_MEMORY_SIZE;
-}
-
-/**
- Get the mem size need to be consumed and reserved in PEI phase.
-
- @param PeiServices PEI Services table.
- @param BootMode Current boot mode.
-
- @return the mem size need to be consumed and reserved in PEI phase.
-**/
-UINT64
-GetPeiMemSize (
- IN EFI_PEI_SERVICES **PeiServices,
- IN UINT32 BootMode
- )
-{
- UINT64 Size;
- UINT64 MinSize;
-
- if (BootMode == BOOT_IN_RECOVERY_MODE) {
- return PcdGet32 (PcdPeiRecoveryMinMemSize);
- }
-
- Size = GetMemorySizeInMemoryTypeInformation (PeiServices);
-
- if (BootMode == BOOT_ON_FLASH_UPDATE) {
- //
- // Maybe more size when in CapsuleUpdate phase ?
- //
- MinSize = PcdGet32 (PcdPeiMinMemSize);
- } else {
- MinSize = PcdGet32 (PcdPeiMinMemSize);
- }
-
- return MinSize + Size + PEI_ADDITIONAL_MEMORY_SIZE;
-}
-
-/**
- BIOS process FspBobList.
-
- @param FspHobList Pointer to the HOB data structure produced by FSP.
-
- @return If platform process the FSP hob list successfully.
-**/
-EFI_STATUS
-EFIAPI
-FspHobProcessForMemoryResource (
- IN VOID *FspHobList
- )
-{
- EFI_PEI_HOB_POINTERS Hob;
- UINT64 LowMemorySize;
- UINT64 FspMemorySize;
- EFI_PHYSICAL_ADDRESS FspMemoryBase;
- UINT64 PeiMemSize;
- EFI_PHYSICAL_ADDRESS PeiMemBase;
- UINT64 S3PeiMemSize;
- EFI_PHYSICAL_ADDRESS S3PeiMemBase;
- BOOLEAN FoundFspMemHob;
- EFI_STATUS Status;
- EFI_BOOT_MODE BootMode;
- PEI_CAPSULE_PPI *Capsule;
- VOID *CapsuleBuffer;
- UINTN CapsuleBufferLength;
- UINT64 RequiredMemSize;
- EFI_PEI_SERVICES **PeiServices;
- UINT64 TsegSize;
- EFI_PHYSICAL_ADDRESS TsegBase;
- BOOLEAN FoundTsegHob;
-
- PeiServices = (EFI_PEI_SERVICES **)GetPeiServicesTablePointer ();
-
- PeiServicesGetBootMode (&BootMode);
-
- PeiMemBase = 0;
- LowMemorySize = 0;
- FspMemorySize = 0;
- FspMemoryBase = 0;
- FoundFspMemHob = FALSE;
- TsegSize = 0;
- TsegBase = 0;
- FoundTsegHob = FALSE;
-
- //
- // Parse the hob list from fsp
- // Report all the resource hob except the memory between 1M and 4G
- //
- Hob.Raw = (UINT8 *)(UINTN)FspHobList;
- DEBUG((DEBUG_INFO, "FspHobList - 0x%x\n", FspHobList));
-
- while ((Hob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, Hob.Raw)) != NULL) {
- DEBUG((DEBUG_INFO, "\nResourceType: 0x%x\n", Hob.ResourceDescriptor->ResourceType));
- if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) ||
- (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED)) {
- DEBUG((DEBUG_INFO, "ResourceAttribute: 0x%x\n", Hob.ResourceDescriptor->ResourceAttribute));
- DEBUG((DEBUG_INFO, "PhysicalStart: 0x%x\n", Hob.ResourceDescriptor->PhysicalStart));
- DEBUG((DEBUG_INFO, "ResourceLength: 0x%x\n", Hob.ResourceDescriptor->ResourceLength));
- DEBUG((DEBUG_INFO, "Owner: %g\n\n", &Hob.ResourceDescriptor->Owner));
- }
-
- if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) // Found the low memory length below 4G
- && (Hob.ResourceDescriptor->PhysicalStart >= BASE_1MB)
- && (Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength <= BASE_4GB)) {
- LowMemorySize += Hob.ResourceDescriptor->ResourceLength;
- Hob.Raw = GET_NEXT_HOB (Hob);
- continue;
- }
-
- if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED) // Found the low memory length below 4G
- && (Hob.ResourceDescriptor->PhysicalStart >= BASE_1MB)
- && (Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength <= BASE_4GB)
- && (CompareGuid (&Hob.ResourceDescriptor->Owner, &gFspReservedMemoryResourceHobGuid))) {
- FoundFspMemHob = TRUE;
- FspMemoryBase = Hob.ResourceDescriptor->PhysicalStart;
- FspMemorySize = Hob.ResourceDescriptor->ResourceLength;
- DEBUG((DEBUG_INFO, "Find fsp mem hob, base 0x%x, len 0x%x\n", FspMemoryBase, FspMemorySize));
- }
-
- if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED) // Found the low memory length below 4G
- && (Hob.ResourceDescriptor->PhysicalStart >= 0x100000)
- && (Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength <= 0x100000000)
- && (CompareGuid (&Hob.ResourceDescriptor->Owner, &gFspReservedMemoryResourceHobTsegGuid))) {
- FoundTsegHob = TRUE;
- TsegBase = Hob.ResourceDescriptor->PhysicalStart;
-
-
- if ((Hob.ResourceDescriptor->ResourceLength == 0 ) || (Hob.ResourceDescriptor->ResourceLength > 0x800000)){
- Hob.ResourceDescriptor->ResourceLength = 0x800000;
- }
-
-
- TsegSize = Hob.ResourceDescriptor->ResourceLength;
- DEBUG((EFI_D_ERROR, "Find Tseg mem hob, base 0x%lx, len 0x%lx\n", TsegBase, TsegSize));
- }
-
- //
- // Report the resource hob
- //
- BuildResourceDescriptorHob (
- Hob.ResourceDescriptor->ResourceType,
- Hob.ResourceDescriptor->ResourceAttribute,
- Hob.ResourceDescriptor->PhysicalStart,
- Hob.ResourceDescriptor->ResourceLength
- );
-
- Hob.Raw = GET_NEXT_HOB (Hob);
- }
-
- if (!FoundFspMemHob) {
- DEBUG((DEBUG_INFO, "Didn't find the fsp used memory information.\n"));
- //ASSERT(FALSE);
- }
-
- DEBUG((DEBUG_INFO, "LowMemorySize: 0x%x.\n", LowMemorySize));
- DEBUG((DEBUG_INFO, "FspMemoryBase: 0x%x.\n", FspMemoryBase));
- DEBUG((DEBUG_INFO, "FspMemorySize: 0x%x.\n", FspMemorySize));
-
- if (BootMode == BOOT_ON_S3_RESUME) {
- BuildResourceDescriptorHob (
- EFI_RESOURCE_SYSTEM_MEMORY,
- (
- EFI_RESOURCE_ATTRIBUTE_PRESENT |
- EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
- // EFI_RESOURCE_ATTRIBUTE_TESTED |
- EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE
- ),
- BASE_1MB,
- LowMemorySize
- );
-
- Status = GetS3MemoryInfo (&S3PeiMemBase, &S3PeiMemSize);
- ASSERT_EFI_ERROR (Status);
- DEBUG((DEBUG_INFO, "S3 memory %Xh - %Xh bytes\n", S3PeiMemBase, S3PeiMemSize));
-
- //
- // Make sure Stack and PeiMemory are not overlap - JYAO1
- //
-
- Status = PeiServicesInstallPeiMemory (
- S3PeiMemBase,
- S3PeiMemSize
- );
- ASSERT_EFI_ERROR (Status);
- } else {
- PeiMemSize = GetPeiMemSize (PeiServices, BootMode);
- DEBUG((DEBUG_INFO, "PEI memory size = %Xh bytes\n", PeiMemSize));
-
- //
- // Capsule mode
- //
- Capsule = NULL;
- CapsuleBuffer = NULL;
- CapsuleBufferLength = 0;
- if (BootMode == BOOT_ON_FLASH_UPDATE) {
- Status = PeiServicesLocatePpi (
- &gPeiCapsulePpiGuid,
- 0,
- NULL,
- (VOID **) &Capsule
- );
- ASSERT_EFI_ERROR (Status);
-
- if (Status == EFI_SUCCESS) {
- //
- // Make sure Stack and CapsuleBuffer are not overlap - JYAO1
- //
- CapsuleBuffer = (VOID *)(UINTN)BASE_1MB;
- CapsuleBufferLength = (UINTN)(LowMemorySize - PeiMemSize);
- //
- // Call the Capsule PPI Coalesce function to coalesce the capsule data.
- //
- Status = Capsule->Coalesce (PeiServices, &CapsuleBuffer, &CapsuleBufferLength);
- }
- }
-
- RequiredMemSize = RetrieveRequiredMemorySize (PeiServices);
- DEBUG((DEBUG_INFO, "Required memory size = %Xh bytes\n", RequiredMemSize));
-
- //
- // Report the main memory
- //
- BuildResourceDescriptorHob (
- EFI_RESOURCE_SYSTEM_MEMORY,
- (
- EFI_RESOURCE_ATTRIBUTE_PRESENT |
- EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
- EFI_RESOURCE_ATTRIBUTE_TESTED |
- EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE
- ),
- BASE_1MB,
- LowMemorySize
- );
-
- //
- // Make sure Stack and CapsuleBuffer are not overlap - JYAO1
- //
-
- //
- // Install efi memory
- //
- PeiMemBase = BASE_1MB + LowMemorySize - PeiMemSize;
- Status = PeiServicesInstallPeiMemory (
- PeiMemBase,
- PeiMemSize - RequiredMemSize
- );
- ASSERT_EFI_ERROR (Status);
-
- if (Capsule != NULL) {
- Status = Capsule->CreateState (PeiServices, CapsuleBuffer, CapsuleBufferLength);
- }
- }
-
- //
- // Report GUIDed HOB for reserving SMRAM regions
- //
- if (FoundTsegHob) {
- EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *SmramHobDescriptorBlock;
-
- SmramHobDescriptorBlock = BuildGuidHob (
- &gEfiSmmPeiSmramMemoryReserveGuid,
- sizeof (EFI_SMRAM_HOB_DESCRIPTOR_BLOCK)
- );
- ASSERT (SmramHobDescriptorBlock != NULL);
-
- SmramHobDescriptorBlock->NumberOfSmmReservedRegions = 1;
-
- SmramHobDescriptorBlock->Descriptor[0].PhysicalStart = TsegBase;
- SmramHobDescriptorBlock->Descriptor[0].CpuStart = TsegBase;
- SmramHobDescriptorBlock->Descriptor[0].PhysicalSize = TsegSize;
- SmramHobDescriptorBlock->Descriptor[0].RegionState = EFI_SMRAM_CLOSED;
- }
- return EFI_SUCCESS;
-}
-
-/**
- BIOS process FspBobList for other data (not Memory Resource Descriptor).
-
- @param[in] FspHobList Pointer to the HOB data structure produced by FSP.
-
- @return If platform process the FSP hob list successfully.
-**/
-EFI_STATUS
-EFIAPI
-FspHobProcessForOtherData (
- IN VOID *FspHobList
- )
-{
- EFI_PEI_SERVICES **PeiServices;
-
- PeiServices = (EFI_PEI_SERVICES **)GetPeiServicesTablePointer ();
-
- //
- // Other hob for platform
- //
- PlatformHobCreateFromFsp ((CONST EFI_PEI_SERVICES **) PeiServices, FspHobList);
-
- return EFI_SUCCESS;
-}
-
-/**
- BIOS process FspBobList.
-
- @param[in] FspHobList Pointer to the HOB data structure produced by FSP.
-
- @return If platform process the FSP hob list successfully.
-**/
-EFI_STATUS
-EFIAPI
-FspHobProcess (
- IN VOID *FspHobList
- )
-{
- EFI_STATUS Status;
-
- Status = FspHobProcessForMemoryResource (FspHobList);
- if (EFI_ERROR (Status)) {
- return Status;
- }
- Status = FspHobProcessForOtherData (FspHobList);
-
- return Status;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
deleted file mode 100644
index b789b27f4c..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
+++ /dev/null
@@ -1,74 +0,0 @@
-## @file
-#
-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-################################################################################
-#
-# Defines Section - statements that will be processed to create a Makefile.
-#
-################################################################################
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = PeiFspHobProcessLibVlv2
- FILE_GUID = C7B7070B-E5A8-4b86-9110-BDCA1095F496
- MODULE_TYPE = SEC
- VERSION_STRING = 1.0
- LIBRARY_CLASS = FspHobProcessLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-################################################################################
-#
-# Sources Section - list of files that are required for the build to succeed.
-#
-################################################################################
-
-[Sources]
- FspHobProcessLibVlv2.c
-
-
-################################################################################
-#
-# Package Dependency Section - list of Package files that are required for
-# this module.
-#
-################################################################################
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
- IntelFspPkg/IntelFspPkg.dec
- IntelFspWrapperPkg/IntelFspWrapperPkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
-
-[LibraryClasses]
- BaseLib
- BaseMemoryLib
- HobLib
- DebugLib
- FspPlatformInfoLib
- PeiServicesLib
- PeiServicesTablePointerLib
- PlatformFspLib
-
-[Pcd]
- gFspWrapperTokenSpaceGuid.PcdPeiMinMemSize
- gFspWrapperTokenSpaceGuid.PcdPeiRecoveryMinMemSize
-
-[Guids]
- gFspReservedMemoryResourceHobGuid
- gEfiMemoryTypeInformationGuid
- gEfiSmmPeiSmramMemoryReserveGuid
-
-[Ppis]
- gPeiCapsulePpiGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.c
deleted file mode 100644
index 2b03cfaec9..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/** @file
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-
-#include <Ppi/SecPlatformInformation.h>
-#include <Ppi/SecPerformance.h>
-#include <Ppi/TemporaryRamSupport.h>
-
-#include <Library/LocalApicLib.h>
-
-/**
- This interface conveys state information out of the Security (SEC) phase into PEI.
-
- @param PeiServices Pointer to the PEI Services Table.
- @param StructureSize Pointer to the variable describing size of the input buffer.
- @param PlatformInformationRecord Pointer to the EFI_SEC_PLATFORM_INFORMATION_RECORD.
-
- @retval EFI_SUCCESS The data was successfully returned.
- @retval EFI_BUFFER_TOO_SMALL The buffer was too small.
-
-**/
-EFI_STATUS
-EFIAPI
-SecPlatformInformation (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN OUT UINT64 *StructureSize,
- OUT EFI_SEC_PLATFORM_INFORMATION_RECORD *PlatformInformationRecord
- );
-
-/**
- This interface conveys performance information out of the Security (SEC) phase into PEI.
-
- This service is published by the SEC phase. The SEC phase handoff has an optional
- EFI_PEI_PPI_DESCRIPTOR list as its final argument when control is passed from SEC into the
- PEI Foundation. As such, if the platform supports collecting performance data in SEC,
- this information is encapsulated into the data structure abstracted by this service.
- This information is collected for the boot-strap processor (BSP) on IA-32.
-
- @param[in] PeiServices The pointer to the PEI Services Table.
- @param[in] This The pointer to this instance of the PEI_SEC_PERFORMANCE_PPI.
- @param[out] Performance The pointer to performance data collected in SEC phase.
-
- @retval EFI_SUCCESS The data was successfully returned.
-
-**/
-EFI_STATUS
-EFIAPI
-SecGetPerformance (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN PEI_SEC_PERFORMANCE_PPI *This,
- OUT FIRMWARE_SEC_PERFORMANCE *Performance
- );
-
-/**
- This service of the TEMPORARY_RAM_SUPPORT_PPI that migrates temporary RAM into
- permanent memory.
-
- @param PeiServices Pointer to the PEI Services Table.
- @param TemporaryMemoryBase Source Address in temporary memory from which the SEC or PEIM will copy the
- Temporary RAM contents.
- @param PermanentMemoryBase Destination Address in permanent memory into which the SEC or PEIM will copy the
- Temporary RAM contents.
- @param CopySize Amount of memory to migrate from temporary to permanent memory.
-
- @retval EFI_SUCCESS The data was successfully returned.
- @retval EFI_INVALID_PARAMETER PermanentMemoryBase + CopySize > TemporaryMemoryBase when
- TemporaryMemoryBase > PermanentMemoryBase.
-
-**/
-EFI_STATUS
-EFIAPI
-SecTemporaryRamSupport (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
- IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
- IN UINTN CopySize
- );
-
-EFI_SEC_PLATFORM_INFORMATION_PPI mSecPlatformInformationPpi = {
- SecPlatformInformation
-};
-
-PEI_SEC_PERFORMANCE_PPI mSecPerformancePpi = {
- SecGetPerformance
-};
-
-EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI gSecTemporaryRamSupportPpi = {
- SecTemporaryRamSupport
-};
-
-EFI_PEI_PPI_DESCRIPTOR mPeiSecPlatformPpi[] = {
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI,
- &gEfiSecPlatformInformationPpiGuid,
- &mSecPlatformInformationPpi
- },
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI,
- &gPeiSecPerformancePpiGuid,
- &mSecPerformancePpi
- },
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
- &gEfiTemporaryRamSupportPpiGuid,
- &gSecTemporaryRamSupportPpi
- },
-};
-
-/**
- A developer supplied function to perform platform specific operations.
-
- It's a developer supplied function to perform any operations appropriate to a
- given platform. It's invoked just before passing control to PEI core by SEC
- core. Platform developer may modify the SecCoreData passed to PEI Core.
- It returns a platform specific PPI list that platform wishes to pass to PEI core.
- The Generic SEC core module will merge this list to join the final list passed to
- PEI core.
-
- @param SecCoreData The same parameter as passing to PEI core. It
- could be overridden by this function.
-
- @return The platform specific PPI list to be passed to PEI core or
- NULL if there is no need of such platform specific PPI list.
-
-**/
-EFI_PEI_PPI_DESCRIPTOR *
-EFIAPI
-SecPlatformMain (
- IN OUT EFI_SEC_PEI_HAND_OFF *SecCoreData
- )
-{
- EFI_PEI_PPI_DESCRIPTOR *PpiList;
-
- InitializeApicTimer (0, (UINT32) -1, TRUE, 5);
-
- PpiList = &mPeiSecPlatformPpi[0];
-
- return PpiList;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
deleted file mode 100644
index 578066d98f..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
+++ /dev/null
@@ -1,82 +0,0 @@
-## @file
-#
-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-################################################################################
-#
-# Defines Section - statements that will be processed to create a Makefile.
-#
-################################################################################
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SecPeiFspPlatformSecLibVlv2
- FILE_GUID = 6653876C-F6A1-45BB-A027-20455093BC6D
- MODULE_TYPE = SEC
- VERSION_STRING = 1.0
- LIBRARY_CLASS = FspPlatformSecLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-################################################################################
-#
-# Sources Section - list of files that are required for the build to succeed.
-#
-################################################################################
-
-[Sources]
- FspPlatformSecLibVlv2.c
- SecRamInitData.c
- SaveSecContext.c
- SecPlatformInformation.c
- SecGetPerformance.c
- SecTempRamSupport.c
- PlatformInit.c
- UartInit.c
-
-[Sources.IA32]
- Ia32/SecEntry.asm
- Ia32/PeiCoreEntry.asm
- Ia32/AsmSaveSecContext.asm
- Ia32/Stack.asm
-
-################################################################################
-#
-# Package Dependency Section - list of Package files that are required for
-# this module.
-#
-################################################################################
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- UefiCpuPkg/UefiCpuPkg.dec
- IntelFspWrapperPkg/IntelFspWrapperPkg.dec
-
-[LibraryClasses]
- LocalApicLib
- SerialPortLib
-
-[Ppis]
- gEfiSecPlatformInformationPpiGuid
- gPeiSecPerformancePpiGuid
- gEfiTemporaryRamSupportPpiGuid
-
-[Pcd]
- gFspWrapperTokenSpaceGuid.PcdPeiTemporaryRamStackSize
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize
-
-[FixedPcd]
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize
- gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/AsmSaveSecContext.asm b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/AsmSaveSecContext.asm
deleted file mode 100644
index 2546a09a1a..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/AsmSaveSecContext.asm
+++ /dev/null
@@ -1,45 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-; Module Name:
-;
-; SecEntry.asm
-;
-; Abstract:
-;
-; This is the code that goes from real-mode to protected mode.
-; It consumes the reset vector, calls two basic APIs from FSP binary.
-;
-;------------------------------------------------------------------------------
-
-.686p
-.xmm
-.model flat,c
-.code
-
-;----------------------------------------------------------------------------
-; MMX Usage:
-; MM0 = BIST State
-; MM5 = Save time-stamp counter value high32bit
-; MM6 = Save time-stamp counter value low32bit.
-;
-; It should be same as SecEntry.asm and PeiCoreEntry.asm.
-;----------------------------------------------------------------------------
-
-AsmSaveBistValue PROC PUBLIC
- mov eax, [esp+4]
- movd mm0, eax
- ret
-AsmSaveBistValue ENDP
-
-AsmSaveTickerValue PROC PUBLIC
- mov eax, [esp+4]
- movd mm6, eax
- mov eax, [esp+8]
- movd mm5, eax
- ret
-AsmSaveTickerValue ENDP
-
-END
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Fsp.inc b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Fsp.inc
deleted file mode 100644
index 23295587b4..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Fsp.inc
+++ /dev/null
@@ -1,45 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-; Module Name:
-;
-; Fsp.inc
-;
-; Abstract:
-;
-; Fsp related definitions
-;
-;------------------------------------------------------------------------------
-
-
-;
-; Fv Header
-;
-FVH_SIGINATURE_OFFSET EQU 028h
-FVH_SIGINATURE_VALID_VALUE EQU 04856465Fh ; valid signature:_FVH
-FVH_HEADER_LENGTH_OFFSET EQU 030h
-FVH_EXTHEADER_OFFSET_OFFSET EQU 034h
-FVH_EXTHEADER_SIZE_OFFSET EQU 010h
-
-;
-; Ffs Header
-;
-FSP_HEADER_GUID_DWORD1 EQU 0912740BEh
-FSP_HEADER_GUID_DWORD2 EQU 047342284h
-FSP_HEADER_GUID_DWORD3 EQU 0B08471B9h
-FSP_HEADER_GUID_DWORD4 EQU 00C3F3527h
-FFS_HEADER_SIZE_VALUE EQU 018h
-
-;
-; Section Header
-;
-SECTION_HEADER_TYPE_OFFSET EQU 03h
-RAW_SECTION_HEADER_SIZE_VALUE EQU 04h
-
-;
-; Fsp Header
-;
-FSP_HEADER_IMAGEBASE_OFFSET EQU 01Ch
-FSP_HEADER_TEMPRAMINIT_OFFSET EQU 030h
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/PeiCoreEntry.asm b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/PeiCoreEntry.asm
deleted file mode 100644
index 3d34c62ea4..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/PeiCoreEntry.asm
+++ /dev/null
@@ -1,135 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-; Module Name:
-;
-; SecEntry.asm
-;
-; Abstract:
-;
-; This is the code that goes from real-mode to protected mode.
-; It consumes the reset vector, calls two basic APIs from FSP binary.
-;
-;------------------------------------------------------------------------------
-
-.686p
-.xmm
-.model flat, c
-.code
-
-EXTRN SecStartup:NEAR
-EXTRN PlatformInit:NEAR
-
-CallPeiCoreEntryPoint PROC PUBLIC
- ;
- ; Obtain the hob list pointer
- ;
- mov eax, [esp+4]
- ;
- ; Obtain the stack information
- ; ECX: start of range
- ; EDX: end of range
- ;
- mov ecx, [esp+8]
- mov edx, [esp+0Ch]
-
- ;
- ; Platform init
- ;
- pushad
- push edx
- push ecx
- push eax
- call PlatformInit
- pop eax
- pop eax
- pop eax
- popad
-
- ;
- ; Set stack top pointer
- ;
- mov esp, edx
-
- ;
- ; Push the hob list pointer
- ;
- push eax
-
- ;
- ; Save the value
- ; ECX: start of range
- ; EDX: end of range
- ;
- mov ebp, esp
- push ecx
- push edx
-
- ;
- ; Push processor count to stack first, then BIST status (AP then BSP)
- ;
- mov eax, 1
- cpuid
- shr ebx, 16
- and ebx, 0000000FFh
- cmp bl, 1
- jae PushProcessorCount
-
- ;
- ; Some processors report 0 logical processors. Effectively 0 = 1.
- ; So we fix up the processor count
- ;
- inc ebx
-
-PushProcessorCount:
- push ebx
-
- ;
- ; We need to implement a long-term solution for BIST capture. For now, we just copy BSP BIST
- ; for all processor threads
- ;
- xor ecx, ecx
- mov cl, bl
-PushBist:
- movd eax, mm0
- push eax
- loop PushBist
-
- ; Save Time-Stamp Counter
- movd eax, mm5
- push eax
-
- movd eax, mm6
- push eax
-
- ;
- ; Pass entry point of the PEI core
- ;
- mov edi, 0FFFFFFE0h
- push DWORD PTR ds:[edi]
-
- ;
- ; Pass BFV into the PEI Core
- ;
- mov edi, 0FFFFFFFCh
- push DWORD PTR ds:[edi]
-
- ;
- ; Pass stack size into the PEI Core
- ;
- mov ecx, [ebp - 4]
- mov edx, [ebp - 8]
- push ecx ; RamBase
-
- sub edx, ecx
- push edx ; RamSize
-
- ;
- ; Pass Control into the PEI Core
- ;
- call SecStartup
-CallPeiCoreEntryPoint ENDP
-
-END
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/SecEntry.asm b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/SecEntry.asm
deleted file mode 100644
index b7026c433f..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/SecEntry.asm
+++ /dev/null
@@ -1,338 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-; Module Name:
-;
-; SecEntry.asm
-;
-; Abstract:
-;
-; This is the code that goes from real-mode to protected mode.
-; It consumes the reset vector, calls two basic APIs from FSP binary.
-;
-;------------------------------------------------------------------------------
- INCLUDE Fsp.inc
-
-.686p
-.xmm
-.model small, c
-
-EXTRN CallPeiCoreEntryPoint:NEAR
-EXTRN TempRamInitParams:FAR
-
-; Pcds
-EXTRN PcdGet32 (PcdFlashFvFspBase):DWORD
-EXTRN PcdGet32 (PcdFlashFvFspSize):DWORD
-
-_TEXT_REALMODE SEGMENT PARA PUBLIC USE16 'CODE'
- ASSUME CS:_TEXT_REALMODE, DS:_TEXT_REALMODE
-
-;----------------------------------------------------------------------------
-;
-; Procedure: _ModuleEntryPoint
-;
-; Input: None
-;
-; Output: None
-;
-; Destroys: Assume all registers
-;
-; Description:
-;
-; Transition to non-paged flat-model protected mode from a
-; hard-coded GDT that provides exactly two descriptors.
-; This is a bare bones transition to protected mode only
-; used for a while in PEI and possibly DXE.
-;
-; After enabling protected mode, a far jump is executed to
-; transfer to PEI using the newly loaded GDT.
-;
-; Return: None
-;
-; MMX Usage:
-; MM0 = BIST State
-; MM5 = Save time-stamp counter value high32bit
-; MM6 = Save time-stamp counter value low32bit.
-;
-;----------------------------------------------------------------------------
-
-align 4
-_ModuleEntryPoint PROC NEAR C PUBLIC
- fninit ; clear any pending Floating point exceptions
- ;
- ; Store the BIST value in mm0
- ;
- movd mm0, eax
-
- ;
- ; Save time-stamp counter value
- ; rdtsc load 64bit time-stamp counter to EDX:EAX
- ;
- rdtsc
- movd mm5, edx
- movd mm6, eax
-
- ;
- ; Load the GDT table in GdtDesc
- ;
- mov esi, OFFSET GdtDesc
- DB 66h
- lgdt fword ptr cs:[si]
-
- ;
- ; Transition to 16 bit protected mode
- ;
- mov eax, cr0 ; Get control register 0
- or eax, 00000003h ; Set PE bit (bit #0) & MP bit (bit #1)
- mov cr0, eax ; Activate protected mode
-
- mov eax, cr4 ; Get control register 4
- or eax, 00000600h ; Set OSFXSR bit (bit #9) & OSXMMEXCPT bit (bit #10)
- mov cr4, eax
-
- ;
- ; Now we're in 16 bit protected mode
- ; Set up the selectors for 32 bit protected mode entry
- ;
- mov ax, SYS_DATA_SEL
- mov ds, ax
- mov es, ax
- mov fs, ax
- mov gs, ax
- mov ss, ax
-
- ;
- ; Transition to Flat 32 bit protected mode
- ; The jump to a far pointer causes the transition to 32 bit mode
- ;
- mov esi, offset ProtectedModeEntryLinearAddress
- jmp fword ptr cs:[si]
-
-_ModuleEntryPoint ENDP
-_TEXT_REALMODE ENDS
-
-_TEXT_PROTECTED_MODE SEGMENT PARA PUBLIC USE32 'CODE'
- ASSUME CS:_TEXT_PROTECTED_MODE, DS:_TEXT_PROTECTED_MODE
-
-;----------------------------------------------------------------------------
-;
-; Procedure: ProtectedModeEntryPoint
-;
-; Input: None
-;
-; Output: None
-;
-; Destroys: Assume all registers
-;
-; Description:
-;
-; This function handles:
-; Call two basic APIs from FSP binary
-; Initializes stack with some early data (BIST, PEI entry, etc)
-;
-; Return: None
-;
-;----------------------------------------------------------------------------
-
-align 4
-ProtectedModeEntryPoint PROC NEAR PUBLIC
-
- ; Find the fsp info header
- mov edi, PcdGet32 (PcdFlashFvFspBase)
- mov ecx, PcdGet32 (PcdFlashFvFspSize)
-
- mov eax, dword ptr [edi + FVH_SIGINATURE_OFFSET]
- cmp eax, FVH_SIGINATURE_VALID_VALUE
- jnz FspHeaderNotFound
-
- xor eax, eax
- mov ax, word ptr [edi + FVH_EXTHEADER_OFFSET_OFFSET]
- cmp ax, 0
- jnz FspFvExtHeaderExist
-
- xor eax, eax
- mov ax, word ptr [edi + FVH_HEADER_LENGTH_OFFSET] ; Bypass Fv Header
- add edi, eax
- jmp FspCheckFfsHeader
-
-FspFvExtHeaderExist:
- add edi, eax
- mov eax, dword ptr [edi + FVH_EXTHEADER_SIZE_OFFSET] ; Bypass Ext Fv Header
- add edi, eax
-
- ; Round up to 8 byte alignment
- mov eax, edi
- and al, 07h
- jz FspCheckFfsHeader
-
- and edi, 0FFFFFFF8h
- add edi, 08h
-
-FspCheckFfsHeader:
- ; Check the ffs guid
- mov eax, dword ptr [edi]
- cmp eax, FSP_HEADER_GUID_DWORD1
- jnz FspHeaderNotFound
-
- mov eax, dword ptr [edi + 4]
- cmp eax, FSP_HEADER_GUID_DWORD2
- jnz FspHeaderNotFound
-
- mov eax, dword ptr [edi + 8]
- cmp eax, FSP_HEADER_GUID_DWORD3
- jnz FspHeaderNotFound
-
- mov eax, dword ptr [edi + 0Ch]
- cmp eax, FSP_HEADER_GUID_DWORD4
- jnz FspHeaderNotFound
-
- add edi, FFS_HEADER_SIZE_VALUE ; Bypass the ffs header
-
- ; Check the section type as raw section
- mov al, byte ptr [edi + SECTION_HEADER_TYPE_OFFSET]
- cmp al, 019h
- jnz FspHeaderNotFound
-
- add edi, RAW_SECTION_HEADER_SIZE_VALUE ; Bypass the section header
- jmp FspHeaderFound
-
-FspHeaderNotFound:
- jmp $
-
-FspHeaderFound:
- ; Get the fsp TempRamInit Api address
- mov eax, dword ptr [edi + FSP_HEADER_IMAGEBASE_OFFSET]
- add eax, dword ptr [edi + FSP_HEADER_TEMPRAMINIT_OFFSET]
-
- ; Setup the hardcode stack
- mov esp, OFFSET TempRamInitStack
-
- ; Call the fsp TempRamInit Api
- jmp eax
-
-TempRamInitDone:
- cmp eax, 0
- jnz FspApiFailed
-
- ; ECX: start of range
- ; EDX: end of range
- mov esp, edx
- push edx
- push ecx
- push eax ; zero - no hob list yet
- call CallPeiCoreEntryPoint
-
-FspApiFailed:
- jmp $
-
-align 10h
-TempRamInitStack:
- DD OFFSET TempRamInitDone
- DD OFFSET TempRamInitParams
-
-ProtectedModeEntryPoint ENDP
-
-;
-; ROM-based Global-Descriptor Table for the Tiano PEI Phase
-;
-align 16
-PUBLIC BootGdtTable
-
-;
-; GDT[0]: 0x00: Null entry, never used.
-;
-NULL_SEL EQU $ - GDT_BASE ; Selector [0]
-GDT_BASE:
-BootGdtTable DD 0
- DD 0
-;
-; Linear data segment descriptor
-;
-LINEAR_SEL EQU $ - GDT_BASE ; Selector [0x8]
- DW 0FFFFh ; limit 0xFFFFF
- DW 0 ; base 0
- DB 0
- DB 092h ; present, ring 0, data, expand-up, writable
- DB 0CFh ; page-granular, 32-bit
- DB 0
-;
-; Linear code segment descriptor
-;
-LINEAR_CODE_SEL EQU $ - GDT_BASE ; Selector [0x10]
- DW 0FFFFh ; limit 0xFFFFF
- DW 0 ; base 0
- DB 0
- DB 09Bh ; present, ring 0, data, expand-up, not-writable
- DB 0CFh ; page-granular, 32-bit
- DB 0
-;
-; System data segment descriptor
-;
-SYS_DATA_SEL EQU $ - GDT_BASE ; Selector [0x18]
- DW 0FFFFh ; limit 0xFFFFF
- DW 0 ; base 0
- DB 0
- DB 093h ; present, ring 0, data, expand-up, not-writable
- DB 0CFh ; page-granular, 32-bit
- DB 0
-
-;
-; System code segment descriptor
-;
-SYS_CODE_SEL EQU $ - GDT_BASE ; Selector [0x20]
- DW 0FFFFh ; limit 0xFFFFF
- DW 0 ; base 0
- DB 0
- DB 09Ah ; present, ring 0, data, expand-up, writable
- DB 0CFh ; page-granular, 32-bit
- DB 0
-;
-; Spare segment descriptor
-;
-SYS16_CODE_SEL EQU $ - GDT_BASE ; Selector [0x28]
- DW 0FFFFh ; limit 0xFFFFF
- DW 0 ; base 0
- DB 0Eh ; Changed from F000 to E000.
- DB 09Bh ; present, ring 0, code, expand-up, writable
- DB 00h ; byte-granular, 16-bit
- DB 0
-;
-; Spare segment descriptor
-;
-SYS16_DATA_SEL EQU $ - GDT_BASE ; Selector [0x30]
- DW 0FFFFh ; limit 0xFFFF
- DW 0 ; base 0
- DB 0
- DB 093h ; present, ring 0, data, expand-up, not-writable
- DB 00h ; byte-granular, 16-bit
- DB 0
-
-;
-; Spare segment descriptor
-;
-SPARE5_SEL EQU $ - GDT_BASE ; Selector [0x38]
- DW 0 ; limit 0
- DW 0 ; base 0
- DB 0
- DB 0 ; present, ring 0, data, expand-up, writable
- DB 0 ; page-granular, 32-bit
- DB 0
-GDT_SIZE EQU $ - BootGdtTable ; Size, in bytes
-
-;
-; GDT Descriptor
-;
-GdtDesc: ; GDT descriptor
- DW GDT_SIZE - 1 ; GDT limit
- DD OFFSET BootGdtTable ; GDT base address
-
-
-ProtectedModeEntryLinearAddress LABEL FWORD
-ProtectedModeEntryLinearOffset LABEL DWORD
- DD OFFSET ProtectedModeEntryPoint ; Offset of our 32 bit code
- DW LINEAR_CODE_SEL
-
-_TEXT_PROTECTED_MODE ENDS
-END
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.S b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.S
deleted file mode 100644
index 9bd29ce0f4..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.S
+++ /dev/null
@@ -1,71 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-# Abstract:
-#
-# Switch the stack from temporary memory to permenent memory.
-#
-#------------------------------------------------------------------------------
-
-
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# SecSwitchStack (
-# UINT32 TemporaryMemoryBase,
-# UINT32 PermenentMemoryBase
-# )#
-#------------------------------------------------------------------------------
-ASM_GLOBAL ASM_PFX (SecSwitchStack)
-ASM_PFX(SecSwitchStack):
- #
- # Save standard registers so they can be used to change stack
- #
- pushl %eax
- pushl %ebx
- pushl %ecx
- pushl %edx
-
- #
- # !!CAUTION!! this function address's is pushed into stack after
- # migration of whole temporary memory, so need save it to permenent
- # memory at first!
- #
- movl 20(%esp), %ebx # Save the first parameter
- movl 24(%esp), %ecx # Save the second parameter
-
- #
- # Save this function's return address into permenent memory at first.
- # Then, Fixup the esp point to permenent memory
- #
- movl %esp, %eax
- subl %ebx, %eax
- addl %ecx, %eax
- movl 0(%esp), %edx # copy pushed register's value to permenent memory
- movl %edx, 0(%eax)
- movl 4(%esp), %edx
- movl %edx, 4(%eax)
- movl 8(%esp), %edx
- movl %edx, 8(%eax)
- movl 12(%esp), %edx
- movl %edx, 12(%eax)
- movl 16(%esp), %edx # Update this function's return address into permenent memory
- movl %edx, 16(%eax)
- movl %eax, %esp # From now, esp is pointed to permenent memory
-
- #
- # Fixup the ebp point to permenent memory
- #
- movl %ebp, %eax
- subl %ebx, %eax
- addl %ecx, %eax
- movl %eax, %ebp # From now, ebp is pointed to permenent memory
-
- popl %edx
- popl %ecx
- popl %ebx
- popl %eax
- ret
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.asm b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.asm
deleted file mode 100644
index 95e56cec9b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.asm
+++ /dev/null
@@ -1,76 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-; Abstract:
-;
-; Switch the stack from temporary memory to permenent memory.
-;
-;------------------------------------------------------------------------------
-
- .586p
- .model flat,C
- .code
-
-;------------------------------------------------------------------------------
-; VOID
-; EFIAPI
-; SecSwitchStack (
-; UINT32 TemporaryMemoryBase,
-; UINT32 PermenentMemoryBase
-; );
-;------------------------------------------------------------------------------
-SecSwitchStack PROC
- ;
- ; Save three register: eax, ebx, ecx
- ;
- push eax
- push ebx
- push ecx
- push edx
-
- ;
- ; !!CAUTION!! this function address's is pushed into stack after
- ; migration of whole temporary memory, so need save it to permenent
- ; memory at first!
- ;
-
- mov ebx, [esp + 20] ; Save the first parameter
- mov ecx, [esp + 24] ; Save the second parameter
-
- ;
- ; Save this function's return address into permenent memory at first.
- ; Then, Fixup the esp point to permenent memory
- ;
- mov eax, esp
- sub eax, ebx
- add eax, ecx
- mov edx, dword ptr [esp] ; copy pushed register's value to permenent memory
- mov dword ptr [eax], edx
- mov edx, dword ptr [esp + 4]
- mov dword ptr [eax + 4], edx
- mov edx, dword ptr [esp + 8]
- mov dword ptr [eax + 8], edx
- mov edx, dword ptr [esp + 12]
- mov dword ptr [eax + 12], edx
- mov edx, dword ptr [esp + 16] ; Update this function's return address into permenent memory
- mov dword ptr [eax + 16], edx
- mov esp, eax ; From now, esp is pointed to permenent memory
-
- ;
- ; Fixup the ebp point to permenent memory
- ;
- mov eax, ebp
- sub eax, ebx
- add eax, ecx
- mov ebp, eax ; From now, ebp is pointed to permenent memory
-
- pop edx
- pop ecx
- pop ebx
- pop eax
- ret
-SecSwitchStack ENDP
-
- END
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/PlatformInit.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/PlatformInit.c
deleted file mode 100644
index d4e1c2a425..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/PlatformInit.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/** @file
- This PEIM will parse the hoblist from fsp and report them into pei core.
- This file contains the main entrypoint of the PEIM.
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-
-#include <PiPei.h>
-#include <Library/DebugLib.h>
-#include <Library/SerialPortLib.h>
-
-VOID EnableInternalUart ();
-
-VOID
-EFIAPI
-PlatformInit (
- IN VOID *FspHobList,
- IN VOID *StartOfRange,
- IN VOID *EndOfRange
- )
-{
- //
- // Platform initialization
- // Enable Serial port here
- //
- EnableInternalUart ();
- SerialPortInitialize ();
-
- DEBUG ((DEBUG_INFO, "PlatformInit\n"));
- DEBUG ((DEBUG_INFO, "FspHobList - 0x%x\n", FspHobList));
- DEBUG ((DEBUG_INFO, "StartOfRange - 0x%x\n", StartOfRange));
- DEBUG ((DEBUG_INFO, "EndOfRange - 0x%x\n", EndOfRange));
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SaveSecContext.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SaveSecContext.c
deleted file mode 100644
index 382e617b27..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SaveSecContext.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/** @file
- This PEIM will parse the hoblist from fsp and report them into pei core.
- This file contains the main entrypoint of the PEIM.
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-
-#include <PiPei.h>
-#include <Library/DebugLib.h>
-
-#include <Ppi/TopOfTemporaryRam.h>
-#include <Ppi/SecPlatformInformation.h>
-
-/**
- Save BIST value before call FspInit.
-
- @param Bist BIST value.
-**/
-VOID
-AsmSaveBistValue (
- IN UINT32 Bist
- );
-
-/**
- Save Ticker value before call FspInit.
-
- @param Ticker Ticker value.
-**/
-VOID
-AsmSaveTickerValue (
- IN UINT64 Ticker
- );
-
-/**
- Save SEC context before call FspInit.
-
- @param PeiServices Pointer to PEI Services Table.
-**/
-VOID
-EFIAPI
-SaveSecContext (
- IN CONST EFI_PEI_SERVICES **PeiServices
- )
-{
- UINT32 *Bist;
- UINT64 *Ticker;
- UINT32 Size;
- UINT32 Count;
- UINT32 TopOfTemporaryRam;
- VOID *TopOfTemporaryRamPpi;
- EFI_STATUS Status;
-
- DEBUG ((DEBUG_INFO, "SaveSecContext - 0x%x\n", PeiServices));
-
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gTopOfTemporaryRamPpiGuid,
- 0,
- NULL,
- (VOID **) &TopOfTemporaryRamPpi
- );
- if (EFI_ERROR (Status)) {
- return ;
- }
-
- DEBUG ((DEBUG_INFO, "TopOfTemporaryRamPpi - 0x%x\n", TopOfTemporaryRamPpi));
-
- //
- // The entries of BIST information, together with the number of them,
- // reside in the bottom of stack, left untouched by normal stack operation.
- // This routine copies the BIST information to the buffer pointed by
- // PlatformInformationRecord for output.
- //
- // |--------------| <- TopOfTemporaryRam
- // |Number of BSPs|
- // |--------------|
- // | BIST |
- // |--------------|
- // | .... |
- // |--------------|
- // | TSC[63:32] |
- // |--------------|
- // | TSC[31:00] |
- // |--------------|
- //
-
- TopOfTemporaryRam = (UINT32)(UINTN)TopOfTemporaryRamPpi - sizeof(UINT32);
- TopOfTemporaryRam -= sizeof(UINT32) * 2;
- DEBUG ((DEBUG_INFO, "TopOfTemporaryRam - 0x%x\n", TopOfTemporaryRam));
- Count = *(UINT32 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32));
- DEBUG ((DEBUG_INFO, "Count - 0x%x\n", Count));
- Size = Count * sizeof (IA32_HANDOFF_STATUS);
- DEBUG ((DEBUG_INFO, "Size - 0x%x\n", Size));
-
- Bist = (UINT32 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32) - Size);
- DEBUG ((DEBUG_INFO, "Bist - 0x%x\n", *Bist));
- Ticker = (UINT64 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32) - Size - sizeof(UINT64));
- DEBUG ((DEBUG_INFO, "Ticker - 0x%lx\n", *Ticker));
-
- //
- // Just need record BSP
- //
- AsmSaveBistValue (*Bist);
- AsmSaveTickerValue (*Ticker);
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecGetPerformance.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecGetPerformance.c
deleted file mode 100644
index c5c22a29c2..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecGetPerformance.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/** @file
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-
-#include <Ppi/SecPerformance.h>
-#include <Ppi/TopOfTemporaryRam.h>
-
-#include <Library/BaseMemoryLib.h>
-#include <Library/TimerLib.h>
-#include <Library/DebugLib.h>
-
-/**
- This interface conveys performance information out of the Security (SEC) phase into PEI.
-
- This service is published by the SEC phase. The SEC phase handoff has an optional
- EFI_PEI_PPI_DESCRIPTOR list as its final argument when control is passed from SEC into the
- PEI Foundation. As such, if the platform supports collecting performance data in SEC,
- this information is encapsulated into the data structure abstracted by this service.
- This information is collected for the boot-strap processor (BSP) on IA-32.
-
- @param[in] PeiServices The pointer to the PEI Services Table.
- @param[in] This The pointer to this instance of the PEI_SEC_PERFORMANCE_PPI.
- @param[out] Performance The pointer to performance data collected in SEC phase.
-
- @retval EFI_SUCCESS The data was successfully returned.
-
-**/
-EFI_STATUS
-EFIAPI
-SecGetPerformance (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN PEI_SEC_PERFORMANCE_PPI *This,
- OUT FIRMWARE_SEC_PERFORMANCE *Performance
- )
-{
- UINT32 Size;
- UINT32 Count;
- UINT32 TopOfTemporaryRam;
- UINT64 Ticker;
- VOID *TopOfTemporaryRamPpi;
- EFI_STATUS Status;
-
- DEBUG ((DEBUG_INFO, "SecGetPerformance\n"));
-
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gTopOfTemporaryRamPpiGuid,
- 0,
- NULL,
- (VOID **) &TopOfTemporaryRamPpi
- );
- if (EFI_ERROR (Status)) {
- return EFI_NOT_FOUND;
- }
-
- //
- // |--------------| <- TopOfTemporaryRam
- // |Number of BSPs|
- // |--------------|
- // | BIST |
- // |--------------|
- // | .... |
- // |--------------|
- // | TSC[63:32] |
- // |--------------|
- // | TSC[31:00] |
- // |--------------|
- //
- TopOfTemporaryRam = (UINT32)(UINTN)TopOfTemporaryRamPpi - sizeof(UINT32);
- TopOfTemporaryRam -= sizeof(UINT32) * 2;
- Count = *(UINT32 *) (UINTN) (TopOfTemporaryRam - sizeof (UINT32));
- Size = Count * sizeof (UINT64);
-
- Ticker = *(UINT64 *) (UINTN) (TopOfTemporaryRam - sizeof (UINT32) - Size - sizeof (UINT32) * 2);
- Performance->ResetEnd = GetTimeInNanoSecond (Ticker);
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecPlatformInformation.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecPlatformInformation.c
deleted file mode 100644
index a1ba35d47d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecPlatformInformation.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/** @file
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-
-#include <Ppi/SecPlatformInformation.h>
-#include <Ppi/TopOfTemporaryRam.h>
-
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-
-/**
- This interface conveys state information out of the Security (SEC) phase into PEI.
-
- @param PeiServices Pointer to the PEI Services Table.
- @param StructureSize Pointer to the variable describing size of the input buffer.
- @param PlatformInformationRecord Pointer to the EFI_SEC_PLATFORM_INFORMATION_RECORD.
-
- @retval EFI_SUCCESS The data was successfully returned.
- @retval EFI_BUFFER_TOO_SMALL The buffer was too small.
-
-**/
-EFI_STATUS
-EFIAPI
-SecPlatformInformation (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN OUT UINT64 *StructureSize,
- OUT EFI_SEC_PLATFORM_INFORMATION_RECORD *PlatformInformationRecord
- )
-{
- UINT32 *Bist;
- UINT32 Size;
- UINT32 Count;
- UINT32 TopOfTemporaryRam;
- VOID *TopOfTemporaryRamPpi;
- EFI_STATUS Status;
-
- DEBUG ((DEBUG_INFO, "SecPlatformInformation\n"));
-
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gTopOfTemporaryRamPpiGuid,
- 0,
- NULL,
- (VOID **) &TopOfTemporaryRamPpi
- );
- if (EFI_ERROR (Status)) {
- return EFI_NOT_FOUND;
- }
-
- //
- // The entries of BIST information, together with the number of them,
- // reside in the bottom of stack, left untouched by normal stack operation.
- // This routine copies the BIST information to the buffer pointed by
- // PlatformInformationRecord for output.
- //
- TopOfTemporaryRam = (UINT32)(UINTN)TopOfTemporaryRamPpi - sizeof (UINT32);
- TopOfTemporaryRam -= sizeof(UINT32) * 2;
- Count = *((UINT32 *)(UINTN) (TopOfTemporaryRam - sizeof (UINT32)));
- Size = Count * sizeof (IA32_HANDOFF_STATUS);
-
- if ((*StructureSize) < (UINT64) Size) {
- *StructureSize = Size;
- return EFI_BUFFER_TOO_SMALL;
- }
-
- *StructureSize = Size;
- Bist = (UINT32 *) (TopOfTemporaryRam - sizeof (UINT32) - Size);
-
- CopyMem (PlatformInformationRecord, Bist, Size);
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecRamInitData.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecRamInitData.c
deleted file mode 100644
index 33734e3111..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecRamInitData.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/** @file
- Calling Fsp Apis in SEC
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Library/PcdLib.h>
-
-GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 TempRamInitParams[4] = {
- ((UINT32)FixedPcdGet64 (PcdCpuMicrocodePatchAddress) + FixedPcdGet32 (PcdFlashMicroCodeOffset)),
- ((UINT32)FixedPcdGet64 (PcdCpuMicrocodePatchRegionSize) - FixedPcdGet32 (PcdFlashMicroCodeOffset)),
- FixedPcdGet32 (PcdFlashCodeCacheAddress),
- FixedPcdGet32 (PcdFlashCodeCacheSize)
-};
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecTempRamSupport.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecTempRamSupport.c
deleted file mode 100644
index 8dd1367980..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecTempRamSupport.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/** @file
- C functions in SEC
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-
-#include <Ppi/TemporaryRamSupport.h>
-
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-#include <Library/PcdLib.h>
-#include <Library/DebugAgentLib.h>
-
-/**
- Switch the stack in the temporary memory to the one in the permanent memory.
-
- This function must be invoked after the memory migration immediately. The relative
- position of the stack in the temporary and permanent memory is same.
-
- @param TemporaryMemoryBase Base address of the temporary memory.
- @param PermenentMemoryBase Base address of the permanent memory.
-**/
-VOID
-EFIAPI
-SecSwitchStack (
- UINT32 TemporaryMemoryBase,
- UINT32 PermenentMemoryBase
- );
-
-/**
- This service of the TEMPORARY_RAM_SUPPORT_PPI that migrates temporary RAM into
- permanent memory.
-
- @param PeiServices Pointer to the PEI Services Table.
- @param TemporaryMemoryBase Source Address in temporary memory from which the SEC or PEIM will copy the
- Temporary RAM contents.
- @param PermanentMemoryBase Destination Address in permanent memory into which the SEC or PEIM will copy the
- Temporary RAM contents.
- @param CopySize Amount of memory to migrate from temporary to permanent memory.
-
- @retval EFI_SUCCESS The data was successfully returned.
- @retval EFI_INVALID_PARAMETER PermanentMemoryBase + CopySize > TemporaryMemoryBase when
- TemporaryMemoryBase > PermanentMemoryBase.
-
-**/
-EFI_STATUS
-EFIAPI
-SecTemporaryRamSupport (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
- IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
- IN UINTN CopySize
- )
-{
- IA32_DESCRIPTOR IdtDescriptor;
- VOID* OldHeap;
- VOID* NewHeap;
- VOID* OldStack;
- VOID* NewStack;
- DEBUG_AGENT_CONTEXT_POSTMEM_SEC DebugAgentContext;
- BOOLEAN OldStatus;
- UINTN PeiStackSize;
-
- PeiStackSize = (UINTN)PcdGet32 (PcdPeiTemporaryRamStackSize);
- if (PeiStackSize == 0) {
- PeiStackSize = (CopySize >> 1);
- }
-
- ASSERT (PeiStackSize < CopySize);
-
- //
- // |-------------------|---->
- // | Stack | PeiStackSize
- // |-------------------|---->
- // | Heap | PeiTemporayRamSize
- // |-------------------|----> TempRamBase
- //
- // |-------------------|---->
- // | Heap | PeiTemporayRamSize
- // |-------------------|---->
- // | Stack | PeiStackSize
- // |-------------------|----> PermanentMemoryBase
- //
-
- OldHeap = (VOID*)(UINTN)TemporaryMemoryBase;
- NewHeap = (VOID*)((UINTN)PermanentMemoryBase + PeiStackSize);
-
- OldStack = (VOID*)((UINTN)TemporaryMemoryBase + CopySize - PeiStackSize);
- NewStack = (VOID*)(UINTN)PermanentMemoryBase;
-
- DebugAgentContext.HeapMigrateOffset = (UINTN)NewHeap - (UINTN)OldHeap;
- DebugAgentContext.StackMigrateOffset = (UINTN)NewStack - (UINTN)OldStack;
-
- OldStatus = SaveAndSetDebugTimerInterrupt (FALSE);
-
- //
- // Initialize Debug Agent to support source level debug in PEI phase after memory ready.
- // It will build HOB and fix up the pointer in IDT table.
- //
- InitializeDebugAgent (DEBUG_AGENT_INIT_POSTMEM_SEC, (VOID *) &DebugAgentContext, NULL);
-
- //
- // Migrate Heap
- //
- CopyMem (NewHeap, OldHeap, CopySize - PeiStackSize);
-
- //
- // Migrate Stack
- //
- CopyMem (NewStack, OldStack, PeiStackSize);
-
-
- //
- // We need *not* fix the return address because currently,
- // The PeiCore is executed in flash.
- //
-
- //
- // Rebase IDT table in permanent memory
- //
- AsmReadIdtr (&IdtDescriptor);
- IdtDescriptor.Base = IdtDescriptor.Base - (UINTN)OldStack + (UINTN)NewStack;
-
- AsmWriteIdtr (&IdtDescriptor);
-
-
- //
- // Program MTRR
- //
-
- //
- // SecSwitchStack function must be invoked after the memory migration
- // immediately, also we need fixup the stack change caused by new call into
- // permanent memory.
- //
- SecSwitchStack (
- (UINT32) (UINTN) OldStack,
- (UINT32) (UINTN) NewStack
- );
-
- SaveAndSetDebugTimerInterrupt (OldStatus);
-
- return EFI_SUCCESS;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/UartInit.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/UartInit.c
deleted file mode 100644
index 2a9ab17120..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/UartInit.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/** @file
- This PEIM will parse the hoblist from fsp and report them into pei core.
- This file contains the main entrypoint of the PEIM.
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-
-#include <PiPei.h>
-#include <Library/IoLib.h>
-#include <Library/SerialPortLib.h>
-
-#define PCI_IDX 0xCF8
-#define PCI_DAT 0xCFC
-
-#define PCI_LPC_BASE (0x8000F800)
-#define PCI_LPC_REG(x) (PCI_LPC_BASE + (x))
-
-#define PMC_BASE_ADDRESS 0xFED03000 // PMC Memory Base Address
-#define R_PCH_LPC_PMC_BASE 0x44 // PBASE, 32bit, 512 Bytes
-#define B_PCH_LPC_PMC_BASE_EN BIT1 // Enable Bit
-#define R_PCH_PMC_GEN_PMCON_1 0x20 // General PM Configuration 1
-#define B_PCH_PMC_GEN_PMCON_SUS_PWR_FLR BIT14 // SUS Well Power Failure
-#define B_PCH_PMC_GEN_PMCON_PWROK_FLR BIT16 // PWROK Failure
-
-#define R_PCH_LPC_UART_CTRL 0x80 // UART Control
-#define B_PCH_LPC_UART_CTRL_COM1_EN BIT0 // COM1 Enable
-
-#define ILB_BASE_ADDRESS 0xFED08000 // ILB Memory Base Address
-#define R_PCH_ILB_IRQE 0x88 // IRQ Enable Control
-
-#define IO_BASE_ADDRESS 0xFED0C000 // IO Memory Base Address
-
-#define V_PCH_ILB_IRQE_UARTIRQEN_IRQ3 BIT3 // UART IRQ3 Enable
-#define V_PCH_ILB_IRQE_UARTIRQEN_IRQ4 BIT4 // UART IRQ4 Enable
-#define PCIEX_BASE_ADDRESS 0xE0000000
-#define PCI_EXPRESS_BASE_ADDRESS PCIEX_BASE_ADDRESS
-#define PciD31F0RegBase PCIEX_BASE_ADDRESS + (UINT32) (31 << 15)
-#define SB_RCBA 0xfed1c000
-
-typedef enum {
- PchA0 = 0,
- PchA1 = 1,
- PchB0 = 2,
- PchB1 = 3,
- PchB2 = 4,
- PchB3 = 5,
- PchC0 = 6,
- PchSteppingMax
-} PCH_STEPPING;
-
-#define MmPciAddress( Segment, Bus, Device, Function, Register ) \
- ( (UINTN)PCI_EXPRESS_BASE_ADDRESS + \
- (UINTN)(Bus << 20) + \
- (UINTN)(Device << 15) + \
- (UINTN)(Function << 12) + \
- (UINTN)(Register) \
- )
-
-#define DEFAULT_PCI_BUS_NUMBER_PCH 0
-#define PCI_DEVICE_NUMBER_PCH_LPC 31
-#define PCI_FUNCTION_NUMBER_PCH_LPC 0
-
-#define R_PCH_LPC_RID_CC 0x08 // Revision ID & Class Code
-
-#define V_PCH_LPC_RID_0 0x01 // A0 Stepping (17 x 17)
-#define V_PCH_LPC_RID_1 0x02 // A0 Stepping (25 x 27)
-#define V_PCH_LPC_RID_2 0x03 // A1 Stepping (17 x 17)
-#define V_PCH_LPC_RID_3 0x04 // A1 Stepping (25 x 27)
-#define V_PCH_LPC_RID_4 0x05 // B0 Stepping (17 x 17)
-#define V_PCH_LPC_RID_5 0x06 // B0 Stepping (25 x 27)
-#define V_PCH_LPC_RID_6 0x07 // B1 Stepping (17 x 17)
-#define V_PCH_LPC_RID_7 0x08 // B1 Stepping (25 x 27)
-#define V_PCH_LPC_RID_8 0x09 // B2 Stepping (17 x 17)
-#define V_PCH_LPC_RID_9 0x0A // B2 Stepping (25 x 27)
-#define V_PCH_LPC_RID_A 0x0B // B3 Stepping (17 x 17)
-#define V_PCH_LPC_RID_B 0x0C // B3 Stepping (25 x 27)
-#define V_PCH_LPC_RID_C 0x0D // C0 Stepping (17 x 17)
-#define V_PCH_LPC_RID_D 0x0E // C0 Stepping (25 x 27)
-
-/**
- Return Pch stepping type
-
- @param[in] None
-
- @retval PCH_STEPPING Pch stepping type
-
-**/
-PCH_STEPPING
-EFIAPI
-PchStepping (
- VOID
- )
-{
- UINT8 RevId;
-
- RevId = MmioRead8 (
- MmPciAddress (0,
- DEFAULT_PCI_BUS_NUMBER_PCH,
- PCI_DEVICE_NUMBER_PCH_LPC,
- PCI_FUNCTION_NUMBER_PCH_LPC,
- R_PCH_LPC_RID_CC)
- );
-
- switch (RevId) {
- case V_PCH_LPC_RID_0:
- case V_PCH_LPC_RID_1:
- return PchA0;
- break;
-
- case V_PCH_LPC_RID_2:
- case V_PCH_LPC_RID_3:
- return PchA1;
- break;
-
- case V_PCH_LPC_RID_4:
- case V_PCH_LPC_RID_5:
- return PchB0;
- break;
-
- case V_PCH_LPC_RID_6:
- case V_PCH_LPC_RID_7:
- return PchB1;
- break;
-
- case V_PCH_LPC_RID_8:
- case V_PCH_LPC_RID_9:
- return PchB2;
- break;
-
- case V_PCH_LPC_RID_A:
- case V_PCH_LPC_RID_B:
- return PchB3;
- break;
-
- case V_PCH_LPC_RID_C:
- case V_PCH_LPC_RID_D:
- return PchC0;
- break;
-
- default:
- return PchSteppingMax;
- break;
-
- }
-}
-
-/**
- Enable legacy decoding on ICH6
-
- @param[in] none
-
- @retval EFI_SUCCESS Always returns success.
-
-**/
-VOID
-EnableInternalUart(
- VOID
- )
-{
-
- //
- // Program and enable PMC Base.
- //
- IoWrite32 (PCI_IDX, PCI_LPC_REG(R_PCH_LPC_PMC_BASE));
- IoWrite32 (PCI_DAT, (PMC_BASE_ADDRESS | B_PCH_LPC_PMC_BASE_EN));
-
- //
- // Enable COM1 for debug message output.
- //
- MmioAndThenOr32 (PMC_BASE_ADDRESS + R_PCH_PMC_GEN_PMCON_1, (UINT32) (~(B_PCH_PMC_GEN_PMCON_SUS_PWR_FLR + B_PCH_PMC_GEN_PMCON_PWROK_FLR)), BIT24);
-
- //
- // Silicon Steppings
- //
- if (PchStepping()>= PchB0)
- MmioOr8 (ILB_BASE_ADDRESS + R_PCH_ILB_IRQE, (UINT8) V_PCH_ILB_IRQE_UARTIRQEN_IRQ4);
- else
- MmioOr8 (ILB_BASE_ADDRESS + R_PCH_ILB_IRQE, (UINT8) V_PCH_ILB_IRQE_UARTIRQEN_IRQ3);
- MmioAnd32(IO_BASE_ADDRESS + 0x0520, (UINT32)~(0x00000187));
- MmioOr32 (IO_BASE_ADDRESS + 0x0520, (UINT32)0x81); // UART3_RXD-L
- MmioAnd32(IO_BASE_ADDRESS + 0x0530, (UINT32)~(0x00000007));
- MmioOr32 (IO_BASE_ADDRESS + 0x0530, (UINT32)0x1); // UART3_RXD-L
- MmioOr8 (PciD31F0RegBase + R_PCH_LPC_UART_CTRL, (UINT8) B_PCH_LPC_UART_CTRL_COM1_EN);
-
- SerialPortInitialize ();
- SerialPortWrite ((UINT8 *)"EnableInternalUart!\r\n", sizeof("EnableInternalUart!\r\n") - 1);
-
- return ;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/TpmMp.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/TpmMp.h
deleted file mode 100644
index 415e53daf2..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/TpmMp.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- Tpm.h
-
-Abstract:
-
-
---*/
-
-#ifndef __EFI_TPM_MP_DRIVER_PROTOCOL_H__
-#define __EFI_TPM_MP_DRIVER_PROTOCOL_H__
-
-
-#define EFI_TPM_MP_DRIVER_PROTOCOL_GUID \
- { 0xde161cfe, 0x1e60, 0x42a1, 0x8c, 0xc3, 0xee, 0x7e, 0xf0, 0x73, 0x52, 0x12 }
-
-
-EFI_FORWARD_DECLARATION (EFI_TPM_MP_DRIVER_PROTOCOL);
-
-#define TPM_DRIVER_STATUS 0
-#define TPM_DEVICE_STATUS 1
-
-#define TPM_DRIVER_OK 0
-#define TPM_DRIVER_FAILED 1
-#define TPM_DRIVER_NOT_OPENED 2
-#define TPM_DEVICE_OK 0
-#define TPM_DEVICE_UNRECOVERABLE 1
-#define TPM_DEVICE_RECOVERABLE 2
-#define TPM_DEVICE_NOT_FOUND 3
-
-//
-// Prototypes for the TPM MP Driver Protocol
-//
-
-/**
- This service Open the TPM interface
-
- @param[in] This A pointer to the EFI_TPM_MP_DRIVER_PROTOCOL.
-
- @retval EFI_SUCCESS Operation completed successfully
- @retval EFI_DEVICE_ERROR The command was unsuccessful
- @retval EFI_NOT_FOUND The component was not running
-
-**/
-typedef
-EFI_STATUS
-(EFIAPI *EFI_TPM_MP_INIT) (
- IN EFI_TPM_MP_DRIVER_PROTOCOL *This
- );
-
-/**
- This service close the TPM interface and deactivate TPM
-
- @param[in] This A pointer to the EFI_TPM_MP_DRIVER_PROTOCOL.
-
- @retval EFI_SUCCESS Operation completed successfully
- @retval EFI_DEVICE_ERROR The command was unsuccessful
- @retval EFI_NOT_FOUND The component was not running
-
-**/
-typedef
-EFI_STATUS
-(EFIAPI *EFI_TPM_MP_CLOSE) (
- IN EFI_TPM_MP_DRIVER_PROTOCOL *This
- );
-
-/**
- This service get the current status infomation of TPM
-
- @param[in] This A pointer to the EFI_TPM_MP_DRIVER_PROTOCOL.
- @param[in] ReqStatusType Requested type of status information, driver or device.
- @param[in] Status Pointer to the returned status.
-
- @retval EFI_SUCCESS Operation completed successfully
- @retval EFI_DEVICE_ERROR The command was unsuccessful
- @retval EFI_INVALID_PARAMETER One or more of the parameters are incorrect
- @retval EFI_BUFFER_TOO_SMALL The receive buffer is too small
- @retval EFI_NOT_FOUND The component was not running
-
-**/
-typedef
-EFI_STATUS
-(EFIAPI *EFI_TPM_MP_GET_STATUS_INFO) (
- IN EFI_TPM_MP_DRIVER_PROTOCOL *This,
- IN UINT32 ReqStatusType,
- OUT UINT32 *Status
- );
-
-/**
- This service transmit data to the TPM and get response from TPM
-
- @param[in] This A pointer to the EFI_TPM_MP_DRIVER_PROTOCOL.
- @param[in] TransmitBuf Pointer to a buffer containing TPM transmit data.
- @param[in] TransmitBufLen Sizeof TPM input buffer in bytes.
- @param[in] ReceiveBuf Pointer to a buffer containing TPM receive data.
- @param[in] ReceiveBufLen On input, size of TPM receive buffer in bytes.
- On output, number of bytes written.
-
- @retval EFI_SUCCESS Operation completed successfully
- @retval EFI_DEVICE_ERROR The command was unsuccessful
- @retval EFI_INVALID_PARAMETER One or more of the parameters are incorrect
- @retval EFI_BUFFER_TOO_SMALL The receive buffer is too small
- @retval EFI_NOT_FOUND The component was not running
-
-**/
-typedef
-EFI_STATUS
-(EFIAPI *EFI_TPM_MP_TRANSMIT) (
- IN EFI_TPM_MP_DRIVER_PROTOCOL *This,
- IN UINT8 *TransmitBuffer,
- IN UINT32 TransmitBufferLen,
- OUT UINT8 *ReceiveBuf,
- IN OUT UINT32 *ReceiveBufLen
- );
-
-
-
-typedef struct _EFI_TPM_MP_DRIVER_PROTOCOL {
- EFI_TPM_MP_INIT Init;
- EFI_TPM_MP_CLOSE Close;
- EFI_TPM_MP_GET_STATUS_INFO GetStatusInfo;
- EFI_TPM_MP_TRANSMIT Transmit;
-} EFI_TPM_MP_DRIVER_PROTOCOL;
-
-extern EFI_GUID gEfiTpmMpDriverProtocolGuid;
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/UsbPolicy.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/UsbPolicy.h
deleted file mode 100644
index 16e9f9c6bc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/UsbPolicy.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
- UsbPolicy.h
-
-Abstract:
-
---*/
-
-#ifndef _USB_POLICY_H_
-#define _USB_POLICY_H_
-
-EFI_FORWARD_DECLARATION (EFI_USB_POLICY_PROTOCOL);
-
-#define USB_POLICY_GUID \
- {\
- 0xf617b358, 0x12cf, 0x414a, 0xa0, 0x69, 0x60, 0x67, 0x7b, 0xda, 0x13, 0xb4\
- }
-
-#define TIANO_CODE_BASE 0x00
-#define ICBD_CODE_BASE 0x01
-
-#define ATUO_TYPE 0x00
-#define USB_FDD_TYPE 0x01
-#define HDD_TYPE 0x02
-#define ZIP_TYPE 0x03
-#define CDROM_TYPE 0x04
-#define SIZE_TYPE 0x05
-
-#define ZIP_FDD 0x80
-
-#define FDD_EMULATION 0x00
-#define HDD_EMULATION 0x01
-
-#define HIGH_SPEED 0x00
-#define FULL_SPEED 0x01
-#define SUPER_SPEED 0x02
-
-#define LEGACY_KB_EN 0x01
-#define LEGACY_KB_DIS 0x00
-#define LEGACY_MS_EN 0x01
-#define LEGACY_MS_DIS 0x00
-#define LEGACY_USB_EN 0x00
-#define LEGACY_USB_DIS 0x01
-#define LEGACY_FREE_SUPP 0x01
-#define LEGACY_FREE_UN_SUPP 0x00
-#define LEGACY_PERIOD_SUPP 0x01
-#define LEGACY_PERIOD_UN_SUPP 0x00
-
-#define LEGACY_USB_TIME_TUE_ENABLE 0x01
-#define LEGACY_USB_TIME_TUE_DISABLE 0x00
-#define USB_HAVE_HUB_INTERNEL 0x01
-#define USB_NOT_HAVE_HUB_INTERNEL 0x00
-
-#define USB_POLICY_PROTOCOL_REVISION_1 1
-#define USB_POLICY_PROTOCOL_REVISION_2 2
-
-#ifndef __GNUC__
-#pragma warning ( disable : 4306 )
-#pragma warning ( disable : 4054 )
-#endif
-
-#define GET_USB_CFG (UsbCfg);\
- do{\
- UINT16 *pSegOfEbda;\
- UINT32 mToEbda;\
- pSegOfEbda = (UINT16 *)(UINTN)0x40E;\
- mToEbda = (UINT32)(((UINTN)(*pSegOfEbda) << 4) + 0x80);\
- UsbCfg = (USB_CFG *)(UINTN)mToEbda;\
- }while(0);
-
-#pragma pack(1)
-typedef struct {
- UINT8 HasUSBKeyboard:1;
- UINT8 HasUSBMouse:1;
- UINT8 LegacyFreeSupport:1;
- UINT8 UsbOperationMode:1;
- UINT8 LegacyKBEnable:1;
- UINT8 LegacyMSEnable:1;
- UINT8 USBPeriodSupport:1;
- UINT8 Reserved:1;
-} USB_DEVICE_INFOR;
-
-typedef struct {
- UINT8 Codebase;
- UINT8 USBHDDForceType;
- UINT8 Configurated;
- UINT8 LpcAcpiBase;
- UINT8 AcpiTimerReg;
- UINT8 Reserved1[0x01];
- UINT8 LegacyUsbEnable;
- USB_DEVICE_INFOR UsbDeviceInfor;
- UINT16 UsbEmulationSize;
- UINT8 Reserved2[0x06];
-} USB_CFG;
-#pragma pack()
-
-typedef struct _EFI_USB_POLICY_PROTOCOL{
- UINT8 Version;
- UINT8 UsbMassStorageEmulationType; // 1: FDD_Type; 2: HDD_Type; other:Auto_Type*
- UINT8 UsbOperationMode; // 0: High_Speed; 1: Full_Speed;
- UINT8 LegacyKBEnable; // 0: Disabled; 1: Enabled*
- UINT8 LegacyMSEnable; // 0: Disabled; 1: Enabled*
- UINT8 USBPeriodSupport; // 0; Unsupport; 1: Support
- UINT8 LegacyUsbEnable; // 1: Disabled; 0: Enabled*
- UINT8 LegacyFreeSupport; // 0: Unsupport; 1: Support
- UINT8 CodeBase;
- UINT8 LpcAcpiBase; // 40h(default)
- UINT8 AcpiTimerReg;
- UINT8 UsbTimeTue;
- UINT8 InternelHubExist; // 1: Host have internel hub on board; 0: No internel hub on board
- UINT8 EnumWaitPortStableStall; // Value for wait port stable when enum a new dev.
- UINT16 UsbEmulationSize; // Mbytes.
- UINT8 UsbZipEmulationType;
- UINT8 Reserved[3]; // Reserved fields for future expansion w/o protocol change
-} EFI_USB_POLICY_PROTOCOL;
-
-extern EFI_GUID gUsbPolicyGuid;
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c
deleted file mode 100644
index 85f066a9e3..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*++
-
-Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- I2CLib.c
-
-
-
---*/
-#ifdef ECP_FLAG
-#include "EdkIIGlueDxe.h"
-#else
-#include <Library/DebugLib.h>
-#include <Library/TimerLib.h>
-#endif
-#include <PchRegs/PchRegsPcu.h>
-#include <PchRegs.h>
-#include <PlatformBaseAddresses.h>
-#include <PchRegs/PchRegsLpss.h>
-#ifdef ECP_FLAG
-#include "I2CLib.h"
-#else
-#include <Library/I2CLib.h>
-#endif
-#include <Protocol/GlobalNvsArea.h>
-#ifndef ECP_FLAG
-#include <Library/UefiBootServicesTableLib.h>
-#endif
-
-EFI_STATUS ByteReadI2C(
- IN UINT8 BusNo,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer
- )
-{
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
deleted file mode 100644
index d669a4eaf8..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
+++ /dev/null
@@ -1,39 +0,0 @@
-## @file
-# Null instance of Debug Agent Library with empty functions.
-#
-# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = I2CLib
- FILE_GUID = 7f62bf44-2ba7-4c2d-9d4a-91c8906ff053
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = I2CLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources.common]
- I2CLib.c
-
-[LibraryClasses]
- BaseLib
- IoLib
- TimerLib
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
-
-[Protocols]
- gEfiGlobalNvsAreaProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLib.c
deleted file mode 100644
index 104c2ded43..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLib.c
+++ /dev/null
@@ -1,735 +0,0 @@
-/** @file
- Functions for accessing I2C registers.
-
- Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
---*/
-
-#include <Library/DebugLib.h>
-#include <Library/TimerLib.h>
-#include <PchRegs/PchRegsPcu.h>
-#include <PchRegs.h>
-#include <PlatformBaseAddresses.h>
-#include <PchRegs/PchRegsLpss.h>
-#include <Library/I2CLib.h>
-#include <Protocol/GlobalNvsArea.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <I2CRegs.h>
-
-#define GLOBAL_NVS_OFFSET(Field) (UINTN)((CHAR8*)&((EFI_GLOBAL_NVS_AREA*)0)->Field - (CHAR8*)0)
-
-#define PCIEX_BASE_ADDRESS 0xE0000000
-#define PCI_EXPRESS_BASE_ADDRESS ((VOID *) (UINTN) PCIEX_BASE_ADDRESS)
-#define MmPciAddress( Segment, Bus, Device, Function, Register ) \
- ((UINTN)PCI_EXPRESS_BASE_ADDRESS + \
- (UINTN)(Bus << 20) + \
- (UINTN)(Device << 15) + \
- (UINTN)(Function << 12) + \
- (UINTN)(Register) \
- )
-#define PCI_D31F0_REG_BASE PCIEX_BASE_ADDRESS + (UINT32) (31 << 15)
-
-typedef struct _LPSS_PCI_DEVICE_INFO {
- UINTN Segment;
- UINTN BusNum;
- UINTN DeviceNum;
- UINTN FunctionNum;
- UINTN Bar0;
- UINTN Bar1;
-} LPSS_PCI_DEVICE_INFO;
-
-LPSS_PCI_DEVICE_INFO mLpssPciDeviceList[] = {
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_DMAC1, PCI_FUNCTION_NUMBER_PCH_LPSS_DMAC, 0xFE900000, 0xFE908000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C0, 0xFE910000, 0xFE918000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C1, 0xFE920000, 0xFE928000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C2, 0xFE930000, 0xFE938000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C3, 0xFE940000, 0xFE948000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C4, 0xFE950000, 0xFE958000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C5, 0xFE960000, 0xFE968000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C6, 0xFE970000, 0xFE978000}
-};
-
-#define LPSS_PCI_DEVICE_NUMBER sizeof(mLpssPciDeviceList)/sizeof(LPSS_PCI_DEVICE_INFO)
-
-STATIC UINTN mI2CBaseAddress = 0;
-STATIC UINT16 mI2CSlaveAddress = 0;
-
-UINT16 mI2cMode=B_IC_RESTART_EN | B_IC_SLAVE_DISABLE | B_MASTER_MODE ;
-
-UINTN mI2cNvsBaseAddress[] = {
- GLOBAL_NVS_OFFSET(LDMA2Addr),
- GLOBAL_NVS_OFFSET(I2C1Addr),
- GLOBAL_NVS_OFFSET(I2C2Addr),
- GLOBAL_NVS_OFFSET(I2C3Addr),
- GLOBAL_NVS_OFFSET(I2C4Addr),
- GLOBAL_NVS_OFFSET(I2C5Addr),
- GLOBAL_NVS_OFFSET(I2C6Addr),
- GLOBAL_NVS_OFFSET(I2C7Addr)
- };
-
-/**
- This function get I2Cx controller base address (BAR0).
-
- @param I2cControllerIndex Bus Number of I2C controller.
-
- @return I2C BAR.
-**/
-UINTN
-GetI2cBarAddr(
- IN UINT8 I2cControllerIndex
- )
-{
- EFI_STATUS Status;
- EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsArea;
- UINTN AcpiBaseAddr;
- UINTN PciMmBase=0;
-
- ASSERT(gBS!=NULL);
-
- Status = gBS->LocateProtocol (
- &gEfiGlobalNvsAreaProtocolGuid,
- NULL,
- &GlobalNvsArea
- );
-
- //
- // PCI mode from PEI ( Global NVS is not ready).
- //
- if (EFI_ERROR(Status)) {
- DEBUG ((EFI_D_INFO, "GetI2cBarAddr() gEfiGlobalNvsAreaProtocolGuid:%r\n", Status));
- //
- // Global NVS is not ready.
- //
- return 0;
- }
-
- AcpiBaseAddr = *(UINTN*)((CHAR8*)GlobalNvsArea->Area + mI2cNvsBaseAddress[I2cControllerIndex + 1]);
-
- //
- //PCI mode from DXE (global NVS protocal) to LPSS OnReadytoBoot(swith to ACPI).
- //
- if(AcpiBaseAddr==0) {
- PciMmBase = MmPciAddress (
- mLpssPciDeviceList[I2cControllerIndex + 1].Segment,
- mLpssPciDeviceList[I2cControllerIndex + 1].BusNum,
- mLpssPciDeviceList[I2cControllerIndex + 1].DeviceNum,
- mLpssPciDeviceList[I2cControllerIndex + 1].FunctionNum,
- 0
- );
- DEBUG((EFI_D_ERROR, "\nGetI2cBarAddr() I2C Device %x %x %x PciMmBase:%x\n", \
- mLpssPciDeviceList[I2cControllerIndex + 1].BusNum, \
- mLpssPciDeviceList[I2cControllerIndex + 1].DeviceNum, \
- mLpssPciDeviceList[I2cControllerIndex + 1].FunctionNum, PciMmBase));
-
- if (MmioRead32 (PciMmBase) != 0xFFFFFFFF) {
- if((MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_STSCMD)& B_PCH_LPSS_I2C_STSCMD_MSE)) {
- //
- // Get the address allocted.
- //
- mLpssPciDeviceList[I2cControllerIndex + 1].Bar0=MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR);
- mLpssPciDeviceList[I2cControllerIndex + 1].Bar1=MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR1);
- }
- }
- AcpiBaseAddr =mLpssPciDeviceList[I2cControllerIndex+1].Bar0;
- }
-
- //
- // ACPI mode from BDS: LPSS OnReadytoBoot
- //
- else {
- DEBUG ((EFI_D_INFO, "GetI2cBarAddr() NVS Varialable is updated by this LIB or LPSS \n"));
- }
-
- DEBUG ((EFI_D_INFO, "GetI2cBarAddr() I2cControllerIndex+1 0x%x AcpiBaseAddr:0x%x \n", (I2cControllerIndex + 1), AcpiBaseAddr));
- return AcpiBaseAddr;
-}
-
-
-/**
- This function enables I2C controllers.
-
- @param I2cControllerIndex Bus Number of I2C controllers.
-
- @return Result of the I2C initialization.
-**/
-EFI_STATUS
-ProgramPciLpssI2C (
- IN UINT8 I2cControllerIndex
- )
-{
- UINT32 PmcBase;
- UINTN PciMmBase=0;
- EFI_STATUS Status;
- EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsArea;
-
- UINT32 PmcFunctionDsiable[]= {
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC1,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC2,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC3,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC4,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC5,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC6,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC7
- };
-
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() Start\n"));
-
- //
- // Set the VLV Function Disable Register to ZERO
- //
- PmcBase = MmioRead32 (PCI_D31F0_REG_BASE + R_PCH_LPC_PMC_BASE) & B_PCH_LPC_PMC_BASE_BAR;
- if(MmioRead32(PmcBase+R_PCH_PMC_FUNC_DIS)&PmcFunctionDsiable[I2cControllerIndex]) {
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() End:I2C[%x] is disabled\n",I2cControllerIndex));
- return EFI_NOT_READY;
- }
-
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C()------------I2cControllerIndex=%x,PMC=%x\n",I2cControllerIndex,MmioRead32(PmcBase+R_PCH_PMC_FUNC_DIS)));
-
- {
- PciMmBase = MmPciAddress (
- mLpssPciDeviceList[I2cControllerIndex+1].Segment,
- mLpssPciDeviceList[I2cControllerIndex+1].BusNum,
- mLpssPciDeviceList[I2cControllerIndex+1].DeviceNum,
- mLpssPciDeviceList[I2cControllerIndex+1].FunctionNum,
- 0
- );
-
- DEBUG((EFI_D_ERROR, "Program Pci Lpss I2C Device %x %x %x PciMmBase:%x\n", \
- mLpssPciDeviceList[I2cControllerIndex+1].BusNum, \
- mLpssPciDeviceList[I2cControllerIndex+1].DeviceNum, \
- mLpssPciDeviceList[I2cControllerIndex+1].FunctionNum, PciMmBase));
-
- if (MmioRead32 (PciMmBase) != 0xFFFFFFFF) {
- if((MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_STSCMD)& B_PCH_LPSS_I2C_STSCMD_MSE)) {
- //
- // Get the address allocted.
- //
- mLpssPciDeviceList[I2cControllerIndex+1].Bar0=MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR);
- mLpssPciDeviceList[I2cControllerIndex+1].Bar1=MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR1);
- DEBUG((EFI_D_ERROR, "ProgramPciLpssI2C() bar0:0x%x bar1:0x%x\n",mLpssPciDeviceList[I2cControllerIndex+1].Bar0, mLpssPciDeviceList[I2cControllerIndex+1].Bar1));
- } else {
-
- //
- // Program BAR 0
- //
- ASSERT (((mLpssPciDeviceList[I2cControllerIndex+1].Bar0 & B_PCH_LPSS_I2C_BAR_BA) == mLpssPciDeviceList[I2cControllerIndex+1].Bar0) && (mLpssPciDeviceList[I2cControllerIndex+1].Bar0 != 0));
- MmioWrite32 ((UINTN) (PciMmBase + R_PCH_LPSS_I2C_BAR), (UINT32) (mLpssPciDeviceList[I2cControllerIndex+1].Bar0 & B_PCH_LPSS_I2C_BAR_BA));
-
- //
- // Program BAR 1
- //
- ASSERT (((mLpssPciDeviceList[I2cControllerIndex+1].Bar1 & B_PCH_LPSS_I2C_BAR1_BA) == mLpssPciDeviceList[I2cControllerIndex+1].Bar1) && (mLpssPciDeviceList[I2cControllerIndex+1].Bar1 != 0));
- MmioWrite32 ((UINTN) (PciMmBase + R_PCH_LPSS_I2C_BAR1), (UINT32) (mLpssPciDeviceList[I2cControllerIndex+1].Bar1 & B_PCH_LPSS_I2C_BAR1_BA));
-
- //
- // Bus Master Enable & Memory Space Enable
- //
- MmioOr32 ((UINTN) (PciMmBase + R_PCH_LPSS_I2C_STSCMD), (UINT32) (B_PCH_LPSS_I2C_STSCMD_BME | B_PCH_LPSS_I2C_STSCMD_MSE));
- ASSERT (MmioRead32 (mLpssPciDeviceList[I2cControllerIndex+1].Bar0) != 0xFFFFFFFF);
- }
-
- //
- // Release Resets
- //
- MmioWrite32 (mLpssPciDeviceList[I2cControllerIndex+1].Bar0 + R_PCH_LPIO_I2C_MEM_RESETS,(B_PCH_LPIO_I2C_MEM_RESETS_FUNC | B_PCH_LPIO_I2C_MEM_RESETS_APB));
-
- //
- // Activate Clocks
- //
- MmioWrite32 (mLpssPciDeviceList[I2cControllerIndex+1].Bar0 + R_PCH_LPSS_I2C_MEM_PCP,0x80020003);//No use for A0
-
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() Programmed()\n"));
- }
-
- //
- // BDS: already switched to ACPI mode
- //
- else {
- ASSERT(gBS!=NULL);
- Status = gBS->LocateProtocol (
- &gEfiGlobalNvsAreaProtocolGuid,
- NULL,
- &GlobalNvsArea
- );
- if (EFI_ERROR(Status)) {
- DEBUG ((EFI_D_INFO, "GetI2cBarAddr() gEfiGlobalNvsAreaProtocolGuid:%r\n", Status));
- //
- // gEfiGlobalNvsAreaProtocolGuid is not ready.
- //
- return 0;
- }
- mLpssPciDeviceList[I2cControllerIndex + 1].Bar0 = *(UINTN*)((CHAR8*)GlobalNvsArea->Area + mI2cNvsBaseAddress[I2cControllerIndex + 1]);
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C(): is switched to ACPI 0x:%x \n",mLpssPciDeviceList[I2cControllerIndex + 1].Bar0));
- }
- }
-
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() End\n"));
-
- return EFI_SUCCESS;
-}
-
-/**
- Disable I2C Bus.
-
- @param VOID.
-
- @return Result of the I2C disabling.
-**/
-RETURN_STATUS
-I2cDisable (
- VOID
- )
-{
- //
- // 0.1 seconds
- //
- UINT32 NumTries = 10000;
-
- MmioWrite32 ( mI2CBaseAddress + R_IC_ENABLE, 0 );
- while ( 0 != ( MmioRead32 ( mI2CBaseAddress + R_IC_ENABLE_STATUS) & 1)) {
- MicroSecondDelay (10);
- NumTries --;
- if(0 == NumTries) {
- return RETURN_NOT_READY;
- }
- }
-
- return RETURN_SUCCESS;
-}
-
-/**
- Enable I2C Bus.
-
- @param VOID.
-
- @return Result of the I2C disabling.
-**/
-RETURN_STATUS
-I2cEnable (
- VOID
- )
-{
- //
- // 0.1 seconds
- //
- UINT32 NumTries = 10000;
-
- MmioWrite32 (mI2CBaseAddress + R_IC_ENABLE, 1);
-
- while (0 == (MmioRead32 (mI2CBaseAddress + R_IC_ENABLE_STATUS) & 1)) {
- MicroSecondDelay (10);
- NumTries --;
- if(0 == NumTries){
- return RETURN_NOT_READY;
- }
- }
-
- return RETURN_SUCCESS;
-}
-
-/**
- Enable I2C Bus.
-
- @param VOID.
-
- @return Result of the I2C enabling.
-**/
-RETURN_STATUS
-I2cBusFrequencySet (
- IN UINTN BusClockHertz
- )
-{
- DEBUG((EFI_D_INFO,"InputFreq BusClockHertz: %d\r\n",BusClockHertz));
-
- //
- // Set the 100 KHz clock divider according to SV result and I2C spec
- //
- MmioWrite32 ( mI2CBaseAddress + R_IC_SS_SCL_HCNT, (UINT16)0x214 );
- MmioWrite32 ( mI2CBaseAddress + R_IC_SS_SCL_LCNT, (UINT16)0x272 );
-
- //
- // Set the 400 KHz clock divider according to SV result and I2C spec
- //
- MmioWrite32 ( mI2CBaseAddress + R_IC_FS_SCL_HCNT, (UINT16)0x50 );
- MmioWrite32 ( mI2CBaseAddress + R_IC_FS_SCL_LCNT, (UINT16)0xAD );
-
- switch ( BusClockHertz ) {
- case 100 * 1000:
- MmioWrite32 ( mI2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x40);//100K
- mI2cMode = V_SPEED_STANDARD;
- break;
- case 400 * 1000:
- MmioWrite32 ( mI2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x32);//400K
- mI2cMode = V_SPEED_FAST;
- break;
- default:
- MmioWrite32 ( mI2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x09);//3.4M
- mI2cMode = V_SPEED_HIGH;
- }
-
- //
- // Select the frequency counter,
- // Enable restart condition,
- // Enable master FSM, disable slave FSM.
- //
- mI2cMode |= B_IC_RESTART_EN | B_IC_SLAVE_DISABLE | B_MASTER_MODE;
-
- return EFI_SUCCESS;
-}
-
-/**
- Initializes the host controller to execute I2C commands.
-
- @param I2cControllerIndex Index of I2C controller in LPSS device. 0 represents I2C0, which is PCI function 1 of LPSS device.
-
- @return EFI_SUCCESS Opcode initialization on the I2C host controller completed.
- @return EFI_DEVICE_ERROR Device error, operation failed.
-**/
-EFI_STATUS
-I2CInit (
- IN UINT8 I2cControllerIndex,
- IN UINT16 SlaveAddress
- )
-{
- EFI_STATUS Status=RETURN_SUCCESS;
- UINT32 NumTries = 0;
- UINTN GnvsI2cBarAddr=0;
-
- //
- // Verify the parameters
- //
- if ((1023 < SlaveAddress) || (6 < I2cControllerIndex)) {
- Status = RETURN_INVALID_PARAMETER;
- DEBUG((EFI_D_INFO,"I2CInit Exit with RETURN_INVALID_PARAMETER\r\n"));
- return Status;
- }
- MmioWrite32 ( mI2CBaseAddress + R_IC_TAR, (UINT16)SlaveAddress );
- mI2CSlaveAddress = SlaveAddress;
-
- //
- // 1.PEI: program and init ( before pci enumeration).
- // 2.DXE:update address and re-init ( after pci enumeration).
- // 3.BDS:update ACPI address and re-init ( after acpi mode is enabled).
- //
- if(mI2CBaseAddress == mLpssPciDeviceList[I2cControllerIndex + 1].Bar0) {
-
- //
- // I2CInit is already called.
- //
- GnvsI2cBarAddr=GetI2cBarAddr(I2cControllerIndex);
-
- if((GnvsI2cBarAddr == 0)||(GnvsI2cBarAddr == mI2CBaseAddress)) {
- DEBUG((EFI_D_INFO,"I2CInit Exit with mI2CBaseAddress:%x == [%x].Bar0\r\n",mI2CBaseAddress,I2cControllerIndex+1));
- return RETURN_SUCCESS;
- }
- }
-
- Status=ProgramPciLpssI2C(I2cControllerIndex);
- if(Status!=EFI_SUCCESS) {
- return Status;
- }
-
-
- mI2CBaseAddress = (UINT32) mLpssPciDeviceList[I2cControllerIndex + 1].Bar0;
- DEBUG ((EFI_D_ERROR, "mI2CBaseAddress = 0x%x \n",mI2CBaseAddress));
-
- //
- // 1 seconds.
- //
- NumTries = 10000;
- while ((1 == ( MmioRead32 ( mI2CBaseAddress + R_IC_STATUS) & STAT_MST_ACTIVITY ))) {
- MicroSecondDelay(10);
- NumTries --;
- if(0 == NumTries) {
- DEBUG((EFI_D_INFO, "Try timeout\r\n"));
- return RETURN_DEVICE_ERROR;
- }
- }
-
- Status = I2cDisable();
- DEBUG((EFI_D_INFO, "I2cDisable Status = %r\r\n", Status));
- I2cBusFrequencySet(400 * 1000);
-
- MmioWrite32(mI2CBaseAddress + R_IC_INTR_MASK, 0x0);
- if (0x7f < SlaveAddress )
- SlaveAddress = ( SlaveAddress & 0x3ff ) | IC_TAR_10BITADDR_MASTER;
- MmioWrite32 ( mI2CBaseAddress + R_IC_TAR, (UINT16)SlaveAddress );
- MmioWrite32 ( mI2CBaseAddress + R_IC_RX_TL, 0);
- MmioWrite32 ( mI2CBaseAddress + R_IC_TX_TL, 0 );
- MmioWrite32 ( mI2CBaseAddress + R_IC_CON, mI2cMode);
- Status = I2cEnable();
-
- DEBUG((EFI_D_INFO, "I2cEnable Status = %r\r\n", Status));
- MmioRead32 ( mI2CBaseAddress + R_IC_CLR_TX_ABRT );
-
- return EFI_SUCCESS;
-}
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value read has to be stored
- @param Start Whether a RESTART is issued before the byte is sent or received
- @param End Whether STOP is generated after a data byte is sent or received
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteReadI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer,
- IN UINT8 Start,
- IN UINT8 End
- )
-{
-
- EFI_STATUS Status;
- UINT32 I2cStatus;
- UINT16 ReceiveData;
- UINT8 *ReceiveDataEnd;
- UINT8 *ReceiveRequest;
- UINT16 RawIntrStat;
- UINT32 Count=0;
-
- Status = EFI_SUCCESS;
-
- ReceiveDataEnd = &ReadBuffer [ReadBytes];
- if( ReadBytes ) {
-
- ReceiveRequest = ReadBuffer;
- DEBUG((EFI_D_INFO,"Read: ---------------%d bytes to RX\r\n",ReceiveDataEnd - ReceiveRequest));
-
- while ((ReceiveDataEnd > ReceiveRequest) || (ReceiveDataEnd > ReadBuffer)) {
-
- //
- // Check for NACK
- //
- RawIntrStat = (UINT16)MmioRead32 (mI2CBaseAddress + R_IC_RawIntrStat);
- if ( 0 != ( RawIntrStat & I2C_INTR_TX_ABRT )) {
- MmioRead32 ( mI2CBaseAddress + R_IC_CLR_TX_ABRT );
- Status = RETURN_DEVICE_ERROR;
- DEBUG((EFI_D_INFO,"TX ABRT ,%d bytes hasn't been transferred\r\n",ReceiveDataEnd - ReceiveRequest));
- break;
- }
-
- //
- // Determine if another byte was received
- //
- I2cStatus = (UINT16)MmioRead32 (mI2CBaseAddress + R_IC_STATUS);
- if (0 != ( I2cStatus & STAT_RFNE )) {
- ReceiveData = (UINT16)MmioRead32 ( mI2CBaseAddress + R_IC_DATA_CMD );
- *ReadBuffer++ = (UINT8)ReceiveData;
- DEBUG((EFI_D_INFO,"MmioRead32 ,1 byte 0x:%x is received\r\n",ReceiveData));
- }
-
- if(ReceiveDataEnd == ReceiveRequest) {
- MicroSecondDelay ( FIFO_WRITE_DELAY );
- DEBUG((EFI_D_INFO,"ReceiveDataEnd==ReceiveRequest------------%x\r\n",I2cStatus & STAT_RFNE));
- Count++;
- if(Count<1024) {
- //
- // To avoid sys hung without ul-pmc device on RVP,
- // waiting the last request to get data and make (ReceiveDataEnd > ReadBuffer) =TRUE.
- //
- continue;
- } else {
- break;
- }
- }
-
- //
- // Wait until a read request will fit.
- //
- if (0 == (I2cStatus & STAT_TFNF)) {
- DEBUG((EFI_D_INFO,"Wait until a read request will fit\r\n"));
- MicroSecondDelay (10);
- continue;
- }
-
- //
- // Issue the next read request.
- //
- if(End && Start) {
- MmioWrite32 ( mI2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_RESTART|B_CMD_STOP);
- } else if (!End && Start) {
- MmioWrite32 ( mI2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_RESTART);
- } else if (End && !Start) {
- MmioWrite32 ( mI2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_STOP);
- } else if (!End && !Start) {
- MmioWrite32 ( mI2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD);
- }
- MicroSecondDelay (FIFO_WRITE_DELAY);
-
- ReceiveRequest += 1;
- }
- }
-
- return Status;
-}
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value written is stored
- @param Start Whether a RESTART is issued before the byte is sent or received
- @param End Whether STOP is generated after a data byte is sent or received
-
- @return EFI_SUCCESS IF the byte value has been successfully written
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS ByteWriteI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer,
- IN UINT8 Start,
- IN UINT8 End
- )
-{
-
- EFI_STATUS Status;
- UINT32 I2cStatus;
- UINT8 *TransmitEnd;
- UINT16 RawIntrStat;
- UINT32 Count=0;
-
- Status = EFI_SUCCESS;
-
- Status=I2CInit(I2cControllerIndex, SlaveAddress);
- if(Status!=EFI_SUCCESS)
- return Status;
-
- TransmitEnd = &WriteBuffer[WriteBytes];
- if( WriteBytes ) {
- DEBUG((EFI_D_INFO,"Write: --------------%d bytes to TX\r\n",TransmitEnd - WriteBuffer));
- while (TransmitEnd > WriteBuffer) {
- I2cStatus = MmioRead32 (mI2CBaseAddress + R_IC_STATUS);
- RawIntrStat = (UINT16)MmioRead32 (mI2CBaseAddress + R_IC_RawIntrStat);
- if (0 != ( RawIntrStat & I2C_INTR_TX_ABRT)) {
- MmioRead32 ( mI2CBaseAddress + R_IC_CLR_TX_ABRT);
- Status = RETURN_DEVICE_ERROR;
- DEBUG((EFI_D_ERROR,"TX ABRT TransmitEnd:0x%x WriteBuffer:0x%x\r\n", TransmitEnd, WriteBuffer));
- break;
- }
- if (0 == (I2cStatus & STAT_TFNF)) {
- //
- // If TX not full , will send cmd or continue to wait
- //
- MicroSecondDelay (FIFO_WRITE_DELAY);
- continue;
- }
-
- if(End && Start) {
- MmioWrite32 (mI2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++)|B_CMD_RESTART|B_CMD_STOP);
- } else if (!End && Start) {
- MmioWrite32 (mI2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++)|B_CMD_RESTART);
- } else if (End && !Start) {
- MmioWrite32 (mI2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++)|B_CMD_STOP);
- } else if (!End && !Start ) {
- MmioWrite32 (mI2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++));
- }
-
- //
- // Add a small delay to work around some odd behavior being seen. Without this delay bytes get dropped.
- //
- MicroSecondDelay ( FIFO_WRITE_DELAY );//wait after send cmd
-
- //
- // Time out
- //
- while(1) {
- RawIntrStat = MmioRead16 ( mI2CBaseAddress + R_IC_RawIntrStat );
- if (0 != ( RawIntrStat & I2C_INTR_TX_ABRT)) {
- MmioRead16 (mI2CBaseAddress + R_IC_CLR_TX_ABRT);
- Status = RETURN_DEVICE_ERROR;
- DEBUG((EFI_D_ERROR,"TX ABRT TransmitEnd:0x%x WriteBuffer:0x%x\r\n", TransmitEnd, WriteBuffer));
- }
- if(0 == MmioRead16(mI2CBaseAddress + R_IC_TXFLR)) break;
-
- MicroSecondDelay (FIFO_WRITE_DELAY);
- Count++;
- if(Count<1024) {
- //
- // to avoid sys hung without ul-pmc device on RVP.
- // Waiting the last request to get data and make (ReceiveDataEnd > ReadBuffer) =TRUE.
- //
- continue;
- } else {
- break;
- }
- }//while( 1 )
- }
-
- }
-
- return Status;
-}
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param ReadBytes Number of bytes to be read
- @param *ReadBuffer Address to which the value read has to be stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS ByteReadI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer
- )
-{
- EFI_STATUS Status;
-
- DEBUG ((EFI_D_INFO, "ByteReadI2C:---offset:0x%x\n",Offset));
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress,1,&Offset,TRUE,FALSE);
- Status = ByteReadI2CBasic(I2cControllerIndex, SlaveAddress,ReadBytes,ReadBuffer,TRUE,TRUE);
-
- return Status;
-}
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be written
- @param WriteBytes Number of bytes to be written
- @param *Byte Address to which the value written is stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS ByteWriteI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer
- )
-{
- EFI_STATUS Status;
-
- DEBUG ((EFI_D_INFO, "ByteWriteI2C:---offset/bytes/buf:0x%x,0x%x,0x%x,0x%x\n",Offset,WriteBytes,WriteBuffer,*WriteBuffer));
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress,1,&Offset,TRUE,FALSE);
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress,WriteBytes,WriteBuffer,FALSE,TRUE);
-
- return Status;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLibDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLibDxe.inf
deleted file mode 100644
index cd10f1de93..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLibDxe.inf
+++ /dev/null
@@ -1,39 +0,0 @@
-## @file
-# Instance of I2C Library.
-#
-# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = I2CLib
- FILE_GUID = 7f62bf44-2ba7-4c2d-9d4a-91c8906ff053
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = I2CLib|DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_DRIVER UEFI_APPLICATION
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources.common]
- I2CLib.c
-
-[LibraryClasses]
- BaseLib
- IoLib
- TimerLib
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
-
-[Protocols]
- gEfiGlobalNvsAreaProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CRegs.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CRegs.h
deleted file mode 100644
index 57455162f6..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CRegs.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/** @file
- Register Definitions for I2C Driver/PEIM.
-
- Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
---*/
-
-#ifndef I2C_REGS_H
-#define I2C_REGS_H
-
-//
-// FIFO write delay value.
-//
-#define FIFO_WRITE_DELAY 2
-
-//
-// MMIO Register Definitions.
-//
-#define R_IC_CON ( 0x00) // I2C Control
-#define B_IC_RESTART_EN BIT5
-#define B_IC_SLAVE_DISABLE BIT6
-#define V_SPEED_STANDARD 0x02
-#define V_SPEED_FAST 0x04
-#define V_SPEED_HIGH 0x06
-#define B_MASTER_MODE BIT0
-
-#define R_IC_TAR ( 0x04) // I2C Target Address
-#define IC_TAR_10BITADDR_MASTER BIT12
-
-#define R_IC_SAR ( 0x08) // I2C Slave Address
-#define R_IC_HS_MADDR ( 0x0C) // I2C HS MasterMode Code Address
-#define R_IC_DATA_CMD ( 0x10) // I2C Rx/Tx Data Buffer and Command
-
-#define B_READ_CMD BIT8 // 1 = read, 0 = write
-#define B_CMD_STOP BIT9 // 1 = STOP
-#define B_CMD_RESTART BIT10 // 1 = IC_RESTART_EN
-
-#define V_WRITE_CMD_MASK ( 0xFF)
-
-#define R_IC_SS_SCL_HCNT ( 0x14) // Standard Speed I2C Clock SCL High Count
-#define R_IC_SS_SCL_LCNT ( 0x18) // Standard Speed I2C Clock SCL Low Count
-#define R_IC_FS_SCL_HCNT ( 0x1C) // Full Speed I2C Clock SCL High Count
-#define R_IC_FS_SCL_LCNT ( 0x20) // Full Speed I2C Clock SCL Low Count
-#define R_IC_HS_SCL_HCNT ( 0x24) // High Speed I2C Clock SCL High Count
-#define R_IC_HS_SCL_LCNT ( 0x28) // High Speed I2C Clock SCL Low Count
-#define R_IC_INTR_STAT ( 0x2C) // I2C Inetrrupt Status
-#define R_IC_INTR_MASK ( 0x30) // I2C Interrupt Mask
-#define I2C_INTR_GEN_CALL BIT11 // General call received
-#define I2C_INTR_START_DET BIT10
-#define I2C_INTR_STOP_DET BIT9
-#define I2C_INTR_ACTIVITY BIT8
-#define I2C_INTR_TX_ABRT BIT6 // Set on NACK
-#define I2C_INTR_TX_EMPTY BIT4
-#define I2C_INTR_TX_OVER BIT3
-#define I2C_INTR_RX_FULL BIT2 // Data bytes in RX FIFO over threshold
-#define I2C_INTR_RX_OVER BIT1
-#define I2C_INTR_RX_UNDER BIT0
-#define R_IC_RawIntrStat ( 0x34) // I2C Raw Interrupt Status
-#define R_IC_RX_TL ( 0x38) // I2C Receive FIFO Threshold
-#define R_IC_TX_TL ( 0x3C) // I2C Transmit FIFO Threshold
-#define R_IC_CLR_INTR ( 0x40) // Clear Combined and Individual Interrupts
-#define R_IC_CLR_RX_UNDER ( 0x44) // Clear RX_UNDER Interrupt
-#define R_IC_CLR_RX_OVER ( 0x48) // Clear RX_OVERinterrupt
-#define R_IC_CLR_TX_OVER ( 0x4C) // Clear TX_OVER interrupt
-#define R_IC_CLR_RD_REQ ( 0x50) // Clear RD_REQ interrupt
-#define R_IC_CLR_TX_ABRT ( 0x54) // Clear TX_ABRT interrupt
-#define R_IC_CLR_RX_DONE ( 0x58) // Clear RX_DONE interrupt
-#define R_IC_CLR_ACTIVITY ( 0x5C) // Clear ACTIVITY interrupt
-#define R_IC_CLR_STOP_DET ( 0x60) // Clear STOP_DET interrupt
-#define R_IC_CLR_START_DET ( 0x64) // Clear START_DET interrupt
-#define R_IC_CLR_GEN_CALL ( 0x68) // Clear GEN_CALL interrupt
-#define R_IC_ENABLE ( 0x6C) // I2C Enable
-#define R_IC_STATUS ( 0x70) // I2C Status
-
-#define R_IC_SDA_HOLD ( 0x7C) // I2C IC_DEFAULT_SDA_HOLD//16bits
-
-#define STAT_MST_ACTIVITY BIT5 // Master FSM Activity Status.
-#define STAT_RFF BIT4 // RX FIFO is completely full
-#define STAT_RFNE BIT3 // RX FIFO is not empty
-#define STAT_TFE BIT2 // TX FIFO is completely empty
-#define STAT_TFNF BIT1 // TX FIFO is not full
-
-#define R_IC_TXFLR ( 0x74) // Transmit FIFO Level Register
-#define R_IC_RXFLR ( 0x78) // Receive FIFO Level Register
-#define R_IC_TX_ABRT_SOURCE ( 0x80) // I2C Transmit Abort Status Register
-#define R_IC_SLV_DATA_NACK_ONLY ( 0x84) // Generate SLV_DATA_NACK Register
-#define R_IC_DMA_CR ( 0x88) // DMA Control Register
-#define R_IC_DMA_TDLR ( 0x8C) // DMA Transmit Data Level
-#define R_IC_DMA_RDLR ( 0x90) // DMA Receive Data Level
-#define R_IC_SDA_SETUP ( 0x94) // I2C SDA Setup Register
-#define R_IC_ACK_GENERAL_CALL ( 0x98) // I2C ACK General Call Register
-#define R_IC_ENABLE_STATUS ( 0x9C) // I2C Enable Status Register
-#define R_IC_COMP_PARAM ( 0xF4) // Component Parameter Register
-#define R_IC_COMP_VERSION ( 0xF8) // Component Version ID
-#define R_IC_COMP_TYPE ( 0xFC) // Component Type
-
-#define I2C_SS_SCL_HCNT_VALUE_100M 0x1DD
-#define I2C_SS_SCL_LCNT_VALUE_100M 0x1E4
-#define I2C_FS_SCL_HCNT_VALUE_100M 0x54
-#define I2C_FS_SCL_LCNT_VALUE_100M 0x9a
-#define I2C_HS_SCL_HCNT_VALUE_100M 0x7
-#define I2C_HS_SCL_LCNT_VALUE_100M 0xE
-
-#define IC_TAR_10BITADDR_MASTER BIT12
-#define FIFO_SIZE 32
-#define R_IC_INTR_STAT ( 0x2C) // I2c Inetrrupt Status
-#define R_IC_INTR_MASK ( 0x30) // I2c Interrupt Mask
-#define I2C_INTR_GEN_CALL BIT11 // General call received
-#define I2C_INTR_START_DET BIT10
-#define I2C_INTR_STOP_DET BIT9
-#define I2C_INTR_ACTIVITY BIT8
-#define I2C_INTR_TX_ABRT BIT6 // Set on NACK
-#define I2C_INTR_TX_EMPTY BIT4
-#define I2C_INTR_TX_OVER BIT3
-#define I2C_INTR_RX_FULL BIT2 // Data bytes in RX FIFO over threshold
-#define I2C_INTR_RX_OVER BIT1
-#define I2C_INTR_RX_UNDER BIT0
-
-#define R_PCH_LPIO_I2C_MEM_RESETS 0x804 // Software Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_FUNC BIT1 // Function Clock Domain Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_APB BIT0 // APB Domain Reset
-#define R_PCH_LPSS_I2C_MEM_PCP 0x800 // Private Clock Parameters
-
-#endif
\ No newline at end of file
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CAccess.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CAccess.h
deleted file mode 100644
index bf6ef4c747..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CAccess.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/** @file
- Misc Registers Definition.
-
- Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
---*/
-
-#ifndef _I2C_ACCESS_H_
-#define _I2C_ACCESS_H_
-
-#include "I2CIoLibPei.h"
-
-#define DEFAULT_PCI_BUS_NUMBER_PCH 0
-
-#define PCI_DEVICE_NUMBER_PCH_LPC 31
-#define PCI_FUNCTION_NUMBER_PCH_LPC 0
-
-#define R_PCH_LPC_ACPI_BASE 0x40 // ABASE, 16bit
-#define R_PCH_LPC_ACPI_BASEADR 0x400 // ABASE, 16bit
-#define B_PCH_LPC_ACPI_BASE_EN BIT1 // Enable Bit
-#define B_PCH_LPC_ACPI_BASE_BAR 0x0000FF80 // Base Address, 128 Bytes
-#define V_PCH_ACPI_PM1_TMR_MAX_VAL 0x1000000 // The timer is 24 bit overflow
-#define B_PCH_ACPI_PM1_TMR_VAL 0xFFFFFF // The timer value mask
-
-#define R_PCH_ACPI_PM1_TMR 0x08 // Power Management 1 Timer
-#define V_PCH_ACPI_PM1_TMR_FREQUENCY 3579545 // Timer Frequency
-
-
-#define PchLpcPciCfg8(Register) I2CLibPeiMmioRead8 (MmPciAddress (0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPC, 0, Register))
-
-#define PCIEX_BASE_ADDRESS 0xE0000000
-#define PCI_EXPRESS_BASE_ADDRESS ((VOID *) (UINTN) PCIEX_BASE_ADDRESS)
-
-#define MmPciAddress( Segment, Bus, Device, Function, Register ) \
- ( (UINTN)PCI_EXPRESS_BASE_ADDRESS + \
- (UINTN)(Bus << 20) + \
- (UINTN)(Device << 15) + \
- (UINTN)(Function << 12) + \
- (UINTN)(Register) \
- )
-#endif
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.c
deleted file mode 100644
index d5f8dfd012..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/** @file
- MicroSecondDelay implementation of ACPI Timer.
-
- Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
---*/
-
-#include "PiPei.h"
-#include "I2CAccess.h"
-#include "I2CDelayPei.h"
-#include <Library/DebugLib.h>
-#include <Library/PeiServicesTablePointerLib.h>
-#include <Ppi/Stall.h>
-
-/**
- Stalls the CPU for at least the given number of microseconds.
- Stalls the CPU for the number of microseconds specified by MicroSeconds.
-
- @param MicroSeconds The minimum number of microseconds to delay.
-
- @return EFI_STATUS
-
-**/
-EFI_STATUS
-EFIAPI
-MicroSecondDelay (
- IN UINTN MicroSeconds
- )
-{
-
- EFI_PEI_STALL_PPI *StallPpi;
- EFI_STATUS Status;
- CONST EFI_PEI_SERVICES **PeiServices;
-
- PeiServices = GetPeiServicesTablePointer();
-
-
- Status = (**PeiServices).LocatePpi (PeiServices, &gEfiPeiStallPpiGuid, 0, NULL, &StallPpi);
- ASSERT(!EFI_ERROR(Status));
-
- StallPpi->Stall (PeiServices, StallPpi, MicroSeconds);
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.h
deleted file mode 100644
index 604f1f67c5..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/** @file
- MicroSecondDelay implementation of ACPI Timer.
-
- Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef __I2C_DELAY_PEI__
-
-#define __I2C_DELAY_PEI__
-#include "PiPei.h"
-
-/**
- Stalls the CPU for at least the given number of microseconds.
-
- Stalls the CPU for the number of microseconds specified by MicroSeconds.
-
- @param MicroSeconds The minimum number of microseconds to delay.
-
- @return MicroSeconds
-
-**/
-EFI_STATUS
-EFIAPI
-MicroSecondDelay (
- IN UINTN MicroSeconds
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.c
deleted file mode 100644
index 6a37dbec1d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/** @file
- Functions for access I2C MMIO register.
-
- Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-#include <Library/DebugLib.h>
-#include <Library/PeiServicesTablePointerLib.h>
-
-/**
- Reads an 8-bit MMIO register.
-
- Reads the 8-bit MMIO register specified by Address. The 8-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 8-bit MMIO register operations are not supported, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-UINT8
-EFIAPI
-I2CLibPeiMmioRead8 (
- IN UINTN Address
- )
-{
- UINT8 Value;
-
- Value = *(volatile UINT8*)Address;
- return Value;
-}
-
-/**
- Reads a 16-bit MMIO register.
-
- Reads the 16-bit MMIO register specified by Address. The 16-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 16-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 16-bit boundary, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-UINT16
-EFIAPI
-I2CLibPeiMmioRead16 (
- IN UINTN Address
- )
-{
- UINT16 Value;
-
- ASSERT ((Address & 1) == 0);
- Value = *(volatile UINT16*)Address;
- return Value;
-}
-
-/**
- Writes a 16-bit MMIO register.
-
- Writes the 16-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 16-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 16-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write.
- @param Value The value to write to the MMIO register.
-
- @return Value.
-
-**/
-UINT16
-EFIAPI
-I2CLibPeiMmioWrite16 (
- IN UINTN Address,
- IN UINT16 Value
- )
-{
- ASSERT ((Address & 1) == 0);
- *(volatile UINT16*)Address = Value;
- return Value;
-}
-
-/**
- Reads a 32-bit MMIO register.
-
- Reads the 32-bit MMIO register specified by Address. The 32-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioRead32 (
- IN UINTN Address
- )
-{
- UINT32 Value;
-
- ASSERT ((Address & 3) == 0);
- Value = *(volatile UINT32*)Address;
-
- return Value;
-}
-
-/**
- Writes a 32-bit MMIO register.
-
- Writes the 32-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write.
- @param Value The value to write to the MMIO register.
-
- @return Value.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioWrite32 (
- IN UINTN Address,
- IN UINT32 Value
- )
-{
- ASSERT ((Address & 3) == 0);
- *(volatile UINT32*)Address = Value;
- return Value;
-}
-
-/**
- OR a 32-bit MMIO register.
-
- OR the 32-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write OR.
- @param Value The value to OR to the MMIO register.
-
- @return Value.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioOr32 (
- IN UINTN Address,
- IN UINT32 OrData
- )
-{
- return I2CLibPeiMmioWrite32 (Address, I2CLibPeiMmioRead32(Address) | OrData);
-}
-
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.h
deleted file mode 100644
index b68bc1ed09..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/** @file
- Functions for access I2C MMIO register.
-
- Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef __I2C_IOLIB_PEI__
-
-#define __I2C_IOLIB_PEI__
-#include <PiPei.h>
-
-
-/**
- Reads an 8-bit MMIO register.
-
- Reads the 8-bit MMIO register specified by Address. The 8-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 8-bit MMIO register operations are not supported, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-
-UINT8
-EFIAPI
-I2CLibPeiMmioRead8 (
- IN UINTN Address
- );
-
-
-/**
- Reads a 16-bit MMIO register.
-
- Reads the 16-bit MMIO register specified by Address. The 16-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 16-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 16-bit boundary, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-UINT16
-EFIAPI
-I2CLibPeiMmioRead16 (
- IN UINTN Address
- );
-
-
-/**
- Writes a 16-bit MMIO register.
-
- Writes the 16-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 16-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 16-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write.
- @param Value The value to write to the MMIO register.
-
- @return Value.
-
-**/
-UINT16
-EFIAPI
-I2CLibPeiMmioWrite16 (
- IN UINTN Address,
- IN UINT16 Value
- );
-
-
-/**
- Reads a 32-bit MMIO register.
-
- Reads the 32-bit MMIO register specified by Address. The 32-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioRead32 (
- IN UINTN Address
- );
-
-
-/**
- Writes a 32-bit MMIO register.
-
- Writes the 32-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write.
- @param Value The value to write to the MMIO register.
-
- @return Value.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioWrite32 (
- IN UINTN Address,
- IN UINT32 Value
- );
-
-
-/**
- OR a 32-bit MMIO register.
-
- OR the 32-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write OR.
- @param Value The value to OR to the MMIO register.
-
- @return Value.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioOr32 (
- IN UINTN Address,
- IN UINT32 OrData
- );
-
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.c
deleted file mode 100644
index dd5cceb70d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.c
+++ /dev/null
@@ -1,638 +0,0 @@
-/** @file
- I2C PEI Lib Instance.
-
- Copyright (c) 1999- 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "I2CDelayPei.h"
-#include "I2CIoLibPei.h"
-#include "I2CAccess.h"
-#include "I2CLibPei.h"
-#include <PlatformBaseAddresses.h>
-#include <Library/DebugLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/PeiServicesTablePointerLib.h>
-#include <Library/HobLib.h>
-#include <PchRegs/PchRegsPcu.h>
-#include <PchRegs/PchRegsLpss.h>
-
-#define LPSS_PCI_DEVICE_NUMBER 8
-
-#define R_PCH_LPIO_I2C_MEM_RESETS 0x804 // Software Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_FUNC BIT1 // Function Clock Domain Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_APB BIT0 // APB Domain Reset
-#define R_PCH_LPSS_I2C_MEM_PCP 0x800 // Private Clock Parameters
-
-#define PEI_TEPM_LPSS_DMA_BAR 0xFE900000
-#define PEI_TEPM_LPSS_I2C0_BAR 0xFE910000
-#define PCI_CONFIG_SPACE_SIZE 0x10000
-
-EFI_GUID mI2CPeiInitGuid = {
- 0x96DED71A, 0xB9E7, 0x4EAD, 0x96, 0x2C, 0x01, 0x69, 0x3C, 0xED, 0x2A, 0x64
-};
-
-
-UINT16 I2CGPIO[]= {
- //
- // 19.1.6 I2C0
- // I2C0_SDA-OD-O - write 0x2003CC81 to IOBASE + 0x0210
- // I2C0_SCL-OD-O - write 0x2003CC81 to IOBASE + 0x0200
- //
- 0x0210,
- 0x0200,
-
- //
- // 19.1.7 I2C1
- // I2C1_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x01F0
- // I2C1_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x01E0
- //
- 0x01F0,
- 0x01E0,
-
- //
- // 19.1.8 I2C2
- // I2C2_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x01D0
- // I2C2_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x01B0
- //
- 0x01D0,
- 0x01B0,
-
- //
- // 19.1.9 I2C3
- // I2C3_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x0190
- // I2C3_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x01C0
- //
- 0x0190,
- 0x01C0,
-
- //
- // 19.1.10 I2C4
- // I2C4_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x01A0
- // I2C4_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x0170
- //
- 0x01A0,
- 0x0170,
-
- //
- // 19.1.11 I2C5
- // I2C5_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x0150
- // I2C5_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x0140
- //
- 0x0150,
- 0x0140,
-
- //
- // 19.1.12 I2C6
- // I2C6_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x0180
- // I2C6_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x0160
- //
- 0x0180,
- 0x0160
-};
-
-/**
- Constructor of this library.
-
- @param VOID
-
- @return EFI_SUCCESS
-**/
-EFI_STATUS
-EFIAPI
-IntelI2CPeiLibConstructor (
- IN EFI_PEI_FILE_HANDLE FileHandle,
- IN CONST EFI_PEI_SERVICES **PeiServices
- )
-{
- UINTN Index;
-
- for (Index = 0; Index < sizeof(I2CGPIO)/sizeof(UINT16); Index ++) {
- I2CLibPeiMmioWrite32(IO_BASE_ADDRESS+I2CGPIO[Index], 0x2003CC81);
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Programe all I2C controllers on LPSS.
-
- I2C0 is function 1 of LPSS. I2C1 is function 2 of LPSS, etc..
-
- @param VOID
-
- @return EFI_SUCCESS
-**/
-EFI_STATUS
-ProgramPciLpssI2C (
- VOID
- )
-{
- UINT32 PmcBase;
- UINT32 DevID;
- UINTN PciMmBase=0;
- UINTN Index;
- UINTN Bar0;
- UINTN Bar1;
- DEBUG ((EFI_D_INFO, "Pei ProgramPciLpssI2C() Start\n"));
-
- //
- // Set the VLV Function Disable Register to ZERO
- //
- PmcBase = I2CLibPeiMmioRead32(PciD31F0RegBase + R_PCH_LPC_PMC_BASE) & B_PCH_LPC_PMC_BASE_BAR;
-
- if(I2CLibPeiMmioRead32(PmcBase + R_PCH_PMC_FUNC_DIS)&
- (B_PCH_PMC_FUNC_DIS_LPSS2_FUNC1 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC2
- | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC3 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC4 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC5
- | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC6 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC7)) {
- I2CLibPeiMmioWrite32(
- PmcBase+R_PCH_PMC_FUNC_DIS,
- I2CLibPeiMmioRead32(PmcBase + R_PCH_PMC_FUNC_DIS)& \
- ~(B_PCH_PMC_FUNC_DIS_LPSS2_FUNC1 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC2 \
- | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC3 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC4 \
- | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC5 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC6|B_PCH_PMC_FUNC_DIS_LPSS2_FUNC7)
- );
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() enable all I2C controllers\n"));
- }
-
- for(Index = 0; Index < LPSS_PCI_DEVICE_NUMBER; Index ++) {
-
- PciMmBase = MmPciAddress (
- 0,
- DEFAULT_PCI_BUS_NUMBER_PCH,
- PCI_DEVICE_NUMBER_PCH_LPSS_I2C,
- Index,
- 0
- );
- DevID = I2CLibPeiMmioRead32(PciMmBase);
-
- Bar0 = PEI_TEPM_LPSS_DMA_BAR + (Index * PCI_CONFIG_SPACE_SIZE);
- Bar1 = Bar0 + 0x8000;
-
- DEBUG((EFI_D_ERROR, "Program Pci Lpss I2C Device Function=%x DevID=%08x\n", Index, DevID));
-
- //
- // Check if device present
- //
- if (DevID != 0xFFFFFFFF) {
- if(!(I2CLibPeiMmioRead32 (PciMmBase + R_PCH_LPSS_I2C_STSCMD) & B_PCH_LPSS_I2C_STSCMD_MSE)) {
- //
- // Program BAR 0
- //
- I2CLibPeiMmioWrite32((UINTN) (PciMmBase + R_PCH_LPSS_I2C_BAR), (UINT32)(Bar0 & B_PCH_LPSS_I2C_BAR_BA));
-
- DEBUG ((EFI_D_ERROR, "I2CBaseAddress1 = 0x%x \n",I2CLibPeiMmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR)));
-
- //
- // Program BAR 1
- //
- I2CLibPeiMmioWrite32 ((UINTN)(PciMmBase + R_PCH_LPSS_I2C_BAR1), (UINT32)(Bar1 & B_PCH_LPSS_I2C_BAR1_BA));
- DEBUG ((EFI_D_ERROR, "I2CBaseAddress1 = 0x%x \n",I2CLibPeiMmioRead32(PciMmBase+R_PCH_LPSS_I2C_BAR1)));
-
- //
- // Bus Master Enable & Memory Space Enable
- //
- I2CLibPeiMmioWrite32((UINTN) (PciMmBase + R_PCH_LPSS_I2C_STSCMD), (UINT32)(B_PCH_LPSS_I2C_STSCMD_BME | B_PCH_LPSS_I2C_STSCMD_MSE));
- }
-
- //
- // Release Resets
- //
- I2CLibPeiMmioWrite32 (Bar0 + R_PCH_LPIO_I2C_MEM_RESETS, (B_PCH_LPIO_I2C_MEM_RESETS_FUNC | B_PCH_LPIO_I2C_MEM_RESETS_APB));
-
- //
- // Activate Clocks
- //
- I2CLibPeiMmioWrite32 (Bar0 + R_PCH_LPSS_I2C_MEM_PCP, 0x80020003);//No use for A0
-
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() Programmed()\n"));
- }
-
- }
-
- DEBUG ((EFI_D_INFO, "Pei ProgramPciLpssI2C() End\n"));
-
- return EFI_SUCCESS;
-}
-
-/**
- Disable I2C Bus.
-
- @param I2cControllerIndex Index of I2C controller.
-
- @return EFI_SUCCESS
-**/
-EFI_STATUS
-I2cDisable (
- IN UINT8 I2cControllerIndex
- )
-{
- UINTN I2CBaseAddress;
- UINT32 NumTries = 10000; // 0.1 seconds
-
- I2CBaseAddress = (UINT32) PEI_TEPM_LPSS_I2C0_BAR + I2cControllerIndex * PCI_CONFIG_SPACE_SIZE;
-
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_ENABLE, 0);
- while (0 != ( I2CLibPeiMmioRead16 (I2CBaseAddress + R_IC_ENABLE_STATUS ) & 1)) {
- MicroSecondDelay (10);
- NumTries --;
- if(0 == NumTries) return EFI_NOT_READY;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Enable I2C Bus.
-
- @param I2cControllerIndex Index of I2C controller.
-
- @return EFI_SUCCESS
-**/
-EFI_STATUS
-I2cEnable (
- IN UINT8 I2cControllerIndex
- )
-{
- UINTN I2CBaseAddress;
- UINT32 NumTries = 10000; // 0.1 seconds
-
- I2CBaseAddress = (UINT32) PEI_TEPM_LPSS_I2C0_BAR+ I2cControllerIndex * PCI_CONFIG_SPACE_SIZE;
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_ENABLE, 1);
- while (0 == ( I2CLibPeiMmioRead16 ( I2CBaseAddress + R_IC_ENABLE_STATUS ) & 1)) {
- MicroSecondDelay (10);
- NumTries --;
- if(0 == NumTries) return EFI_NOT_READY;
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Set the I2C controller bus clock frequency.
-
- @param[in] This Address of the library's I2C context structure
- @param[in] PlatformData Address of the platform configuration data
- @param[in] BusClockHertz New I2C bus clock frequency in Hertz
-
- @retval RETURN_SUCCESS The bus frequency was set successfully.
- @retval RETURN_UNSUPPORTED The controller does not support this frequency.
-
-**/
-EFI_STATUS
-I2cBusFrequencySet (
- IN UINTN I2CBaseAddress,
- IN UINTN BusClockHertz,
- IN UINT16 *I2cMode
- )
-{
- DEBUG((EFI_D_INFO,"InputFreq BusClockHertz: %d\r\n",BusClockHertz));
-
- *I2cMode = B_IC_RESTART_EN | B_IC_SLAVE_DISABLE | B_MASTER_MODE;
-
- //
- // Set the 100 KHz clock divider
- //
- // From Table 10 of the I2C specification
- //
- // High: 4.00 uS
- // Low: 4.70 uS
- //
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_SS_SCL_HCNT, (UINT16)0x214 );
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_SS_SCL_LCNT, (UINT16)0x272 );
-
- //
- // Set the 400 KHz clock divider
- //
- // From Table 10 of the I2C specification
- //
- // High: 0.60 uS
- // Low: 1.30 uS
- //
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_FS_SCL_HCNT, (UINT16)0x50 );
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_FS_SCL_LCNT, (UINT16)0xAD );
-
- switch ( BusClockHertz ) {
- case 100 * 1000:
- I2CLibPeiMmioWrite32 ( I2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x40);//100K
- *I2cMode |= V_SPEED_STANDARD;
- break;
- case 400 * 1000:
- I2CLibPeiMmioWrite32 ( I2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x32);//400K
- *I2cMode |= V_SPEED_FAST;
- break;
- default:
- I2CLibPeiMmioWrite32 ( I2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x09);//3.4M
- *I2cMode |= V_SPEED_HIGH;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Initializes the host controller to execute I2C commands.
-
- @param I2cControllerIndex Index of I2C controller in LPSS device. 0 represents I2C0, which is PCI function 1 of LPSS device.
-
- @return EFI_SUCCESS Opcode initialization on the I2C host controller completed.
- @return EFI_DEVICE_ERROR Device error, operation failed.
-**/
-EFI_STATUS
-I2CInit (
- UINT8 I2cControllerIndex,
- UINT16 SlaveAddress
- )
-{
- EFI_STATUS Status;
- UINT32 NumTries = 0;
- UINTN I2CBaseAddress;
- UINT16 I2cMode;
- UINTN PciMmBase=0;
-
-
- PciMmBase = MmPciAddress (
- 0,
- DEFAULT_PCI_BUS_NUMBER_PCH,
- PCI_DEVICE_NUMBER_PCH_LPSS_I2C,
- (I2cControllerIndex + 1),
- 0
- );
-
- I2CBaseAddress = I2CLibPeiMmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR);
-
- //
- // Verify the parameters
- //
- if (1023 < SlaveAddress ) {
- Status = EFI_INVALID_PARAMETER;
- DEBUG((EFI_D_INFO,"I2cStartRequest Exit with Status %r\r\n", Status));
- return Status;
- }
-
- if(I2CBaseAddress == (PEI_TEPM_LPSS_I2C0_BAR + I2cControllerIndex * PCI_CONFIG_SPACE_SIZE)) {
- return EFI_SUCCESS;
- }
- ProgramPciLpssI2C();
-
- I2CBaseAddress = (UINT32) (PEI_TEPM_LPSS_I2C0_BAR + I2cControllerIndex * PCI_CONFIG_SPACE_SIZE);
- DEBUG ((EFI_D_ERROR, "I2CBaseAddress = 0x%x \n",I2CBaseAddress));
- NumTries = 10000; // 1 seconds
- while ((1 == ( I2CLibPeiMmioRead32 ( I2CBaseAddress + R_IC_STATUS) & STAT_MST_ACTIVITY ))) {
- MicroSecondDelay(10);
- NumTries --;
- if(0 == NumTries)
- return EFI_DEVICE_ERROR;
- }
-
- Status = I2cDisable (I2cControllerIndex);
- DEBUG((EFI_D_INFO, "I2cDisable Status = %r\r\n", Status));
-
- I2cBusFrequencySet(I2CBaseAddress, 400 * 1000, &I2cMode);//Set I2cMode
-
- I2CLibPeiMmioWrite16(I2CBaseAddress + R_IC_INTR_MASK, 0x0);
- if (0x7F < SlaveAddress) {
- SlaveAddress = (SlaveAddress & 0x3ff ) | IC_TAR_10BITADDR_MASTER;
- }
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_TAR, (UINT16) SlaveAddress );
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_RX_TL, 0);
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_TX_TL, 0 );
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_CON, I2cMode);
-
- Status = I2cEnable(I2cControllerIndex);
- DEBUG((EFI_D_INFO, "I2cEnable Status = %r\r\n", Status));
- I2CLibPeiMmioRead16 ( I2CBaseAddress + R_IC_CLR_TX_ABRT );
-
- return EFI_SUCCESS;
-}
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value read has to be stored
-
- @return EFI_SUCCESS If the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS ByteReadI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer,
- IN UINT8 Start,
- IN UINT8 End
- )
-{
-
- EFI_STATUS Status;
- UINT32 I2cStatus;
- UINT16 ReceiveData;
- UINT8 *ReceiveDataEnd;
- UINT8 *ReceiveRequest;
- UINT16 RawIntrStat;
- UINTN I2CBaseAddress;
-
- I2CBaseAddress = (UINT32)(PEI_TEPM_LPSS_I2C0_BAR + I2cControllerIndex * PCI_CONFIG_SPACE_SIZE);
-
- Status = EFI_SUCCESS;
-
- I2CInit(I2cControllerIndex, SlaveAddress);
-
- ReceiveDataEnd = &ReadBuffer [ReadBytes];
- if(ReadBytes) {
- ReceiveRequest = ReadBuffer;
- DEBUG((EFI_D_INFO,"Read: ---------------%d bytes to RX\r\n",ReceiveDataEnd - ReceiveRequest));
-
- while ((ReceiveDataEnd > ReceiveRequest) || (ReceiveDataEnd > ReadBuffer)) {
- //
- // Check for NACK
- //
- RawIntrStat = I2CLibPeiMmioRead16 (I2CBaseAddress + R_IC_RawIntrStat );
- if ( 0 != (RawIntrStat & I2C_INTR_TX_ABRT )) {
- I2CLibPeiMmioRead16 ( I2CBaseAddress + R_IC_CLR_TX_ABRT );
- Status = RETURN_DEVICE_ERROR;
- DEBUG((EFI_D_INFO,"TX ABRT ,%d bytes hasn't been transferred\r\n",ReceiveDataEnd - ReceiveRequest));
- break;
- }
-
- //
- // Determine if another byte was received
- //
- I2cStatus = I2CLibPeiMmioRead16 ( I2CBaseAddress + R_IC_STATUS );
- if ( 0 != ( I2cStatus & STAT_RFNE )) {
- ReceiveData = I2CLibPeiMmioRead16 ( I2CBaseAddress + R_IC_DATA_CMD );
- *ReadBuffer++ = (UINT8)ReceiveData;
- DEBUG((EFI_D_INFO,"MmioRead32 ,1 byte 0x:%x is received\r\n",ReceiveData));
- }
-
- if(ReceiveDataEnd==ReceiveRequest) {
- //
- // Waiting the last request to get data and make (ReceiveDataEnd > ReadBuffer) =TRUE.
- //
- continue;
- }
-
- //
- // Wait until a read request will fit
- //
- if ( 0 == ( I2cStatus & STAT_TFNF )) {
- MicroSecondDelay ( 10 );
- continue;
- }
-
- //
- // Issue the next read request
- //
- if(End && Start ) {
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_RESTART|B_CMD_STOP);
- } else if (!End && Start ) {
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_RESTART);
- } else if (End && !Start ) {
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_STOP);
- } else if (!End && !Start ) {
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD);
- }
- ReceiveRequest += 1;
- }
-
- }
- return Status;
-
-}
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value written is stored
-
- @return EFI_SUCCESS IF the byte value has been successfully written
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteWriteI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer,
- IN UINT8 Start,
- IN UINT8 End
- )
-{
-
- EFI_STATUS Status;
- UINT32 I2cStatus;
- UINT8 *TransmitEnd;
- UINT16 RawIntrStat;
- UINTN I2CBaseAddress;
-
- I2CBaseAddress = (UINT32)PEI_TEPM_LPSS_I2C0_BAR+ I2cControllerIndex * PCI_CONFIG_SPACE_SIZE;
-
- Status = EFI_SUCCESS;
-
- I2CInit(I2cControllerIndex, SlaveAddress);
-
- TransmitEnd = &WriteBuffer [WriteBytes];
- if( WriteBytes ) {
-
- DEBUG((EFI_D_INFO,"Write: --------------%d bytes to TX\r\n", TransmitEnd - WriteBuffer));
-
- while ( TransmitEnd > WriteBuffer) {
- I2cStatus = I2CLibPeiMmioRead16 (I2CBaseAddress + R_IC_STATUS);
- RawIntrStat = I2CLibPeiMmioRead16 (I2CBaseAddress + R_IC_RawIntrStat);
- if ( 0 != (RawIntrStat & I2C_INTR_TX_ABRT)) {
- I2CLibPeiMmioRead16 (I2CBaseAddress + R_IC_CLR_TX_ABRT);
- Status = RETURN_DEVICE_ERROR;
- DEBUG((EFI_D_ERROR,"TX ABRT TransmitEnd:0x%x WriteBuffer:0x%x\r\n", TransmitEnd, WriteBuffer));
- break;
- }
- if (0 == ( I2cStatus & STAT_TFNF)) {
- continue;
- }
- if(End && Start) {
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++) | B_CMD_RESTART | B_CMD_STOP);
- } else if (!End && Start ) {
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++) | B_CMD_RESTART);
- } else if (End && !Start ) {
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++) | B_CMD_STOP);
- } else if (!End && !Start ) {
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++));
- }
-
- // Add a small delay to work around some odd behavior being seen. Without this delay bytes get dropped.
- MicroSecondDelay ( FIFO_WRITE_DELAY );
- }
-
- }
-
- if(EFI_ERROR(Status)) {
- DEBUG((EFI_D_INFO,"I2cStartRequest Exit with Status %r\r\n",Status));
- }
-
- return Status;
-}
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param ReadBytes Number of bytes to be read
- @param *ReadBuffer Address to which the value read has to be stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteReadI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer
- )
-{
- EFI_STATUS Status;
-
- DEBUG ((EFI_D_ERROR, "ByteReadI2C:---offset:0x%x\n",Offset));
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress, 1, &Offset,TRUE,FALSE);
- Status = ByteReadI2CBasic(I2cControllerIndex, SlaveAddress, ReadBytes, ReadBuffer, TRUE, TRUE);
-
- return Status;
-}
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be written
- @param WriteBytes Number of bytes to be written
- @param *Byte Address to which the value written is stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS ByteWriteI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer
- )
-{
- EFI_STATUS Status;
-
- DEBUG ((EFI_D_ERROR, "ByteWriteI2C:---offset/bytes/buf:0x%x,0x%x,0x%x,0x%x\n",Offset,WriteBytes,WriteBuffer,*WriteBuffer));
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress, 1, &Offset, TRUE, FALSE);
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress, WriteBytes, WriteBuffer, FALSE, TRUE);
-
- return Status;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.h
deleted file mode 100644
index 47536aebf7..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.h
+++ /dev/null
@@ -1,280 +0,0 @@
-/** @file
- I2C PEI Lib Instance.
-
- Copyright (c) 1999- 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef I2C_PEI_REGS_H
-#define I2C_PEI_REGS_H
-
-#include "PiPei.h"
-
-#define R_PCH_LPC_PMC_BASE 0x44
-#define B_PCH_LPC_PMC_BASE_BAR 0xFFFFFE00
-#define R_PCH_PMC_FUNC_DIS 0x34 // Function Disable Register
-#define PCIEX_BASE_ADDRESS 0xE0000000
-#define PciD31F0RegBase PCIEX_BASE_ADDRESS + (UINT32) (31 << 15)
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC7 BIT7 // LPSS SPI Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC6 BIT6 // LPSS HSUART #2 Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC5 BIT5 // LPSS HSUART #1 Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC4 BIT4 // LPSS I2S Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC3 BIT3 // LPSS PCM Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC2 BIT2 // LPSS I2C #2 Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC1 BIT1 // LPSS I2C #1 Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC0 BIT0 // LPSS DMA Disable
-
-
-#define DEFAULT_PCI_BUS_NUMBER_PCH 0
-
-#define R_PCH_LPSS_I2C_STSCMD 0x04 // Status & Command
-#define B_PCH_LPSS_I2C_STSCMD_RMA BIT29 // RMA
-#define B_PCH_LPSS_I2C_STSCMD_RCA BIT28 // RCA
-#define B_PCH_LPSS_I2C_STSCMD_CAPLIST BIT20 // Capability List
-#define B_PCH_LPSS_I2C_STSCMD_INTRSTS BIT19 // Interrupt Status
-#define B_PCH_LPSS_I2C_STSCMD_INTRDIS BIT10 // Interrupt Disable
-#define B_PCH_LPSS_I2C_STSCMD_SERREN BIT8 // SERR# Enable
-#define B_PCH_LPSS_I2C_STSCMD_BME BIT2 // Bus Master Enable
-#define B_PCH_LPSS_I2C_STSCMD_MSE BIT1 // Memory Space Enable
-
-#define R_PCH_LPSS_I2C_BAR 0x10 // BAR
-#define B_PCH_LPSS_I2C_BAR_BA 0xFFFFF000 // Base Address
-#define B_PCH_LPSS_I2C_BAR_SI 0x00000FF0 // Size Indicator
-#define B_PCH_LPSS_I2C_BAR_PF BIT3 // Prefetchable
-#define B_PCH_LPSS_I2C_BAR_TYPE (BIT2 | BIT1) // Type
-#define B_PCH_LPSS_I2C_BAR_MS BIT0 // Message Space
-
-#define R_PCH_LPSS_I2C_BAR1 0x14 // BAR 1
-#define B_PCH_LPSS_I2C_BAR1_BA 0xFFFFF000 // Base Address
-#define B_PCH_LPSS_I2C_BAR1_SI 0x00000FF0 // Size Indicator
-#define B_PCH_LPSS_I2C_BAR1_PF BIT3 // Prefetchable
-#define B_PCH_LPSS_I2C_BAR1_TYPE (BIT2 | BIT1) // Type
-#define B_PCH_LPSS_I2C_BAR1_MS BIT0 // Message Space
-
-#define NUM_RETRIES 0xFFFF
-
-//
-// LPIO I2C Module Memory Space Registers
-//
-#define R_PCH_LPIO_I2C_MEM_RESETS 0x804 // Software Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_FUNC BIT1 // Function Clock Domain Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_APB BIT0 // APB Domain Reset
-
-#define R_PCH_LPSS_I2C_MEM_PCP 0x800 // Private Clock Parameters
-
-#define bit(a) 1 << (a)
-
-//
-// MMIO Register Definitions
-//
-
-#define I2C0_REG_SPACE_ADDR_BASE 0xFF138000 //01K
-
-#define R_IC_CON ( 0x00) // I2C Control
-#define B_IC_RESTART_EN BIT5
-#define B_IC_SLAVE_DISABLE BIT6
-#define V_SPEED_STANDARD 0x02
-#define V_SPEED_FAST 0x04
-#define V_SPEED_HIGH 0x06
-#define B_MASTER_MODE BIT0
-
-#define R_IC_TAR ( 0x04) // I2C Target Address
-#define IC_TAR_10BITADDR_MASTER BIT12
-
-#define R_IC_SAR ( 0x08) // I2C Slave Address
-#define R_IC_HS_MADDR ( 0x0C) // I2C HS MasterMode Code Address
-#define R_IC_DATA_CMD ( 0x10) // I2C Rx/Tx Data Buffer and Command
-
-#define B_READ_CMD BIT8 // 1 = read, 0 = write
-#define B_CMD_STOP BIT9 // 1 = STOP
-#define B_CMD_RESTART BIT10 // 1 = IC_RESTART_EN
-
-#define V_WRITE_CMD_MASK ( 0xFF)
-
-#define R_IC_SS_SCL_HCNT ( 0x14) // Standard Speed I2C Clock SCL High Count
-#define R_IC_SS_SCL_LCNT ( 0x18) // Standard Speed I2C Clock SCL Low Count
-#define R_IC_FS_SCL_HCNT ( 0x1C) // Full Speed I2C Clock SCL High Count
-#define R_IC_FS_SCL_LCNT ( 0x20) // Full Speed I2C Clock SCL Low Count
-#define R_IC_HS_SCL_HCNT ( 0x24) // High Speed I2C Clock SCL High Count
-#define R_IC_HS_SCL_LCNT ( 0x28) // High Speed I2C Clock SCL Low Count
-#define R_IC_INTR_STAT ( 0x2C) // I2C Inetrrupt Status
-#define R_IC_INTR_MASK ( 0x30) // I2C Interrupt Mask
-#define I2C_INTR_GEN_CALL BIT11 // General call received
-#define I2C_INTR_START_DET BIT10
-#define I2C_INTR_STOP_DET BIT9
-#define I2C_INTR_ACTIVITY BIT8
-#define I2C_INTR_TX_ABRT BIT6 // Set on NACK
-#define I2C_INTR_TX_EMPTY BIT4
-#define I2C_INTR_TX_OVER BIT3
-#define I2C_INTR_RX_FULL BIT2 // Data bytes in RX FIFO over threshold
-#define I2C_INTR_RX_OVER BIT1
-#define I2C_INTR_RX_UNDER BIT0
-#define R_IC_RawIntrStat ( 0x34) // I2C Raw Interrupt Status
-#define R_IC_RX_TL ( 0x38) // I2C Receive FIFO Threshold
-#define R_IC_TX_TL ( 0x3C) // I2C Transmit FIFO Threshold
-#define R_IC_CLR_INTR ( 0x40) // Clear Combined and Individual Interrupts
-#define R_IC_CLR_RX_UNDER ( 0x44) // Clear RX_UNDER Interrupt
-#define R_IC_CLR_RX_OVER ( 0x48) // Clear RX_OVERinterrupt
-#define R_IC_CLR_TX_OVER ( 0x4C) // Clear TX_OVER interrupt
-#define R_IC_CLR_RD_REQ ( 0x50) // Clear RD_REQ interrupt
-#define R_IC_CLR_TX_ABRT ( 0x54) // Clear TX_ABRT interrupt
-#define R_IC_CLR_RX_DONE ( 0x58) // Clear RX_DONE interrupt
-#define R_IC_CLR_ACTIVITY ( 0x5C) // Clear ACTIVITY interrupt
-#define R_IC_CLR_STOP_DET ( 0x60) // Clear STOP_DET interrupt
-#define R_IC_CLR_START_DET ( 0x64) // Clear START_DET interrupt
-#define R_IC_CLR_GEN_CALL ( 0x68) // Clear GEN_CALL interrupt
-#define R_IC_ENABLE ( 0x6C) // I2C Enable
-#define R_IC_STATUS ( 0x70) // I2C Status
-
-#define R_IC_SDA_HOLD ( 0x7C) // I2C IC_DEFAULT_SDA_HOLD//16bits
-
-#define STAT_MST_ACTIVITY BIT5 // Master FSM Activity Status.
-#define STAT_RFF BIT4 // RX FIFO is completely full
-#define STAT_RFNE BIT3 // RX FIFO is not empty
-#define STAT_TFE BIT2 // TX FIFO is completely empty
-#define STAT_TFNF BIT1 // TX FIFO is not full
-
-#define R_IC_TXFLR ( 0x74) // Transmit FIFO Level Register
-#define R_IC_RXFLR ( 0x78) // Receive FIFO Level Register
-#define R_IC_TX_ABRT_SOURCE ( 0x80) // I2C Transmit Abort Status Register
-#define R_IC_SLV_DATA_NACK_ONLY ( 0x84) // Generate SLV_DATA_NACK Register
-#define R_IC_DMA_CR ( 0x88) // DMA Control Register
-#define R_IC_DMA_TDLR ( 0x8C) // DMA Transmit Data Level
-#define R_IC_DMA_RDLR ( 0x90) // DMA Receive Data Level
-#define R_IC_SDA_SETUP ( 0x94) // I2C SDA Setup Register
-#define R_IC_ACK_GENERAL_CALL ( 0x98) // I2C ACK General Call Register
-#define R_IC_ENABLE_STATUS ( 0x9C) // I2C Enable Status Register
-#define R_IC_COMP_PARAM ( 0xF4) // Component Parameter Register
-#define R_IC_COMP_VERSION ( 0xF8) // Component Version ID
-#define R_IC_COMP_TYPE ( 0xFC) // Component Type
-
-#define I2C_SS_SCL_HCNT_VALUE_100M 0x1DD
-#define I2C_SS_SCL_LCNT_VALUE_100M 0x1E4
-#define I2C_FS_SCL_HCNT_VALUE_100M 0x54
-#define I2C_FS_SCL_LCNT_VALUE_100M 0x9a
-#define I2C_HS_SCL_HCNT_VALUE_100M 0x7
-#define I2C_HS_SCL_LCNT_VALUE_100M 0xE
-
-//
-// FIFO write workaround value.
-//
-#define FIFO_WRITE_DELAY 2
-#define IC_TAR_10BITADDR_MASTER BIT12
-#define FIFO_SIZE 32
-#define R_IC_INTR_STAT ( 0x2C) // I2c Inetrrupt Status
-#define R_IC_INTR_MASK ( 0x30) // I2c Interrupt Mask
-#define I2C_INTR_GEN_CALL BIT11 // General call received
-#define I2C_INTR_START_DET BIT10
-#define I2C_INTR_STOP_DET BIT9
-#define I2C_INTR_ACTIVITY BIT8
-#define I2C_INTR_TX_ABRT BIT6 // Set on NACK
-#define I2C_INTR_TX_EMPTY BIT4
-#define I2C_INTR_TX_OVER BIT3
-#define I2C_INTR_RX_FULL BIT2 // Data bytes in RX FIFO over threshold
-#define I2C_INTR_RX_OVER BIT1
-#define I2C_INTR_RX_UNDER BIT0
-
-/**
- Programe all I2C controllers on LPSS.
-
- I2C0 is function 1 of LPSS. I2C1 is function 2 of LPSS, etc..
-
- @param VOID
-
- @return EFI_SUCCESS
-**/
-EFI_STATUS
-ProgramPciLpssI2C (
- VOID
- );
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value read has to be stored
- @param Start Whether a RESTART is issued before the byte is sent or received
- @param End Whether STOP is generated after a data byte is sent or received
-
- @return EFI_SUCCESS If the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteReadI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer,
- IN UINT8 Start,
- IN UINT8 End
- );
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value written is stored
- @param Start Whether a RESTART is issued before the byte is sent or received
- @param End Whether STOP is generated after a data byte is sent or received
-
- @return EFI_SUCCESS IF the byte value has been successfully written
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteWriteI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer,
- IN UINT8 Start,
- IN UINT8 End
- );
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param ReadBytes Number of bytes to be read
- @param *ReadBuffer Address to which the value read has to be stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteReadI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer
- );
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be written
- @param WriteBytes Number of bytes to be written
- @param *Byte Address to which the value written is stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteWriteI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.inf
deleted file mode 100644
index a78212a0e7..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.inf
+++ /dev/null
@@ -1,40 +0,0 @@
-## @file
-# Instance of I2C Library.
-#
-# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = I2CLibPei
- FILE_GUID = 8EF61509-890B-4FF2-B352-1C0E9CDDEC8B
- MODULE_TYPE = PEIM
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LockBoxLib|PEIM
- CONSTRUCTOR = IntelI2CPeiLibConstructor
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources.common]
- I2CLibPei.c
- I2CIoLibPei.c
-
-[LibraryClasses]
- TimerLib
-
-[PPIs]
- gEfiPeiStallPpiGuid
-
-
-[Packages]
- MdePkg/MdePkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
-
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.c
deleted file mode 100644
index b99c3b0122..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-#include "PiPei.h"
-#include <Library/HobLib.h>
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-#include <Guid/MemoryConfigData.h>
-#include <PlatformFspLib.h>
-
-EFI_STATUS
-PlatformHobCreateFromFsp (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- VOID *HobList
- )
-{
- VOID *HobData;
- VOID *NewHobData;
- UINTN DataSize;
-
- //
- // Other hob, todo: put this into FspWrapPlatformLib
- //
- if ((HobList = GetNextGuidHob (&gEfiMemoryConfigDataGuid, HobList)) != NULL) {
- HobData = GET_GUID_HOB_DATA (HobList);
- DataSize = GET_GUID_HOB_DATA_SIZE(HobList);
- DEBUG((EFI_D_ERROR, "gEfiMemoryConfigDataGuid Hob found: 0x%x.\n", DataSize));
-
- NewHobData = BuildGuidHob (&gEfiMemoryConfigDataGuid, DataSize);
- (*PeiServices)->CopyMem (
- NewHobData,
- HobData,
- DataSize
- );
- }
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
deleted file mode 100644
index ddd97c5ad9..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-#
-# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-# FSP Platform HOB Library
-#
-#
-#
-##
-
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = PlatformFspLib
- FILE_GUID = 1305A712-33A6-4fa7-BA59-AEAC3362931A
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = PlatformFspLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- PlatformFspLib.c
-
-[Packages]
- MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFspWrapperPkg/IntelFspWrapperPkg.dec
-
-[LibraryClasses]
- BaseLib
- DebugLib
- HobLib
-
-[Guids]
- gEfiMemoryConfigDataGuid
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/PlatformSerialPortLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/PlatformSerialPortLib.h
deleted file mode 100644
index fe47e8f68d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/PlatformSerialPortLib.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/** @file
- Header file of Serial port hardware definition.
-
- Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef __PLATFORM_SERIAL_PORT_LIB_H_
-#define __PLATFORM_SERIAL_PORT_LIB_H_
-
-#include <Base.h>
-#include <Library/BaseLib.h>
-#include <Library/IoLib.h>
-#include <Library/PcdLib.h>
-#include <Library/SerialPortLib.h>
-
-//
-// UART Register Offsets
-//
-#define BAUD_LOW_OFFSET 0x00
-#define BAUD_HIGH_OFFSET 0x01
-#define IER_OFFSET 0x01
-#define LCR_SHADOW_OFFSET 0x01
-#define FCR_SHADOW_OFFSET 0x02
-#define IR_CONTROL_OFFSET 0x02
-#define FCR_OFFSET 0x02
-#define EIR_OFFSET 0x02
-#define BSR_OFFSET 0x03
-#define LCR_OFFSET 0x03
-#define MCR_OFFSET 0x04
-#define LSR_OFFSET 0x05
-#define MSR_OFFSET 0x06
-
-//
-// UART Register Bit Defines
-//
-#define LSR_TXRDY 0x20
-#define LSR_RXDA 0x01
-#define DLAB 0x01
-
-#define UART_DATA 8
-#define UART_STOP 1
-#define UART_PARITY 0
-#define UART_BREAK_SET 0
-
-VOID
-InitializeSio (
- VOID
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.c
deleted file mode 100644
index f6012593d0..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/** @file
- Serial I/O Port library functions with no library constructor/destructor
-
- Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "PlatformSerialPortLib.h"
-
-UINT16 gComBase = 0x3f8;
-UINTN gBps = 115200;
-UINT8 gData = 8;
-UINT8 gStop = 1;
-UINT8 gParity = 0;
-UINT8 gBreakSet = 0;
-
-/**
- Initialize Serial Port
-
- The Baud Rate Divisor registers are programmed and the LCR
- is used to configure the communications format. Hard coded
- UART config comes from globals in DebugSerialPlatform lib.
-
- @param None
-
- @retval None
-
-**/
-RETURN_STATUS
-EFIAPI
-UARTInitialize (
- VOID
- )
-{
- UINTN Divisor;
- UINT8 OutputData;
- UINT8 Data;
-
- //
- // Map 5..8 to 0..3
- //
- Data = (UINT8) (gData - (UINT8) 5);
-
- //
- // Calculate divisor for baud generator
- //
- Divisor = 115200 / gBps;
-
- //
- // Set communications format
- //
- OutputData = (UINT8) ((DLAB << 7) | ((gBreakSet << 6) | ((gParity << 3) | ((gStop << 2) | Data))));
- IoWrite8 (gComBase + LCR_OFFSET, OutputData);
-
- //
- // Configure baud rate
- //
- IoWrite8 (gComBase + BAUD_HIGH_OFFSET, (UINT8) (Divisor >> 8));
- IoWrite8 (gComBase + BAUD_LOW_OFFSET, (UINT8) (Divisor & 0xff));
-
- //
- // Switch back to bank 0
- //
- OutputData = (UINT8) ((~DLAB << 7) | ((gBreakSet << 6) | ((gParity << 3) | ((gStop << 2) | Data))));
- IoWrite8 (gComBase + LCR_OFFSET, OutputData);
-
- return RETURN_SUCCESS;
-}
-
-/**
- Common function to initialize UART Serial device and USB Serial device.
-
- @param None
-
- @retval None
-
-**/
-RETURN_STATUS
-EFIAPI
-SerialPortInitialize (
- VOID
- )
-{
-
- UARTInitialize ();
-
-
- return RETURN_SUCCESS;
-}
-
-/**
- Write data to serial device.
-
- If the buffer is NULL, then return 0;
- if NumberOfBytes is zero, then return 0.
-
- @param Buffer Point of data buffer which need to be writed.
- @param NumberOfBytes Number of output bytes which are cached in Buffer.
-
- @retval 0 Write data failed.
- @retval !0 Actual number of bytes writed to serial device.
-
-**/
-UINTN
-EFIAPI
-UARTDbgOut (
- IN UINT8 *Buffer,
- IN UINTN NumberOfBytes
-)
-{
- UINTN Result;
- UINT8 Data;
-
- if (NULL == Buffer) {
- return 0;
- }
-
- Result = NumberOfBytes;
-
- while (NumberOfBytes--) {
- //
- // Wait for the serial port to be ready.
- //
- do {
- Data = IoRead8 ((UINT16) PcdGet64 (PcdSerialRegisterBase) + LSR_OFFSET);
- } while ((Data & LSR_TXRDY) == 0);
- IoWrite8 ((UINT16) PcdGet64 (PcdSerialRegisterBase), *Buffer++);
- }
-
- return Result;
-}
-
-/**
- Common function to write data to UART Serial device and USB Serial device.
-
- @param Buffer Point of data buffer which need to be writed.
- @param NumberOfBytes Number of output bytes which are cached in Buffer.
-
-**/
-UINTN
-EFIAPI
-SerialPortWrite (
- IN UINT8 *Buffer,
- IN UINTN NumberOfBytes
-)
-{
- if (FeaturePcdGet (PcdStatusCodeUseIsaSerial)) {
- UARTDbgOut (Buffer, NumberOfBytes);
- }
-
- return RETURN_SUCCESS;
-}
-
-/**
- Read data from serial device and save the datas in buffer.
-
- If the buffer is NULL, then return 0;
- if NumberOfBytes is zero, then return 0.
-
- @param Buffer Point of data buffer which need to be writed.
- @param NumberOfBytes Number of output bytes which are cached in Buffer.
-
- @retval 0 Read data failed.
- @retval !0 Actual number of bytes raed to serial device.
-
-**/
-UINTN
-EFIAPI
-UARTDbgIn (
- OUT UINT8 *Buffer,
- IN UINTN NumberOfBytes
-)
-{
- UINTN Result;
- UINT8 Data;
-
- if (NULL == Buffer) {
- return 0;
- }
-
- Result = NumberOfBytes;
-
- while (NumberOfBytes--) {
- //
- // Wait for the serial port to be ready.
- //
- do {
- Data = IoRead8 ((UINT16) PcdGet64 (PcdSerialRegisterBase) + LSR_OFFSET);
- } while ((Data & LSR_RXDA) == 0);
-
- *Buffer++ = IoRead8 ((UINT16) PcdGet64 (PcdSerialRegisterBase));
- }
-
- return Result;
-}
-
-/**
- Common function to Read data from UART serial device, USB serial device and save the datas in buffer.
-
- @param Buffer Point of data buffer which need to be writed.
- @param NumberOfBytes Number of output bytes which are cached in Buffer.
-
-**/
-UINTN
-EFIAPI
-SerialPortRead (
- OUT UINT8 *Buffer,
- IN UINTN NumberOfBytes
-)
-{
- if (FeaturePcdGet (PcdStatusCodeUseIsaSerial)) {
- UARTDbgIn (Buffer, NumberOfBytes);
- }
-
- return RETURN_SUCCESS;
-}
-
-
-/**
- Polls a serial device to see if there is any data waiting to be read.
-
- Polls aserial device to see if there is any data waiting to be read.
- If there is data waiting to be read from the serial device, then TRUE is returned.
- If there is no data waiting to be read from the serial device, then FALSE is returned.
-
- @retval TRUE Data is waiting to be read from the serial device.
- @retval FALSE There is no data waiting to be read from the serial device.
-
-**/
-BOOLEAN
-EFIAPI
-SerialPortPoll (
- VOID
- )
-{
- UINT8 Data;
-
- //
- // Read the serial port status.
- //
- Data = IoRead8 ((UINT16) PcdGet64 (PcdSerialRegisterBase) + LSR_OFFSET);
-
- return (BOOLEAN) ((Data & LSR_RXDA) != 0);
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.inf
deleted file mode 100644
index 0e7a6d3cfc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.inf
+++ /dev/null
@@ -1,52 +0,0 @@
-#/** @file
-#
-# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SerialPortLib
- FILE_GUID = 15B26F43-A389-4bae-BDE3-4BB0719B7D4F
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = SerialPortLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-[Sources]
- SerialPortLib.c
- SioInit.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
-
-[LibraryClasses]
- BaseLib
- PcdLib
- IoLib
- PciLib
- TimerLib
-
-[FixedPcd.common]
- gEfiSerialPortTokenSpaceGuid.PcdSerialBoudRate
- gEfiSerialPortTokenSpaceGuid.PcdSerialRegisterBase
-
-[FeaturePcd]
- gEfiSerialPortTokenSpaceGuid.PcdStatusCodeUseIsaSerial
- gEfiSerialPortTokenSpaceGuid.PcdStatusCodeUseUsbSerial
- gEfiSerialPortTokenSpaceGuid.PcdStatusCodeUseRam
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.c
deleted file mode 100644
index d9d48539dc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- SioInit.c
-
-Abstract:
-
- Functions for LpcSio initialization
-
---*/
-
-#include "PlatformSerialPortLib.h"
-#include "SioInit.h"
-
-typedef struct {
- UINT8 Register;
- UINT8 Value;
-} EFI_SIO_TABLE;
-
-EFI_SIO_TABLE mSioTableWpcn381u[] = {
- {0x29, 0x0A0},
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_UART0}, // Select UART0 device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT0_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT0_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_IRQ1_REGISTER, 0x014}, // Set to IRQ4
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_UART1}, // Select UART1 device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT1_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT1_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_IRQ1_REGISTER, 0x013}, // Set to IRQ3
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_GPIO}, // Select GPIO device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_GPIO_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_GPIO_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {0x21, 0x001}, // Global Device Enable
- {0x26, 0x000}
-};
-
-EFI_SIO_TABLE mSioTableWdcp376[] = {
- {0x29, 0x0A0},
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_UART0}, // Select UART0 device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT0_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT0_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_IRQ1_REGISTER, 0x014}, // Set to IRQ4
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_UART1}, // Select UART1 device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT1_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT1_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_IRQ1_REGISTER, 0x013}, // Set to IRQ3
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_GPIO}, // Select GPIO device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_GPIO_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_GPIO_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {0x21, 0x001}, // Global Device Enable
- {0x26, 0x000},
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_PS2K}, // Select PS2 Keyboard
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_KB_BASE1_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_KB_BASE1_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_BASE2_HI_REGISTER, (UINT8)(WPCN381U_KB_BASE2_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE2_LO_REGISTER, (UINT8)(WPCN381U_KB_BASE2_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_IRQ1_REGISTER, 0x011}, // Set to IRQ1
- {0xF0, (SIO_KBC_CLOCK << 6)}, // Select KBC Clock Source
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_PS2M}, // Select PS2 Mouse
- {WPCN381U_IRQ1_REGISTER, 0x01c}, // Set to IRQ12
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE} // Enable it with Activation bit
-};
-
-/**
- Initialization for SIO.
-
- @param FfsHeader FV this PEIM was loaded from.
- @param PeiServices General purpose services available to every PEIM.
-
- None
-
-**/
-VOID
-InitializeSio (
- VOID
- )
-{
- UINT16 Index;
- UINT16 IndexPort;
- UINT16 DataPort;
-
- //
- // Super I/O initialization for Winbond WPCN381U
- //
- IndexPort = WPCN381U_CONFIG_INDEX;
- DataPort = WPCN381U_CONFIG_DATA;
-
- //
- // Check for Winbond WPCN381U
- //
- IoWrite8 (IndexPort, WPCN381U_DEV_ID_REGISTER); // Winbond WPCN381U Device ID register is 0x20
-
- if (IoRead8 (DataPort) == WPCN381U_CHIP_ID) { // Winbond WPCN381U Device ID is 0xF4
- //
- // Configure WPCN381U SIO
- //
- for (Index = 0; Index < sizeof (mSioTableWpcn381u) / sizeof (EFI_SIO_TABLE); Index++) {
- IoWrite8 (IndexPort, mSioTableWpcn381u[Index].Register);
- IoWrite8 (DataPort, mSioTableWpcn381u[Index].Value);
- }
- }
-
- if (IoRead8 (DataPort) == WDCP376_CHIP_ID) { // Winbond WDCP376 Device ID is 0xF1
- //
- // Configure WDCP376 SIO
- //
- for (Index = 0; Index < sizeof (mSioTableWdcp376) / sizeof (EFI_SIO_TABLE); Index++) {
- IoWrite8 (IndexPort, mSioTableWdcp376[Index].Register);
- IoWrite8 (DataPort, mSioTableWdcp376[Index].Value);
- }
- }
- return;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.h
deleted file mode 100644
index 06fa19b93d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/** @file
- Header file of Serial port hardware definition.
-
- Copyright (c) 2012 - 2017, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef _SIO_INIT_H_
-#define _SIO_INIT_H_
-
-#define WPCN381U_CONFIG_INDEX 0x2E
-#define WPCN381U_CONFIG_DATA 0x2F
-#define WPCN381U_CONFIG_INDEX1 0x164E
-#define WPCN381U_CONFIG_DATA1 0x164F
-#define WPCN381U_CHIP_ID 0xF4
-#define WDCP376_CHIP_ID 0xF1
-
-//
-// SIO Logical Devices Numbers
-//
-#define WPCN381U_LDN_UART0 0x03 // LDN for Serial Port Controller
-#define WPCN381U_LDN_UART1 0x02 // LDN for Parallel Port Controller
-#define WPCN381U_LDN_PS2K 0x06 // LDN for PS2 Keyboard Controller
-#define WPCN381U_LDN_PS2M 0x05 // LDN for PS2 Mouse Controller
-#define WPCN381U_KB_BASE1_ADDRESS 0x60 // Base Address of KB controller
-#define WPCN381U_KB_BASE2_ADDRESS 0x64 // Base Address of KB controller
-#define SIO_KBC_CLOCK 0x01 // 0/1/2 - 8/12/16 MHz KBC Clock Source
-#define WPCN381U_LDN_GPIO 0x07 // LDN for GPIO
-
-//
-// SIO Registers Layout
-//
-#define WPCN381U_LD_SEL_REGISTER 0x07 // Logical Device Select Register Address
-#define WPCN381U_DEV_ID_REGISTER 0x20 // Device Identification Register Address
-#define WPCN381U_ACTIVATE_REGISTER 0x30 // Device Identification Register Address
-#define WPCN381U_BASE1_HI_REGISTER 0x60 // Device BaseAddres Register #1 MSB Address
-#define WPCN381U_BASE1_LO_REGISTER 0x61 // Device BaseAddres Register #1 LSB Address
-#define WPCN381U_BASE2_HI_REGISTER 0x62 // Device BaseAddres Register #1 MSB Address
-#define WPCN381U_BASE2_LO_REGISTER 0x63 // Device Ba1eAddres Register #1 LSB Address
-#define WPCN381U_IRQ1_REGISTER 0x70 // Device IRQ Register #1 Address
-#define WPCN381U_IRQ2_REGISTER 0x71 // Device IRQ Register #2 Address
-
-//
-// SIO Activation Values
-//
-#define WPCN381U_ACTIVATE_VALUE 0x01 // Value to activate Device
-#define WPCN381U_DEACTIVATE_VALUE 0x00 // Value to deactivate Device
-
-//
-// SIO GPIO
-//
-#define WPCN381U_GPIO_BASE_ADDRESS 0x0A20 // SIO GPIO Base Address
-
-//
-// SIO Serial Port Settings
-//
-#define WPCN381U_SERIAL_PORT0_BASE_ADDRESS 0x03F8 // Base Address of Serial Port 0 (COMA / UART0)
-#define WPCN381U_SERIAL_PORT1_BASE_ADDRESS 0x02F8 // Base Address of Serial Port 1 (COMB / UART1)
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c b/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c
deleted file mode 100644
index b1fb4adb34..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
-
- LegacyMetronome.c
-
-Abstract:
-
- This contains the installation function for the driver.
-
---*/
-
-#include "LegacyMetronome.h"
-
-//
-// Handle for the Metronome Architectural Protocol instance produced by this driver
-//
-EFI_HANDLE mMetronomeHandle = NULL;
-
-//
-// The Metronome Architectural Protocol instance produced by this driver
-//
-EFI_METRONOME_ARCH_PROTOCOL mMetronome = {
- WaitForTick,
- TICK_PERIOD
-};
-
-//
-// The CPU I/O Protocol used to access system hardware
-//
-EFI_CPU_IO_PROTOCOL *mCpuIo = NULL;
-
-//
-// Worker Functions
-//
-
-/**
- Write an 8 bit value to an I/O port and save it to the S3 script
-
- @param Port IO Port
- @param Data Data in IO Port
-
- @retval None.
-
-**/
-VOID
-ScriptWriteIo8 (
- UINT16 Port,
- UINT8 Data
- )
-{
- mCpuIo->Io.Write (
- mCpuIo,
- EfiCpuIoWidthUint8,
- Port,
- 1,
- &Data
- );
-
-}
-
-/**
-
- Read the refresh bit from the REFRESH_PORT
-
- @param None.
-
- @retval Refresh bit.
-
-**/
-UINT8
-ReadRefresh (
- VOID
- )
-{
- UINT8 Data;
-
- mCpuIo->Io.Read (
- mCpuIo,
- EfiCpuIoWidthUint8,
- REFRESH_PORT,
- 1,
- &Data
- );
- return (UINT8) (Data & REFRESH_ON);
-}
-
-/**
-
- Waits for the TickNumber of ticks from a known platform time source.
-
- @param This Pointer to the protocol instance.
- @param TickNumber Tick Number to be waited
-
-
- @retval EFI_SUCCESS If number of ticks occurred.
- @retval EFI_NOT_FOUND Could not locate CPU IO protocol
-
-**/
-EFI_STATUS
-EFIAPI
-WaitForTick (
- IN EFI_METRONOME_ARCH_PROTOCOL *This,
- IN UINT32 TickNumber
- )
-{
- //
- // Wait for TickNumber toggles of the Refresh bit
- //
- for (; TickNumber != 0x00; TickNumber--) {
- while (ReadRefresh () == REFRESH_ON)
- ;
- while (ReadRefresh () == REFRESH_OFF)
- ;
- }
-
- return EFI_SUCCESS;
-}
-
-//
-// Driver Entry Point
-//
-/**
- Install the LegacyMetronome driver. Loads a Metronome Arch Protocol based
- on the Port 61 timer.
-
- @param ImageHandle Handle for the image of this driver
- @param SystemTable Pointer to the EFI System Table
-
- @retval EFI_SUCCESS Metronome Architectural Protocol Installed
-
-**/
-EFI_STATUS
-EFIAPI
-InstallLegacyMetronome (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
-
- //
- // Make sure the Metronome Architectural Protocol is not already installed in the system
- //
- ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiMetronomeArchProtocolGuid);
-
- //
- // Get the CPU I/O Protocol that this driver requires
- // If the CPU I/O Protocol is not found, then ASSERT because the dependency expression
- // should guarantee that it is present in the handle database.
- //
- Status = gBS->LocateProtocol (
- &gEfiCpuIoProtocolGuid,
- NULL,
- (void **)&mCpuIo
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Program port 61 timer 1 as refresh timer. We could use ACPI timer in the
- // future.
- //
- ScriptWriteIo8 (TIMER1_CONTROL_PORT, LOAD_COUNTER1_LSB);
- ScriptWriteIo8 (TIMER1_COUNT_PORT, COUNTER1_COUNT);
-
- //
- // Install on a new handle
- //
- Status = gBS->InstallMultipleProtocolInterfaces (
- &mMetronomeHandle,
- &gEfiMetronomeArchProtocolGuid,
- &mMetronome,
- NULL
- );
- ASSERT_EFI_ERROR (Status);
-
- return Status;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h b/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h
deleted file mode 100644
index 9599eca702..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- LegacyMetronome.h
-
-Abstract:
-
- Driver implementing the EFI 2.0 metronome protocol using the legacy PORT 61
- timer.
-
---*/
-
-#ifndef _LEGACY_METRONOME_H
-#define _LEGACY_METRONOME_H
-
-//
-// Statements that include other files
-//
-#include "Protocol/Metronome.h"
-#include "Protocol/CpuIo.h"
-#include "Library/DebugLib.h"
-#include "Library/UefiBootServicesTableLib.h"
-
-
-//
-// Private definitions
-//
-#define TICK_PERIOD 300
-#define REFRESH_PORT 0x61
-#define REFRESH_ON 0x10
-#define REFRESH_OFF 0x00
-#define TIMER1_CONTROL_PORT 0x43
-#define TIMER1_COUNT_PORT 0x41
-#define LOAD_COUNTER1_LSB 0x54
-#define COUNTER1_COUNT 0x12
-
-//
-// Function Prototypes
-//
-/**
- Waits for the TickNumber of ticks from a known platform time source.
-
- @param This Pointer to the protocol instance.
- @param TickNumber Tick Number to be waited
-
- @retval EFI_SUCCESS If number of ticks occurred.
- @retval EFI_NOT_FOUND Could not locate CPU IO protocol
-
-**/
-EFI_STATUS
-EFIAPI
-WaitForTick (
- IN EFI_METRONOME_ARCH_PROTOCOL *This,
- IN UINT32 TickNumber
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/Metronome.inf b/Platform/Intel/Vlv2TbltDevicePkg/Metronome/Metronome.inf
deleted file mode 100644
index 173370d652..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/Metronome.inf
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-
-# Module Name:
-#
-# LegacyMetronome.inf
-#
-# Abstract:
-#
-# Component description file for LegacyMetronome module
-#
-#--*/
-[defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LegacyMetronome
- FILE_GUID = 07A9330A-F347-11d4-9A49-0090273FC14D
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- ENTRY_POINT = InstallLegacyMetronome
-
-[sources.common]
- LegacyMetronome.c
- LegacyMetronome.h
-
-[Packages]
- MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
-
-[LibraryClasses]
- UefiDriverEntryPoint
- UefiBootServicesTableLib
- DevicePathLib
- UefiLib
-
-[Protocols]
-
-gEfiMetronomeArchProtocolGuid
-gEfiCpuIoProtocolGuid
-
-[Depex]
-gEfiCpuIoProtocolGuid AND gEfiBootScriptSaveProtocolGuid
-
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.c
deleted file mode 100644
index 26599620ba..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
-
- SmmScriptSave.c
-
-Abstract:
-
- ScriptTableSave module at run time
-
---*/
-
-#include "SmmScriptSave.h"
-
-//
-// internal functions
-//
-
-EFI_STATUS
-BootScriptIoWrite (
- IN EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN VA_LIST Marker
- );
-
-EFI_STATUS
-BootScriptPciCfgWrite (
- IN EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN VA_LIST Marker
- );
-
-VOID
-SmmCopyMem (
- IN UINT8 *Destination,
- IN UINT8 *Source,
- IN UINTN ByteCount
- );
-
-//
-// Function implementations
-//
-EFI_STATUS
-SmmBootScriptWrite (
- IN OUT EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN UINTN Type,
- IN UINT16 OpCode,
- ...
- )
-{
- EFI_STATUS Status;
- VA_LIST Marker;
-
- if (ScriptTable == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Build script according to opcode
- //
- switch ( OpCode ) {
-
- case EFI_BOOT_SCRIPT_IO_WRITE_OPCODE:
- VA_START(Marker, OpCode);
- Status = BootScriptIoWrite (ScriptTable, Marker);
- VA_END(Marker);
- break;
-
- case EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE_OPCODE:
- VA_START(Marker, OpCode);
- Status = BootScriptPciCfgWrite(ScriptTable, Marker);
- VA_END(Marker);
- break;
-
- default:
- Status = EFI_SUCCESS;
- break;
- }
-
- return Status;
-}
-
-
-EFI_STATUS
-SmmBootScriptCreateTable (
- IN OUT EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN UINTN Type
- )
-{
- BOOT_SCRIPT_POINTERS Script;
- UINT8 *Buffer;
-
- if (ScriptTable == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- Buffer = (UINT8*) ((UINTN)(*ScriptTable));
-
- //
- // Fill Table Header
- //
- Script.Raw = Buffer;
- Script.TableInfo->OpCode = EFI_BOOT_SCRIPT_TABLE_OPCODE;
- Script.TableInfo->Length = sizeof(EFI_BOOT_SCRIPT_TABLE_HEADER);
- Script.TableInfo->TableLength = sizeof(EFI_BOOT_SCRIPT_TABLE_HEADER);
-
- //
- // Update current table pointer
- //
- *ScriptTable = *ScriptTable + sizeof(EFI_BOOT_SCRIPT_TABLE_HEADER);
- return EFI_SUCCESS;
-}
-
-
-EFI_STATUS
-SmmBootScriptCloseTable (
- IN EFI_SMM_SCRIPT_TABLE ScriptTableBase,
- IN EFI_SMM_SCRIPT_TABLE ScriptTablePtr,
- IN UINTN Type
- )
-{
- BOOT_SCRIPT_POINTERS Script;
-
- //
- // Add final "termination" node to script table
- //
- Script.Raw = (UINT8*) ((UINTN)ScriptTablePtr);
- Script.Terminate->OpCode = EFI_BOOT_SCRIPT_TERMINATE_OPCODE;
- Script.Terminate->Length = sizeof (EFI_BOOT_SCRIPT_TERMINATE);
- ScriptTablePtr += sizeof (EFI_BOOT_SCRIPT_TERMINATE);
-
-
- //
- // Update Table Header
- //
- Script.Raw = (UINT8*) ((UINTN)ScriptTableBase);
- Script.TableInfo->OpCode = EFI_BOOT_SCRIPT_TABLE_OPCODE;
- Script.TableInfo->Length = sizeof (EFI_BOOT_SCRIPT_TABLE_HEADER);
- Script.TableInfo->TableLength = (UINT32)(ScriptTablePtr - ScriptTableBase);
-
- return EFI_SUCCESS;
-}
-
-
-EFI_STATUS
-BootScriptIoWrite (
- IN EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN VA_LIST Marker
- )
-{
- BOOT_SCRIPT_POINTERS Script;
- EFI_BOOT_SCRIPT_WIDTH Width;
- UINTN Address;
- UINTN Count;
- UINT8 *Buffer;
- UINTN NodeLength;
- UINT8 WidthInByte;
-
- Width = VA_ARG(Marker, EFI_BOOT_SCRIPT_WIDTH);
- Address = VA_ARG(Marker, UINTN);
- Count = VA_ARG(Marker, UINTN);
- Buffer = VA_ARG(Marker, UINT8*);
-
- WidthInByte = (UINT8)(0x01 << (Width & 0x03));
- Script.Raw = (UINT8*) ((UINTN)(*ScriptTable));
- NodeLength = sizeof (EFI_BOOT_SCRIPT_IO_WRITE) + (WidthInByte * Count);
-
- //
- // Build script data
- //
- Script.IoWrite->OpCode = EFI_BOOT_SCRIPT_IO_WRITE_OPCODE;
- Script.IoWrite->Length = (UINT8)(NodeLength);
- Script.IoWrite->Width = Width;
- Script.IoWrite->Address = Address;
- Script.IoWrite->Count = (UINT32)Count;
- SmmCopyMem (
- (UINT8*)(Script.Raw + sizeof (EFI_BOOT_SCRIPT_IO_WRITE)),
- Buffer,
- WidthInByte * Count
- );
-
- //
- // Update Script table pointer
- //
- *ScriptTable = *ScriptTable + NodeLength;
- return EFI_SUCCESS;
-}
-
-
-EFI_STATUS
-BootScriptPciCfgWrite (
- IN EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN VA_LIST Marker
- )
-{
- BOOT_SCRIPT_POINTERS Script;
- EFI_BOOT_SCRIPT_WIDTH Width;
- UINT64 Address;
- UINTN Count;
- UINT8 *Buffer;
- UINTN NodeLength;
- UINT8 WidthInByte;
-
- Width = VA_ARG(Marker, EFI_BOOT_SCRIPT_WIDTH);
- Address = VA_ARG(Marker, UINT64);
- Count = VA_ARG(Marker, UINTN);
- Buffer = VA_ARG(Marker, UINT8*);
-
- WidthInByte = (UINT8)(0x01 << (Width & 0x03));
- Script.Raw = (UINT8*) ((UINTN)(*ScriptTable));
- NodeLength = sizeof (EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE) + (WidthInByte * Count);
-
- //
- // Build script data
- //
- Script.PciWrite->OpCode = EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE_OPCODE;
- Script.PciWrite->Length = (UINT8)(NodeLength);
- Script.PciWrite->Width = Width;
- Script.PciWrite->Address = Address;
- Script.PciWrite->Count = (UINT32)Count;
- SmmCopyMem (
- (UINT8*)(Script.Raw + sizeof (EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE)),
- Buffer,
- WidthInByte * Count
- );
-
- //
- // Update Script table pointer
- //
- *ScriptTable = *ScriptTable + NodeLength;
- return EFI_SUCCESS;
-}
-
-VOID
-SmmCopyMem (
- IN UINT8 *Destination,
- IN UINT8 *Source,
- IN UINTN ByteCount
- )
-{
- UINTN Index;
-
- for (Index = 0; Index < ByteCount; Index++, Destination++, Source++) {
- *Destination = *Source;
- }
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.h
deleted file mode 100644
index d3eca8cdc0..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- SmmScriptSave.h
-
-Abstract:
-
- This is an implementation of the BootScript at run time.
-
---*/
-
-#ifndef _RUNTIME_SCRIPT_SAVE_H
-#define _RUNTIME_SCRIPT_SAVE_H
-
-#include "Efi.h"
-#include "EfiBootScript.h"
-
-
-typedef EFI_PHYSICAL_ADDRESS EFI_SMM_SCRIPT_TABLE;
-
-EFI_STATUS
-SmmBootScriptCreateTable (
- IN OUT EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN UINTN Type
- );
-
-EFI_STATUS
-SmmBootScriptWrite (
- IN OUT EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN UINTN Type,
- IN UINT16 OpCode,
- ...
- );
-
-EFI_STATUS
-SmmBootScriptCloseTable (
- IN EFI_SMM_SCRIPT_TABLE ScriptTableBase,
- IN EFI_SMM_SCRIPT_TABLE ScriptTablePtr,
- IN UINTN Type
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.c b/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.c
deleted file mode 100644
index 0dbd6f00e1..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.c
+++ /dev/null
@@ -1,459 +0,0 @@
-/** @file
- SMM SwDispatch2 Protocol on SMM SwDispatch Protocol Thunk driver.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-
-#include <PiDxe.h>
-#include <FrameworkSmm.h>
-
-#include <Protocol/SmmSwDispatch2.h>
-#include <Protocol/SmmSwDispatch.h>
-#include <Protocol/SmmControl.h>
-#include <Protocol/SmmCpu.h>
-
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/SmmServicesTableLib.h>
-#include <Library/BaseLib.h>
-#include <Library/IoLib.h>
-#include <Library/DebugLib.h>
-
-typedef struct {
- LIST_ENTRY Link;
- EFI_HANDLE DispatchHandle;
- UINTN SwSmiInputValue;
- UINTN DispatchFunction;
-} EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT;
-
-/**
- Register a child SMI source dispatch function for the specified software SMI.
-
- This service registers a function (DispatchFunction) which will be called when the software
- SMI source specified by RegisterContext->SwSmiCpuIndex is detected. On return,
- DispatchHandle contains a unique handle which may be used later to unregister the function
- using UnRegister().
-
- @param[in] This Pointer to the EFI_SMM_SW_DISPATCH2_PROTOCOL instance.
- @param[in] DispatchFunction Function to register for handler when the specified software
- SMI is generated.
- @param[in, out] RegisterContext Pointer to the dispatch function's context.
- The caller fills this context in before calling
- the register function to indicate to the register
- function which Software SMI input value the
- dispatch function should be invoked for.
- @param[out] DispatchHandle Handle generated by the dispatcher to track the
- function instance.
-
- @retval EFI_SUCCESS The dispatch function has been successfully
- registered and the SMI source has been enabled.
- @retval EFI_DEVICE_ERROR The SW driver was unable to enable the SMI source.
- @retval EFI_INVALID_PARAMETER RegisterContext is invalid. The SW SMI input value
- is not within valid range.
- @retval EFI_OUT_OF_RESOURCES There is not enough memory (system or SMM) to manage this
- child.
- @retval EFI_OUT_OF_RESOURCES A unique software SMI value could not be assigned
- for this dispatch.
-**/
-EFI_STATUS
-EFIAPI
-SmmSwDispatch2Register (
- IN CONST EFI_SMM_SW_DISPATCH2_PROTOCOL *This,
- IN EFI_SMM_HANDLER_ENTRY_POINT2 DispatchFunction,
- IN OUT EFI_SMM_SW_REGISTER_CONTEXT *RegisterContext,
- OUT EFI_HANDLE *DispatchHandle
- );
-
-/**
- Unregister a child SMI source dispatch function for the specified software SMI.
-
- This service removes the handler associated with DispatchHandle so that it will no longer be
- called in response to a software SMI.
-
- @param[in] This Pointer to the EFI_SMM_SW_DISPATCH2_PROTOCOL instance.
- @param[in] DispatchHandle Handle of dispatch function to deregister.
-
- @retval EFI_SUCCESS The dispatch function has been successfully unregistered.
- @retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
-**/
-EFI_STATUS
-EFIAPI
-SmmSwDispatch2UnRegister (
- IN CONST EFI_SMM_SW_DISPATCH2_PROTOCOL *This,
- IN EFI_HANDLE DispatchHandle
- );
-
-EFI_SMM_SW_DISPATCH2_PROTOCOL gSmmSwDispatch2 = {
- SmmSwDispatch2Register,
- SmmSwDispatch2UnRegister,
- 0 // MaximumSwiValue
-};
-
-EFI_SMM_SW_DISPATCH_PROTOCOL *mSmmSwDispatch;
-UINT8 mSmiTriggerRegister;
-UINT8 mSmiDataRegister;
-
-EFI_SMM_CPU_PROTOCOL *mSmmCpuProtocol;
-LIST_ENTRY mSmmSwDispatch2ThunkQueue = INITIALIZE_LIST_HEAD_VARIABLE (mSmmSwDispatch2ThunkQueue);
-
-/**
- This function find SmmSwDispatch2Context by SwSmiInputValue.
-
- @param SwSmiInputValue The SwSmiInputValue to indentify the SmmSwDispatch2 context
-
- @return SmmSwDispatch2 context
-**/
-EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *
-FindSmmSwDispatch2ContextBySwSmiInputValue (
- IN UINTN SwSmiInputValue
- )
-{
- LIST_ENTRY *Link;
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *ThunkContext;
-
- for (Link = mSmmSwDispatch2ThunkQueue.ForwardLink;
- Link != &mSmmSwDispatch2ThunkQueue;
- Link = Link->ForwardLink) {
- ThunkContext = BASE_CR (
- Link,
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT,
- Link
- );
- if (ThunkContext->SwSmiInputValue == SwSmiInputValue) {
- return ThunkContext;
- }
- }
- return NULL;
-}
-
-/**
- This function find SmmSwDispatch2Context by DispatchHandle.
-
- @param DispatchHandle The DispatchHandle to indentify the SmmSwDispatch2Thunk context
-
- @return SmmSwDispatch2Thunk context
-**/
-EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *
-FindSmmSwDispatch2ContextByDispatchHandle (
- IN EFI_HANDLE DispatchHandle
- )
-{
- LIST_ENTRY *Link;
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *ThunkContext;
-
- for (Link = mSmmSwDispatch2ThunkQueue.ForwardLink;
- Link != &mSmmSwDispatch2ThunkQueue;
- Link = Link->ForwardLink) {
- ThunkContext = BASE_CR (
- Link,
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT,
- Link
- );
- if (ThunkContext->DispatchHandle == DispatchHandle) {
- return ThunkContext;
- }
- }
- return NULL;
-}
-
-/**
- Framework dispatch function for a Software SMI handler.
-
- @param DispatchHandle The handle of this dispatch function.
- @param DispatchContext The pointer to the dispatch function's context.
- The SwSmiInputValue field is filled in
- by the software dispatch driver prior to
- invoking this dispatch function.
- The dispatch function will only be called
- for input values for which it is registered.
-
- @return None
-
-**/
-VOID
-EFIAPI
-FrameworkDispatchFunction (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
- )
-{
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *ThunkContext;
- EFI_SMM_HANDLER_ENTRY_POINT2 DispatchFunction;
- EFI_SMM_SW_REGISTER_CONTEXT RegisterContext;
- EFI_SMM_SW_CONTEXT SwContext;
- UINTN Size;
- UINTN Index;
- EFI_SMM_SAVE_STATE_IO_INFO IoInfo;
- EFI_STATUS Status;
-
- //
- // Search context
- //
- ThunkContext = FindSmmSwDispatch2ContextBySwSmiInputValue (DispatchContext->SwSmiInputValue);
- ASSERT (ThunkContext != NULL);
- if (ThunkContext == NULL) {
- return ;
- }
-
- //
- // Construct new context
- //
- RegisterContext.SwSmiInputValue = DispatchContext->SwSmiInputValue;
- Size = sizeof(SwContext);
- SwContext.CommandPort = IoRead8 (mSmiTriggerRegister);
- SwContext.DataPort = IoRead8 (mSmiDataRegister);
-
- //
- // Try to find which CPU trigger SWSMI
- //
- SwContext.SwSmiCpuIndex = 0;
- for (Index = 0; Index < gSmst->NumberOfCpus; Index++) {
- Status = mSmmCpuProtocol->ReadSaveState (
- mSmmCpuProtocol,
- sizeof(IoInfo),
- EFI_SMM_SAVE_STATE_REGISTER_IO,
- Index,
- &IoInfo
- );
- if (EFI_ERROR (Status)) {
- continue;
- }
- if (IoInfo.IoPort == mSmiTriggerRegister) {
- //
- // Great! Find it.
- //
- SwContext.SwSmiCpuIndex = Index;
- break;
- }
- }
-
- //
- // Dispatch
- //
- DispatchFunction = (EFI_SMM_HANDLER_ENTRY_POINT2)ThunkContext->DispatchFunction;
- DispatchFunction (
- DispatchHandle,
- &RegisterContext,
- &SwContext,
- &Size
- );
- return ;
-}
-
-/**
- Register a child SMI source dispatch function for the specified software SMI.
-
- This service registers a function (DispatchFunction) which will be called when the software
- SMI source specified by RegisterContext->SwSmiCpuIndex is detected. On return,
- DispatchHandle contains a unique handle which may be used later to unregister the function
- using UnRegister().
-
- @param[in] This Pointer to the EFI_SMM_SW_DISPATCH2_PROTOCOL instance.
- @param[in] DispatchFunction Function to register for handler when the specified software
- SMI is generated.
- @param[in, out] RegisterContext Pointer to the dispatch function's context.
- The caller fills this context in before calling
- the register function to indicate to the register
- function which Software SMI input value the
- dispatch function should be invoked for.
- @param[out] DispatchHandle Handle generated by the dispatcher to track the
- function instance.
-
- @retval EFI_SUCCESS The dispatch function has been successfully
- registered and the SMI source has been enabled.
- @retval EFI_DEVICE_ERROR The SW driver was unable to enable the SMI source.
- @retval EFI_INVALID_PARAMETER RegisterContext is invalid. The SW SMI input value
- is not within valid range.
- @retval EFI_OUT_OF_RESOURCES There is not enough memory (system or SMM) to manage this
- child.
- @retval EFI_OUT_OF_RESOURCES A unique software SMI value could not be assigned
- for this dispatch.
-**/
-EFI_STATUS
-EFIAPI
-SmmSwDispatch2Register (
- IN CONST EFI_SMM_SW_DISPATCH2_PROTOCOL *This,
- IN EFI_SMM_HANDLER_ENTRY_POINT2 DispatchFunction,
- IN OUT EFI_SMM_SW_REGISTER_CONTEXT *RegisterContext,
- OUT EFI_HANDLE *DispatchHandle
- )
-{
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *ThunkContext;
- EFI_SMM_SW_DISPATCH_CONTEXT DispatchContext;
- EFI_STATUS Status;
- UINTN Index;
-
- if (RegisterContext->SwSmiInputValue == (UINTN)-1) {
- //
- // If SwSmiInputValue is set to (UINTN) -1 then a unique value will be assigned and returned in the structure.
- //
- Status = EFI_NOT_FOUND;
- for (Index = 1; Index < gSmmSwDispatch2.MaximumSwiValue; Index++) {
- DispatchContext.SwSmiInputValue = Index;
- Status = mSmmSwDispatch->Register (
- mSmmSwDispatch,
- FrameworkDispatchFunction,
- &DispatchContext,
- DispatchHandle
- );
- if (!EFI_ERROR (Status)) {
- RegisterContext->SwSmiInputValue = Index;
- break;
- }
- }
- if (RegisterContext->SwSmiInputValue == (UINTN)-1) {
- return EFI_OUT_OF_RESOURCES;
- }
- } else {
- DispatchContext.SwSmiInputValue = RegisterContext->SwSmiInputValue;
- Status = mSmmSwDispatch->Register (
- mSmmSwDispatch,
- FrameworkDispatchFunction,
- &DispatchContext,
- DispatchHandle
- );
- }
- if (!EFI_ERROR (Status)) {
- //
- // Register
- //
- Status = gSmst->SmmAllocatePool (
- EfiRuntimeServicesData,
- sizeof(*ThunkContext),
- (VOID **)&ThunkContext
- );
- ASSERT_EFI_ERROR (Status);
- if (EFI_ERROR (Status)) {
- mSmmSwDispatch->UnRegister (mSmmSwDispatch, *DispatchHandle);
- return EFI_OUT_OF_RESOURCES;
- }
-
- ThunkContext->SwSmiInputValue = RegisterContext->SwSmiInputValue;
- ThunkContext->DispatchFunction = (UINTN)DispatchFunction;
- ThunkContext->DispatchHandle = *DispatchHandle;
- InsertTailList (&mSmmSwDispatch2ThunkQueue, &ThunkContext->Link);
- }
-
- return Status;
-}
-
-/**
- Unregister a child SMI source dispatch function for the specified software SMI.
-
- This service removes the handler associated with DispatchHandle so that it will no longer be
- called in response to a software SMI.
-
- @param[in] This Pointer to the EFI_SMM_SW_DISPATCH2_PROTOCOL instance.
- @param[in] DispatchHandle Handle of dispatch function to deregister.
-
- @retval EFI_SUCCESS The dispatch function has been successfully unregistered.
- @retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
-**/
-EFI_STATUS
-EFIAPI
-SmmSwDispatch2UnRegister (
- IN CONST EFI_SMM_SW_DISPATCH2_PROTOCOL *This,
- IN EFI_HANDLE DispatchHandle
- )
-{
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *ThunkContext;
- EFI_STATUS Status;
-
- Status = mSmmSwDispatch->UnRegister (mSmmSwDispatch, DispatchHandle);
- if (!EFI_ERROR (Status)) {
- //
- // Unregister
- //
- ThunkContext = FindSmmSwDispatch2ContextByDispatchHandle (DispatchHandle);
- ASSERT (ThunkContext != NULL);
- if (ThunkContext != NULL) {
- RemoveEntryList (&ThunkContext->Link);
- gSmst->SmmFreePool (ThunkContext);
- }
- }
-
- return Status;
-}
-
-/**
- Entry Point for this thunk driver.
-
- @param[in] ImageHandle Image handle of this driver.
- @param[in] SystemTable A Pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The entry point is executed successfully.
- @retval other Some error occurred when executing this entry point.
-**/
-EFI_STATUS
-EFIAPI
-SmmSwDispatch2ThunkMain (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
- EFI_SMM_CONTROL_PROTOCOL *SmmControl;
- EFI_SMM_CONTROL_REGISTER RegisterInfo;
-
- //
- // Locate Framework SMM SwDispatch Protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiSmmSwDispatchProtocolGuid,
- NULL,
- (VOID **)&mSmmSwDispatch
- );
- ASSERT_EFI_ERROR (Status);
- gSmmSwDispatch2.MaximumSwiValue = mSmmSwDispatch->MaximumSwiValue;
- if (gSmmSwDispatch2.MaximumSwiValue == 0x0) {
- DEBUG ((EFI_D_ERROR, "BUGBUG: MaximumSwiValue is 0, work-around to make it 0xFF\n"));
- gSmmSwDispatch2.MaximumSwiValue = 0xFF;
- }
-
- //
- // Locate Framework SMM Control Protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiSmmControlProtocolGuid,
- NULL,
- (VOID **)&SmmControl
- );
-
- ASSERT_EFI_ERROR (Status);
- Status = SmmControl->GetRegisterInfo (
- SmmControl,
- &RegisterInfo
- );
- ASSERT_EFI_ERROR (Status);
- mSmiTriggerRegister = RegisterInfo.SmiTriggerRegister;
- mSmiDataRegister = RegisterInfo.SmiDataRegister;
-
- //
- // Locate PI SMM CPU protocol
- //
- Status = gSmst->SmmLocateProtocol (
- &gEfiSmmCpuProtocolGuid,
- NULL,
- (VOID **)&mSmmCpuProtocol
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Publish PI SMM SwDispatch2 Protocol
- //
- ImageHandle = NULL;
- Status = gSmst->SmmInstallProtocolInterface (
- &ImageHandle,
- &gEfiSmmSwDispatch2ProtocolGuid,
- EFI_NATIVE_INTERFACE,
- &gSmmSwDispatch2
- );
- ASSERT_EFI_ERROR (Status);
- return Status;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf b/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
deleted file mode 100644
index 4f95fc281e..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
+++ /dev/null
@@ -1,54 +0,0 @@
-## @file
-# Component description file for SMM SwDispatch2 Protocol on SMM SwDispatch Protocol Thunk driver.
-#
-# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SmmSwDispatch2OnSmmSwDispatchThunk
- FILE_GUID = 1410C6AC-9F4B-495b-9C23-8A5AEB0165E9
- MODULE_TYPE = DXE_SMM_DRIVER
- VERSION_STRING = 1.0
- PI_SPECIFICATION_VERSION = 0x0001000A
- ENTRY_POINT = SmmSwDispatch2ThunkMain
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-[Sources]
- SmmSwDispatch2OnSmmSwDispatchThunk.c
-
-[Packages]
- MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
-
-[LibraryClasses]
- UefiDriverEntryPoint
- UefiBootServicesTableLib
- SmmServicesTableLib
- BaseLib
- IoLib
- DebugLib
-
-[Protocols]
- gEfiSmmControlProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiSmmSwDispatchProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiSmmCpuProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiSmmSwDispatch2ProtocolGuid # PROTOCOL ALWAYS_PRODUCED
-
-[Depex]
- gEfiSmmSwDispatchProtocolGuid AND
- gEfiSmmControlProtocolGuid AND
- gEfiSmmCpuProtocolGuid
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.c b/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.c
deleted file mode 100644
index de257b35b5..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/** @file
- A helper driver to save information to SMRAM after SMRR is enabled.
-
- This driver is for ECP platforms.
-
- Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-
-#include <PiSmm.h>
-#include <Library/DebugLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/SmmServicesTableLib.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/IoLib.h>
-#include <Protocol/SmmSwDispatch.h>
-#include <Protocol/SmmReadyToLock.h>
-#include <Protocol/SmmControl.h>
-#include <Guid/Vlv2DeviceRefCodePkgTokenSpace.h>
-
-#define SMM_FROM_SMBASE_DRIVER 0x55
-#define SMM_FROM_CPU_DRIVER_SAVE_INFO 0x81
-
-#define EFI_SMRAM_CPU_NVS_HEADER_GUID \
- { \
- 0x429501d9, 0xe447, 0x40f4, 0x86, 0x7b, 0x75, 0xc9, 0x3a, 0x1d, 0xb5, 0x4e \
- }
-
-UINT8 mSmiDataRegister;
-BOOLEAN mLocked = FALSE;
-EFI_GUID mSmramCpuNvsHeaderGuid = EFI_SMRAM_CPU_NVS_HEADER_GUID;
-
-/**
- Dispatch function for a Software SMI handler.
-
- @param DispatchHandle The handle of this dispatch function.
- @param DispatchContext The pointer to the dispatch function's context.
- The SwSmiInputValue field is filled in
- by the software dispatch driver prior to
- invoking this dispatch function.
- The dispatch function will only be called
- for input values for which it is registered.
-
- @return None
-
-**/
-VOID
-EFIAPI
-SmramSaveInfoHandler (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
- )
-{
- ASSERT (DispatchContext != NULL);
- ASSERT (DispatchContext->SwSmiInputValue == SMM_FROM_SMBASE_DRIVER);
-
- if (!mLocked && IoRead8 (mSmiDataRegister) == SMM_FROM_CPU_DRIVER_SAVE_INFO) {
- CopyMem (
- (VOID *)(UINTN)(PcdGetEx64 (&gEfiVLVTokenSpaceGuid, PcdCpuLockBoxDataAddress)),
- (VOID *)(UINTN)(PcdGetEx64 (&gEfiVLVTokenSpaceGuid, PcdCpuSmramCpuDataAddress)),
- (UINTN)(PcdGetEx64 (&gEfiVLVTokenSpaceGuid, PcdCpuLockBoxSize))
- );
- }
-}
-
-/**
- Smm Ready To Lock event notification handler.
-
- It sets a flag indicating that SMRAM has been locked.
-
- @param[in] Protocol Points to the protocol's unique identifier.
- @param[in] Interface Points to the interface instance.
- @param[in] Handle The handle on which the interface was installed.
-
- @retval EFI_SUCCESS Notification handler runs successfully.
- **/
-EFI_STATUS
-EFIAPI
-SmmReadyToLockEventNotify (
- IN CONST EFI_GUID *Protocol,
- IN VOID *Interface,
- IN EFI_HANDLE Handle
- )
-{
- mLocked = TRUE;
- return EFI_SUCCESS;
-}
-
-/**
- Entry point function of this driver.
-
- @param[in] ImageHandle The firmware allocated handle for the EFI image.
- @param[in] SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The entry point is executed successfully.
- @retval other Some error occurs when executing this entry point.
-**/
-EFI_STATUS
-EFIAPI
-SmramSaveInfoHandlerSmmMain (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
- EFI_SMM_SW_DISPATCH_PROTOCOL *SmmSwDispatch;
- EFI_SMM_SW_DISPATCH_CONTEXT SmmSwDispatchContext;
- EFI_HANDLE DispatchHandle;
- EFI_SMM_CONTROL_PROTOCOL *SmmControl;
- EFI_SMM_CONTROL_REGISTER SmmControlRegister;
- VOID *Registration;
-
- //
- // Get SMI data register
- //
- Status = SystemTable->BootServices->LocateProtocol (
- &gEfiSmmControlProtocolGuid,
- NULL,
- (VOID **)&SmmControl
- );
- ASSERT_EFI_ERROR (Status);
- Status = SmmControl->GetRegisterInfo (SmmControl, &SmmControlRegister);
- ASSERT_EFI_ERROR (Status);
- mSmiDataRegister = SmmControlRegister.SmiDataRegister;
-
- //
- // Register software SMI handler
- //
-
- Status = SystemTable->BootServices->LocateProtocol (
- &gEfiSmmSwDispatchProtocolGuid,
- NULL,
- (VOID **)&SmmSwDispatch
- );
- ASSERT_EFI_ERROR (Status);
-
- SmmSwDispatchContext.SwSmiInputValue = SMM_FROM_SMBASE_DRIVER;
- Status = SmmSwDispatch->Register (
- SmmSwDispatch,
- &SmramSaveInfoHandler,
- &SmmSwDispatchContext,
- &DispatchHandle
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Register SMM Ready To Lock Protocol notification
- //
- Status = gSmst->SmmRegisterProtocolNotify (
- &gEfiSmmReadyToLockProtocolGuid,
- SmmReadyToLockEventNotify,
- &Registration
- );
- ASSERT_EFI_ERROR (Status);
-
- return Status;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf b/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
deleted file mode 100644
index ec42c84472..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+++ /dev/null
@@ -1,60 +0,0 @@
-## @file
-#
-# A helper driver to save information to SMRAM after SMRR is enabled.
-#
-# Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SmramSaveInfoHandlerSmm
- FILE_GUID = 63296C52-01CF-4eea-A47C-782A14DA6894
- MODULE_TYPE = DXE_SMM_DRIVER
- VERSION_STRING = 1.0
- PI_SPECIFICATION_VERSION = 0x0001000A
-
- ENTRY_POINT = SmramSaveInfoHandlerSmmMain
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-[Sources.common]
- SmramSaveInfoHandlerSmm.c
-
-[Packages]
- MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
-
-[LibraryClasses]
- UefiDriverEntryPoint
- UefiRuntimeServicesTableLib
- SmmServicesTableLib
- BaseLib
- BaseMemoryLib
- IoLib
-
-[Protocols]
- gEfiSmmSwDispatchProtocolGuid ## CONSUMED
- gEfiSmmControlProtocolGuid ## CONSUMED
- gEfiSmmReadyToLockProtocolGuid ## CONSUMED
-
-[Pcd.common]
- gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress
- gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress
- gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize
-
-[Depex]
- gEfiSmmSwDispatchProtocolGuid AND
- gEfiSmmControlProtocolGuid
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIHeader/Vacant.bin b/Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIHeader/Vacant.bin
deleted file mode 100644
index 12d359146014baad9277a951b237fd27e819db6e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3928064
zcmeIuF#!Mo0K%aDspo45h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
rFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFz^EdVf>G}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat b/Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat
deleted file mode 100644
index 200ca05a23..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat
+++ /dev/null
@@ -1,270 +0,0 @@
-@REM @file
-@REM Windows batch file to build BIOS ROM
-@REM
-@REM Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
-@REM
-@REM SPDX-License-Identifier: BSD-2-Clause-Patent
-@REM
-
-@echo off
-SetLocal EnableDelayedExpansion EnableExtensions
-
-set PLATFORM_BIN_PACKAGE=%WORKSPACE%\Vlv2SocBinPkg
-if not exist %PLATFORM_BIN_PACKAGE% (
- if defined PACKAGES_PATH (
- for %%i IN (%PACKAGES_PATH%) DO (
- if exist %%~fi\Vlv2SocBinPkg (
- set PLATFORM_BIN_PACKAGE=%%~fi\Vlv2SocBinPkg
- goto PlatformBinPackageFound
- )
- )
- ) else (
- echo.
- echo !!! ERROR !!! Cannot find %PLATFORM_NAME% !!!
- echo.
- goto BldFail
- )
-)
-:PlatformBinPackageFound
-
-
-:: Set script defaults
-set exitCode=0
-set BackupRom=1
-set UpdateVBios=1
-set SpiLock=0
-set Stitch_Config=Stitch_Config.txt
-copy /y nul Stitching.log >nul
-
-:: Set default Suffix as: YYYY_MM_DD_HHMM
-set hour=%time: =0%
-reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International_Temp" /f >nul
-reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy_MM_dd" /f >nul
-for /f "tokens=1" %%i in ("%date%") do set today=%%i
-reg copy "HKCU\Control Panel\International_Temp" "HKCU\Control Panel\International" /f >nul
-reg delete "HKCU\Control Panel\International_Temp" /f >nul
-set IFWI_Suffix=%today%_%hour:~0,2%%time:~3,2%
-
-:: Process input arguments
-if "%~1"=="?" goto Usage
-if "%~1"=="/?" goto Usage
-if /i "%~1"=="Help" goto Usage
-
-:OptLoop
-if /i "%~1"=="/nV" (
- set UpdateVBios=0
- shift
- goto OptLoop
-)
-if /i "%~1"=="/nB" (
- set BackupRom=0
- shift
- goto OptLoop
-)
-if /i "%~1"=="/yL" (
- set SpiLock=1
- shift
- goto OptLoop
-)
-
-if /i "%~1"=="/B" (
- if "%~2"=="" goto Usage
- if not exist %~2 echo BIOS not found. & goto Usage
- set BIOS_Names=%~2
- set BIOS_File_Name=%~n2
- shift & shift
- goto OptLoop
-)
-if /i "%~1"=="/C" (
- if "%~2"=="" goto Usage
- if not exist %~2 echo ConfigFile not found. & goto Usage
- set Stitch_Config=%~2
- shift & shift
- goto OptLoop
-)
-if /i "%~1"=="/S" (
- if "%~2"=="" goto Usage
- set IFWI_Suffix=%~2
- shift & shift
- goto OptLoop
-)
-
-if "%BIOS_File_Name:~0,4%"=="MNW2" (
- set Stitch_Config= MNW2_Stitch_Config.txt
-)
-if "%BIOS_File_Name:~3,4%"=="MNW2" (
- set Stitch_Config= MNW2_Stitch_Config.txt
-)
-
-:: if no rom specified by user, search in ./ for ROM files
-if "%BIOS_Names%"=="" (
- set "BIOS_Names= "
- for /f "tokens=*" %%i in ('dir /b *.rom') do set BIOS_Names=!BIOS_Names! %%i
- if "!BIOS_Names!"==" " (
- echo NO .ROM files found !!!
- goto Usage
- )
-)
-
-:: Parse the Stitch_Config File
-if not exist %Stitch_Config% (
- echo Stitch Configuration File %Stitch_Config% not found.
- goto ScriptFail
-)
-for /f "delims== tokens=1,2" %%i in (%Stitch_Config%) do (
- if /i "%%i"=="HEADER" set IFWI_HEADER=%%j
- if /i "%%i"=="SEC_VERSION" set SEC_VERSION=%%j
- if /i "%%i"=="Source" (
- if /i "%%j"=="ALPHA" set Source_Prefix=A_
- if /i "%%j"=="BF" set Source_Prefix=BF_
- if /i "%%j"=="BE" set Source_Prefix=BE_
- if /i "%%j"=="PV" set Source_Prefix=PV_
- if /i "%%j"=="PR1" set Source_Prefix=PR1_
- )
-)
-
-if %SpiLock% EQU 1 (
- set IFWI_HEADER_FILE=IFWIHeader\!IFWI_HEADER!_SPILOCK.bin
-) else (
- set IFWI_HEADER_FILE=IFWIHeader\!IFWI_HEADER!.bin
-)
-
-:: **********************************************************************
-:: The Main Stitching Loop
-:: **********************************************************************
-echo %date% %time% >>Stitching.log 2>&1
-echo %date% %time%
-echo.
-for %%i in (%BIOS_Names%) do (
-
- REM ----- Do NOT use :: for comments Inside of code blocks() -------
- set BIOS_Rom=%%i
- set BIOS_Name=%%~ni
- set BIOS_Version=!BIOS_Name:~-7,7!
-
- REM extract PlatformType from BIOS filename
- set Platform_Type=!BIOS_Name:~0,4!
-
- REM Special treat for BayLake FFD8
- set Temp_Name=!BIOS_Name:~0,7!
-
-
- REM Capitalize and validate the Platform_Type
- if /i "!Platform_Type!"=="MNW2" (
- set Platform_Type=MNW2
- ) else (
- echo Error - Unsupported PlatformType: !Platform_Type!
- goto Usage
- )
-
-
- REM search BIOS_Name for Arch substring: either IA32 or X64
- if not "!BIOS_Name!"=="!BIOS_Name:_IA32_=!" (
- set Arch=IA32
- ) else if not "!BIOS_Name!"=="!BIOS_Name:_X64_=!" (
- set Arch=X64
- ) else (
- echo Error: Could not determine Architecture for !BIOS_Rom!
- goto Usage
- )
- set IFWI_Prefix=!Platform_Type!_IFWI_%Source_Prefix%!Arch!_!!BIOS_Version!
-
- REM search BIOS_Name for Build_Target substring: either R or D
- if not "!BIOS_Name!"=="!BIOS_Name:_R_=!" (
- set Build_Target=Release
- set IFWI_Prefix=!IFWI_Prefix!_R
- ) else if not "!BIOS_Name!"=="!BIOS_Name:_D_=!" (
- set Build_Target=Debug
- set IFWI_Prefix=!IFWI_Prefix!_D
- ) else (
- echo Error: Could not determine Build Target for !BIOS_Rom!
- goto Usage
- )
-
- REM Create a BIOS backup before Stitching
- if %BackupRom% EQU 1 (
- echo Creating backup of original BIOS rom.
- copy /y !BIOS_Rom! !BIOS_Rom!.orig >nul
- )
-
- echo. >>Stitching.log
- echo ********** Stitching !BIOS_Rom! ********** >>Stitching.log
- echo. >>Stitching.log
- echo.
- echo Stitching IFWI for !BIOS_Rom! ...
- echo ---------------------------------------------------------------------------
- echo IFWI Header: !IFWI_HEADER_FILE!, SEC version: !SEC_VERSION!,
- echo BIOS Version: !BIOS_Version!
-
- echo Platform Type: !Platform_Type!, IFWI Prefix: %BIOS_ID%
- echo ---------------------------------------------------------------------------
-
- echo -----------------------------
- echo.
- echo Generating IFWI... %BIOS_ID%.bin
- echo.
-
- copy /b/y !IFWI_HEADER_FILE! + %PLATFORM_BIN_PACKAGE%\SEC\!SEC_VERSION!\VLV_SEC_REGION.bin + %PLATFORM_BIN_PACKAGE%\SEC\!SEC_VERSION!\Vacant.bin + !BIOS_Rom! %BIOS_ID%.bin
- echo.
- echo ===========================================================================
-)
-@echo off
-
-::**********************************************************************
-:: end of main loop
-::**********************************************************************
-
-echo.
-echo -- All specified ROM files Stitched. --
-echo.
-goto Exit
-
-:Usage
-echo.
-echo **************************************************************************************************
-echo This Script is used to Stitch together BIOS, GOP Driver, Microcode Patch and TXE FW
-echo into a single Integrated Firmware Image (IFWI).
-echo.
-echo Usage: IFWIStitch.bat [flags] [/B BIOS.ROM] [/C Stitch_Config] [/S IFWI_Suffix]
-echo.
-echo This script has NO Required arguments, so that the user can just double click from the GUI.
-echo However, this requires that the BIOS.ROM file name is formatted correctly.
-echo.
-echo /nG Do NOT update the GOP driver. (applies to all ROM files for this run)
-echo /nV Do NOT update the VBIOS. (applies to all ROM files for this run)
-echo /nM Do NOT update the Microcode. (applies to all ROM files for this run)
-echo /nB Do NOT backup BIOS.ROMs. (Default will backup to BIOS.ROM.Orig)
-echo.
-echo BIOS.ROM: A single BIOS ROM file to use for stitching
-echo (DEFAULT: ALL .ROM files inside the current directory)
-echo Stitch_Config: Text file containing version info of each FW component
-echo (DEFAULT: Stitch_Config.txt)
-echo IFWI_Suffix: Suffix to append to the end of the IFWI filename
-echo (DEFAULT: YYYY_MM_DD_HHMM)
-echo.
-echo Examples:
-echo IFIWStitch.bat : Stitch all ROMs with defaults
-echo IFIWStitch.bat /B C:/MyRoms/testBIOS.rom : Stitch single ROM with defaults
-echo IFIWStitch.bat /B ../testBIOS.rom /S test123 : Stitch single ROM and add custom suffix
-echo IFIWStitch.bat /nM /nB /B testBIOS.rom /S test456 : Stitch single ROM, keep uCode from .rom,
-echo don't create backup, and add custom suffix.
-echo ****************************************************************************************************
-pause
-exit /b 1
-
-:ScriptFail
-set exitCode=1
-
-:Exit
-echo -- See Stitching.log for more info. --
-echo.
-echo %date% %time%
-echo.
-if "%Platform_Type%"=="MNW2" (
- echo .
-) else (
- echo only support MNW2 for this project!
-pause
-)
-exit /b %exitCode%
-EndLocal
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Stitch/MNW2_Stitch_Config.txt b/Platform/Intel/Vlv2TbltDevicePkg/Stitch/MNW2_Stitch_Config.txt
deleted file mode 100644
index 82abe6548f..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Stitch/MNW2_Stitch_Config.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-
-HEADER=IFWI_HEADER
-SEC_VERSION=1.0.2.1060v5
-
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-platforms Patch 03/14] Vlv2TbltDevicePkg: Remove unused modules/libraries
2019-07-01 2:55 ` [edk2-platforms Patch 03/14] Vlv2TbltDevicePkg: Remove unused modules/libraries Michael D Kinney
@ 2019-07-01 4:07 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:07 UTC (permalink / raw)
To: Kinney, Michael D, devel@edk2.groups.io; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: Kinney, Michael D
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-platforms Patch 03/14] Vlv2TbltDevicePkg: Remove unused modules/libraries
* Delete platform specific SerialPortLib
* Delete platform specific Metronome module
* Delete platform specific BootScriptSaveDxe module
* Delete SmmSwDispatch2OnSmmSwDispatchThunk module
* Delete SmramSaveInfoHandlerSmm module
* Delete unused FSP content
* Delete unused I2C content
* Delete unused Stitch content
* Delete unused portions of PlatformSmm module
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../BootScriptSaveDxe/BootScriptSaveDxe.inf | 60 --
.../InternalBootScriptSave.h | 102 ---
.../BootScriptSaveDxe/ScriptSave.c | 626 ---------------
.../FspAzaliaConfigData/AzaliaConfig.bin | Bin 3708 -> 0 bytes
.../FspSupport/BootModePei/BootModePei.c | 42 -
.../FspSupport/BootModePei/BootModePei.inf | 40 -
.../FspHobProcessLibVlv2.c | 421 ----------
.../FspHobProcessLibVlv2.inf | 74 --
.../FspPlatformSecLibVlv2.c | 144 ----
.../FspPlatformSecLibVlv2.inf | 82 --
.../Ia32/AsmSaveSecContext.asm | 45 --
.../SecFspPlatformSecLibVlv2/Ia32/Fsp.inc | 45 --
.../Ia32/PeiCoreEntry.asm | 135 ----
.../Ia32/SecEntry.asm | 338 --------
.../SecFspPlatformSecLibVlv2/Ia32/Stack.S | 71 --
.../SecFspPlatformSecLibVlv2/Ia32/Stack.asm | 76 --
.../SecFspPlatformSecLibVlv2/PlatformInit.c | 36 -
.../SecFspPlatformSecLibVlv2/SaveSecContext.c | 108 ---
.../SecGetPerformance.c | 83 --
.../SecPlatformInformation.c | 77 --
.../SecFspPlatformSecLibVlv2/SecRamInitData.c | 16 -
.../SecTempRamSupport.c | 149 ----
.../SecFspPlatformSecLibVlv2/UartInit.c | 192 -----
.../Include/Protocol/TpmMp.h | 136 ----
.../Include/Protocol/UsbPolicy.h | 126 ---
.../Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c | 46 --
.../Library/I2CLib/I2CLibNull.inf | 39 -
.../Library/I2CLibDxe/I2CLib.c | 735 ------------------
.../Library/I2CLibDxe/I2CLibDxe.inf | 39 -
.../Library/I2CLibDxe/I2CRegs.h | 126 ---
.../Library/I2CLibPei/I2CAccess.h | 44 --
.../Library/I2CLibPei/I2CDelayPei.c | 46 --
.../Library/I2CLibPei/I2CDelayPei.h | 30 -
.../Library/I2CLibPei/I2CIoLibPei.c | 178 -----
.../Library/I2CLibPei/I2CIoLibPei.h | 153 ----
.../Library/I2CLibPei/I2CLibPei.c | 638 ---------------
.../Library/I2CLibPei/I2CLibPei.h | 280 -------
.../Library/I2CLibPei/I2CLibPei.inf | 40 -
.../Library/PlatformFspLib/PlatformFspLib.c | 44 --
.../Library/PlatformFspLib/PlatformFspLib.inf | 49 --
.../SerialPortLib/PlatformSerialPortLib.h | 53 --
.../Library/SerialPortLib/SerialPortLib.c | 246 ------
.../Library/SerialPortLib/SerialPortLib.inf | 52 --
.../Library/SerialPortLib/SioInit.c | 127 ---
.../Library/SerialPortLib/SioInit.h | 62 --
.../Metronome/LegacyMetronome.c | 185 -----
.../Metronome/LegacyMetronome.h | 64 --
.../Vlv2TbltDevicePkg/Metronome/Metronome.inf | 49 --
.../PlatformSmm/SmmScriptSave.c | 252 ------
.../PlatformSmm/SmmScriptSave.h | 50 --
.../SmmSwDispatch2OnSmmSwDispatchThunk.c | 459 -----------
.../SmmSwDispatch2OnSmmSwDispatchThunk.inf | 54 --
.../SmramSaveInfoHandlerSmm.c | 164 ----
.../SmramSaveInfoHandlerSmm.inf | 60 --
| Bin 3928064 -> 0 bytes
.../Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat | 270 -------
.../Stitch/MNW2_Stitch_Config.txt | 10 -
57 files changed, 7868 deletions(-)
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/BootScriptSaveDxe.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/InternalBootScriptSave.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/ScriptSave.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspAzaliaConfigData/AzaliaConfig.bin
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/AsmSaveSecContext.asm
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Fsp.inc
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/PeiCoreEntry.asm
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/SecEntry.asm
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.S
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.asm
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/PlatformInit.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SaveSecContext.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecGetPerformance.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecPlatformInformation.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecRamInitData.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecTempRamSupport.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/UartInit.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/TpmMp.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/UsbPolicy.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLib.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLibDxe.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CRegs.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CAccess.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/PlatformSerialPortLib.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Metronome/Metronome.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIHeader/Vacant.bin
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Stitch/MNW2_Stitch_Config.txt
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/BootScriptSaveDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/BootScriptSaveDxe.inf
deleted file mode 100644
index d2fa621096..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/BootScriptSaveDxe.inf
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-#
-## @file
-# Component description file for ScriptSave Lite module.
-#
-# This is an implementation of the Boot Script Save protocol.
-# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = BootScriptSaveDxe
- FILE_GUID = 42BB673D-09F3-4e2e-9FEE-D081131DED5B
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
-
- ENTRY_POINT = InitializeScriptSave
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- ScriptSave.c
- InternalBootScriptSave.h
-
-
-[Packages]
- MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- MdeModulePkg/MdeModulePkg.dec
-
-
-[LibraryClasses]
- PcdLib
- UefiRuntimeServicesTableLib
- UefiBootServicesTableLib
- MemoryAllocationLib
- UefiDriverEntryPoint
- BaseMemoryLib
- DebugLib
- BaseLib
- S3BootScriptLib
-
-[Protocols]
- gEfiBootScriptSaveProtocolGuid # PROTOCOL ALWAYS_PRODUCED
-
-
-[Depex]
- TRUE
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/InternalBootScriptSave.h b/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/InternalBootScriptSave.h
deleted file mode 100644
index f232281e2b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/InternalBootScriptSave.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/** @file
-//
-//
- Internal header file for S3 Boot Script Saver driver.
-
- Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-
-#ifndef _INTERNAL_BOOT_SCRIPT_SAVE_H_
-#define _INTERNAL_BOOT_SCRIPT_SAVE_H_
-#include <FrameworkDxe.h>
-
-#include <Protocol/BootScriptSave.h>
-#include <Protocol/FirmwareVolume.h>
-
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/S3BootScriptLib.h>
-#include <Library/PcdLib.h>
-#include <Library/SmbusLib.h>
-#include <IndustryStandard/SmBus.h>
-
-/**
- Adds a record into a specified Framework boot script table.
-
- This function is used to store a boot script record into a given boot
- script table. If the table specified by TableName is nonexistent in the
- system, a new table will automatically be created and then the script record
- will be added into the new table. A boot script table can add new script records
- until EFI_BOOT_SCRIPT_SAVE_PROTOCOL.CloseTable() is called. Currently, the only
- meaningful table name is EFI_ACPI_S3_RESUME_SCRIPT_TABLE. This function is
- responsible for allocating necessary memory for the script.
-
- This function has a variable parameter list. The exact parameter list depends on
- the OpCode that is passed into the function. If an unsupported OpCode or illegal
- parameter list is passed in, this function returns EFI_INVALID_PARAMETER.
- If there are not enough resources available for storing more scripts, this function returns
- EFI_OUT_OF_RESOURCES.
-
- @param[in] This A pointer to the EFI_BOOT_SCRIPT_SAVE_PROTOCOL instance.
- @param[in] TableName Name of the script table. Currently, the only meaningful value is
- EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
- @param[in] OpCode The operation code (opcode) number.
- @param[in] ... Argument list that is specific to each opcode.
-
- @retval EFI_SUCCESS The operation succeeded. A record was added into the
- specified script table.
- @retval EFI_INVALID_PARAMETER The parameter is illegal or the given boot script is not supported.
- If the opcode is unknow or not supported because of the PCD
- Feature Flags.
- @retval EFI_OUT_OF_RESOURCES There is insufficient memory to store the boot script.
-
-**/
-EFI_STATUS
-EFIAPI
-BootScriptWrite (
- IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This,
- IN UINT16 TableName,
- IN UINT16 OpCode,
- ...
- );
-
-/**
- Closes the specified script table.
-
- This function closes the specified boot script table and returns the base address
- of the table. It allocates a new pool to duplicate all the boot scripts in the specified
- table. Once this function is called, the specified table will be destroyed after it is
- copied into the allocated pool. As a result, any attempts to add a script record into a
- closed table will cause a new table to be created. The base address of the allocated pool
- will be returned in Address. After using the boot script table, the caller is responsible
- for freeing the pool that is allocated by this function. If the boot script table,
- such as EFI_ACPI_S3_RESUME_SCRIPT_TABLE, is required to be stored in a nonperturbed
- memory region, the caller should copy the table into the nonperturbed memory region by itself.
-
- @param[in] This A pointer to the EFI_BOOT_SCRIPT_SAVE_PROTOCOL instance.
- @param[in] TableName Name of the script table. Currently, the only meaningful value is
- EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
- @param[in] Address A pointer to the physical address where the table begins.
-
- @retval EFI_SUCCESS The table was successfully returned.
- @retval EFI_NOT_FOUND The specified table was not created previously.
- @retval EFI_OUT_OF_RESOURCE Memory is insufficient to hold the reorganized boot script table.
- @retval EFI_UNSUPPORTED The table type is not EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
-
-**/
-EFI_STATUS
-EFIAPI
-BootScriptCloseTable (
- IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This,
- IN UINT16 TableName,
- OUT EFI_PHYSICAL_ADDRESS *Address
- );
-#endif //_INTERNAL_BOOT_SCRIPT_SAVE_H_
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/ScriptSave.c b/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/ScriptSave.c
deleted file mode 100644
index 837a8c95cd..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/ScriptSave.c
+++ /dev/null
@@ -1,626 +0,0 @@
-/** @file
- Implementation for S3 Boot Script Saver driver.
-
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-
-#include "InternalBootScriptSave.h"
-
-EFI_HANDLE mHandle = NULL;
-EFI_BOOT_SCRIPT_SAVE_PROTOCOL mS3ScriptSave = {
- BootScriptWrite,
- BootScriptCloseTable
- };
-
-/**
- Internal function to add IO write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptIoWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINTN Count;
- UINT8 *Buffer;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Count = VA_ARG (Marker, UINTN);
- Buffer = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSaveIoWrite (Width, Address, Count, Buffer);
-}
-
-/**
- Internal function to add IO read/write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptIoReadWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINT8 *Data;
- UINT8 *DataMask;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Data = VA_ARG (Marker, UINT8 *);
- DataMask = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSaveIoReadWrite (Width, Address, Data, DataMask);
-}
-
-/**
- Internal function to add memory write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptMemWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINTN Count;
- UINT8 *Buffer;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Count = VA_ARG (Marker, UINTN);
- Buffer = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSaveMemWrite (Width, Address, Count, Buffer);
-}
-
-/**
- Internal function to add memory read/write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptMemReadWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINT8 *Data;
- UINT8 *DataMask;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Data = VA_ARG (Marker, UINT8 *);
- DataMask = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSaveMemReadWrite (Width, Address, Data, DataMask);
-}
-
-/**
- Internal function to add PciCfg write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptPciCfgWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINTN Count;
- UINT8 *Buffer;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Count = VA_ARG (Marker, UINTN);
- Buffer = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSavePciCfgWrite (Width, Address, Count, Buffer);
-}
-
-/**
- Internal function to PciCfg read/write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptPciCfgReadWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINT8 *Data;
- UINT8 *DataMask;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Data = VA_ARG (Marker, UINT8 *);
- DataMask = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSavePciCfgReadWrite (Width, Address, Data, DataMask);
-}
-
-/**
- Internal function to add PciCfg2 write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptPciCfg2Write (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINTN Count;
- UINT8 *Buffer;
- UINT16 Segment;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Count = VA_ARG (Marker, UINTN);
- Buffer = VA_ARG (Marker, UINT8 *);
- Segment = VA_ARG (Marker, UINT16);
-
- return S3BootScriptSavePciCfg2Write (Width, Segment, Address, Count, Buffer);
-}
-
-/**
- Internal function to PciCfg2 read/write opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptPciCfg2ReadWrite (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT16 Segment;
- UINT64 Address;
- UINT8 *Data;
- UINT8 *DataMask;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- Segment = VA_ARG (Marker, UINT16);
- Data = VA_ARG (Marker, UINT8 *);
- DataMask = VA_ARG (Marker, UINT8 *);
-
- return S3BootScriptSavePciCfg2ReadWrite (Width, Segment, Address, Data, DataMask);
-}
-
-/**
- Internal function to add smbus execute opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptSmbusExecute (
- IN VA_LIST Marker
- )
-{
- EFI_SMBUS_DEVICE_ADDRESS SlaveAddress;
- EFI_SMBUS_DEVICE_COMMAND Command;
- EFI_SMBUS_OPERATION Operation;
- BOOLEAN PecCheck;
- VOID *Buffer;
- UINTN *DataSize;
- UINTN SmBusAddress;
-
- SlaveAddress.SmbusDeviceAddress = VA_ARG (Marker, UINTN);
- Command = VA_ARG (Marker, EFI_SMBUS_DEVICE_COMMAND);
- Operation = VA_ARG (Marker, EFI_SMBUS_OPERATION);
- PecCheck = VA_ARG (Marker, BOOLEAN);
- SmBusAddress = SMBUS_LIB_ADDRESS (SlaveAddress.SmbusDeviceAddress,Command,0,PecCheck);
- DataSize = VA_ARG (Marker, UINTN *);
- Buffer = VA_ARG (Marker, VOID *);
-
- return S3BootScriptSaveSmbusExecute (SmBusAddress, Operation, DataSize, Buffer);
-}
-
-/**
- Internal function to add stall opcode to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptStall (
- IN VA_LIST Marker
- )
-{
- UINT32 Duration;
-
- Duration = VA_ARG (Marker, UINT32);
-
- return S3BootScriptSaveStall (Duration);
-}
-
-/**
- Internal function to add Save jmp address according to DISPATCH_OPCODE.
- We ignore "Context" parameter.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptDispatch (
- IN VA_LIST Marker
- )
-{
- VOID *EntryPoint;
-
- EntryPoint = (VOID*)(UINTN)VA_ARG (Marker, EFI_PHYSICAL_ADDRESS);
- return S3BootScriptSaveDispatch (EntryPoint);
-}
-
-/**
- Internal function to add memory pool operation to the table.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptMemPoll (
- IN VA_LIST Marker
- )
-{
- S3_BOOT_SCRIPT_LIB_WIDTH Width;
- UINT64 Address;
- UINT8 *BitMask;
- UINT8 *BitValue;
- UINTN Duration;
- UINT64 LoopTimes;
-
- Width = VA_ARG (Marker, S3_BOOT_SCRIPT_LIB_WIDTH);
- Address = VA_ARG (Marker, UINT64);
- BitMask = VA_ARG (Marker, UINT8 *);
- BitValue = VA_ARG (Marker, UINT8 *);
- Duration = (UINTN)VA_ARG (Marker, UINT64);
- LoopTimes = VA_ARG (Marker, UINT64);
-
- return S3BootScriptSaveMemPoll (Width, Address, BitMask, BitValue, Duration, LoopTimes);
-}
-
-/**
- Internal function to add Save jmp address according to DISPATCH_OPCODE2.
- The "Context" parameter is not ignored.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enough resource to do operation.
- @retval EFI_SUCCESS Opcode is added.
-
-**/
-EFI_STATUS
-BootScriptDispatch2 (
- IN VA_LIST Marker
- )
-{
- VOID *EntryPoint;
- VOID *Context;
-
- EntryPoint = (VOID*)(UINTN)VA_ARG (Marker, EFI_PHYSICAL_ADDRESS);
- Context = (VOID*)(UINTN)VA_ARG (Marker, EFI_PHYSICAL_ADDRESS);
-
- return S3BootScriptSaveDispatch2 (EntryPoint, Context);
-}
-
-/**
- Internal function to add the opcode link node to the link list.
-
- @param Marker The variable argument list to get the opcode
- and associated attributes.
-
- @retval EFI_OUT_OF_RESOURCES Not enought resource to complete the operations.
- @retval EFI_SUCCESS The opcode entry is added to the link list
- successfully.
-**/
-EFI_STATUS
-BootScriptInformation (
- IN VA_LIST Marker
- )
-{
- UINT32 InformationLength;
- EFI_PHYSICAL_ADDRESS Information;
-
- InformationLength = VA_ARG (Marker, UINT32);
- Information = VA_ARG (Marker, EFI_PHYSICAL_ADDRESS);
- return S3BootScriptSaveInformation (InformationLength, (VOID*)(UINTN)Information);
-}
-
-/**
- Adds a record into a specified Framework boot script table.
-
- This function is used to store a boot script record into a given boot
- script table. If the table specified by TableName is nonexistent in the
- system, a new table will automatically be created and then the script record
- will be added into the new table. A boot script table can add new script records
- until EFI_BOOT_SCRIPT_SAVE_PROTOCOL.CloseTable() is called. Currently, the only
- meaningful table name is EFI_ACPI_S3_RESUME_SCRIPT_TABLE. This function is
- responsible for allocating necessary memory for the script.
-
- This function has a variable parameter list. The exact parameter list depends on
- the OpCode that is passed into the function. If an unsupported OpCode or illegal
- parameter list is passed in, this function returns EFI_INVALID_PARAMETER.
- If there are not enough resources available for storing more scripts, this function returns
- EFI_OUT_OF_RESOURCES.
-
- @param This A pointer to the EFI_BOOT_SCRIPT_SAVE_PROTOCOL instance.
- @param TableName Name of the script table. Currently, the only meaningful value is
- EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
- @param OpCode The operation code (opcode) number.
- @param ... Argument list that is specific to each opcode.
-
- @retval EFI_SUCCESS The operation succeeded. A record was added into the
- specified script table.
- @retval EFI_INVALID_PARAMETER The parameter is illegal or the given boot script is not supported.
- If the opcode is unknow or not supported because of the PCD
- Feature Flags.
- @retval EFI_OUT_OF_RESOURCES There is insufficient memory to store the boot script.
-
-**/
-EFI_STATUS
-EFIAPI
-BootScriptWrite (
- IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This,
- IN UINT16 TableName,
- IN UINT16 OpCode,
- ...
- )
-{
- EFI_STATUS Status;
- VA_LIST Marker;
-
- if (TableName != FRAMEWORK_EFI_ACPI_S3_RESUME_SCRIPT_TABLE) {
- //
- // Only S3 boot script is supported for now.
- //
- return EFI_OUT_OF_RESOURCES;
- }
-
- //
- // Build script according to opcode.
- //
- switch (OpCode) {
-
- case EFI_BOOT_SCRIPT_IO_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptIoWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_IO_READ_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptIoReadWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptMemWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_MEM_READ_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptMemReadWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptPciCfgWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptPciCfgReadWrite (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_SMBUS_EXECUTE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptSmbusExecute (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_STALL_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptStall (Marker);
- VA_END (Marker);
-
- break;
-
- case EFI_BOOT_SCRIPT_DISPATCH_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptDispatch (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_DISPATCH_2_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptDispatch2 (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_INFORMATION_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptInformation (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_MEM_POLL_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptMemPoll (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptPciCfg2Write (Marker);
- VA_END (Marker);
- break;
-
- case EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE_OPCODE:
- VA_START (Marker, OpCode);
- Status = BootScriptPciCfg2ReadWrite (Marker);
- VA_END (Marker);
- break;
-
- default:
- Status = EFI_INVALID_PARAMETER;
- break;
- }
-
- return Status;
-}
-
-/**
- Closes the specified script table.
-
- This function closes the specified boot script table and returns the base address
- of the table. It allocates a new pool to duplicate all the boot scripts in the specified
- table. Once this function is called, the specified table will be destroyed after it is
- copied into the allocated pool. As a result, any attempts to add a script record into a
- closed table will cause a new table to be created. The base address of the allocated pool
- will be returned in Address. After using the boot script table, the caller is responsible
- for freeing the pool that is allocated by this function. If the boot script table,
- such as EFI_ACPI_S3_RESUME_SCRIPT_TABLE, is required to be stored in a nonperturbed
- memory region, the caller should copy the table into the nonperturbed memory region by itself.
-
- @param This A pointer to the EFI_BOOT_SCRIPT_SAVE_PROTOCOL instance.
- @param TableName Name of the script table. Currently, the only meaningful value is
- EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
- @param Address A pointer to the physical address where the table begins.
-
- @retval EFI_SUCCESS The table was successfully returned.
- @retval EFI_NOT_FOUND The specified table was not created previously.
- @retval EFI_OUT_OF_RESOURCE Memory is insufficient to hold the reorganized boot script table.
- @retval EFI_UNSUPPORTED The table type is not EFI_ACPI_S3_RESUME_SCRIPT_TABLE.
-
-**/
-EFI_STATUS
-EFIAPI
-BootScriptCloseTable (
- IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL *This,
- IN UINT16 TableName,
- OUT EFI_PHYSICAL_ADDRESS *Address
- )
-{
- if (TableName != FRAMEWORK_EFI_ACPI_S3_RESUME_SCRIPT_TABLE) {
- //
- // Only S3 boot script is supported for now.
- //
- return EFI_NOT_FOUND;
- }
- *Address = (EFI_PHYSICAL_ADDRESS)(UINTN)S3BootScriptCloseTable ();
-
- if (*Address == 0) {
- return EFI_NOT_FOUND;
- }
- return EFI_SUCCESS;
-}
-
-/**
- This routine is entry point of ScriptSave driver.
-
- @param ImageHandle Handle for this drivers loaded image protocol.
- @param SystemTable EFI system table.
-
- @retval EFI_OUT_OF_RESOURCES No enough resource.
- @retval EFI_SUCCESS Succesfully installed the ScriptSave driver.
- @retval other Errors occured.
-
-**/
-EFI_STATUS
-EFIAPI
-InitializeScriptSave (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- return gBS->InstallProtocolInterface (
- &mHandle,
- &gEfiBootScriptSaveProtocolGuid,
- EFI_NATIVE_INTERFACE,
- &mS3ScriptSave
- );
-
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspAzaliaConfigData/AzaliaConfig.bin b/Platform/Intel/Vlv2TbltDevicePkg/FspAzaliaConfigData/AzaliaConfig.bin
deleted file mode 100644
index da24c02b5d25ce888c630c664095902b4bb035e7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3708
zcmd^>Pl#JZ9LMK3`)XRdt$F?9>(+TQNqa~UwYzRL6+{xdH3}71P@h!~iwKK?QYsja
zyX|(<qQVxzbj5>fq4Da)Ts;(X@!&zpF$WI;5lLww$LD8u(;7lcLET;q4D-G_leaV9
z`ONQ|ZR6t$o%9hYzfnH1u=S6uQmNdpwECI9F1+yKF{PAjL*H2Jq)QXOgh~bLdf(Yj
zx{Q{={HK>X>1pl1uVg3l=gxJ~cL&<PZ)v%co*%q_JNnyNCp|Z$e>&eufBh)t{i$qa
zymz6Ko;kF<fYxKYbk8T9^zHTcrQ*MT^i#$MdK~@MXPtDW{K}NLuFTl3<m0X=(-m=j
zxoZ39zGO`wT@kSrDa94Z8J=B&PSA<u4bN^KJufTqyc{q*yDGXWlW|oJ8lGK47HtDf
zGYxc2)@+UWHJLIsS#>R$wk^39x8#&*q1$rZw$W`_Fm2JUDS6xE|21XSG|_dwU+4RE
znKN}^tDE}4qiNQxW^7I6<C;>Yro`3NRa-~bRo2weO(nLeSfk1ro?RE+MR!%+@QkN|
zrz?1RVBOP<7MszNaYi3BJiC@!v@JCm(@cx`ZMA0GY9(%~l4+||7vWKaClMY+c+gjQ
z+voj#HEa4xy9}OWcz*^@GMnznsNr~Yq{O;PtS`?xHS5iqf=FDD$QES96{Kg1=%Vbl
zMS0m3VWGl$E3CW1e9u<Gcp?p(Fh7yUJWDV&4O^=))-zRfRj$~oyy~jx8oGwAp=;=d
zgfMm;)-J+a4^~2$ISxBz80x{6z}V-ob`s`B_psR-kDkb~#xiTnvqsGtCt0KC8g{rB
zP3}XBd%`+dBTUHSrj18!G|jbT+HgnXu7tKL6RwMAeYprzYp?|qQi3JV)FNz&%jj7X
zX^A6!(MI~Di}ai+pbL7+7W9NGXwC#()Zf`6<3)4@UD4NUh4BhH(b+iB$8Ey<5`7Om
zdQz(``s;53YS<Qi?D>E-M4TfHuF7zggR5<Dbs4T!2V8}46~a{+uCj2&9^kCPc!hIM
z_&yD;%5c?#s}Qb2xGE303gIe*t1?_onwngSH)>SiJXdw*(`=pbI(mb%kTWcEhBrA2
zIYZCcqnz27oLR(~l{m8=XBH05tjw7?&V+lSxhFc{O#D8_N*nw2{oOo<qvGU<2cvs-
z?0LODv*+M8doKOUJ#Jx-XV~NJ!5(viJsyY4fIW_$SqhgaTq?L!aQOgxCKq*<{&yGX
zkp9CRfsW}z{=PoG_IH0bPe#Y_=;&{`NR8(s_2z*{We?Ke!e^Mkh0nBIcm&&M8Xkpk
zF$Whu%LFd=n5yL9Lf}H+A~)n2c_4@3;w!jVgA4M2EaX1N8(HTwj~tK_ag)35GwbjA
z<7<!4yD>cc9uFV911CMxhZ~yh!&U!3uUB~VR348M9xdb1!oZ`MA&-1bp24F$9_ib7
z<ZJTq-I*QoNaN8iJj&vc3_L2~(UBpKUc#eGc(jH`zW(_d9mX{LDbsp*BzSZdk50Na
zcXQ(|dCtUn&NkhnXLF`O4mZf-207bMj(qny&$*(TN|D!!-0qRzC2~AVUbAKu`urxx
z`Ax-mm+>y+Jd@Xo-0u1OCdZW_uj7pLY=(Nlvx(3VIzscz9+{7(zIzV1OU&2I*UZ;H
zWLQt8t)~8r)UF%R=vCNs4M)egTR9b1a<AD+Zl9~<;0B$b6LgZBH1p_r^nC7h$MgT}
zgGV!?HL*tx4`Z4waK8)dxiws$?v`7l^(fC>yTo1d^~nE5K0H#7;CB7D2Hf7NN4M@8
zHA%Q@KgMm@!(F>wZry{scKj6e==4xMQYkzSwVSzj1<zInp82egsOc-z^wE0cJ=zy<
zWce8N=$~Zy5}xe6gC{=Avx6)jBg^0SxppDYAJgysBGC8IOFqyO^vV7}@Au<me3Aa)
og+TA{`cR;E`u>AJKSaMh8|ZiFi`_ua(_elr(C^Vdb2!j{0U29Y3;+NC
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.c
deleted file mode 100644
index bf6c7efba5..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/** @file
- This PEIM will parse the hoblist from fsp and report them into pei core.
- This file contains the main entrypoint of the PEIM.
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-
-#include <PiPei.h>
-#include <Ppi/MasterBootMode.h>
-
-static EFI_PEI_PPI_DESCRIPTOR mPpiList[] = {
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
- &gEfiPeiMasterBootModePpiGuid,
- NULL
- },
-};
-
-/**
- This is the entrypoint of PEIM
-
- @param FileHandle Handle of the file being invoked.
- @param PeiServices Describes the list of possible PEI Services.
-
- @retval EFI_SUCCESS if it completed successfully.
-**/
-EFI_STATUS
-EFIAPI
-BootModePeiEntryPoint (
- IN EFI_PEI_FILE_HANDLE FileHandle,
- IN CONST EFI_PEI_SERVICES **PeiServices
- )
-{
- (*PeiServices)->SetBootMode(PeiServices, BOOT_WITH_FULL_CONFIGURATION);
-
- (*PeiServices)->InstallPpi (PeiServices, &mPpiList[0]);
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
deleted file mode 100644
index 27200bca15..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
+++ /dev/null
@@ -1,40 +0,0 @@
-## @file
-# FSP PEI Module
-#
-# Parses the hoblist from fsp and report them into pei core. It will install
-# the memory as required.
-#
-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = BootModePeim
- FILE_GUID = 2B1D0832-2184-4C8F-A90D-8E4AF9DE5BCD
- MODULE_TYPE = PEIM
- VERSION_STRING = 1.0
- ENTRY_POINT = BootModePeiEntryPoint
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32
-#
-
-[Sources]
- BootModePei.c
-
-[Packages]
- MdePkg/MdePkg.dec
-
-[LibraryClasses]
- PeimEntryPoint
-
-[Ppis]
- gEfiPeiMasterBootModePpiGuid
-
-[Depex]
- TRUE
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.c
deleted file mode 100644
index 8a97e25bd4..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.c
+++ /dev/null
@@ -1,421 +0,0 @@
-/** @file
- Null instance of Platform Sec Lib.
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-
-#include <Library/PeiServicesLib.h>
-#include <Library/PeiServicesTablePointerLib.h>
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/HobLib.h>
-#include <Library/PcdLib.h>
-#include <Library/FspPlatformInfoLib.h>
-
-#include <Guid/GuidHobFsp.h>
-#include <Guid/MemoryTypeInformation.h>
-#include <Ppi/Capsule.h>
-
-#include <PlatformFspLib.h>
-#include <Guid/SmramMemoryReserve.h>
-EFI_GUID gFspReservedMemoryResourceHobTsegGuid = {0xd038747c, 0xd00c, 0x4980, {0xb3, 0x19, 0x49, 0x01, 0x99, 0xa4, 0x7d, 0x55}};
-
-//
-// Additional pages are used by DXE memory manager.
-// It should be consistent between RetrieveRequiredMemorySize() and GetPeiMemSize()
-//
-#define PEI_ADDITIONAL_MEMORY_SIZE (16 * EFI_PAGE_SIZE)
-
-/**
- Get the mem size in memory type infromation table.
-
- @param PeiServices PEI Services table.
-
- @return the mem size in memory type infromation table.
-**/
-UINT64
-GetMemorySizeInMemoryTypeInformation (
- IN EFI_PEI_SERVICES **PeiServices
- )
-{
- EFI_PEI_HOB_POINTERS Hob;
- EFI_MEMORY_TYPE_INFORMATION *MemoryData;
- UINT8 Index;
- UINTN TempPageNum;
-
- MemoryData = NULL;
- (*PeiServices)->GetHobList ((CONST EFI_PEI_SERVICES **)PeiServices, (VOID **) &Hob.Raw);
- while (!END_OF_HOB_LIST (Hob)) {
- if (Hob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION &&
- CompareGuid (&Hob.Guid->Name, &gEfiMemoryTypeInformationGuid)) {
- MemoryData = (EFI_MEMORY_TYPE_INFORMATION *) (Hob.Raw + sizeof (EFI_HOB_GENERIC_HEADER) + sizeof (EFI_GUID));
- break;
- }
-
- Hob.Raw = GET_NEXT_HOB (Hob);
- }
-
- if (MemoryData == NULL) {
- return 0;
- }
-
- TempPageNum = 0;
- for (Index = 0; MemoryData[Index].Type != EfiMaxMemoryType; Index++) {
- //
- // Accumulate default memory size requirements
- //
- TempPageNum += MemoryData[Index].NumberOfPages;
- }
-
- return TempPageNum * EFI_PAGE_SIZE;
-}
-
-/**
- Get the mem size need to be reserved in PEI phase.
-
- @param PeiServices PEI Services table.
-
- @return the mem size need to be reserved in PEI phase.
-**/
-UINT64
-RetrieveRequiredMemorySize (
- IN EFI_PEI_SERVICES **PeiServices
- )
-{
- UINT64 Size;
-
- Size = GetMemorySizeInMemoryTypeInformation (PeiServices);
- return Size + PEI_ADDITIONAL_MEMORY_SIZE;
-}
-
-/**
- Get the mem size need to be consumed and reserved in PEI phase.
-
- @param PeiServices PEI Services table.
- @param BootMode Current boot mode.
-
- @return the mem size need to be consumed and reserved in PEI phase.
-**/
-UINT64
-GetPeiMemSize (
- IN EFI_PEI_SERVICES **PeiServices,
- IN UINT32 BootMode
- )
-{
- UINT64 Size;
- UINT64 MinSize;
-
- if (BootMode == BOOT_IN_RECOVERY_MODE) {
- return PcdGet32 (PcdPeiRecoveryMinMemSize);
- }
-
- Size = GetMemorySizeInMemoryTypeInformation (PeiServices);
-
- if (BootMode == BOOT_ON_FLASH_UPDATE) {
- //
- // Maybe more size when in CapsuleUpdate phase ?
- //
- MinSize = PcdGet32 (PcdPeiMinMemSize);
- } else {
- MinSize = PcdGet32 (PcdPeiMinMemSize);
- }
-
- return MinSize + Size + PEI_ADDITIONAL_MEMORY_SIZE;
-}
-
-/**
- BIOS process FspBobList.
-
- @param FspHobList Pointer to the HOB data structure produced by FSP.
-
- @return If platform process the FSP hob list successfully.
-**/
-EFI_STATUS
-EFIAPI
-FspHobProcessForMemoryResource (
- IN VOID *FspHobList
- )
-{
- EFI_PEI_HOB_POINTERS Hob;
- UINT64 LowMemorySize;
- UINT64 FspMemorySize;
- EFI_PHYSICAL_ADDRESS FspMemoryBase;
- UINT64 PeiMemSize;
- EFI_PHYSICAL_ADDRESS PeiMemBase;
- UINT64 S3PeiMemSize;
- EFI_PHYSICAL_ADDRESS S3PeiMemBase;
- BOOLEAN FoundFspMemHob;
- EFI_STATUS Status;
- EFI_BOOT_MODE BootMode;
- PEI_CAPSULE_PPI *Capsule;
- VOID *CapsuleBuffer;
- UINTN CapsuleBufferLength;
- UINT64 RequiredMemSize;
- EFI_PEI_SERVICES **PeiServices;
- UINT64 TsegSize;
- EFI_PHYSICAL_ADDRESS TsegBase;
- BOOLEAN FoundTsegHob;
-
- PeiServices = (EFI_PEI_SERVICES **)GetPeiServicesTablePointer ();
-
- PeiServicesGetBootMode (&BootMode);
-
- PeiMemBase = 0;
- LowMemorySize = 0;
- FspMemorySize = 0;
- FspMemoryBase = 0;
- FoundFspMemHob = FALSE;
- TsegSize = 0;
- TsegBase = 0;
- FoundTsegHob = FALSE;
-
- //
- // Parse the hob list from fsp
- // Report all the resource hob except the memory between 1M and 4G
- //
- Hob.Raw = (UINT8 *)(UINTN)FspHobList;
- DEBUG((DEBUG_INFO, "FspHobList - 0x%x\n", FspHobList));
-
- while ((Hob.Raw = GetNextHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, Hob.Raw)) != NULL) {
- DEBUG((DEBUG_INFO, "\nResourceType: 0x%x\n", Hob.ResourceDescriptor->ResourceType));
- if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) ||
- (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED)) {
- DEBUG((DEBUG_INFO, "ResourceAttribute: 0x%x\n", Hob.ResourceDescriptor->ResourceAttribute));
- DEBUG((DEBUG_INFO, "PhysicalStart: 0x%x\n", Hob.ResourceDescriptor->PhysicalStart));
- DEBUG((DEBUG_INFO, "ResourceLength: 0x%x\n", Hob.ResourceDescriptor->ResourceLength));
- DEBUG((DEBUG_INFO, "Owner: %g\n\n", &Hob.ResourceDescriptor->Owner));
- }
-
- if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) // Found the low memory length below 4G
- && (Hob.ResourceDescriptor->PhysicalStart >= BASE_1MB)
- && (Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength <= BASE_4GB)) {
- LowMemorySize += Hob.ResourceDescriptor->ResourceLength;
- Hob.Raw = GET_NEXT_HOB (Hob);
- continue;
- }
-
- if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED) // Found the low memory length below 4G
- && (Hob.ResourceDescriptor->PhysicalStart >= BASE_1MB)
- && (Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength <= BASE_4GB)
- && (CompareGuid (&Hob.ResourceDescriptor->Owner, &gFspReservedMemoryResourceHobGuid))) {
- FoundFspMemHob = TRUE;
- FspMemoryBase = Hob.ResourceDescriptor->PhysicalStart;
- FspMemorySize = Hob.ResourceDescriptor->ResourceLength;
- DEBUG((DEBUG_INFO, "Find fsp mem hob, base 0x%x, len 0x%x\n", FspMemoryBase, FspMemorySize));
- }
-
- if ((Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED) // Found the low memory length below 4G
- && (Hob.ResourceDescriptor->PhysicalStart >= 0x100000)
- && (Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength <= 0x100000000)
- && (CompareGuid (&Hob.ResourceDescriptor->Owner, &gFspReservedMemoryResourceHobTsegGuid))) {
- FoundTsegHob = TRUE;
- TsegBase = Hob.ResourceDescriptor->PhysicalStart;
-
-
- if ((Hob.ResourceDescriptor->ResourceLength == 0 ) || (Hob.ResourceDescriptor->ResourceLength > 0x800000)){
- Hob.ResourceDescriptor->ResourceLength = 0x800000;
- }
-
-
- TsegSize = Hob.ResourceDescriptor->ResourceLength;
- DEBUG((EFI_D_ERROR, "Find Tseg mem hob, base 0x%lx, len 0x%lx\n", TsegBase, TsegSize));
- }
-
- //
- // Report the resource hob
- //
- BuildResourceDescriptorHob (
- Hob.ResourceDescriptor->ResourceType,
- Hob.ResourceDescriptor->ResourceAttribute,
- Hob.ResourceDescriptor->PhysicalStart,
- Hob.ResourceDescriptor->ResourceLength
- );
-
- Hob.Raw = GET_NEXT_HOB (Hob);
- }
-
- if (!FoundFspMemHob) {
- DEBUG((DEBUG_INFO, "Didn't find the fsp used memory information.\n"));
- //ASSERT(FALSE);
- }
-
- DEBUG((DEBUG_INFO, "LowMemorySize: 0x%x.\n", LowMemorySize));
- DEBUG((DEBUG_INFO, "FspMemoryBase: 0x%x.\n", FspMemoryBase));
- DEBUG((DEBUG_INFO, "FspMemorySize: 0x%x.\n", FspMemorySize));
-
- if (BootMode == BOOT_ON_S3_RESUME) {
- BuildResourceDescriptorHob (
- EFI_RESOURCE_SYSTEM_MEMORY,
- (
- EFI_RESOURCE_ATTRIBUTE_PRESENT |
- EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
- // EFI_RESOURCE_ATTRIBUTE_TESTED |
- EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE
- ),
- BASE_1MB,
- LowMemorySize
- );
-
- Status = GetS3MemoryInfo (&S3PeiMemBase, &S3PeiMemSize);
- ASSERT_EFI_ERROR (Status);
- DEBUG((DEBUG_INFO, "S3 memory %Xh - %Xh bytes\n", S3PeiMemBase, S3PeiMemSize));
-
- //
- // Make sure Stack and PeiMemory are not overlap - JYAO1
- //
-
- Status = PeiServicesInstallPeiMemory (
- S3PeiMemBase,
- S3PeiMemSize
- );
- ASSERT_EFI_ERROR (Status);
- } else {
- PeiMemSize = GetPeiMemSize (PeiServices, BootMode);
- DEBUG((DEBUG_INFO, "PEI memory size = %Xh bytes\n", PeiMemSize));
-
- //
- // Capsule mode
- //
- Capsule = NULL;
- CapsuleBuffer = NULL;
- CapsuleBufferLength = 0;
- if (BootMode == BOOT_ON_FLASH_UPDATE) {
- Status = PeiServicesLocatePpi (
- &gPeiCapsulePpiGuid,
- 0,
- NULL,
- (VOID **) &Capsule
- );
- ASSERT_EFI_ERROR (Status);
-
- if (Status == EFI_SUCCESS) {
- //
- // Make sure Stack and CapsuleBuffer are not overlap - JYAO1
- //
- CapsuleBuffer = (VOID *)(UINTN)BASE_1MB;
- CapsuleBufferLength = (UINTN)(LowMemorySize - PeiMemSize);
- //
- // Call the Capsule PPI Coalesce function to coalesce the capsule data.
- //
- Status = Capsule->Coalesce (PeiServices, &CapsuleBuffer, &CapsuleBufferLength);
- }
- }
-
- RequiredMemSize = RetrieveRequiredMemorySize (PeiServices);
- DEBUG((DEBUG_INFO, "Required memory size = %Xh bytes\n", RequiredMemSize));
-
- //
- // Report the main memory
- //
- BuildResourceDescriptorHob (
- EFI_RESOURCE_SYSTEM_MEMORY,
- (
- EFI_RESOURCE_ATTRIBUTE_PRESENT |
- EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
- EFI_RESOURCE_ATTRIBUTE_TESTED |
- EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
- EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE
- ),
- BASE_1MB,
- LowMemorySize
- );
-
- //
- // Make sure Stack and CapsuleBuffer are not overlap - JYAO1
- //
-
- //
- // Install efi memory
- //
- PeiMemBase = BASE_1MB + LowMemorySize - PeiMemSize;
- Status = PeiServicesInstallPeiMemory (
- PeiMemBase,
- PeiMemSize - RequiredMemSize
- );
- ASSERT_EFI_ERROR (Status);
-
- if (Capsule != NULL) {
- Status = Capsule->CreateState (PeiServices, CapsuleBuffer, CapsuleBufferLength);
- }
- }
-
- //
- // Report GUIDed HOB for reserving SMRAM regions
- //
- if (FoundTsegHob) {
- EFI_SMRAM_HOB_DESCRIPTOR_BLOCK *SmramHobDescriptorBlock;
-
- SmramHobDescriptorBlock = BuildGuidHob (
- &gEfiSmmPeiSmramMemoryReserveGuid,
- sizeof (EFI_SMRAM_HOB_DESCRIPTOR_BLOCK)
- );
- ASSERT (SmramHobDescriptorBlock != NULL);
-
- SmramHobDescriptorBlock->NumberOfSmmReservedRegions = 1;
-
- SmramHobDescriptorBlock->Descriptor[0].PhysicalStart = TsegBase;
- SmramHobDescriptorBlock->Descriptor[0].CpuStart = TsegBase;
- SmramHobDescriptorBlock->Descriptor[0].PhysicalSize = TsegSize;
- SmramHobDescriptorBlock->Descriptor[0].RegionState = EFI_SMRAM_CLOSED;
- }
- return EFI_SUCCESS;
-}
-
-/**
- BIOS process FspBobList for other data (not Memory Resource Descriptor).
-
- @param[in] FspHobList Pointer to the HOB data structure produced by FSP.
-
- @return If platform process the FSP hob list successfully.
-**/
-EFI_STATUS
-EFIAPI
-FspHobProcessForOtherData (
- IN VOID *FspHobList
- )
-{
- EFI_PEI_SERVICES **PeiServices;
-
- PeiServices = (EFI_PEI_SERVICES **)GetPeiServicesTablePointer ();
-
- //
- // Other hob for platform
- //
- PlatformHobCreateFromFsp ((CONST EFI_PEI_SERVICES **) PeiServices, FspHobList);
-
- return EFI_SUCCESS;
-}
-
-/**
- BIOS process FspBobList.
-
- @param[in] FspHobList Pointer to the HOB data structure produced by FSP.
-
- @return If platform process the FSP hob list successfully.
-**/
-EFI_STATUS
-EFIAPI
-FspHobProcess (
- IN VOID *FspHobList
- )
-{
- EFI_STATUS Status;
-
- Status = FspHobProcessForMemoryResource (FspHobList);
- if (EFI_ERROR (Status)) {
- return Status;
- }
- Status = FspHobProcessForOtherData (FspHobList);
-
- return Status;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
deleted file mode 100644
index b789b27f4c..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
+++ /dev/null
@@ -1,74 +0,0 @@
-## @file
-#
-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-################################################################################
-#
-# Defines Section - statements that will be processed to create a Makefile.
-#
-################################################################################
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = PeiFspHobProcessLibVlv2
- FILE_GUID = C7B7070B-E5A8-4b86-9110-BDCA1095F496
- MODULE_TYPE = SEC
- VERSION_STRING = 1.0
- LIBRARY_CLASS = FspHobProcessLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-################################################################################
-#
-# Sources Section - list of files that are required for the build to succeed.
-#
-################################################################################
-
-[Sources]
- FspHobProcessLibVlv2.c
-
-
-################################################################################
-#
-# Package Dependency Section - list of Package files that are required for
-# this module.
-#
-################################################################################
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
- IntelFspPkg/IntelFspPkg.dec
- IntelFspWrapperPkg/IntelFspWrapperPkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
-
-[LibraryClasses]
- BaseLib
- BaseMemoryLib
- HobLib
- DebugLib
- FspPlatformInfoLib
- PeiServicesLib
- PeiServicesTablePointerLib
- PlatformFspLib
-
-[Pcd]
- gFspWrapperTokenSpaceGuid.PcdPeiMinMemSize
- gFspWrapperTokenSpaceGuid.PcdPeiRecoveryMinMemSize
-
-[Guids]
- gFspReservedMemoryResourceHobGuid
- gEfiMemoryTypeInformationGuid
- gEfiSmmPeiSmramMemoryReserveGuid
-
-[Ppis]
- gPeiCapsulePpiGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.c
deleted file mode 100644
index 2b03cfaec9..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/** @file
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-
-#include <Ppi/SecPlatformInformation.h>
-#include <Ppi/SecPerformance.h>
-#include <Ppi/TemporaryRamSupport.h>
-
-#include <Library/LocalApicLib.h>
-
-/**
- This interface conveys state information out of the Security (SEC) phase into PEI.
-
- @param PeiServices Pointer to the PEI Services Table.
- @param StructureSize Pointer to the variable describing size of the input buffer.
- @param PlatformInformationRecord Pointer to the EFI_SEC_PLATFORM_INFORMATION_RECORD.
-
- @retval EFI_SUCCESS The data was successfully returned.
- @retval EFI_BUFFER_TOO_SMALL The buffer was too small.
-
-**/
-EFI_STATUS
-EFIAPI
-SecPlatformInformation (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN OUT UINT64 *StructureSize,
- OUT EFI_SEC_PLATFORM_INFORMATION_RECORD *PlatformInformationRecord
- );
-
-/**
- This interface conveys performance information out of the Security (SEC) phase into PEI.
-
- This service is published by the SEC phase. The SEC phase handoff has an optional
- EFI_PEI_PPI_DESCRIPTOR list as its final argument when control is passed from SEC into the
- PEI Foundation. As such, if the platform supports collecting performance data in SEC,
- this information is encapsulated into the data structure abstracted by this service.
- This information is collected for the boot-strap processor (BSP) on IA-32.
-
- @param[in] PeiServices The pointer to the PEI Services Table.
- @param[in] This The pointer to this instance of the PEI_SEC_PERFORMANCE_PPI.
- @param[out] Performance The pointer to performance data collected in SEC phase.
-
- @retval EFI_SUCCESS The data was successfully returned.
-
-**/
-EFI_STATUS
-EFIAPI
-SecGetPerformance (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN PEI_SEC_PERFORMANCE_PPI *This,
- OUT FIRMWARE_SEC_PERFORMANCE *Performance
- );
-
-/**
- This service of the TEMPORARY_RAM_SUPPORT_PPI that migrates temporary RAM into
- permanent memory.
-
- @param PeiServices Pointer to the PEI Services Table.
- @param TemporaryMemoryBase Source Address in temporary memory from which the SEC or PEIM will copy the
- Temporary RAM contents.
- @param PermanentMemoryBase Destination Address in permanent memory into which the SEC or PEIM will copy the
- Temporary RAM contents.
- @param CopySize Amount of memory to migrate from temporary to permanent memory.
-
- @retval EFI_SUCCESS The data was successfully returned.
- @retval EFI_INVALID_PARAMETER PermanentMemoryBase + CopySize > TemporaryMemoryBase when
- TemporaryMemoryBase > PermanentMemoryBase.
-
-**/
-EFI_STATUS
-EFIAPI
-SecTemporaryRamSupport (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
- IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
- IN UINTN CopySize
- );
-
-EFI_SEC_PLATFORM_INFORMATION_PPI mSecPlatformInformationPpi = {
- SecPlatformInformation
-};
-
-PEI_SEC_PERFORMANCE_PPI mSecPerformancePpi = {
- SecGetPerformance
-};
-
-EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI gSecTemporaryRamSupportPpi = {
- SecTemporaryRamSupport
-};
-
-EFI_PEI_PPI_DESCRIPTOR mPeiSecPlatformPpi[] = {
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI,
- &gEfiSecPlatformInformationPpiGuid,
- &mSecPlatformInformationPpi
- },
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI,
- &gPeiSecPerformancePpiGuid,
- &mSecPerformancePpi
- },
- {
- EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
- &gEfiTemporaryRamSupportPpiGuid,
- &gSecTemporaryRamSupportPpi
- },
-};
-
-/**
- A developer supplied function to perform platform specific operations.
-
- It's a developer supplied function to perform any operations appropriate to a
- given platform. It's invoked just before passing control to PEI core by SEC
- core. Platform developer may modify the SecCoreData passed to PEI Core.
- It returns a platform specific PPI list that platform wishes to pass to PEI core.
- The Generic SEC core module will merge this list to join the final list passed to
- PEI core.
-
- @param SecCoreData The same parameter as passing to PEI core. It
- could be overridden by this function.
-
- @return The platform specific PPI list to be passed to PEI core or
- NULL if there is no need of such platform specific PPI list.
-
-**/
-EFI_PEI_PPI_DESCRIPTOR *
-EFIAPI
-SecPlatformMain (
- IN OUT EFI_SEC_PEI_HAND_OFF *SecCoreData
- )
-{
- EFI_PEI_PPI_DESCRIPTOR *PpiList;
-
- InitializeApicTimer (0, (UINT32) -1, TRUE, 5);
-
- PpiList = &mPeiSecPlatformPpi[0];
-
- return PpiList;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
deleted file mode 100644
index 578066d98f..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
+++ /dev/null
@@ -1,82 +0,0 @@
-## @file
-#
-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-################################################################################
-#
-# Defines Section - statements that will be processed to create a Makefile.
-#
-################################################################################
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SecPeiFspPlatformSecLibVlv2
- FILE_GUID = 6653876C-F6A1-45BB-A027-20455093BC6D
- MODULE_TYPE = SEC
- VERSION_STRING = 1.0
- LIBRARY_CLASS = FspPlatformSecLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-################################################################################
-#
-# Sources Section - list of files that are required for the build to succeed.
-#
-################################################################################
-
-[Sources]
- FspPlatformSecLibVlv2.c
- SecRamInitData.c
- SaveSecContext.c
- SecPlatformInformation.c
- SecGetPerformance.c
- SecTempRamSupport.c
- PlatformInit.c
- UartInit.c
-
-[Sources.IA32]
- Ia32/SecEntry.asm
- Ia32/PeiCoreEntry.asm
- Ia32/AsmSaveSecContext.asm
- Ia32/Stack.asm
-
-################################################################################
-#
-# Package Dependency Section - list of Package files that are required for
-# this module.
-#
-################################################################################
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- UefiCpuPkg/UefiCpuPkg.dec
- IntelFspWrapperPkg/IntelFspWrapperPkg.dec
-
-[LibraryClasses]
- LocalApicLib
- SerialPortLib
-
-[Ppis]
- gEfiSecPlatformInformationPpiGuid
- gPeiSecPerformancePpiGuid
- gEfiTemporaryRamSupportPpiGuid
-
-[Pcd]
- gFspWrapperTokenSpaceGuid.PcdPeiTemporaryRamStackSize
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase
- gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize
-
-[FixedPcd]
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress
- gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize
- gFspWrapperTokenSpaceGuid.PcdFlashMicroCodeOffset
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheAddress
- gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/AsmSaveSecContext.asm b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/AsmSaveSecContext.asm
deleted file mode 100644
index 2546a09a1a..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/AsmSaveSecContext.asm
+++ /dev/null
@@ -1,45 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-; Module Name:
-;
-; SecEntry.asm
-;
-; Abstract:
-;
-; This is the code that goes from real-mode to protected mode.
-; It consumes the reset vector, calls two basic APIs from FSP binary.
-;
-;------------------------------------------------------------------------------
-
-.686p
-.xmm
-.model flat,c
-.code
-
-;----------------------------------------------------------------------------
-; MMX Usage:
-; MM0 = BIST State
-; MM5 = Save time-stamp counter value high32bit
-; MM6 = Save time-stamp counter value low32bit.
-;
-; It should be same as SecEntry.asm and PeiCoreEntry.asm.
-;----------------------------------------------------------------------------
-
-AsmSaveBistValue PROC PUBLIC
- mov eax, [esp+4]
- movd mm0, eax
- ret
-AsmSaveBistValue ENDP
-
-AsmSaveTickerValue PROC PUBLIC
- mov eax, [esp+4]
- movd mm6, eax
- mov eax, [esp+8]
- movd mm5, eax
- ret
-AsmSaveTickerValue ENDP
-
-END
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Fsp.inc b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Fsp.inc
deleted file mode 100644
index 23295587b4..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Fsp.inc
+++ /dev/null
@@ -1,45 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-; Module Name:
-;
-; Fsp.inc
-;
-; Abstract:
-;
-; Fsp related definitions
-;
-;------------------------------------------------------------------------------
-
-
-;
-; Fv Header
-;
-FVH_SIGINATURE_OFFSET EQU 028h
-FVH_SIGINATURE_VALID_VALUE EQU 04856465Fh ; valid signature:_FVH
-FVH_HEADER_LENGTH_OFFSET EQU 030h
-FVH_EXTHEADER_OFFSET_OFFSET EQU 034h
-FVH_EXTHEADER_SIZE_OFFSET EQU 010h
-
-;
-; Ffs Header
-;
-FSP_HEADER_GUID_DWORD1 EQU 0912740BEh
-FSP_HEADER_GUID_DWORD2 EQU 047342284h
-FSP_HEADER_GUID_DWORD3 EQU 0B08471B9h
-FSP_HEADER_GUID_DWORD4 EQU 00C3F3527h
-FFS_HEADER_SIZE_VALUE EQU 018h
-
-;
-; Section Header
-;
-SECTION_HEADER_TYPE_OFFSET EQU 03h
-RAW_SECTION_HEADER_SIZE_VALUE EQU 04h
-
-;
-; Fsp Header
-;
-FSP_HEADER_IMAGEBASE_OFFSET EQU 01Ch
-FSP_HEADER_TEMPRAMINIT_OFFSET EQU 030h
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/PeiCoreEntry.asm b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/PeiCoreEntry.asm
deleted file mode 100644
index 3d34c62ea4..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/PeiCoreEntry.asm
+++ /dev/null
@@ -1,135 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-; Module Name:
-;
-; SecEntry.asm
-;
-; Abstract:
-;
-; This is the code that goes from real-mode to protected mode.
-; It consumes the reset vector, calls two basic APIs from FSP binary.
-;
-;------------------------------------------------------------------------------
-
-.686p
-.xmm
-.model flat, c
-.code
-
-EXTRN SecStartup:NEAR
-EXTRN PlatformInit:NEAR
-
-CallPeiCoreEntryPoint PROC PUBLIC
- ;
- ; Obtain the hob list pointer
- ;
- mov eax, [esp+4]
- ;
- ; Obtain the stack information
- ; ECX: start of range
- ; EDX: end of range
- ;
- mov ecx, [esp+8]
- mov edx, [esp+0Ch]
-
- ;
- ; Platform init
- ;
- pushad
- push edx
- push ecx
- push eax
- call PlatformInit
- pop eax
- pop eax
- pop eax
- popad
-
- ;
- ; Set stack top pointer
- ;
- mov esp, edx
-
- ;
- ; Push the hob list pointer
- ;
- push eax
-
- ;
- ; Save the value
- ; ECX: start of range
- ; EDX: end of range
- ;
- mov ebp, esp
- push ecx
- push edx
-
- ;
- ; Push processor count to stack first, then BIST status (AP then BSP)
- ;
- mov eax, 1
- cpuid
- shr ebx, 16
- and ebx, 0000000FFh
- cmp bl, 1
- jae PushProcessorCount
-
- ;
- ; Some processors report 0 logical processors. Effectively 0 = 1.
- ; So we fix up the processor count
- ;
- inc ebx
-
-PushProcessorCount:
- push ebx
-
- ;
- ; We need to implement a long-term solution for BIST capture. For now, we just copy BSP BIST
- ; for all processor threads
- ;
- xor ecx, ecx
- mov cl, bl
-PushBist:
- movd eax, mm0
- push eax
- loop PushBist
-
- ; Save Time-Stamp Counter
- movd eax, mm5
- push eax
-
- movd eax, mm6
- push eax
-
- ;
- ; Pass entry point of the PEI core
- ;
- mov edi, 0FFFFFFE0h
- push DWORD PTR ds:[edi]
-
- ;
- ; Pass BFV into the PEI Core
- ;
- mov edi, 0FFFFFFFCh
- push DWORD PTR ds:[edi]
-
- ;
- ; Pass stack size into the PEI Core
- ;
- mov ecx, [ebp - 4]
- mov edx, [ebp - 8]
- push ecx ; RamBase
-
- sub edx, ecx
- push edx ; RamSize
-
- ;
- ; Pass Control into the PEI Core
- ;
- call SecStartup
-CallPeiCoreEntryPoint ENDP
-
-END
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/SecEntry.asm b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/SecEntry.asm
deleted file mode 100644
index b7026c433f..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/SecEntry.asm
+++ /dev/null
@@ -1,338 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-; Module Name:
-;
-; SecEntry.asm
-;
-; Abstract:
-;
-; This is the code that goes from real-mode to protected mode.
-; It consumes the reset vector, calls two basic APIs from FSP binary.
-;
-;------------------------------------------------------------------------------
- INCLUDE Fsp.inc
-
-.686p
-.xmm
-.model small, c
-
-EXTRN CallPeiCoreEntryPoint:NEAR
-EXTRN TempRamInitParams:FAR
-
-; Pcds
-EXTRN PcdGet32 (PcdFlashFvFspBase):DWORD
-EXTRN PcdGet32 (PcdFlashFvFspSize):DWORD
-
-_TEXT_REALMODE SEGMENT PARA PUBLIC USE16 'CODE'
- ASSUME CS:_TEXT_REALMODE, DS:_TEXT_REALMODE
-
-;----------------------------------------------------------------------------
-;
-; Procedure: _ModuleEntryPoint
-;
-; Input: None
-;
-; Output: None
-;
-; Destroys: Assume all registers
-;
-; Description:
-;
-; Transition to non-paged flat-model protected mode from a
-; hard-coded GDT that provides exactly two descriptors.
-; This is a bare bones transition to protected mode only
-; used for a while in PEI and possibly DXE.
-;
-; After enabling protected mode, a far jump is executed to
-; transfer to PEI using the newly loaded GDT.
-;
-; Return: None
-;
-; MMX Usage:
-; MM0 = BIST State
-; MM5 = Save time-stamp counter value high32bit
-; MM6 = Save time-stamp counter value low32bit.
-;
-;----------------------------------------------------------------------------
-
-align 4
-_ModuleEntryPoint PROC NEAR C PUBLIC
- fninit ; clear any pending Floating point exceptions
- ;
- ; Store the BIST value in mm0
- ;
- movd mm0, eax
-
- ;
- ; Save time-stamp counter value
- ; rdtsc load 64bit time-stamp counter to EDX:EAX
- ;
- rdtsc
- movd mm5, edx
- movd mm6, eax
-
- ;
- ; Load the GDT table in GdtDesc
- ;
- mov esi, OFFSET GdtDesc
- DB 66h
- lgdt fword ptr cs:[si]
-
- ;
- ; Transition to 16 bit protected mode
- ;
- mov eax, cr0 ; Get control register 0
- or eax, 00000003h ; Set PE bit (bit #0) & MP bit (bit #1)
- mov cr0, eax ; Activate protected mode
-
- mov eax, cr4 ; Get control register 4
- or eax, 00000600h ; Set OSFXSR bit (bit #9) & OSXMMEXCPT bit (bit #10)
- mov cr4, eax
-
- ;
- ; Now we're in 16 bit protected mode
- ; Set up the selectors for 32 bit protected mode entry
- ;
- mov ax, SYS_DATA_SEL
- mov ds, ax
- mov es, ax
- mov fs, ax
- mov gs, ax
- mov ss, ax
-
- ;
- ; Transition to Flat 32 bit protected mode
- ; The jump to a far pointer causes the transition to 32 bit mode
- ;
- mov esi, offset ProtectedModeEntryLinearAddress
- jmp fword ptr cs:[si]
-
-_ModuleEntryPoint ENDP
-_TEXT_REALMODE ENDS
-
-_TEXT_PROTECTED_MODE SEGMENT PARA PUBLIC USE32 'CODE'
- ASSUME CS:_TEXT_PROTECTED_MODE, DS:_TEXT_PROTECTED_MODE
-
-;----------------------------------------------------------------------------
-;
-; Procedure: ProtectedModeEntryPoint
-;
-; Input: None
-;
-; Output: None
-;
-; Destroys: Assume all registers
-;
-; Description:
-;
-; This function handles:
-; Call two basic APIs from FSP binary
-; Initializes stack with some early data (BIST, PEI entry, etc)
-;
-; Return: None
-;
-;----------------------------------------------------------------------------
-
-align 4
-ProtectedModeEntryPoint PROC NEAR PUBLIC
-
- ; Find the fsp info header
- mov edi, PcdGet32 (PcdFlashFvFspBase)
- mov ecx, PcdGet32 (PcdFlashFvFspSize)
-
- mov eax, dword ptr [edi + FVH_SIGINATURE_OFFSET]
- cmp eax, FVH_SIGINATURE_VALID_VALUE
- jnz FspHeaderNotFound
-
- xor eax, eax
- mov ax, word ptr [edi + FVH_EXTHEADER_OFFSET_OFFSET]
- cmp ax, 0
- jnz FspFvExtHeaderExist
-
- xor eax, eax
- mov ax, word ptr [edi + FVH_HEADER_LENGTH_OFFSET] ; Bypass Fv Header
- add edi, eax
- jmp FspCheckFfsHeader
-
-FspFvExtHeaderExist:
- add edi, eax
- mov eax, dword ptr [edi + FVH_EXTHEADER_SIZE_OFFSET] ; Bypass Ext Fv Header
- add edi, eax
-
- ; Round up to 8 byte alignment
- mov eax, edi
- and al, 07h
- jz FspCheckFfsHeader
-
- and edi, 0FFFFFFF8h
- add edi, 08h
-
-FspCheckFfsHeader:
- ; Check the ffs guid
- mov eax, dword ptr [edi]
- cmp eax, FSP_HEADER_GUID_DWORD1
- jnz FspHeaderNotFound
-
- mov eax, dword ptr [edi + 4]
- cmp eax, FSP_HEADER_GUID_DWORD2
- jnz FspHeaderNotFound
-
- mov eax, dword ptr [edi + 8]
- cmp eax, FSP_HEADER_GUID_DWORD3
- jnz FspHeaderNotFound
-
- mov eax, dword ptr [edi + 0Ch]
- cmp eax, FSP_HEADER_GUID_DWORD4
- jnz FspHeaderNotFound
-
- add edi, FFS_HEADER_SIZE_VALUE ; Bypass the ffs header
-
- ; Check the section type as raw section
- mov al, byte ptr [edi + SECTION_HEADER_TYPE_OFFSET]
- cmp al, 019h
- jnz FspHeaderNotFound
-
- add edi, RAW_SECTION_HEADER_SIZE_VALUE ; Bypass the section header
- jmp FspHeaderFound
-
-FspHeaderNotFound:
- jmp $
-
-FspHeaderFound:
- ; Get the fsp TempRamInit Api address
- mov eax, dword ptr [edi + FSP_HEADER_IMAGEBASE_OFFSET]
- add eax, dword ptr [edi + FSP_HEADER_TEMPRAMINIT_OFFSET]
-
- ; Setup the hardcode stack
- mov esp, OFFSET TempRamInitStack
-
- ; Call the fsp TempRamInit Api
- jmp eax
-
-TempRamInitDone:
- cmp eax, 0
- jnz FspApiFailed
-
- ; ECX: start of range
- ; EDX: end of range
- mov esp, edx
- push edx
- push ecx
- push eax ; zero - no hob list yet
- call CallPeiCoreEntryPoint
-
-FspApiFailed:
- jmp $
-
-align 10h
-TempRamInitStack:
- DD OFFSET TempRamInitDone
- DD OFFSET TempRamInitParams
-
-ProtectedModeEntryPoint ENDP
-
-;
-; ROM-based Global-Descriptor Table for the Tiano PEI Phase
-;
-align 16
-PUBLIC BootGdtTable
-
-;
-; GDT[0]: 0x00: Null entry, never used.
-;
-NULL_SEL EQU $ - GDT_BASE ; Selector [0]
-GDT_BASE:
-BootGdtTable DD 0
- DD 0
-;
-; Linear data segment descriptor
-;
-LINEAR_SEL EQU $ - GDT_BASE ; Selector [0x8]
- DW 0FFFFh ; limit 0xFFFFF
- DW 0 ; base 0
- DB 0
- DB 092h ; present, ring 0, data, expand-up, writable
- DB 0CFh ; page-granular, 32-bit
- DB 0
-;
-; Linear code segment descriptor
-;
-LINEAR_CODE_SEL EQU $ - GDT_BASE ; Selector [0x10]
- DW 0FFFFh ; limit 0xFFFFF
- DW 0 ; base 0
- DB 0
- DB 09Bh ; present, ring 0, data, expand-up, not-writable
- DB 0CFh ; page-granular, 32-bit
- DB 0
-;
-; System data segment descriptor
-;
-SYS_DATA_SEL EQU $ - GDT_BASE ; Selector [0x18]
- DW 0FFFFh ; limit 0xFFFFF
- DW 0 ; base 0
- DB 0
- DB 093h ; present, ring 0, data, expand-up, not-writable
- DB 0CFh ; page-granular, 32-bit
- DB 0
-
-;
-; System code segment descriptor
-;
-SYS_CODE_SEL EQU $ - GDT_BASE ; Selector [0x20]
- DW 0FFFFh ; limit 0xFFFFF
- DW 0 ; base 0
- DB 0
- DB 09Ah ; present, ring 0, data, expand-up, writable
- DB 0CFh ; page-granular, 32-bit
- DB 0
-;
-; Spare segment descriptor
-;
-SYS16_CODE_SEL EQU $ - GDT_BASE ; Selector [0x28]
- DW 0FFFFh ; limit 0xFFFFF
- DW 0 ; base 0
- DB 0Eh ; Changed from F000 to E000.
- DB 09Bh ; present, ring 0, code, expand-up, writable
- DB 00h ; byte-granular, 16-bit
- DB 0
-;
-; Spare segment descriptor
-;
-SYS16_DATA_SEL EQU $ - GDT_BASE ; Selector [0x30]
- DW 0FFFFh ; limit 0xFFFF
- DW 0 ; base 0
- DB 0
- DB 093h ; present, ring 0, data, expand-up, not-writable
- DB 00h ; byte-granular, 16-bit
- DB 0
-
-;
-; Spare segment descriptor
-;
-SPARE5_SEL EQU $ - GDT_BASE ; Selector [0x38]
- DW 0 ; limit 0
- DW 0 ; base 0
- DB 0
- DB 0 ; present, ring 0, data, expand-up, writable
- DB 0 ; page-granular, 32-bit
- DB 0
-GDT_SIZE EQU $ - BootGdtTable ; Size, in bytes
-
-;
-; GDT Descriptor
-;
-GdtDesc: ; GDT descriptor
- DW GDT_SIZE - 1 ; GDT limit
- DD OFFSET BootGdtTable ; GDT base address
-
-
-ProtectedModeEntryLinearAddress LABEL FWORD
-ProtectedModeEntryLinearOffset LABEL DWORD
- DD OFFSET ProtectedModeEntryPoint ; Offset of our 32 bit code
- DW LINEAR_CODE_SEL
-
-_TEXT_PROTECTED_MODE ENDS
-END
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.S b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.S
deleted file mode 100644
index 9bd29ce0f4..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.S
+++ /dev/null
@@ -1,71 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-# Abstract:
-#
-# Switch the stack from temporary memory to permenent memory.
-#
-#------------------------------------------------------------------------------
-
-
-#------------------------------------------------------------------------------
-# VOID
-# EFIAPI
-# SecSwitchStack (
-# UINT32 TemporaryMemoryBase,
-# UINT32 PermenentMemoryBase
-# )#
-#------------------------------------------------------------------------------
-ASM_GLOBAL ASM_PFX (SecSwitchStack)
-ASM_PFX(SecSwitchStack):
- #
- # Save standard registers so they can be used to change stack
- #
- pushl %eax
- pushl %ebx
- pushl %ecx
- pushl %edx
-
- #
- # !!CAUTION!! this function address's is pushed into stack after
- # migration of whole temporary memory, so need save it to permenent
- # memory at first!
- #
- movl 20(%esp), %ebx # Save the first parameter
- movl 24(%esp), %ecx # Save the second parameter
-
- #
- # Save this function's return address into permenent memory at first.
- # Then, Fixup the esp point to permenent memory
- #
- movl %esp, %eax
- subl %ebx, %eax
- addl %ecx, %eax
- movl 0(%esp), %edx # copy pushed register's value to permenent memory
- movl %edx, 0(%eax)
- movl 4(%esp), %edx
- movl %edx, 4(%eax)
- movl 8(%esp), %edx
- movl %edx, 8(%eax)
- movl 12(%esp), %edx
- movl %edx, 12(%eax)
- movl 16(%esp), %edx # Update this function's return address into permenent memory
- movl %edx, 16(%eax)
- movl %eax, %esp # From now, esp is pointed to permenent memory
-
- #
- # Fixup the ebp point to permenent memory
- #
- movl %ebp, %eax
- subl %ebx, %eax
- addl %ecx, %eax
- movl %eax, %ebp # From now, ebp is pointed to permenent memory
-
- popl %edx
- popl %ecx
- popl %ebx
- popl %eax
- ret
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.asm b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.asm
deleted file mode 100644
index 95e56cec9b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.asm
+++ /dev/null
@@ -1,76 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-; Abstract:
-;
-; Switch the stack from temporary memory to permenent memory.
-;
-;------------------------------------------------------------------------------
-
- .586p
- .model flat,C
- .code
-
-;------------------------------------------------------------------------------
-; VOID
-; EFIAPI
-; SecSwitchStack (
-; UINT32 TemporaryMemoryBase,
-; UINT32 PermenentMemoryBase
-; );
-;------------------------------------------------------------------------------
-SecSwitchStack PROC
- ;
- ; Save three register: eax, ebx, ecx
- ;
- push eax
- push ebx
- push ecx
- push edx
-
- ;
- ; !!CAUTION!! this function address's is pushed into stack after
- ; migration of whole temporary memory, so need save it to permenent
- ; memory at first!
- ;
-
- mov ebx, [esp + 20] ; Save the first parameter
- mov ecx, [esp + 24] ; Save the second parameter
-
- ;
- ; Save this function's return address into permenent memory at first.
- ; Then, Fixup the esp point to permenent memory
- ;
- mov eax, esp
- sub eax, ebx
- add eax, ecx
- mov edx, dword ptr [esp] ; copy pushed register's value to permenent memory
- mov dword ptr [eax], edx
- mov edx, dword ptr [esp + 4]
- mov dword ptr [eax + 4], edx
- mov edx, dword ptr [esp + 8]
- mov dword ptr [eax + 8], edx
- mov edx, dword ptr [esp + 12]
- mov dword ptr [eax + 12], edx
- mov edx, dword ptr [esp + 16] ; Update this function's return address into permenent memory
- mov dword ptr [eax + 16], edx
- mov esp, eax ; From now, esp is pointed to permenent memory
-
- ;
- ; Fixup the ebp point to permenent memory
- ;
- mov eax, ebp
- sub eax, ebx
- add eax, ecx
- mov ebp, eax ; From now, ebp is pointed to permenent memory
-
- pop edx
- pop ecx
- pop ebx
- pop eax
- ret
-SecSwitchStack ENDP
-
- END
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/PlatformInit.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/PlatformInit.c
deleted file mode 100644
index d4e1c2a425..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/PlatformInit.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/** @file
- This PEIM will parse the hoblist from fsp and report them into pei core.
- This file contains the main entrypoint of the PEIM.
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-
-#include <PiPei.h>
-#include <Library/DebugLib.h>
-#include <Library/SerialPortLib.h>
-
-VOID EnableInternalUart ();
-
-VOID
-EFIAPI
-PlatformInit (
- IN VOID *FspHobList,
- IN VOID *StartOfRange,
- IN VOID *EndOfRange
- )
-{
- //
- // Platform initialization
- // Enable Serial port here
- //
- EnableInternalUart ();
- SerialPortInitialize ();
-
- DEBUG ((DEBUG_INFO, "PlatformInit\n"));
- DEBUG ((DEBUG_INFO, "FspHobList - 0x%x\n", FspHobList));
- DEBUG ((DEBUG_INFO, "StartOfRange - 0x%x\n", StartOfRange));
- DEBUG ((DEBUG_INFO, "EndOfRange - 0x%x\n", EndOfRange));
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SaveSecContext.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SaveSecContext.c
deleted file mode 100644
index 382e617b27..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SaveSecContext.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/** @file
- This PEIM will parse the hoblist from fsp and report them into pei core.
- This file contains the main entrypoint of the PEIM.
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-
-#include <PiPei.h>
-#include <Library/DebugLib.h>
-
-#include <Ppi/TopOfTemporaryRam.h>
-#include <Ppi/SecPlatformInformation.h>
-
-/**
- Save BIST value before call FspInit.
-
- @param Bist BIST value.
-**/
-VOID
-AsmSaveBistValue (
- IN UINT32 Bist
- );
-
-/**
- Save Ticker value before call FspInit.
-
- @param Ticker Ticker value.
-**/
-VOID
-AsmSaveTickerValue (
- IN UINT64 Ticker
- );
-
-/**
- Save SEC context before call FspInit.
-
- @param PeiServices Pointer to PEI Services Table.
-**/
-VOID
-EFIAPI
-SaveSecContext (
- IN CONST EFI_PEI_SERVICES **PeiServices
- )
-{
- UINT32 *Bist;
- UINT64 *Ticker;
- UINT32 Size;
- UINT32 Count;
- UINT32 TopOfTemporaryRam;
- VOID *TopOfTemporaryRamPpi;
- EFI_STATUS Status;
-
- DEBUG ((DEBUG_INFO, "SaveSecContext - 0x%x\n", PeiServices));
-
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gTopOfTemporaryRamPpiGuid,
- 0,
- NULL,
- (VOID **) &TopOfTemporaryRamPpi
- );
- if (EFI_ERROR (Status)) {
- return ;
- }
-
- DEBUG ((DEBUG_INFO, "TopOfTemporaryRamPpi - 0x%x\n", TopOfTemporaryRamPpi));
-
- //
- // The entries of BIST information, together with the number of them,
- // reside in the bottom of stack, left untouched by normal stack operation.
- // This routine copies the BIST information to the buffer pointed by
- // PlatformInformationRecord for output.
- //
- // |--------------| <- TopOfTemporaryRam
- // |Number of BSPs|
- // |--------------|
- // | BIST |
- // |--------------|
- // | .... |
- // |--------------|
- // | TSC[63:32] |
- // |--------------|
- // | TSC[31:00] |
- // |--------------|
- //
-
- TopOfTemporaryRam = (UINT32)(UINTN)TopOfTemporaryRamPpi - sizeof(UINT32);
- TopOfTemporaryRam -= sizeof(UINT32) * 2;
- DEBUG ((DEBUG_INFO, "TopOfTemporaryRam - 0x%x\n", TopOfTemporaryRam));
- Count = *(UINT32 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32));
- DEBUG ((DEBUG_INFO, "Count - 0x%x\n", Count));
- Size = Count * sizeof (IA32_HANDOFF_STATUS);
- DEBUG ((DEBUG_INFO, "Size - 0x%x\n", Size));
-
- Bist = (UINT32 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32) - Size);
- DEBUG ((DEBUG_INFO, "Bist - 0x%x\n", *Bist));
- Ticker = (UINT64 *)(UINTN)(TopOfTemporaryRam - sizeof(UINT32) - Size - sizeof(UINT64));
- DEBUG ((DEBUG_INFO, "Ticker - 0x%lx\n", *Ticker));
-
- //
- // Just need record BSP
- //
- AsmSaveBistValue (*Bist);
- AsmSaveTickerValue (*Ticker);
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecGetPerformance.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecGetPerformance.c
deleted file mode 100644
index c5c22a29c2..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecGetPerformance.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/** @file
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-
-#include <Ppi/SecPerformance.h>
-#include <Ppi/TopOfTemporaryRam.h>
-
-#include <Library/BaseMemoryLib.h>
-#include <Library/TimerLib.h>
-#include <Library/DebugLib.h>
-
-/**
- This interface conveys performance information out of the Security (SEC) phase into PEI.
-
- This service is published by the SEC phase. The SEC phase handoff has an optional
- EFI_PEI_PPI_DESCRIPTOR list as its final argument when control is passed from SEC into the
- PEI Foundation. As such, if the platform supports collecting performance data in SEC,
- this information is encapsulated into the data structure abstracted by this service.
- This information is collected for the boot-strap processor (BSP) on IA-32.
-
- @param[in] PeiServices The pointer to the PEI Services Table.
- @param[in] This The pointer to this instance of the PEI_SEC_PERFORMANCE_PPI.
- @param[out] Performance The pointer to performance data collected in SEC phase.
-
- @retval EFI_SUCCESS The data was successfully returned.
-
-**/
-EFI_STATUS
-EFIAPI
-SecGetPerformance (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN PEI_SEC_PERFORMANCE_PPI *This,
- OUT FIRMWARE_SEC_PERFORMANCE *Performance
- )
-{
- UINT32 Size;
- UINT32 Count;
- UINT32 TopOfTemporaryRam;
- UINT64 Ticker;
- VOID *TopOfTemporaryRamPpi;
- EFI_STATUS Status;
-
- DEBUG ((DEBUG_INFO, "SecGetPerformance\n"));
-
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gTopOfTemporaryRamPpiGuid,
- 0,
- NULL,
- (VOID **) &TopOfTemporaryRamPpi
- );
- if (EFI_ERROR (Status)) {
- return EFI_NOT_FOUND;
- }
-
- //
- // |--------------| <- TopOfTemporaryRam
- // |Number of BSPs|
- // |--------------|
- // | BIST |
- // |--------------|
- // | .... |
- // |--------------|
- // | TSC[63:32] |
- // |--------------|
- // | TSC[31:00] |
- // |--------------|
- //
- TopOfTemporaryRam = (UINT32)(UINTN)TopOfTemporaryRamPpi - sizeof(UINT32);
- TopOfTemporaryRam -= sizeof(UINT32) * 2;
- Count = *(UINT32 *) (UINTN) (TopOfTemporaryRam - sizeof (UINT32));
- Size = Count * sizeof (UINT64);
-
- Ticker = *(UINT64 *) (UINTN) (TopOfTemporaryRam - sizeof (UINT32) - Size - sizeof (UINT32) * 2);
- Performance->ResetEnd = GetTimeInNanoSecond (Ticker);
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecPlatformInformation.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecPlatformInformation.c
deleted file mode 100644
index a1ba35d47d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecPlatformInformation.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/** @file
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-
-#include <Ppi/SecPlatformInformation.h>
-#include <Ppi/TopOfTemporaryRam.h>
-
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-
-/**
- This interface conveys state information out of the Security (SEC) phase into PEI.
-
- @param PeiServices Pointer to the PEI Services Table.
- @param StructureSize Pointer to the variable describing size of the input buffer.
- @param PlatformInformationRecord Pointer to the EFI_SEC_PLATFORM_INFORMATION_RECORD.
-
- @retval EFI_SUCCESS The data was successfully returned.
- @retval EFI_BUFFER_TOO_SMALL The buffer was too small.
-
-**/
-EFI_STATUS
-EFIAPI
-SecPlatformInformation (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN OUT UINT64 *StructureSize,
- OUT EFI_SEC_PLATFORM_INFORMATION_RECORD *PlatformInformationRecord
- )
-{
- UINT32 *Bist;
- UINT32 Size;
- UINT32 Count;
- UINT32 TopOfTemporaryRam;
- VOID *TopOfTemporaryRamPpi;
- EFI_STATUS Status;
-
- DEBUG ((DEBUG_INFO, "SecPlatformInformation\n"));
-
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gTopOfTemporaryRamPpiGuid,
- 0,
- NULL,
- (VOID **) &TopOfTemporaryRamPpi
- );
- if (EFI_ERROR (Status)) {
- return EFI_NOT_FOUND;
- }
-
- //
- // The entries of BIST information, together with the number of them,
- // reside in the bottom of stack, left untouched by normal stack operation.
- // This routine copies the BIST information to the buffer pointed by
- // PlatformInformationRecord for output.
- //
- TopOfTemporaryRam = (UINT32)(UINTN)TopOfTemporaryRamPpi - sizeof (UINT32);
- TopOfTemporaryRam -= sizeof(UINT32) * 2;
- Count = *((UINT32 *)(UINTN) (TopOfTemporaryRam - sizeof (UINT32)));
- Size = Count * sizeof (IA32_HANDOFF_STATUS);
-
- if ((*StructureSize) < (UINT64) Size) {
- *StructureSize = Size;
- return EFI_BUFFER_TOO_SMALL;
- }
-
- *StructureSize = Size;
- Bist = (UINT32 *) (TopOfTemporaryRam - sizeof (UINT32) - Size);
-
- CopyMem (PlatformInformationRecord, Bist, Size);
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecRamInitData.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecRamInitData.c
deleted file mode 100644
index 33734e3111..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecRamInitData.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/** @file
- Calling Fsp Apis in SEC
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Library/PcdLib.h>
-
-GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT32 TempRamInitParams[4] = {
- ((UINT32)FixedPcdGet64 (PcdCpuMicrocodePatchAddress) + FixedPcdGet32 (PcdFlashMicroCodeOffset)),
- ((UINT32)FixedPcdGet64 (PcdCpuMicrocodePatchRegionSize) - FixedPcdGet32 (PcdFlashMicroCodeOffset)),
- FixedPcdGet32 (PcdFlashCodeCacheAddress),
- FixedPcdGet32 (PcdFlashCodeCacheSize)
-};
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecTempRamSupport.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecTempRamSupport.c
deleted file mode 100644
index 8dd1367980..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecTempRamSupport.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/** @file
- C functions in SEC
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-
-#include <Ppi/TemporaryRamSupport.h>
-
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-#include <Library/PcdLib.h>
-#include <Library/DebugAgentLib.h>
-
-/**
- Switch the stack in the temporary memory to the one in the permanent memory.
-
- This function must be invoked after the memory migration immediately. The relative
- position of the stack in the temporary and permanent memory is same.
-
- @param TemporaryMemoryBase Base address of the temporary memory.
- @param PermenentMemoryBase Base address of the permanent memory.
-**/
-VOID
-EFIAPI
-SecSwitchStack (
- UINT32 TemporaryMemoryBase,
- UINT32 PermenentMemoryBase
- );
-
-/**
- This service of the TEMPORARY_RAM_SUPPORT_PPI that migrates temporary RAM into
- permanent memory.
-
- @param PeiServices Pointer to the PEI Services Table.
- @param TemporaryMemoryBase Source Address in temporary memory from which the SEC or PEIM will copy the
- Temporary RAM contents.
- @param PermanentMemoryBase Destination Address in permanent memory into which the SEC or PEIM will copy the
- Temporary RAM contents.
- @param CopySize Amount of memory to migrate from temporary to permanent memory.
-
- @retval EFI_SUCCESS The data was successfully returned.
- @retval EFI_INVALID_PARAMETER PermanentMemoryBase + CopySize > TemporaryMemoryBase when
- TemporaryMemoryBase > PermanentMemoryBase.
-
-**/
-EFI_STATUS
-EFIAPI
-SecTemporaryRamSupport (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase,
- IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase,
- IN UINTN CopySize
- )
-{
- IA32_DESCRIPTOR IdtDescriptor;
- VOID* OldHeap;
- VOID* NewHeap;
- VOID* OldStack;
- VOID* NewStack;
- DEBUG_AGENT_CONTEXT_POSTMEM_SEC DebugAgentContext;
- BOOLEAN OldStatus;
- UINTN PeiStackSize;
-
- PeiStackSize = (UINTN)PcdGet32 (PcdPeiTemporaryRamStackSize);
- if (PeiStackSize == 0) {
- PeiStackSize = (CopySize >> 1);
- }
-
- ASSERT (PeiStackSize < CopySize);
-
- //
- // |-------------------|---->
- // | Stack | PeiStackSize
- // |-------------------|---->
- // | Heap | PeiTemporayRamSize
- // |-------------------|----> TempRamBase
- //
- // |-------------------|---->
- // | Heap | PeiTemporayRamSize
- // |-------------------|---->
- // | Stack | PeiStackSize
- // |-------------------|----> PermanentMemoryBase
- //
-
- OldHeap = (VOID*)(UINTN)TemporaryMemoryBase;
- NewHeap = (VOID*)((UINTN)PermanentMemoryBase + PeiStackSize);
-
- OldStack = (VOID*)((UINTN)TemporaryMemoryBase + CopySize - PeiStackSize);
- NewStack = (VOID*)(UINTN)PermanentMemoryBase;
-
- DebugAgentContext.HeapMigrateOffset = (UINTN)NewHeap - (UINTN)OldHeap;
- DebugAgentContext.StackMigrateOffset = (UINTN)NewStack - (UINTN)OldStack;
-
- OldStatus = SaveAndSetDebugTimerInterrupt (FALSE);
-
- //
- // Initialize Debug Agent to support source level debug in PEI phase after memory ready.
- // It will build HOB and fix up the pointer in IDT table.
- //
- InitializeDebugAgent (DEBUG_AGENT_INIT_POSTMEM_SEC, (VOID *) &DebugAgentContext, NULL);
-
- //
- // Migrate Heap
- //
- CopyMem (NewHeap, OldHeap, CopySize - PeiStackSize);
-
- //
- // Migrate Stack
- //
- CopyMem (NewStack, OldStack, PeiStackSize);
-
-
- //
- // We need *not* fix the return address because currently,
- // The PeiCore is executed in flash.
- //
-
- //
- // Rebase IDT table in permanent memory
- //
- AsmReadIdtr (&IdtDescriptor);
- IdtDescriptor.Base = IdtDescriptor.Base - (UINTN)OldStack + (UINTN)NewStack;
-
- AsmWriteIdtr (&IdtDescriptor);
-
-
- //
- // Program MTRR
- //
-
- //
- // SecSwitchStack function must be invoked after the memory migration
- // immediately, also we need fixup the stack change caused by new call into
- // permanent memory.
- //
- SecSwitchStack (
- (UINT32) (UINTN) OldStack,
- (UINT32) (UINTN) NewStack
- );
-
- SaveAndSetDebugTimerInterrupt (OldStatus);
-
- return EFI_SUCCESS;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/UartInit.c b/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/UartInit.c
deleted file mode 100644
index 2a9ab17120..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/UartInit.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/** @file
- This PEIM will parse the hoblist from fsp and report them into pei core.
- This file contains the main entrypoint of the PEIM.
-
- Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-
-#include <PiPei.h>
-#include <Library/IoLib.h>
-#include <Library/SerialPortLib.h>
-
-#define PCI_IDX 0xCF8
-#define PCI_DAT 0xCFC
-
-#define PCI_LPC_BASE (0x8000F800)
-#define PCI_LPC_REG(x) (PCI_LPC_BASE + (x))
-
-#define PMC_BASE_ADDRESS 0xFED03000 // PMC Memory Base Address
-#define R_PCH_LPC_PMC_BASE 0x44 // PBASE, 32bit, 512 Bytes
-#define B_PCH_LPC_PMC_BASE_EN BIT1 // Enable Bit
-#define R_PCH_PMC_GEN_PMCON_1 0x20 // General PM Configuration 1
-#define B_PCH_PMC_GEN_PMCON_SUS_PWR_FLR BIT14 // SUS Well Power Failure
-#define B_PCH_PMC_GEN_PMCON_PWROK_FLR BIT16 // PWROK Failure
-
-#define R_PCH_LPC_UART_CTRL 0x80 // UART Control
-#define B_PCH_LPC_UART_CTRL_COM1_EN BIT0 // COM1 Enable
-
-#define ILB_BASE_ADDRESS 0xFED08000 // ILB Memory Base Address
-#define R_PCH_ILB_IRQE 0x88 // IRQ Enable Control
-
-#define IO_BASE_ADDRESS 0xFED0C000 // IO Memory Base Address
-
-#define V_PCH_ILB_IRQE_UARTIRQEN_IRQ3 BIT3 // UART IRQ3 Enable
-#define V_PCH_ILB_IRQE_UARTIRQEN_IRQ4 BIT4 // UART IRQ4 Enable
-#define PCIEX_BASE_ADDRESS 0xE0000000
-#define PCI_EXPRESS_BASE_ADDRESS PCIEX_BASE_ADDRESS
-#define PciD31F0RegBase PCIEX_BASE_ADDRESS + (UINT32) (31 << 15)
-#define SB_RCBA 0xfed1c000
-
-typedef enum {
- PchA0 = 0,
- PchA1 = 1,
- PchB0 = 2,
- PchB1 = 3,
- PchB2 = 4,
- PchB3 = 5,
- PchC0 = 6,
- PchSteppingMax
-} PCH_STEPPING;
-
-#define MmPciAddress( Segment, Bus, Device, Function, Register ) \
- ( (UINTN)PCI_EXPRESS_BASE_ADDRESS + \
- (UINTN)(Bus << 20) + \
- (UINTN)(Device << 15) + \
- (UINTN)(Function << 12) + \
- (UINTN)(Register) \
- )
-
-#define DEFAULT_PCI_BUS_NUMBER_PCH 0
-#define PCI_DEVICE_NUMBER_PCH_LPC 31
-#define PCI_FUNCTION_NUMBER_PCH_LPC 0
-
-#define R_PCH_LPC_RID_CC 0x08 // Revision ID & Class Code
-
-#define V_PCH_LPC_RID_0 0x01 // A0 Stepping (17 x 17)
-#define V_PCH_LPC_RID_1 0x02 // A0 Stepping (25 x 27)
-#define V_PCH_LPC_RID_2 0x03 // A1 Stepping (17 x 17)
-#define V_PCH_LPC_RID_3 0x04 // A1 Stepping (25 x 27)
-#define V_PCH_LPC_RID_4 0x05 // B0 Stepping (17 x 17)
-#define V_PCH_LPC_RID_5 0x06 // B0 Stepping (25 x 27)
-#define V_PCH_LPC_RID_6 0x07 // B1 Stepping (17 x 17)
-#define V_PCH_LPC_RID_7 0x08 // B1 Stepping (25 x 27)
-#define V_PCH_LPC_RID_8 0x09 // B2 Stepping (17 x 17)
-#define V_PCH_LPC_RID_9 0x0A // B2 Stepping (25 x 27)
-#define V_PCH_LPC_RID_A 0x0B // B3 Stepping (17 x 17)
-#define V_PCH_LPC_RID_B 0x0C // B3 Stepping (25 x 27)
-#define V_PCH_LPC_RID_C 0x0D // C0 Stepping (17 x 17)
-#define V_PCH_LPC_RID_D 0x0E // C0 Stepping (25 x 27)
-
-/**
- Return Pch stepping type
-
- @param[in] None
-
- @retval PCH_STEPPING Pch stepping type
-
-**/
-PCH_STEPPING
-EFIAPI
-PchStepping (
- VOID
- )
-{
- UINT8 RevId;
-
- RevId = MmioRead8 (
- MmPciAddress (0,
- DEFAULT_PCI_BUS_NUMBER_PCH,
- PCI_DEVICE_NUMBER_PCH_LPC,
- PCI_FUNCTION_NUMBER_PCH_LPC,
- R_PCH_LPC_RID_CC)
- );
-
- switch (RevId) {
- case V_PCH_LPC_RID_0:
- case V_PCH_LPC_RID_1:
- return PchA0;
- break;
-
- case V_PCH_LPC_RID_2:
- case V_PCH_LPC_RID_3:
- return PchA1;
- break;
-
- case V_PCH_LPC_RID_4:
- case V_PCH_LPC_RID_5:
- return PchB0;
- break;
-
- case V_PCH_LPC_RID_6:
- case V_PCH_LPC_RID_7:
- return PchB1;
- break;
-
- case V_PCH_LPC_RID_8:
- case V_PCH_LPC_RID_9:
- return PchB2;
- break;
-
- case V_PCH_LPC_RID_A:
- case V_PCH_LPC_RID_B:
- return PchB3;
- break;
-
- case V_PCH_LPC_RID_C:
- case V_PCH_LPC_RID_D:
- return PchC0;
- break;
-
- default:
- return PchSteppingMax;
- break;
-
- }
-}
-
-/**
- Enable legacy decoding on ICH6
-
- @param[in] none
-
- @retval EFI_SUCCESS Always returns success.
-
-**/
-VOID
-EnableInternalUart(
- VOID
- )
-{
-
- //
- // Program and enable PMC Base.
- //
- IoWrite32 (PCI_IDX, PCI_LPC_REG(R_PCH_LPC_PMC_BASE));
- IoWrite32 (PCI_DAT, (PMC_BASE_ADDRESS | B_PCH_LPC_PMC_BASE_EN));
-
- //
- // Enable COM1 for debug message output.
- //
- MmioAndThenOr32 (PMC_BASE_ADDRESS + R_PCH_PMC_GEN_PMCON_1, (UINT32) (~(B_PCH_PMC_GEN_PMCON_SUS_PWR_FLR + B_PCH_PMC_GEN_PMCON_PWROK_FLR)), BIT24);
-
- //
- // Silicon Steppings
- //
- if (PchStepping()>= PchB0)
- MmioOr8 (ILB_BASE_ADDRESS + R_PCH_ILB_IRQE, (UINT8) V_PCH_ILB_IRQE_UARTIRQEN_IRQ4);
- else
- MmioOr8 (ILB_BASE_ADDRESS + R_PCH_ILB_IRQE, (UINT8) V_PCH_ILB_IRQE_UARTIRQEN_IRQ3);
- MmioAnd32(IO_BASE_ADDRESS + 0x0520, (UINT32)~(0x00000187));
- MmioOr32 (IO_BASE_ADDRESS + 0x0520, (UINT32)0x81); // UART3_RXD-L
- MmioAnd32(IO_BASE_ADDRESS + 0x0530, (UINT32)~(0x00000007));
- MmioOr32 (IO_BASE_ADDRESS + 0x0530, (UINT32)0x1); // UART3_RXD-L
- MmioOr8 (PciD31F0RegBase + R_PCH_LPC_UART_CTRL, (UINT8) B_PCH_LPC_UART_CTRL_COM1_EN);
-
- SerialPortInitialize ();
- SerialPortWrite ((UINT8 *)"EnableInternalUart!\r\n", sizeof("EnableInternalUart!\r\n") - 1);
-
- return ;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/TpmMp.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/TpmMp.h
deleted file mode 100644
index 415e53daf2..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/TpmMp.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- Tpm.h
-
-Abstract:
-
-
---*/
-
-#ifndef __EFI_TPM_MP_DRIVER_PROTOCOL_H__
-#define __EFI_TPM_MP_DRIVER_PROTOCOL_H__
-
-
-#define EFI_TPM_MP_DRIVER_PROTOCOL_GUID \
- { 0xde161cfe, 0x1e60, 0x42a1, 0x8c, 0xc3, 0xee, 0x7e, 0xf0, 0x73, 0x52, 0x12 }
-
-
-EFI_FORWARD_DECLARATION (EFI_TPM_MP_DRIVER_PROTOCOL);
-
-#define TPM_DRIVER_STATUS 0
-#define TPM_DEVICE_STATUS 1
-
-#define TPM_DRIVER_OK 0
-#define TPM_DRIVER_FAILED 1
-#define TPM_DRIVER_NOT_OPENED 2
-#define TPM_DEVICE_OK 0
-#define TPM_DEVICE_UNRECOVERABLE 1
-#define TPM_DEVICE_RECOVERABLE 2
-#define TPM_DEVICE_NOT_FOUND 3
-
-//
-// Prototypes for the TPM MP Driver Protocol
-//
-
-/**
- This service Open the TPM interface
-
- @param[in] This A pointer to the EFI_TPM_MP_DRIVER_PROTOCOL.
-
- @retval EFI_SUCCESS Operation completed successfully
- @retval EFI_DEVICE_ERROR The command was unsuccessful
- @retval EFI_NOT_FOUND The component was not running
-
-**/
-typedef
-EFI_STATUS
-(EFIAPI *EFI_TPM_MP_INIT) (
- IN EFI_TPM_MP_DRIVER_PROTOCOL *This
- );
-
-/**
- This service close the TPM interface and deactivate TPM
-
- @param[in] This A pointer to the EFI_TPM_MP_DRIVER_PROTOCOL.
-
- @retval EFI_SUCCESS Operation completed successfully
- @retval EFI_DEVICE_ERROR The command was unsuccessful
- @retval EFI_NOT_FOUND The component was not running
-
-**/
-typedef
-EFI_STATUS
-(EFIAPI *EFI_TPM_MP_CLOSE) (
- IN EFI_TPM_MP_DRIVER_PROTOCOL *This
- );
-
-/**
- This service get the current status infomation of TPM
-
- @param[in] This A pointer to the EFI_TPM_MP_DRIVER_PROTOCOL.
- @param[in] ReqStatusType Requested type of status information, driver or device.
- @param[in] Status Pointer to the returned status.
-
- @retval EFI_SUCCESS Operation completed successfully
- @retval EFI_DEVICE_ERROR The command was unsuccessful
- @retval EFI_INVALID_PARAMETER One or more of the parameters are incorrect
- @retval EFI_BUFFER_TOO_SMALL The receive buffer is too small
- @retval EFI_NOT_FOUND The component was not running
-
-**/
-typedef
-EFI_STATUS
-(EFIAPI *EFI_TPM_MP_GET_STATUS_INFO) (
- IN EFI_TPM_MP_DRIVER_PROTOCOL *This,
- IN UINT32 ReqStatusType,
- OUT UINT32 *Status
- );
-
-/**
- This service transmit data to the TPM and get response from TPM
-
- @param[in] This A pointer to the EFI_TPM_MP_DRIVER_PROTOCOL.
- @param[in] TransmitBuf Pointer to a buffer containing TPM transmit data.
- @param[in] TransmitBufLen Sizeof TPM input buffer in bytes.
- @param[in] ReceiveBuf Pointer to a buffer containing TPM receive data.
- @param[in] ReceiveBufLen On input, size of TPM receive buffer in bytes.
- On output, number of bytes written.
-
- @retval EFI_SUCCESS Operation completed successfully
- @retval EFI_DEVICE_ERROR The command was unsuccessful
- @retval EFI_INVALID_PARAMETER One or more of the parameters are incorrect
- @retval EFI_BUFFER_TOO_SMALL The receive buffer is too small
- @retval EFI_NOT_FOUND The component was not running
-
-**/
-typedef
-EFI_STATUS
-(EFIAPI *EFI_TPM_MP_TRANSMIT) (
- IN EFI_TPM_MP_DRIVER_PROTOCOL *This,
- IN UINT8 *TransmitBuffer,
- IN UINT32 TransmitBufferLen,
- OUT UINT8 *ReceiveBuf,
- IN OUT UINT32 *ReceiveBufLen
- );
-
-
-
-typedef struct _EFI_TPM_MP_DRIVER_PROTOCOL {
- EFI_TPM_MP_INIT Init;
- EFI_TPM_MP_CLOSE Close;
- EFI_TPM_MP_GET_STATUS_INFO GetStatusInfo;
- EFI_TPM_MP_TRANSMIT Transmit;
-} EFI_TPM_MP_DRIVER_PROTOCOL;
-
-extern EFI_GUID gEfiTpmMpDriverProtocolGuid;
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/UsbPolicy.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/UsbPolicy.h
deleted file mode 100644
index 16e9f9c6bc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/UsbPolicy.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
- UsbPolicy.h
-
-Abstract:
-
---*/
-
-#ifndef _USB_POLICY_H_
-#define _USB_POLICY_H_
-
-EFI_FORWARD_DECLARATION (EFI_USB_POLICY_PROTOCOL);
-
-#define USB_POLICY_GUID \
- {\
- 0xf617b358, 0x12cf, 0x414a, 0xa0, 0x69, 0x60, 0x67, 0x7b, 0xda, 0x13, 0xb4\
- }
-
-#define TIANO_CODE_BASE 0x00
-#define ICBD_CODE_BASE 0x01
-
-#define ATUO_TYPE 0x00
-#define USB_FDD_TYPE 0x01
-#define HDD_TYPE 0x02
-#define ZIP_TYPE 0x03
-#define CDROM_TYPE 0x04
-#define SIZE_TYPE 0x05
-
-#define ZIP_FDD 0x80
-
-#define FDD_EMULATION 0x00
-#define HDD_EMULATION 0x01
-
-#define HIGH_SPEED 0x00
-#define FULL_SPEED 0x01
-#define SUPER_SPEED 0x02
-
-#define LEGACY_KB_EN 0x01
-#define LEGACY_KB_DIS 0x00
-#define LEGACY_MS_EN 0x01
-#define LEGACY_MS_DIS 0x00
-#define LEGACY_USB_EN 0x00
-#define LEGACY_USB_DIS 0x01
-#define LEGACY_FREE_SUPP 0x01
-#define LEGACY_FREE_UN_SUPP 0x00
-#define LEGACY_PERIOD_SUPP 0x01
-#define LEGACY_PERIOD_UN_SUPP 0x00
-
-#define LEGACY_USB_TIME_TUE_ENABLE 0x01
-#define LEGACY_USB_TIME_TUE_DISABLE 0x00
-#define USB_HAVE_HUB_INTERNEL 0x01
-#define USB_NOT_HAVE_HUB_INTERNEL 0x00
-
-#define USB_POLICY_PROTOCOL_REVISION_1 1
-#define USB_POLICY_PROTOCOL_REVISION_2 2
-
-#ifndef __GNUC__
-#pragma warning ( disable : 4306 )
-#pragma warning ( disable : 4054 )
-#endif
-
-#define GET_USB_CFG (UsbCfg);\
- do{\
- UINT16 *pSegOfEbda;\
- UINT32 mToEbda;\
- pSegOfEbda = (UINT16 *)(UINTN)0x40E;\
- mToEbda = (UINT32)(((UINTN)(*pSegOfEbda) << 4) + 0x80);\
- UsbCfg = (USB_CFG *)(UINTN)mToEbda;\
- }while(0);
-
-#pragma pack(1)
-typedef struct {
- UINT8 HasUSBKeyboard:1;
- UINT8 HasUSBMouse:1;
- UINT8 LegacyFreeSupport:1;
- UINT8 UsbOperationMode:1;
- UINT8 LegacyKBEnable:1;
- UINT8 LegacyMSEnable:1;
- UINT8 USBPeriodSupport:1;
- UINT8 Reserved:1;
-} USB_DEVICE_INFOR;
-
-typedef struct {
- UINT8 Codebase;
- UINT8 USBHDDForceType;
- UINT8 Configurated;
- UINT8 LpcAcpiBase;
- UINT8 AcpiTimerReg;
- UINT8 Reserved1[0x01];
- UINT8 LegacyUsbEnable;
- USB_DEVICE_INFOR UsbDeviceInfor;
- UINT16 UsbEmulationSize;
- UINT8 Reserved2[0x06];
-} USB_CFG;
-#pragma pack()
-
-typedef struct _EFI_USB_POLICY_PROTOCOL{
- UINT8 Version;
- UINT8 UsbMassStorageEmulationType; // 1: FDD_Type; 2: HDD_Type; other:Auto_Type*
- UINT8 UsbOperationMode; // 0: High_Speed; 1: Full_Speed;
- UINT8 LegacyKBEnable; // 0: Disabled; 1: Enabled*
- UINT8 LegacyMSEnable; // 0: Disabled; 1: Enabled*
- UINT8 USBPeriodSupport; // 0; Unsupport; 1: Support
- UINT8 LegacyUsbEnable; // 1: Disabled; 0: Enabled*
- UINT8 LegacyFreeSupport; // 0: Unsupport; 1: Support
- UINT8 CodeBase;
- UINT8 LpcAcpiBase; // 40h(default)
- UINT8 AcpiTimerReg;
- UINT8 UsbTimeTue;
- UINT8 InternelHubExist; // 1: Host have internel hub on board; 0: No internel hub on board
- UINT8 EnumWaitPortStableStall; // Value for wait port stable when enum a new dev.
- UINT16 UsbEmulationSize; // Mbytes.
- UINT8 UsbZipEmulationType;
- UINT8 Reserved[3]; // Reserved fields for future expansion w/o protocol change
-} EFI_USB_POLICY_PROTOCOL;
-
-extern EFI_GUID gUsbPolicyGuid;
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c
deleted file mode 100644
index 85f066a9e3..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*++
-
-Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- I2CLib.c
-
-
-
---*/
-#ifdef ECP_FLAG
-#include "EdkIIGlueDxe.h"
-#else
-#include <Library/DebugLib.h>
-#include <Library/TimerLib.h>
-#endif
-#include <PchRegs/PchRegsPcu.h>
-#include <PchRegs.h>
-#include <PlatformBaseAddresses.h>
-#include <PchRegs/PchRegsLpss.h>
-#ifdef ECP_FLAG
-#include "I2CLib.h"
-#else
-#include <Library/I2CLib.h>
-#endif
-#include <Protocol/GlobalNvsArea.h>
-#ifndef ECP_FLAG
-#include <Library/UefiBootServicesTableLib.h>
-#endif
-
-EFI_STATUS ByteReadI2C(
- IN UINT8 BusNo,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer
- )
-{
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
deleted file mode 100644
index d669a4eaf8..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
+++ /dev/null
@@ -1,39 +0,0 @@
-## @file
-# Null instance of Debug Agent Library with empty functions.
-#
-# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = I2CLib
- FILE_GUID = 7f62bf44-2ba7-4c2d-9d4a-91c8906ff053
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = I2CLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources.common]
- I2CLib.c
-
-[LibraryClasses]
- BaseLib
- IoLib
- TimerLib
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
-
-[Protocols]
- gEfiGlobalNvsAreaProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLib.c
deleted file mode 100644
index 104c2ded43..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLib.c
+++ /dev/null
@@ -1,735 +0,0 @@
-/** @file
- Functions for accessing I2C registers.
-
- Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
---*/
-
-#include <Library/DebugLib.h>
-#include <Library/TimerLib.h>
-#include <PchRegs/PchRegsPcu.h>
-#include <PchRegs.h>
-#include <PlatformBaseAddresses.h>
-#include <PchRegs/PchRegsLpss.h>
-#include <Library/I2CLib.h>
-#include <Protocol/GlobalNvsArea.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <I2CRegs.h>
-
-#define GLOBAL_NVS_OFFSET(Field) (UINTN)((CHAR8*)&((EFI_GLOBAL_NVS_AREA*)0)->Field - (CHAR8*)0)
-
-#define PCIEX_BASE_ADDRESS 0xE0000000
-#define PCI_EXPRESS_BASE_ADDRESS ((VOID *) (UINTN) PCIEX_BASE_ADDRESS)
-#define MmPciAddress( Segment, Bus, Device, Function, Register ) \
- ((UINTN)PCI_EXPRESS_BASE_ADDRESS + \
- (UINTN)(Bus << 20) + \
- (UINTN)(Device << 15) + \
- (UINTN)(Function << 12) + \
- (UINTN)(Register) \
- )
-#define PCI_D31F0_REG_BASE PCIEX_BASE_ADDRESS + (UINT32) (31 << 15)
-
-typedef struct _LPSS_PCI_DEVICE_INFO {
- UINTN Segment;
- UINTN BusNum;
- UINTN DeviceNum;
- UINTN FunctionNum;
- UINTN Bar0;
- UINTN Bar1;
-} LPSS_PCI_DEVICE_INFO;
-
-LPSS_PCI_DEVICE_INFO mLpssPciDeviceList[] = {
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_DMAC1, PCI_FUNCTION_NUMBER_PCH_LPSS_DMAC, 0xFE900000, 0xFE908000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C0, 0xFE910000, 0xFE918000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C1, 0xFE920000, 0xFE928000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C2, 0xFE930000, 0xFE938000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C3, 0xFE940000, 0xFE948000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C4, 0xFE950000, 0xFE958000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C5, 0xFE960000, 0xFE968000},
- {0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPSS_I2C, PCI_FUNCTION_NUMBER_PCH_LPSS_I2C6, 0xFE970000, 0xFE978000}
-};
-
-#define LPSS_PCI_DEVICE_NUMBER sizeof(mLpssPciDeviceList)/sizeof(LPSS_PCI_DEVICE_INFO)
-
-STATIC UINTN mI2CBaseAddress = 0;
-STATIC UINT16 mI2CSlaveAddress = 0;
-
-UINT16 mI2cMode=B_IC_RESTART_EN | B_IC_SLAVE_DISABLE | B_MASTER_MODE ;
-
-UINTN mI2cNvsBaseAddress[] = {
- GLOBAL_NVS_OFFSET(LDMA2Addr),
- GLOBAL_NVS_OFFSET(I2C1Addr),
- GLOBAL_NVS_OFFSET(I2C2Addr),
- GLOBAL_NVS_OFFSET(I2C3Addr),
- GLOBAL_NVS_OFFSET(I2C4Addr),
- GLOBAL_NVS_OFFSET(I2C5Addr),
- GLOBAL_NVS_OFFSET(I2C6Addr),
- GLOBAL_NVS_OFFSET(I2C7Addr)
- };
-
-/**
- This function get I2Cx controller base address (BAR0).
-
- @param I2cControllerIndex Bus Number of I2C controller.
-
- @return I2C BAR.
-**/
-UINTN
-GetI2cBarAddr(
- IN UINT8 I2cControllerIndex
- )
-{
- EFI_STATUS Status;
- EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsArea;
- UINTN AcpiBaseAddr;
- UINTN PciMmBase=0;
-
- ASSERT(gBS!=NULL);
-
- Status = gBS->LocateProtocol (
- &gEfiGlobalNvsAreaProtocolGuid,
- NULL,
- &GlobalNvsArea
- );
-
- //
- // PCI mode from PEI ( Global NVS is not ready).
- //
- if (EFI_ERROR(Status)) {
- DEBUG ((EFI_D_INFO, "GetI2cBarAddr() gEfiGlobalNvsAreaProtocolGuid:%r\n", Status));
- //
- // Global NVS is not ready.
- //
- return 0;
- }
-
- AcpiBaseAddr = *(UINTN*)((CHAR8*)GlobalNvsArea->Area + mI2cNvsBaseAddress[I2cControllerIndex + 1]);
-
- //
- //PCI mode from DXE (global NVS protocal) to LPSS OnReadytoBoot(swith to ACPI).
- //
- if(AcpiBaseAddr==0) {
- PciMmBase = MmPciAddress (
- mLpssPciDeviceList[I2cControllerIndex + 1].Segment,
- mLpssPciDeviceList[I2cControllerIndex + 1].BusNum,
- mLpssPciDeviceList[I2cControllerIndex + 1].DeviceNum,
- mLpssPciDeviceList[I2cControllerIndex + 1].FunctionNum,
- 0
- );
- DEBUG((EFI_D_ERROR, "\nGetI2cBarAddr() I2C Device %x %x %x PciMmBase:%x\n", \
- mLpssPciDeviceList[I2cControllerIndex + 1].BusNum, \
- mLpssPciDeviceList[I2cControllerIndex + 1].DeviceNum, \
- mLpssPciDeviceList[I2cControllerIndex + 1].FunctionNum, PciMmBase));
-
- if (MmioRead32 (PciMmBase) != 0xFFFFFFFF) {
- if((MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_STSCMD)& B_PCH_LPSS_I2C_STSCMD_MSE)) {
- //
- // Get the address allocted.
- //
- mLpssPciDeviceList[I2cControllerIndex + 1].Bar0=MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR);
- mLpssPciDeviceList[I2cControllerIndex + 1].Bar1=MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR1);
- }
- }
- AcpiBaseAddr =mLpssPciDeviceList[I2cControllerIndex+1].Bar0;
- }
-
- //
- // ACPI mode from BDS: LPSS OnReadytoBoot
- //
- else {
- DEBUG ((EFI_D_INFO, "GetI2cBarAddr() NVS Varialable is updated by this LIB or LPSS \n"));
- }
-
- DEBUG ((EFI_D_INFO, "GetI2cBarAddr() I2cControllerIndex+1 0x%x AcpiBaseAddr:0x%x \n", (I2cControllerIndex + 1), AcpiBaseAddr));
- return AcpiBaseAddr;
-}
-
-
-/**
- This function enables I2C controllers.
-
- @param I2cControllerIndex Bus Number of I2C controllers.
-
- @return Result of the I2C initialization.
-**/
-EFI_STATUS
-ProgramPciLpssI2C (
- IN UINT8 I2cControllerIndex
- )
-{
- UINT32 PmcBase;
- UINTN PciMmBase=0;
- EFI_STATUS Status;
- EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsArea;
-
- UINT32 PmcFunctionDsiable[]= {
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC1,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC2,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC3,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC4,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC5,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC6,
- B_PCH_PMC_FUNC_DIS_LPSS2_FUNC7
- };
-
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() Start\n"));
-
- //
- // Set the VLV Function Disable Register to ZERO
- //
- PmcBase = MmioRead32 (PCI_D31F0_REG_BASE + R_PCH_LPC_PMC_BASE) & B_PCH_LPC_PMC_BASE_BAR;
- if(MmioRead32(PmcBase+R_PCH_PMC_FUNC_DIS)&PmcFunctionDsiable[I2cControllerIndex]) {
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() End:I2C[%x] is disabled\n",I2cControllerIndex));
- return EFI_NOT_READY;
- }
-
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C()------------I2cControllerIndex=%x,PMC=%x\n",I2cControllerIndex,MmioRead32(PmcBase+R_PCH_PMC_FUNC_DIS)));
-
- {
- PciMmBase = MmPciAddress (
- mLpssPciDeviceList[I2cControllerIndex+1].Segment,
- mLpssPciDeviceList[I2cControllerIndex+1].BusNum,
- mLpssPciDeviceList[I2cControllerIndex+1].DeviceNum,
- mLpssPciDeviceList[I2cControllerIndex+1].FunctionNum,
- 0
- );
-
- DEBUG((EFI_D_ERROR, "Program Pci Lpss I2C Device %x %x %x PciMmBase:%x\n", \
- mLpssPciDeviceList[I2cControllerIndex+1].BusNum, \
- mLpssPciDeviceList[I2cControllerIndex+1].DeviceNum, \
- mLpssPciDeviceList[I2cControllerIndex+1].FunctionNum, PciMmBase));
-
- if (MmioRead32 (PciMmBase) != 0xFFFFFFFF) {
- if((MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_STSCMD)& B_PCH_LPSS_I2C_STSCMD_MSE)) {
- //
- // Get the address allocted.
- //
- mLpssPciDeviceList[I2cControllerIndex+1].Bar0=MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR);
- mLpssPciDeviceList[I2cControllerIndex+1].Bar1=MmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR1);
- DEBUG((EFI_D_ERROR, "ProgramPciLpssI2C() bar0:0x%x bar1:0x%x\n",mLpssPciDeviceList[I2cControllerIndex+1].Bar0, mLpssPciDeviceList[I2cControllerIndex+1].Bar1));
- } else {
-
- //
- // Program BAR 0
- //
- ASSERT (((mLpssPciDeviceList[I2cControllerIndex+1].Bar0 & B_PCH_LPSS_I2C_BAR_BA) == mLpssPciDeviceList[I2cControllerIndex+1].Bar0) && (mLpssPciDeviceList[I2cControllerIndex+1].Bar0 != 0));
- MmioWrite32 ((UINTN) (PciMmBase + R_PCH_LPSS_I2C_BAR), (UINT32) (mLpssPciDeviceList[I2cControllerIndex+1].Bar0 & B_PCH_LPSS_I2C_BAR_BA));
-
- //
- // Program BAR 1
- //
- ASSERT (((mLpssPciDeviceList[I2cControllerIndex+1].Bar1 & B_PCH_LPSS_I2C_BAR1_BA) == mLpssPciDeviceList[I2cControllerIndex+1].Bar1) && (mLpssPciDeviceList[I2cControllerIndex+1].Bar1 != 0));
- MmioWrite32 ((UINTN) (PciMmBase + R_PCH_LPSS_I2C_BAR1), (UINT32) (mLpssPciDeviceList[I2cControllerIndex+1].Bar1 & B_PCH_LPSS_I2C_BAR1_BA));
-
- //
- // Bus Master Enable & Memory Space Enable
- //
- MmioOr32 ((UINTN) (PciMmBase + R_PCH_LPSS_I2C_STSCMD), (UINT32) (B_PCH_LPSS_I2C_STSCMD_BME | B_PCH_LPSS_I2C_STSCMD_MSE));
- ASSERT (MmioRead32 (mLpssPciDeviceList[I2cControllerIndex+1].Bar0) != 0xFFFFFFFF);
- }
-
- //
- // Release Resets
- //
- MmioWrite32 (mLpssPciDeviceList[I2cControllerIndex+1].Bar0 + R_PCH_LPIO_I2C_MEM_RESETS,(B_PCH_LPIO_I2C_MEM_RESETS_FUNC | B_PCH_LPIO_I2C_MEM_RESETS_APB));
-
- //
- // Activate Clocks
- //
- MmioWrite32 (mLpssPciDeviceList[I2cControllerIndex+1].Bar0 + R_PCH_LPSS_I2C_MEM_PCP,0x80020003);//No use for A0
-
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() Programmed()\n"));
- }
-
- //
- // BDS: already switched to ACPI mode
- //
- else {
- ASSERT(gBS!=NULL);
- Status = gBS->LocateProtocol (
- &gEfiGlobalNvsAreaProtocolGuid,
- NULL,
- &GlobalNvsArea
- );
- if (EFI_ERROR(Status)) {
- DEBUG ((EFI_D_INFO, "GetI2cBarAddr() gEfiGlobalNvsAreaProtocolGuid:%r\n", Status));
- //
- // gEfiGlobalNvsAreaProtocolGuid is not ready.
- //
- return 0;
- }
- mLpssPciDeviceList[I2cControllerIndex + 1].Bar0 = *(UINTN*)((CHAR8*)GlobalNvsArea->Area + mI2cNvsBaseAddress[I2cControllerIndex + 1]);
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C(): is switched to ACPI 0x:%x \n",mLpssPciDeviceList[I2cControllerIndex + 1].Bar0));
- }
- }
-
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() End\n"));
-
- return EFI_SUCCESS;
-}
-
-/**
- Disable I2C Bus.
-
- @param VOID.
-
- @return Result of the I2C disabling.
-**/
-RETURN_STATUS
-I2cDisable (
- VOID
- )
-{
- //
- // 0.1 seconds
- //
- UINT32 NumTries = 10000;
-
- MmioWrite32 ( mI2CBaseAddress + R_IC_ENABLE, 0 );
- while ( 0 != ( MmioRead32 ( mI2CBaseAddress + R_IC_ENABLE_STATUS) & 1)) {
- MicroSecondDelay (10);
- NumTries --;
- if(0 == NumTries) {
- return RETURN_NOT_READY;
- }
- }
-
- return RETURN_SUCCESS;
-}
-
-/**
- Enable I2C Bus.
-
- @param VOID.
-
- @return Result of the I2C disabling.
-**/
-RETURN_STATUS
-I2cEnable (
- VOID
- )
-{
- //
- // 0.1 seconds
- //
- UINT32 NumTries = 10000;
-
- MmioWrite32 (mI2CBaseAddress + R_IC_ENABLE, 1);
-
- while (0 == (MmioRead32 (mI2CBaseAddress + R_IC_ENABLE_STATUS) & 1)) {
- MicroSecondDelay (10);
- NumTries --;
- if(0 == NumTries){
- return RETURN_NOT_READY;
- }
- }
-
- return RETURN_SUCCESS;
-}
-
-/**
- Enable I2C Bus.
-
- @param VOID.
-
- @return Result of the I2C enabling.
-**/
-RETURN_STATUS
-I2cBusFrequencySet (
- IN UINTN BusClockHertz
- )
-{
- DEBUG((EFI_D_INFO,"InputFreq BusClockHertz: %d\r\n",BusClockHertz));
-
- //
- // Set the 100 KHz clock divider according to SV result and I2C spec
- //
- MmioWrite32 ( mI2CBaseAddress + R_IC_SS_SCL_HCNT, (UINT16)0x214 );
- MmioWrite32 ( mI2CBaseAddress + R_IC_SS_SCL_LCNT, (UINT16)0x272 );
-
- //
- // Set the 400 KHz clock divider according to SV result and I2C spec
- //
- MmioWrite32 ( mI2CBaseAddress + R_IC_FS_SCL_HCNT, (UINT16)0x50 );
- MmioWrite32 ( mI2CBaseAddress + R_IC_FS_SCL_LCNT, (UINT16)0xAD );
-
- switch ( BusClockHertz ) {
- case 100 * 1000:
- MmioWrite32 ( mI2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x40);//100K
- mI2cMode = V_SPEED_STANDARD;
- break;
- case 400 * 1000:
- MmioWrite32 ( mI2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x32);//400K
- mI2cMode = V_SPEED_FAST;
- break;
- default:
- MmioWrite32 ( mI2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x09);//3.4M
- mI2cMode = V_SPEED_HIGH;
- }
-
- //
- // Select the frequency counter,
- // Enable restart condition,
- // Enable master FSM, disable slave FSM.
- //
- mI2cMode |= B_IC_RESTART_EN | B_IC_SLAVE_DISABLE | B_MASTER_MODE;
-
- return EFI_SUCCESS;
-}
-
-/**
- Initializes the host controller to execute I2C commands.
-
- @param I2cControllerIndex Index of I2C controller in LPSS device. 0 represents I2C0, which is PCI function 1 of LPSS device.
-
- @return EFI_SUCCESS Opcode initialization on the I2C host controller completed.
- @return EFI_DEVICE_ERROR Device error, operation failed.
-**/
-EFI_STATUS
-I2CInit (
- IN UINT8 I2cControllerIndex,
- IN UINT16 SlaveAddress
- )
-{
- EFI_STATUS Status=RETURN_SUCCESS;
- UINT32 NumTries = 0;
- UINTN GnvsI2cBarAddr=0;
-
- //
- // Verify the parameters
- //
- if ((1023 < SlaveAddress) || (6 < I2cControllerIndex)) {
- Status = RETURN_INVALID_PARAMETER;
- DEBUG((EFI_D_INFO,"I2CInit Exit with RETURN_INVALID_PARAMETER\r\n"));
- return Status;
- }
- MmioWrite32 ( mI2CBaseAddress + R_IC_TAR, (UINT16)SlaveAddress );
- mI2CSlaveAddress = SlaveAddress;
-
- //
- // 1.PEI: program and init ( before pci enumeration).
- // 2.DXE:update address and re-init ( after pci enumeration).
- // 3.BDS:update ACPI address and re-init ( after acpi mode is enabled).
- //
- if(mI2CBaseAddress == mLpssPciDeviceList[I2cControllerIndex + 1].Bar0) {
-
- //
- // I2CInit is already called.
- //
- GnvsI2cBarAddr=GetI2cBarAddr(I2cControllerIndex);
-
- if((GnvsI2cBarAddr == 0)||(GnvsI2cBarAddr == mI2CBaseAddress)) {
- DEBUG((EFI_D_INFO,"I2CInit Exit with mI2CBaseAddress:%x == [%x].Bar0\r\n",mI2CBaseAddress,I2cControllerIndex+1));
- return RETURN_SUCCESS;
- }
- }
-
- Status=ProgramPciLpssI2C(I2cControllerIndex);
- if(Status!=EFI_SUCCESS) {
- return Status;
- }
-
-
- mI2CBaseAddress = (UINT32) mLpssPciDeviceList[I2cControllerIndex + 1].Bar0;
- DEBUG ((EFI_D_ERROR, "mI2CBaseAddress = 0x%x \n",mI2CBaseAddress));
-
- //
- // 1 seconds.
- //
- NumTries = 10000;
- while ((1 == ( MmioRead32 ( mI2CBaseAddress + R_IC_STATUS) & STAT_MST_ACTIVITY ))) {
- MicroSecondDelay(10);
- NumTries --;
- if(0 == NumTries) {
- DEBUG((EFI_D_INFO, "Try timeout\r\n"));
- return RETURN_DEVICE_ERROR;
- }
- }
-
- Status = I2cDisable();
- DEBUG((EFI_D_INFO, "I2cDisable Status = %r\r\n", Status));
- I2cBusFrequencySet(400 * 1000);
-
- MmioWrite32(mI2CBaseAddress + R_IC_INTR_MASK, 0x0);
- if (0x7f < SlaveAddress )
- SlaveAddress = ( SlaveAddress & 0x3ff ) | IC_TAR_10BITADDR_MASTER;
- MmioWrite32 ( mI2CBaseAddress + R_IC_TAR, (UINT16)SlaveAddress );
- MmioWrite32 ( mI2CBaseAddress + R_IC_RX_TL, 0);
- MmioWrite32 ( mI2CBaseAddress + R_IC_TX_TL, 0 );
- MmioWrite32 ( mI2CBaseAddress + R_IC_CON, mI2cMode);
- Status = I2cEnable();
-
- DEBUG((EFI_D_INFO, "I2cEnable Status = %r\r\n", Status));
- MmioRead32 ( mI2CBaseAddress + R_IC_CLR_TX_ABRT );
-
- return EFI_SUCCESS;
-}
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value read has to be stored
- @param Start Whether a RESTART is issued before the byte is sent or received
- @param End Whether STOP is generated after a data byte is sent or received
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteReadI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer,
- IN UINT8 Start,
- IN UINT8 End
- )
-{
-
- EFI_STATUS Status;
- UINT32 I2cStatus;
- UINT16 ReceiveData;
- UINT8 *ReceiveDataEnd;
- UINT8 *ReceiveRequest;
- UINT16 RawIntrStat;
- UINT32 Count=0;
-
- Status = EFI_SUCCESS;
-
- ReceiveDataEnd = &ReadBuffer [ReadBytes];
- if( ReadBytes ) {
-
- ReceiveRequest = ReadBuffer;
- DEBUG((EFI_D_INFO,"Read: ---------------%d bytes to RX\r\n",ReceiveDataEnd - ReceiveRequest));
-
- while ((ReceiveDataEnd > ReceiveRequest) || (ReceiveDataEnd > ReadBuffer)) {
-
- //
- // Check for NACK
- //
- RawIntrStat = (UINT16)MmioRead32 (mI2CBaseAddress + R_IC_RawIntrStat);
- if ( 0 != ( RawIntrStat & I2C_INTR_TX_ABRT )) {
- MmioRead32 ( mI2CBaseAddress + R_IC_CLR_TX_ABRT );
- Status = RETURN_DEVICE_ERROR;
- DEBUG((EFI_D_INFO,"TX ABRT ,%d bytes hasn't been transferred\r\n",ReceiveDataEnd - ReceiveRequest));
- break;
- }
-
- //
- // Determine if another byte was received
- //
- I2cStatus = (UINT16)MmioRead32 (mI2CBaseAddress + R_IC_STATUS);
- if (0 != ( I2cStatus & STAT_RFNE )) {
- ReceiveData = (UINT16)MmioRead32 ( mI2CBaseAddress + R_IC_DATA_CMD );
- *ReadBuffer++ = (UINT8)ReceiveData;
- DEBUG((EFI_D_INFO,"MmioRead32 ,1 byte 0x:%x is received\r\n",ReceiveData));
- }
-
- if(ReceiveDataEnd == ReceiveRequest) {
- MicroSecondDelay ( FIFO_WRITE_DELAY );
- DEBUG((EFI_D_INFO,"ReceiveDataEnd==ReceiveRequest------------%x\r\n",I2cStatus & STAT_RFNE));
- Count++;
- if(Count<1024) {
- //
- // To avoid sys hung without ul-pmc device on RVP,
- // waiting the last request to get data and make (ReceiveDataEnd > ReadBuffer) =TRUE.
- //
- continue;
- } else {
- break;
- }
- }
-
- //
- // Wait until a read request will fit.
- //
- if (0 == (I2cStatus & STAT_TFNF)) {
- DEBUG((EFI_D_INFO,"Wait until a read request will fit\r\n"));
- MicroSecondDelay (10);
- continue;
- }
-
- //
- // Issue the next read request.
- //
- if(End && Start) {
- MmioWrite32 ( mI2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_RESTART|B_CMD_STOP);
- } else if (!End && Start) {
- MmioWrite32 ( mI2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_RESTART);
- } else if (End && !Start) {
- MmioWrite32 ( mI2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_STOP);
- } else if (!End && !Start) {
- MmioWrite32 ( mI2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD);
- }
- MicroSecondDelay (FIFO_WRITE_DELAY);
-
- ReceiveRequest += 1;
- }
- }
-
- return Status;
-}
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value written is stored
- @param Start Whether a RESTART is issued before the byte is sent or received
- @param End Whether STOP is generated after a data byte is sent or received
-
- @return EFI_SUCCESS IF the byte value has been successfully written
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS ByteWriteI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer,
- IN UINT8 Start,
- IN UINT8 End
- )
-{
-
- EFI_STATUS Status;
- UINT32 I2cStatus;
- UINT8 *TransmitEnd;
- UINT16 RawIntrStat;
- UINT32 Count=0;
-
- Status = EFI_SUCCESS;
-
- Status=I2CInit(I2cControllerIndex, SlaveAddress);
- if(Status!=EFI_SUCCESS)
- return Status;
-
- TransmitEnd = &WriteBuffer[WriteBytes];
- if( WriteBytes ) {
- DEBUG((EFI_D_INFO,"Write: --------------%d bytes to TX\r\n",TransmitEnd - WriteBuffer));
- while (TransmitEnd > WriteBuffer) {
- I2cStatus = MmioRead32 (mI2CBaseAddress + R_IC_STATUS);
- RawIntrStat = (UINT16)MmioRead32 (mI2CBaseAddress + R_IC_RawIntrStat);
- if (0 != ( RawIntrStat & I2C_INTR_TX_ABRT)) {
- MmioRead32 ( mI2CBaseAddress + R_IC_CLR_TX_ABRT);
- Status = RETURN_DEVICE_ERROR;
- DEBUG((EFI_D_ERROR,"TX ABRT TransmitEnd:0x%x WriteBuffer:0x%x\r\n", TransmitEnd, WriteBuffer));
- break;
- }
- if (0 == (I2cStatus & STAT_TFNF)) {
- //
- // If TX not full , will send cmd or continue to wait
- //
- MicroSecondDelay (FIFO_WRITE_DELAY);
- continue;
- }
-
- if(End && Start) {
- MmioWrite32 (mI2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++)|B_CMD_RESTART|B_CMD_STOP);
- } else if (!End && Start) {
- MmioWrite32 (mI2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++)|B_CMD_RESTART);
- } else if (End && !Start) {
- MmioWrite32 (mI2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++)|B_CMD_STOP);
- } else if (!End && !Start ) {
- MmioWrite32 (mI2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++));
- }
-
- //
- // Add a small delay to work around some odd behavior being seen. Without this delay bytes get dropped.
- //
- MicroSecondDelay ( FIFO_WRITE_DELAY );//wait after send cmd
-
- //
- // Time out
- //
- while(1) {
- RawIntrStat = MmioRead16 ( mI2CBaseAddress + R_IC_RawIntrStat );
- if (0 != ( RawIntrStat & I2C_INTR_TX_ABRT)) {
- MmioRead16 (mI2CBaseAddress + R_IC_CLR_TX_ABRT);
- Status = RETURN_DEVICE_ERROR;
- DEBUG((EFI_D_ERROR,"TX ABRT TransmitEnd:0x%x WriteBuffer:0x%x\r\n", TransmitEnd, WriteBuffer));
- }
- if(0 == MmioRead16(mI2CBaseAddress + R_IC_TXFLR)) break;
-
- MicroSecondDelay (FIFO_WRITE_DELAY);
- Count++;
- if(Count<1024) {
- //
- // to avoid sys hung without ul-pmc device on RVP.
- // Waiting the last request to get data and make (ReceiveDataEnd > ReadBuffer) =TRUE.
- //
- continue;
- } else {
- break;
- }
- }//while( 1 )
- }
-
- }
-
- return Status;
-}
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param ReadBytes Number of bytes to be read
- @param *ReadBuffer Address to which the value read has to be stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS ByteReadI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer
- )
-{
- EFI_STATUS Status;
-
- DEBUG ((EFI_D_INFO, "ByteReadI2C:---offset:0x%x\n",Offset));
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress,1,&Offset,TRUE,FALSE);
- Status = ByteReadI2CBasic(I2cControllerIndex, SlaveAddress,ReadBytes,ReadBuffer,TRUE,TRUE);
-
- return Status;
-}
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be written
- @param WriteBytes Number of bytes to be written
- @param *Byte Address to which the value written is stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS ByteWriteI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer
- )
-{
- EFI_STATUS Status;
-
- DEBUG ((EFI_D_INFO, "ByteWriteI2C:---offset/bytes/buf:0x%x,0x%x,0x%x,0x%x\n",Offset,WriteBytes,WriteBuffer,*WriteBuffer));
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress,1,&Offset,TRUE,FALSE);
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress,WriteBytes,WriteBuffer,FALSE,TRUE);
-
- return Status;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLibDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLibDxe.inf
deleted file mode 100644
index cd10f1de93..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLibDxe.inf
+++ /dev/null
@@ -1,39 +0,0 @@
-## @file
-# Instance of I2C Library.
-#
-# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = I2CLib
- FILE_GUID = 7f62bf44-2ba7-4c2d-9d4a-91c8906ff053
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = I2CLib|DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_DRIVER UEFI_APPLICATION
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources.common]
- I2CLib.c
-
-[LibraryClasses]
- BaseLib
- IoLib
- TimerLib
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
-
-[Protocols]
- gEfiGlobalNvsAreaProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CRegs.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CRegs.h
deleted file mode 100644
index 57455162f6..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CRegs.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/** @file
- Register Definitions for I2C Driver/PEIM.
-
- Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
---*/
-
-#ifndef I2C_REGS_H
-#define I2C_REGS_H
-
-//
-// FIFO write delay value.
-//
-#define FIFO_WRITE_DELAY 2
-
-//
-// MMIO Register Definitions.
-//
-#define R_IC_CON ( 0x00) // I2C Control
-#define B_IC_RESTART_EN BIT5
-#define B_IC_SLAVE_DISABLE BIT6
-#define V_SPEED_STANDARD 0x02
-#define V_SPEED_FAST 0x04
-#define V_SPEED_HIGH 0x06
-#define B_MASTER_MODE BIT0
-
-#define R_IC_TAR ( 0x04) // I2C Target Address
-#define IC_TAR_10BITADDR_MASTER BIT12
-
-#define R_IC_SAR ( 0x08) // I2C Slave Address
-#define R_IC_HS_MADDR ( 0x0C) // I2C HS MasterMode Code Address
-#define R_IC_DATA_CMD ( 0x10) // I2C Rx/Tx Data Buffer and Command
-
-#define B_READ_CMD BIT8 // 1 = read, 0 = write
-#define B_CMD_STOP BIT9 // 1 = STOP
-#define B_CMD_RESTART BIT10 // 1 = IC_RESTART_EN
-
-#define V_WRITE_CMD_MASK ( 0xFF)
-
-#define R_IC_SS_SCL_HCNT ( 0x14) // Standard Speed I2C Clock SCL High Count
-#define R_IC_SS_SCL_LCNT ( 0x18) // Standard Speed I2C Clock SCL Low Count
-#define R_IC_FS_SCL_HCNT ( 0x1C) // Full Speed I2C Clock SCL High Count
-#define R_IC_FS_SCL_LCNT ( 0x20) // Full Speed I2C Clock SCL Low Count
-#define R_IC_HS_SCL_HCNT ( 0x24) // High Speed I2C Clock SCL High Count
-#define R_IC_HS_SCL_LCNT ( 0x28) // High Speed I2C Clock SCL Low Count
-#define R_IC_INTR_STAT ( 0x2C) // I2C Inetrrupt Status
-#define R_IC_INTR_MASK ( 0x30) // I2C Interrupt Mask
-#define I2C_INTR_GEN_CALL BIT11 // General call received
-#define I2C_INTR_START_DET BIT10
-#define I2C_INTR_STOP_DET BIT9
-#define I2C_INTR_ACTIVITY BIT8
-#define I2C_INTR_TX_ABRT BIT6 // Set on NACK
-#define I2C_INTR_TX_EMPTY BIT4
-#define I2C_INTR_TX_OVER BIT3
-#define I2C_INTR_RX_FULL BIT2 // Data bytes in RX FIFO over threshold
-#define I2C_INTR_RX_OVER BIT1
-#define I2C_INTR_RX_UNDER BIT0
-#define R_IC_RawIntrStat ( 0x34) // I2C Raw Interrupt Status
-#define R_IC_RX_TL ( 0x38) // I2C Receive FIFO Threshold
-#define R_IC_TX_TL ( 0x3C) // I2C Transmit FIFO Threshold
-#define R_IC_CLR_INTR ( 0x40) // Clear Combined and Individual Interrupts
-#define R_IC_CLR_RX_UNDER ( 0x44) // Clear RX_UNDER Interrupt
-#define R_IC_CLR_RX_OVER ( 0x48) // Clear RX_OVERinterrupt
-#define R_IC_CLR_TX_OVER ( 0x4C) // Clear TX_OVER interrupt
-#define R_IC_CLR_RD_REQ ( 0x50) // Clear RD_REQ interrupt
-#define R_IC_CLR_TX_ABRT ( 0x54) // Clear TX_ABRT interrupt
-#define R_IC_CLR_RX_DONE ( 0x58) // Clear RX_DONE interrupt
-#define R_IC_CLR_ACTIVITY ( 0x5C) // Clear ACTIVITY interrupt
-#define R_IC_CLR_STOP_DET ( 0x60) // Clear STOP_DET interrupt
-#define R_IC_CLR_START_DET ( 0x64) // Clear START_DET interrupt
-#define R_IC_CLR_GEN_CALL ( 0x68) // Clear GEN_CALL interrupt
-#define R_IC_ENABLE ( 0x6C) // I2C Enable
-#define R_IC_STATUS ( 0x70) // I2C Status
-
-#define R_IC_SDA_HOLD ( 0x7C) // I2C IC_DEFAULT_SDA_HOLD//16bits
-
-#define STAT_MST_ACTIVITY BIT5 // Master FSM Activity Status.
-#define STAT_RFF BIT4 // RX FIFO is completely full
-#define STAT_RFNE BIT3 // RX FIFO is not empty
-#define STAT_TFE BIT2 // TX FIFO is completely empty
-#define STAT_TFNF BIT1 // TX FIFO is not full
-
-#define R_IC_TXFLR ( 0x74) // Transmit FIFO Level Register
-#define R_IC_RXFLR ( 0x78) // Receive FIFO Level Register
-#define R_IC_TX_ABRT_SOURCE ( 0x80) // I2C Transmit Abort Status Register
-#define R_IC_SLV_DATA_NACK_ONLY ( 0x84) // Generate SLV_DATA_NACK Register
-#define R_IC_DMA_CR ( 0x88) // DMA Control Register
-#define R_IC_DMA_TDLR ( 0x8C) // DMA Transmit Data Level
-#define R_IC_DMA_RDLR ( 0x90) // DMA Receive Data Level
-#define R_IC_SDA_SETUP ( 0x94) // I2C SDA Setup Register
-#define R_IC_ACK_GENERAL_CALL ( 0x98) // I2C ACK General Call Register
-#define R_IC_ENABLE_STATUS ( 0x9C) // I2C Enable Status Register
-#define R_IC_COMP_PARAM ( 0xF4) // Component Parameter Register
-#define R_IC_COMP_VERSION ( 0xF8) // Component Version ID
-#define R_IC_COMP_TYPE ( 0xFC) // Component Type
-
-#define I2C_SS_SCL_HCNT_VALUE_100M 0x1DD
-#define I2C_SS_SCL_LCNT_VALUE_100M 0x1E4
-#define I2C_FS_SCL_HCNT_VALUE_100M 0x54
-#define I2C_FS_SCL_LCNT_VALUE_100M 0x9a
-#define I2C_HS_SCL_HCNT_VALUE_100M 0x7
-#define I2C_HS_SCL_LCNT_VALUE_100M 0xE
-
-#define IC_TAR_10BITADDR_MASTER BIT12
-#define FIFO_SIZE 32
-#define R_IC_INTR_STAT ( 0x2C) // I2c Inetrrupt Status
-#define R_IC_INTR_MASK ( 0x30) // I2c Interrupt Mask
-#define I2C_INTR_GEN_CALL BIT11 // General call received
-#define I2C_INTR_START_DET BIT10
-#define I2C_INTR_STOP_DET BIT9
-#define I2C_INTR_ACTIVITY BIT8
-#define I2C_INTR_TX_ABRT BIT6 // Set on NACK
-#define I2C_INTR_TX_EMPTY BIT4
-#define I2C_INTR_TX_OVER BIT3
-#define I2C_INTR_RX_FULL BIT2 // Data bytes in RX FIFO over threshold
-#define I2C_INTR_RX_OVER BIT1
-#define I2C_INTR_RX_UNDER BIT0
-
-#define R_PCH_LPIO_I2C_MEM_RESETS 0x804 // Software Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_FUNC BIT1 // Function Clock Domain Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_APB BIT0 // APB Domain Reset
-#define R_PCH_LPSS_I2C_MEM_PCP 0x800 // Private Clock Parameters
-
-#endif
\ No newline at end of file
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CAccess.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CAccess.h
deleted file mode 100644
index bf6ef4c747..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CAccess.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/** @file
- Misc Registers Definition.
-
- Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
---*/
-
-#ifndef _I2C_ACCESS_H_
-#define _I2C_ACCESS_H_
-
-#include "I2CIoLibPei.h"
-
-#define DEFAULT_PCI_BUS_NUMBER_PCH 0
-
-#define PCI_DEVICE_NUMBER_PCH_LPC 31
-#define PCI_FUNCTION_NUMBER_PCH_LPC 0
-
-#define R_PCH_LPC_ACPI_BASE 0x40 // ABASE, 16bit
-#define R_PCH_LPC_ACPI_BASEADR 0x400 // ABASE, 16bit
-#define B_PCH_LPC_ACPI_BASE_EN BIT1 // Enable Bit
-#define B_PCH_LPC_ACPI_BASE_BAR 0x0000FF80 // Base Address, 128 Bytes
-#define V_PCH_ACPI_PM1_TMR_MAX_VAL 0x1000000 // The timer is 24 bit overflow
-#define B_PCH_ACPI_PM1_TMR_VAL 0xFFFFFF // The timer value mask
-
-#define R_PCH_ACPI_PM1_TMR 0x08 // Power Management 1 Timer
-#define V_PCH_ACPI_PM1_TMR_FREQUENCY 3579545 // Timer Frequency
-
-
-#define PchLpcPciCfg8(Register) I2CLibPeiMmioRead8 (MmPciAddress (0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPC, 0, Register))
-
-#define PCIEX_BASE_ADDRESS 0xE0000000
-#define PCI_EXPRESS_BASE_ADDRESS ((VOID *) (UINTN) PCIEX_BASE_ADDRESS)
-
-#define MmPciAddress( Segment, Bus, Device, Function, Register ) \
- ( (UINTN)PCI_EXPRESS_BASE_ADDRESS + \
- (UINTN)(Bus << 20) + \
- (UINTN)(Device << 15) + \
- (UINTN)(Function << 12) + \
- (UINTN)(Register) \
- )
-#endif
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.c
deleted file mode 100644
index d5f8dfd012..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/** @file
- MicroSecondDelay implementation of ACPI Timer.
-
- Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
---*/
-
-#include "PiPei.h"
-#include "I2CAccess.h"
-#include "I2CDelayPei.h"
-#include <Library/DebugLib.h>
-#include <Library/PeiServicesTablePointerLib.h>
-#include <Ppi/Stall.h>
-
-/**
- Stalls the CPU for at least the given number of microseconds.
- Stalls the CPU for the number of microseconds specified by MicroSeconds.
-
- @param MicroSeconds The minimum number of microseconds to delay.
-
- @return EFI_STATUS
-
-**/
-EFI_STATUS
-EFIAPI
-MicroSecondDelay (
- IN UINTN MicroSeconds
- )
-{
-
- EFI_PEI_STALL_PPI *StallPpi;
- EFI_STATUS Status;
- CONST EFI_PEI_SERVICES **PeiServices;
-
- PeiServices = GetPeiServicesTablePointer();
-
-
- Status = (**PeiServices).LocatePpi (PeiServices, &gEfiPeiStallPpiGuid, 0, NULL, &StallPpi);
- ASSERT(!EFI_ERROR(Status));
-
- StallPpi->Stall (PeiServices, StallPpi, MicroSeconds);
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.h
deleted file mode 100644
index 604f1f67c5..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/** @file
- MicroSecondDelay implementation of ACPI Timer.
-
- Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef __I2C_DELAY_PEI__
-
-#define __I2C_DELAY_PEI__
-#include "PiPei.h"
-
-/**
- Stalls the CPU for at least the given number of microseconds.
-
- Stalls the CPU for the number of microseconds specified by MicroSeconds.
-
- @param MicroSeconds The minimum number of microseconds to delay.
-
- @return MicroSeconds
-
-**/
-EFI_STATUS
-EFIAPI
-MicroSecondDelay (
- IN UINTN MicroSeconds
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.c
deleted file mode 100644
index 6a37dbec1d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/** @file
- Functions for access I2C MMIO register.
-
- Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiPei.h>
-#include <Library/DebugLib.h>
-#include <Library/PeiServicesTablePointerLib.h>
-
-/**
- Reads an 8-bit MMIO register.
-
- Reads the 8-bit MMIO register specified by Address. The 8-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 8-bit MMIO register operations are not supported, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-UINT8
-EFIAPI
-I2CLibPeiMmioRead8 (
- IN UINTN Address
- )
-{
- UINT8 Value;
-
- Value = *(volatile UINT8*)Address;
- return Value;
-}
-
-/**
- Reads a 16-bit MMIO register.
-
- Reads the 16-bit MMIO register specified by Address. The 16-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 16-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 16-bit boundary, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-UINT16
-EFIAPI
-I2CLibPeiMmioRead16 (
- IN UINTN Address
- )
-{
- UINT16 Value;
-
- ASSERT ((Address & 1) == 0);
- Value = *(volatile UINT16*)Address;
- return Value;
-}
-
-/**
- Writes a 16-bit MMIO register.
-
- Writes the 16-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 16-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 16-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write.
- @param Value The value to write to the MMIO register.
-
- @return Value.
-
-**/
-UINT16
-EFIAPI
-I2CLibPeiMmioWrite16 (
- IN UINTN Address,
- IN UINT16 Value
- )
-{
- ASSERT ((Address & 1) == 0);
- *(volatile UINT16*)Address = Value;
- return Value;
-}
-
-/**
- Reads a 32-bit MMIO register.
-
- Reads the 32-bit MMIO register specified by Address. The 32-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioRead32 (
- IN UINTN Address
- )
-{
- UINT32 Value;
-
- ASSERT ((Address & 3) == 0);
- Value = *(volatile UINT32*)Address;
-
- return Value;
-}
-
-/**
- Writes a 32-bit MMIO register.
-
- Writes the 32-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write.
- @param Value The value to write to the MMIO register.
-
- @return Value.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioWrite32 (
- IN UINTN Address,
- IN UINT32 Value
- )
-{
- ASSERT ((Address & 3) == 0);
- *(volatile UINT32*)Address = Value;
- return Value;
-}
-
-/**
- OR a 32-bit MMIO register.
-
- OR the 32-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write OR.
- @param Value The value to OR to the MMIO register.
-
- @return Value.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioOr32 (
- IN UINTN Address,
- IN UINT32 OrData
- )
-{
- return I2CLibPeiMmioWrite32 (Address, I2CLibPeiMmioRead32(Address) | OrData);
-}
-
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.h
deleted file mode 100644
index b68bc1ed09..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/** @file
- Functions for access I2C MMIO register.
-
- Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef __I2C_IOLIB_PEI__
-
-#define __I2C_IOLIB_PEI__
-#include <PiPei.h>
-
-
-/**
- Reads an 8-bit MMIO register.
-
- Reads the 8-bit MMIO register specified by Address. The 8-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 8-bit MMIO register operations are not supported, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-
-UINT8
-EFIAPI
-I2CLibPeiMmioRead8 (
- IN UINTN Address
- );
-
-
-/**
- Reads a 16-bit MMIO register.
-
- Reads the 16-bit MMIO register specified by Address. The 16-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 16-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 16-bit boundary, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-UINT16
-EFIAPI
-I2CLibPeiMmioRead16 (
- IN UINTN Address
- );
-
-
-/**
- Writes a 16-bit MMIO register.
-
- Writes the 16-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 16-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 16-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write.
- @param Value The value to write to the MMIO register.
-
- @return Value.
-
-**/
-UINT16
-EFIAPI
-I2CLibPeiMmioWrite16 (
- IN UINTN Address,
- IN UINT16 Value
- );
-
-
-/**
- Reads a 32-bit MMIO register.
-
- Reads the 32-bit MMIO register specified by Address. The 32-bit read value is
- returned. This function must guarantee that all MMIO read and write
- operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to read.
-
- @return The value read.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioRead32 (
- IN UINTN Address
- );
-
-
-/**
- Writes a 32-bit MMIO register.
-
- Writes the 32-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write.
- @param Value The value to write to the MMIO register.
-
- @return Value.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioWrite32 (
- IN UINTN Address,
- IN UINT32 Value
- );
-
-
-/**
- OR a 32-bit MMIO register.
-
- OR the 32-bit MMIO register specified by Address with the value specified
- by Value and returns Value. This function must guarantee that all MMIO read
- and write operations are serialized.
-
- If 32-bit MMIO register operations are not supported, then ASSERT().
- If Address is not aligned on a 32-bit boundary, then ASSERT().
-
- @param Address The MMIO register to write OR.
- @param Value The value to OR to the MMIO register.
-
- @return Value.
-
-**/
-UINT32
-EFIAPI
-I2CLibPeiMmioOr32 (
- IN UINTN Address,
- IN UINT32 OrData
- );
-
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.c
deleted file mode 100644
index dd5cceb70d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.c
+++ /dev/null
@@ -1,638 +0,0 @@
-/** @file
- I2C PEI Lib Instance.
-
- Copyright (c) 1999- 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "I2CDelayPei.h"
-#include "I2CIoLibPei.h"
-#include "I2CAccess.h"
-#include "I2CLibPei.h"
-#include <PlatformBaseAddresses.h>
-#include <Library/DebugLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/PeiServicesTablePointerLib.h>
-#include <Library/HobLib.h>
-#include <PchRegs/PchRegsPcu.h>
-#include <PchRegs/PchRegsLpss.h>
-
-#define LPSS_PCI_DEVICE_NUMBER 8
-
-#define R_PCH_LPIO_I2C_MEM_RESETS 0x804 // Software Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_FUNC BIT1 // Function Clock Domain Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_APB BIT0 // APB Domain Reset
-#define R_PCH_LPSS_I2C_MEM_PCP 0x800 // Private Clock Parameters
-
-#define PEI_TEPM_LPSS_DMA_BAR 0xFE900000
-#define PEI_TEPM_LPSS_I2C0_BAR 0xFE910000
-#define PCI_CONFIG_SPACE_SIZE 0x10000
-
-EFI_GUID mI2CPeiInitGuid = {
- 0x96DED71A, 0xB9E7, 0x4EAD, 0x96, 0x2C, 0x01, 0x69, 0x3C, 0xED, 0x2A, 0x64
-};
-
-
-UINT16 I2CGPIO[]= {
- //
- // 19.1.6 I2C0
- // I2C0_SDA-OD-O - write 0x2003CC81 to IOBASE + 0x0210
- // I2C0_SCL-OD-O - write 0x2003CC81 to IOBASE + 0x0200
- //
- 0x0210,
- 0x0200,
-
- //
- // 19.1.7 I2C1
- // I2C1_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x01F0
- // I2C1_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x01E0
- //
- 0x01F0,
- 0x01E0,
-
- //
- // 19.1.8 I2C2
- // I2C2_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x01D0
- // I2C2_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x01B0
- //
- 0x01D0,
- 0x01B0,
-
- //
- // 19.1.9 I2C3
- // I2C3_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x0190
- // I2C3_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x01C0
- //
- 0x0190,
- 0x01C0,
-
- //
- // 19.1.10 I2C4
- // I2C4_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x01A0
- // I2C4_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x0170
- //
- 0x01A0,
- 0x0170,
-
- //
- // 19.1.11 I2C5
- // I2C5_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x0150
- // I2C5_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x0140
- //
- 0x0150,
- 0x0140,
-
- //
- // 19.1.12 I2C6
- // I2C6_SDA-OD-O/I - write 0x2003CC81 to IOBASE + 0x0180
- // I2C6_SCL-OD-O/I - write 0x2003CC81 to IOBASE + 0x0160
- //
- 0x0180,
- 0x0160
-};
-
-/**
- Constructor of this library.
-
- @param VOID
-
- @return EFI_SUCCESS
-**/
-EFI_STATUS
-EFIAPI
-IntelI2CPeiLibConstructor (
- IN EFI_PEI_FILE_HANDLE FileHandle,
- IN CONST EFI_PEI_SERVICES **PeiServices
- )
-{
- UINTN Index;
-
- for (Index = 0; Index < sizeof(I2CGPIO)/sizeof(UINT16); Index ++) {
- I2CLibPeiMmioWrite32(IO_BASE_ADDRESS+I2CGPIO[Index], 0x2003CC81);
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Programe all I2C controllers on LPSS.
-
- I2C0 is function 1 of LPSS. I2C1 is function 2 of LPSS, etc..
-
- @param VOID
-
- @return EFI_SUCCESS
-**/
-EFI_STATUS
-ProgramPciLpssI2C (
- VOID
- )
-{
- UINT32 PmcBase;
- UINT32 DevID;
- UINTN PciMmBase=0;
- UINTN Index;
- UINTN Bar0;
- UINTN Bar1;
- DEBUG ((EFI_D_INFO, "Pei ProgramPciLpssI2C() Start\n"));
-
- //
- // Set the VLV Function Disable Register to ZERO
- //
- PmcBase = I2CLibPeiMmioRead32(PciD31F0RegBase + R_PCH_LPC_PMC_BASE) & B_PCH_LPC_PMC_BASE_BAR;
-
- if(I2CLibPeiMmioRead32(PmcBase + R_PCH_PMC_FUNC_DIS)&
- (B_PCH_PMC_FUNC_DIS_LPSS2_FUNC1 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC2
- | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC3 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC4 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC5
- | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC6 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC7)) {
- I2CLibPeiMmioWrite32(
- PmcBase+R_PCH_PMC_FUNC_DIS,
- I2CLibPeiMmioRead32(PmcBase + R_PCH_PMC_FUNC_DIS)& \
- ~(B_PCH_PMC_FUNC_DIS_LPSS2_FUNC1 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC2 \
- | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC3 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC4 \
- | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC5 | B_PCH_PMC_FUNC_DIS_LPSS2_FUNC6|B_PCH_PMC_FUNC_DIS_LPSS2_FUNC7)
- );
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() enable all I2C controllers\n"));
- }
-
- for(Index = 0; Index < LPSS_PCI_DEVICE_NUMBER; Index ++) {
-
- PciMmBase = MmPciAddress (
- 0,
- DEFAULT_PCI_BUS_NUMBER_PCH,
- PCI_DEVICE_NUMBER_PCH_LPSS_I2C,
- Index,
- 0
- );
- DevID = I2CLibPeiMmioRead32(PciMmBase);
-
- Bar0 = PEI_TEPM_LPSS_DMA_BAR + (Index * PCI_CONFIG_SPACE_SIZE);
- Bar1 = Bar0 + 0x8000;
-
- DEBUG((EFI_D_ERROR, "Program Pci Lpss I2C Device Function=%x DevID=%08x\n", Index, DevID));
-
- //
- // Check if device present
- //
- if (DevID != 0xFFFFFFFF) {
- if(!(I2CLibPeiMmioRead32 (PciMmBase + R_PCH_LPSS_I2C_STSCMD) & B_PCH_LPSS_I2C_STSCMD_MSE)) {
- //
- // Program BAR 0
- //
- I2CLibPeiMmioWrite32((UINTN) (PciMmBase + R_PCH_LPSS_I2C_BAR), (UINT32)(Bar0 & B_PCH_LPSS_I2C_BAR_BA));
-
- DEBUG ((EFI_D_ERROR, "I2CBaseAddress1 = 0x%x \n",I2CLibPeiMmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR)));
-
- //
- // Program BAR 1
- //
- I2CLibPeiMmioWrite32 ((UINTN)(PciMmBase + R_PCH_LPSS_I2C_BAR1), (UINT32)(Bar1 & B_PCH_LPSS_I2C_BAR1_BA));
- DEBUG ((EFI_D_ERROR, "I2CBaseAddress1 = 0x%x \n",I2CLibPeiMmioRead32(PciMmBase+R_PCH_LPSS_I2C_BAR1)));
-
- //
- // Bus Master Enable & Memory Space Enable
- //
- I2CLibPeiMmioWrite32((UINTN) (PciMmBase + R_PCH_LPSS_I2C_STSCMD), (UINT32)(B_PCH_LPSS_I2C_STSCMD_BME | B_PCH_LPSS_I2C_STSCMD_MSE));
- }
-
- //
- // Release Resets
- //
- I2CLibPeiMmioWrite32 (Bar0 + R_PCH_LPIO_I2C_MEM_RESETS, (B_PCH_LPIO_I2C_MEM_RESETS_FUNC | B_PCH_LPIO_I2C_MEM_RESETS_APB));
-
- //
- // Activate Clocks
- //
- I2CLibPeiMmioWrite32 (Bar0 + R_PCH_LPSS_I2C_MEM_PCP, 0x80020003);//No use for A0
-
- DEBUG ((EFI_D_INFO, "ProgramPciLpssI2C() Programmed()\n"));
- }
-
- }
-
- DEBUG ((EFI_D_INFO, "Pei ProgramPciLpssI2C() End\n"));
-
- return EFI_SUCCESS;
-}
-
-/**
- Disable I2C Bus.
-
- @param I2cControllerIndex Index of I2C controller.
-
- @return EFI_SUCCESS
-**/
-EFI_STATUS
-I2cDisable (
- IN UINT8 I2cControllerIndex
- )
-{
- UINTN I2CBaseAddress;
- UINT32 NumTries = 10000; // 0.1 seconds
-
- I2CBaseAddress = (UINT32) PEI_TEPM_LPSS_I2C0_BAR + I2cControllerIndex * PCI_CONFIG_SPACE_SIZE;
-
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_ENABLE, 0);
- while (0 != ( I2CLibPeiMmioRead16 (I2CBaseAddress + R_IC_ENABLE_STATUS ) & 1)) {
- MicroSecondDelay (10);
- NumTries --;
- if(0 == NumTries) return EFI_NOT_READY;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Enable I2C Bus.
-
- @param I2cControllerIndex Index of I2C controller.
-
- @return EFI_SUCCESS
-**/
-EFI_STATUS
-I2cEnable (
- IN UINT8 I2cControllerIndex
- )
-{
- UINTN I2CBaseAddress;
- UINT32 NumTries = 10000; // 0.1 seconds
-
- I2CBaseAddress = (UINT32) PEI_TEPM_LPSS_I2C0_BAR+ I2cControllerIndex * PCI_CONFIG_SPACE_SIZE;
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_ENABLE, 1);
- while (0 == ( I2CLibPeiMmioRead16 ( I2CBaseAddress + R_IC_ENABLE_STATUS ) & 1)) {
- MicroSecondDelay (10);
- NumTries --;
- if(0 == NumTries) return EFI_NOT_READY;
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Set the I2C controller bus clock frequency.
-
- @param[in] This Address of the library's I2C context structure
- @param[in] PlatformData Address of the platform configuration data
- @param[in] BusClockHertz New I2C bus clock frequency in Hertz
-
- @retval RETURN_SUCCESS The bus frequency was set successfully.
- @retval RETURN_UNSUPPORTED The controller does not support this frequency.
-
-**/
-EFI_STATUS
-I2cBusFrequencySet (
- IN UINTN I2CBaseAddress,
- IN UINTN BusClockHertz,
- IN UINT16 *I2cMode
- )
-{
- DEBUG((EFI_D_INFO,"InputFreq BusClockHertz: %d\r\n",BusClockHertz));
-
- *I2cMode = B_IC_RESTART_EN | B_IC_SLAVE_DISABLE | B_MASTER_MODE;
-
- //
- // Set the 100 KHz clock divider
- //
- // From Table 10 of the I2C specification
- //
- // High: 4.00 uS
- // Low: 4.70 uS
- //
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_SS_SCL_HCNT, (UINT16)0x214 );
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_SS_SCL_LCNT, (UINT16)0x272 );
-
- //
- // Set the 400 KHz clock divider
- //
- // From Table 10 of the I2C specification
- //
- // High: 0.60 uS
- // Low: 1.30 uS
- //
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_FS_SCL_HCNT, (UINT16)0x50 );
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_FS_SCL_LCNT, (UINT16)0xAD );
-
- switch ( BusClockHertz ) {
- case 100 * 1000:
- I2CLibPeiMmioWrite32 ( I2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x40);//100K
- *I2cMode |= V_SPEED_STANDARD;
- break;
- case 400 * 1000:
- I2CLibPeiMmioWrite32 ( I2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x32);//400K
- *I2cMode |= V_SPEED_FAST;
- break;
- default:
- I2CLibPeiMmioWrite32 ( I2CBaseAddress + R_IC_SDA_HOLD, (UINT16)0x09);//3.4M
- *I2cMode |= V_SPEED_HIGH;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Initializes the host controller to execute I2C commands.
-
- @param I2cControllerIndex Index of I2C controller in LPSS device. 0 represents I2C0, which is PCI function 1 of LPSS device.
-
- @return EFI_SUCCESS Opcode initialization on the I2C host controller completed.
- @return EFI_DEVICE_ERROR Device error, operation failed.
-**/
-EFI_STATUS
-I2CInit (
- UINT8 I2cControllerIndex,
- UINT16 SlaveAddress
- )
-{
- EFI_STATUS Status;
- UINT32 NumTries = 0;
- UINTN I2CBaseAddress;
- UINT16 I2cMode;
- UINTN PciMmBase=0;
-
-
- PciMmBase = MmPciAddress (
- 0,
- DEFAULT_PCI_BUS_NUMBER_PCH,
- PCI_DEVICE_NUMBER_PCH_LPSS_I2C,
- (I2cControllerIndex + 1),
- 0
- );
-
- I2CBaseAddress = I2CLibPeiMmioRead32 (PciMmBase+R_PCH_LPSS_I2C_BAR);
-
- //
- // Verify the parameters
- //
- if (1023 < SlaveAddress ) {
- Status = EFI_INVALID_PARAMETER;
- DEBUG((EFI_D_INFO,"I2cStartRequest Exit with Status %r\r\n", Status));
- return Status;
- }
-
- if(I2CBaseAddress == (PEI_TEPM_LPSS_I2C0_BAR + I2cControllerIndex * PCI_CONFIG_SPACE_SIZE)) {
- return EFI_SUCCESS;
- }
- ProgramPciLpssI2C();
-
- I2CBaseAddress = (UINT32) (PEI_TEPM_LPSS_I2C0_BAR + I2cControllerIndex * PCI_CONFIG_SPACE_SIZE);
- DEBUG ((EFI_D_ERROR, "I2CBaseAddress = 0x%x \n",I2CBaseAddress));
- NumTries = 10000; // 1 seconds
- while ((1 == ( I2CLibPeiMmioRead32 ( I2CBaseAddress + R_IC_STATUS) & STAT_MST_ACTIVITY ))) {
- MicroSecondDelay(10);
- NumTries --;
- if(0 == NumTries)
- return EFI_DEVICE_ERROR;
- }
-
- Status = I2cDisable (I2cControllerIndex);
- DEBUG((EFI_D_INFO, "I2cDisable Status = %r\r\n", Status));
-
- I2cBusFrequencySet(I2CBaseAddress, 400 * 1000, &I2cMode);//Set I2cMode
-
- I2CLibPeiMmioWrite16(I2CBaseAddress + R_IC_INTR_MASK, 0x0);
- if (0x7F < SlaveAddress) {
- SlaveAddress = (SlaveAddress & 0x3ff ) | IC_TAR_10BITADDR_MASTER;
- }
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_TAR, (UINT16) SlaveAddress );
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_RX_TL, 0);
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_TX_TL, 0 );
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_CON, I2cMode);
-
- Status = I2cEnable(I2cControllerIndex);
- DEBUG((EFI_D_INFO, "I2cEnable Status = %r\r\n", Status));
- I2CLibPeiMmioRead16 ( I2CBaseAddress + R_IC_CLR_TX_ABRT );
-
- return EFI_SUCCESS;
-}
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value read has to be stored
-
- @return EFI_SUCCESS If the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS ByteReadI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer,
- IN UINT8 Start,
- IN UINT8 End
- )
-{
-
- EFI_STATUS Status;
- UINT32 I2cStatus;
- UINT16 ReceiveData;
- UINT8 *ReceiveDataEnd;
- UINT8 *ReceiveRequest;
- UINT16 RawIntrStat;
- UINTN I2CBaseAddress;
-
- I2CBaseAddress = (UINT32)(PEI_TEPM_LPSS_I2C0_BAR + I2cControllerIndex * PCI_CONFIG_SPACE_SIZE);
-
- Status = EFI_SUCCESS;
-
- I2CInit(I2cControllerIndex, SlaveAddress);
-
- ReceiveDataEnd = &ReadBuffer [ReadBytes];
- if(ReadBytes) {
- ReceiveRequest = ReadBuffer;
- DEBUG((EFI_D_INFO,"Read: ---------------%d bytes to RX\r\n",ReceiveDataEnd - ReceiveRequest));
-
- while ((ReceiveDataEnd > ReceiveRequest) || (ReceiveDataEnd > ReadBuffer)) {
- //
- // Check for NACK
- //
- RawIntrStat = I2CLibPeiMmioRead16 (I2CBaseAddress + R_IC_RawIntrStat );
- if ( 0 != (RawIntrStat & I2C_INTR_TX_ABRT )) {
- I2CLibPeiMmioRead16 ( I2CBaseAddress + R_IC_CLR_TX_ABRT );
- Status = RETURN_DEVICE_ERROR;
- DEBUG((EFI_D_INFO,"TX ABRT ,%d bytes hasn't been transferred\r\n",ReceiveDataEnd - ReceiveRequest));
- break;
- }
-
- //
- // Determine if another byte was received
- //
- I2cStatus = I2CLibPeiMmioRead16 ( I2CBaseAddress + R_IC_STATUS );
- if ( 0 != ( I2cStatus & STAT_RFNE )) {
- ReceiveData = I2CLibPeiMmioRead16 ( I2CBaseAddress + R_IC_DATA_CMD );
- *ReadBuffer++ = (UINT8)ReceiveData;
- DEBUG((EFI_D_INFO,"MmioRead32 ,1 byte 0x:%x is received\r\n",ReceiveData));
- }
-
- if(ReceiveDataEnd==ReceiveRequest) {
- //
- // Waiting the last request to get data and make (ReceiveDataEnd > ReadBuffer) =TRUE.
- //
- continue;
- }
-
- //
- // Wait until a read request will fit
- //
- if ( 0 == ( I2cStatus & STAT_TFNF )) {
- MicroSecondDelay ( 10 );
- continue;
- }
-
- //
- // Issue the next read request
- //
- if(End && Start ) {
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_RESTART|B_CMD_STOP);
- } else if (!End && Start ) {
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_RESTART);
- } else if (End && !Start ) {
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD|B_CMD_STOP);
- } else if (!End && !Start ) {
- I2CLibPeiMmioWrite16 ( I2CBaseAddress + R_IC_DATA_CMD, B_READ_CMD);
- }
- ReceiveRequest += 1;
- }
-
- }
- return Status;
-
-}
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value written is stored
-
- @return EFI_SUCCESS IF the byte value has been successfully written
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteWriteI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer,
- IN UINT8 Start,
- IN UINT8 End
- )
-{
-
- EFI_STATUS Status;
- UINT32 I2cStatus;
- UINT8 *TransmitEnd;
- UINT16 RawIntrStat;
- UINTN I2CBaseAddress;
-
- I2CBaseAddress = (UINT32)PEI_TEPM_LPSS_I2C0_BAR+ I2cControllerIndex * PCI_CONFIG_SPACE_SIZE;
-
- Status = EFI_SUCCESS;
-
- I2CInit(I2cControllerIndex, SlaveAddress);
-
- TransmitEnd = &WriteBuffer [WriteBytes];
- if( WriteBytes ) {
-
- DEBUG((EFI_D_INFO,"Write: --------------%d bytes to TX\r\n", TransmitEnd - WriteBuffer));
-
- while ( TransmitEnd > WriteBuffer) {
- I2cStatus = I2CLibPeiMmioRead16 (I2CBaseAddress + R_IC_STATUS);
- RawIntrStat = I2CLibPeiMmioRead16 (I2CBaseAddress + R_IC_RawIntrStat);
- if ( 0 != (RawIntrStat & I2C_INTR_TX_ABRT)) {
- I2CLibPeiMmioRead16 (I2CBaseAddress + R_IC_CLR_TX_ABRT);
- Status = RETURN_DEVICE_ERROR;
- DEBUG((EFI_D_ERROR,"TX ABRT TransmitEnd:0x%x WriteBuffer:0x%x\r\n", TransmitEnd, WriteBuffer));
- break;
- }
- if (0 == ( I2cStatus & STAT_TFNF)) {
- continue;
- }
- if(End && Start) {
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++) | B_CMD_RESTART | B_CMD_STOP);
- } else if (!End && Start ) {
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++) | B_CMD_RESTART);
- } else if (End && !Start ) {
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++) | B_CMD_STOP);
- } else if (!End && !Start ) {
- I2CLibPeiMmioWrite16 (I2CBaseAddress + R_IC_DATA_CMD, (*WriteBuffer++));
- }
-
- // Add a small delay to work around some odd behavior being seen. Without this delay bytes get dropped.
- MicroSecondDelay ( FIFO_WRITE_DELAY );
- }
-
- }
-
- if(EFI_ERROR(Status)) {
- DEBUG((EFI_D_INFO,"I2cStartRequest Exit with Status %r\r\n",Status));
- }
-
- return Status;
-}
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param ReadBytes Number of bytes to be read
- @param *ReadBuffer Address to which the value read has to be stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteReadI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer
- )
-{
- EFI_STATUS Status;
-
- DEBUG ((EFI_D_ERROR, "ByteReadI2C:---offset:0x%x\n",Offset));
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress, 1, &Offset,TRUE,FALSE);
- Status = ByteReadI2CBasic(I2cControllerIndex, SlaveAddress, ReadBytes, ReadBuffer, TRUE, TRUE);
-
- return Status;
-}
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be written
- @param WriteBytes Number of bytes to be written
- @param *Byte Address to which the value written is stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS ByteWriteI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer
- )
-{
- EFI_STATUS Status;
-
- DEBUG ((EFI_D_ERROR, "ByteWriteI2C:---offset/bytes/buf:0x%x,0x%x,0x%x,0x%x\n",Offset,WriteBytes,WriteBuffer,*WriteBuffer));
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress, 1, &Offset, TRUE, FALSE);
- Status = ByteWriteI2CBasic(I2cControllerIndex, SlaveAddress, WriteBytes, WriteBuffer, FALSE, TRUE);
-
- return Status;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.h
deleted file mode 100644
index 47536aebf7..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.h
+++ /dev/null
@@ -1,280 +0,0 @@
-/** @file
- I2C PEI Lib Instance.
-
- Copyright (c) 1999- 2015, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef I2C_PEI_REGS_H
-#define I2C_PEI_REGS_H
-
-#include "PiPei.h"
-
-#define R_PCH_LPC_PMC_BASE 0x44
-#define B_PCH_LPC_PMC_BASE_BAR 0xFFFFFE00
-#define R_PCH_PMC_FUNC_DIS 0x34 // Function Disable Register
-#define PCIEX_BASE_ADDRESS 0xE0000000
-#define PciD31F0RegBase PCIEX_BASE_ADDRESS + (UINT32) (31 << 15)
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC7 BIT7 // LPSS SPI Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC6 BIT6 // LPSS HSUART #2 Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC5 BIT5 // LPSS HSUART #1 Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC4 BIT4 // LPSS I2S Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC3 BIT3 // LPSS PCM Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC2 BIT2 // LPSS I2C #2 Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC1 BIT1 // LPSS I2C #1 Disable
-#define B_PCH_PMC_FUNC_DIS_LPSS_FUNC0 BIT0 // LPSS DMA Disable
-
-
-#define DEFAULT_PCI_BUS_NUMBER_PCH 0
-
-#define R_PCH_LPSS_I2C_STSCMD 0x04 // Status & Command
-#define B_PCH_LPSS_I2C_STSCMD_RMA BIT29 // RMA
-#define B_PCH_LPSS_I2C_STSCMD_RCA BIT28 // RCA
-#define B_PCH_LPSS_I2C_STSCMD_CAPLIST BIT20 // Capability List
-#define B_PCH_LPSS_I2C_STSCMD_INTRSTS BIT19 // Interrupt Status
-#define B_PCH_LPSS_I2C_STSCMD_INTRDIS BIT10 // Interrupt Disable
-#define B_PCH_LPSS_I2C_STSCMD_SERREN BIT8 // SERR# Enable
-#define B_PCH_LPSS_I2C_STSCMD_BME BIT2 // Bus Master Enable
-#define B_PCH_LPSS_I2C_STSCMD_MSE BIT1 // Memory Space Enable
-
-#define R_PCH_LPSS_I2C_BAR 0x10 // BAR
-#define B_PCH_LPSS_I2C_BAR_BA 0xFFFFF000 // Base Address
-#define B_PCH_LPSS_I2C_BAR_SI 0x00000FF0 // Size Indicator
-#define B_PCH_LPSS_I2C_BAR_PF BIT3 // Prefetchable
-#define B_PCH_LPSS_I2C_BAR_TYPE (BIT2 | BIT1) // Type
-#define B_PCH_LPSS_I2C_BAR_MS BIT0 // Message Space
-
-#define R_PCH_LPSS_I2C_BAR1 0x14 // BAR 1
-#define B_PCH_LPSS_I2C_BAR1_BA 0xFFFFF000 // Base Address
-#define B_PCH_LPSS_I2C_BAR1_SI 0x00000FF0 // Size Indicator
-#define B_PCH_LPSS_I2C_BAR1_PF BIT3 // Prefetchable
-#define B_PCH_LPSS_I2C_BAR1_TYPE (BIT2 | BIT1) // Type
-#define B_PCH_LPSS_I2C_BAR1_MS BIT0 // Message Space
-
-#define NUM_RETRIES 0xFFFF
-
-//
-// LPIO I2C Module Memory Space Registers
-//
-#define R_PCH_LPIO_I2C_MEM_RESETS 0x804 // Software Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_FUNC BIT1 // Function Clock Domain Reset
-#define B_PCH_LPIO_I2C_MEM_RESETS_APB BIT0 // APB Domain Reset
-
-#define R_PCH_LPSS_I2C_MEM_PCP 0x800 // Private Clock Parameters
-
-#define bit(a) 1 << (a)
-
-//
-// MMIO Register Definitions
-//
-
-#define I2C0_REG_SPACE_ADDR_BASE 0xFF138000 //01K
-
-#define R_IC_CON ( 0x00) // I2C Control
-#define B_IC_RESTART_EN BIT5
-#define B_IC_SLAVE_DISABLE BIT6
-#define V_SPEED_STANDARD 0x02
-#define V_SPEED_FAST 0x04
-#define V_SPEED_HIGH 0x06
-#define B_MASTER_MODE BIT0
-
-#define R_IC_TAR ( 0x04) // I2C Target Address
-#define IC_TAR_10BITADDR_MASTER BIT12
-
-#define R_IC_SAR ( 0x08) // I2C Slave Address
-#define R_IC_HS_MADDR ( 0x0C) // I2C HS MasterMode Code Address
-#define R_IC_DATA_CMD ( 0x10) // I2C Rx/Tx Data Buffer and Command
-
-#define B_READ_CMD BIT8 // 1 = read, 0 = write
-#define B_CMD_STOP BIT9 // 1 = STOP
-#define B_CMD_RESTART BIT10 // 1 = IC_RESTART_EN
-
-#define V_WRITE_CMD_MASK ( 0xFF)
-
-#define R_IC_SS_SCL_HCNT ( 0x14) // Standard Speed I2C Clock SCL High Count
-#define R_IC_SS_SCL_LCNT ( 0x18) // Standard Speed I2C Clock SCL Low Count
-#define R_IC_FS_SCL_HCNT ( 0x1C) // Full Speed I2C Clock SCL High Count
-#define R_IC_FS_SCL_LCNT ( 0x20) // Full Speed I2C Clock SCL Low Count
-#define R_IC_HS_SCL_HCNT ( 0x24) // High Speed I2C Clock SCL High Count
-#define R_IC_HS_SCL_LCNT ( 0x28) // High Speed I2C Clock SCL Low Count
-#define R_IC_INTR_STAT ( 0x2C) // I2C Inetrrupt Status
-#define R_IC_INTR_MASK ( 0x30) // I2C Interrupt Mask
-#define I2C_INTR_GEN_CALL BIT11 // General call received
-#define I2C_INTR_START_DET BIT10
-#define I2C_INTR_STOP_DET BIT9
-#define I2C_INTR_ACTIVITY BIT8
-#define I2C_INTR_TX_ABRT BIT6 // Set on NACK
-#define I2C_INTR_TX_EMPTY BIT4
-#define I2C_INTR_TX_OVER BIT3
-#define I2C_INTR_RX_FULL BIT2 // Data bytes in RX FIFO over threshold
-#define I2C_INTR_RX_OVER BIT1
-#define I2C_INTR_RX_UNDER BIT0
-#define R_IC_RawIntrStat ( 0x34) // I2C Raw Interrupt Status
-#define R_IC_RX_TL ( 0x38) // I2C Receive FIFO Threshold
-#define R_IC_TX_TL ( 0x3C) // I2C Transmit FIFO Threshold
-#define R_IC_CLR_INTR ( 0x40) // Clear Combined and Individual Interrupts
-#define R_IC_CLR_RX_UNDER ( 0x44) // Clear RX_UNDER Interrupt
-#define R_IC_CLR_RX_OVER ( 0x48) // Clear RX_OVERinterrupt
-#define R_IC_CLR_TX_OVER ( 0x4C) // Clear TX_OVER interrupt
-#define R_IC_CLR_RD_REQ ( 0x50) // Clear RD_REQ interrupt
-#define R_IC_CLR_TX_ABRT ( 0x54) // Clear TX_ABRT interrupt
-#define R_IC_CLR_RX_DONE ( 0x58) // Clear RX_DONE interrupt
-#define R_IC_CLR_ACTIVITY ( 0x5C) // Clear ACTIVITY interrupt
-#define R_IC_CLR_STOP_DET ( 0x60) // Clear STOP_DET interrupt
-#define R_IC_CLR_START_DET ( 0x64) // Clear START_DET interrupt
-#define R_IC_CLR_GEN_CALL ( 0x68) // Clear GEN_CALL interrupt
-#define R_IC_ENABLE ( 0x6C) // I2C Enable
-#define R_IC_STATUS ( 0x70) // I2C Status
-
-#define R_IC_SDA_HOLD ( 0x7C) // I2C IC_DEFAULT_SDA_HOLD//16bits
-
-#define STAT_MST_ACTIVITY BIT5 // Master FSM Activity Status.
-#define STAT_RFF BIT4 // RX FIFO is completely full
-#define STAT_RFNE BIT3 // RX FIFO is not empty
-#define STAT_TFE BIT2 // TX FIFO is completely empty
-#define STAT_TFNF BIT1 // TX FIFO is not full
-
-#define R_IC_TXFLR ( 0x74) // Transmit FIFO Level Register
-#define R_IC_RXFLR ( 0x78) // Receive FIFO Level Register
-#define R_IC_TX_ABRT_SOURCE ( 0x80) // I2C Transmit Abort Status Register
-#define R_IC_SLV_DATA_NACK_ONLY ( 0x84) // Generate SLV_DATA_NACK Register
-#define R_IC_DMA_CR ( 0x88) // DMA Control Register
-#define R_IC_DMA_TDLR ( 0x8C) // DMA Transmit Data Level
-#define R_IC_DMA_RDLR ( 0x90) // DMA Receive Data Level
-#define R_IC_SDA_SETUP ( 0x94) // I2C SDA Setup Register
-#define R_IC_ACK_GENERAL_CALL ( 0x98) // I2C ACK General Call Register
-#define R_IC_ENABLE_STATUS ( 0x9C) // I2C Enable Status Register
-#define R_IC_COMP_PARAM ( 0xF4) // Component Parameter Register
-#define R_IC_COMP_VERSION ( 0xF8) // Component Version ID
-#define R_IC_COMP_TYPE ( 0xFC) // Component Type
-
-#define I2C_SS_SCL_HCNT_VALUE_100M 0x1DD
-#define I2C_SS_SCL_LCNT_VALUE_100M 0x1E4
-#define I2C_FS_SCL_HCNT_VALUE_100M 0x54
-#define I2C_FS_SCL_LCNT_VALUE_100M 0x9a
-#define I2C_HS_SCL_HCNT_VALUE_100M 0x7
-#define I2C_HS_SCL_LCNT_VALUE_100M 0xE
-
-//
-// FIFO write workaround value.
-//
-#define FIFO_WRITE_DELAY 2
-#define IC_TAR_10BITADDR_MASTER BIT12
-#define FIFO_SIZE 32
-#define R_IC_INTR_STAT ( 0x2C) // I2c Inetrrupt Status
-#define R_IC_INTR_MASK ( 0x30) // I2c Interrupt Mask
-#define I2C_INTR_GEN_CALL BIT11 // General call received
-#define I2C_INTR_START_DET BIT10
-#define I2C_INTR_STOP_DET BIT9
-#define I2C_INTR_ACTIVITY BIT8
-#define I2C_INTR_TX_ABRT BIT6 // Set on NACK
-#define I2C_INTR_TX_EMPTY BIT4
-#define I2C_INTR_TX_OVER BIT3
-#define I2C_INTR_RX_FULL BIT2 // Data bytes in RX FIFO over threshold
-#define I2C_INTR_RX_OVER BIT1
-#define I2C_INTR_RX_UNDER BIT0
-
-/**
- Programe all I2C controllers on LPSS.
-
- I2C0 is function 1 of LPSS. I2C1 is function 2 of LPSS, etc..
-
- @param VOID
-
- @return EFI_SUCCESS
-**/
-EFI_STATUS
-ProgramPciLpssI2C (
- VOID
- );
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value read has to be stored
- @param Start Whether a RESTART is issued before the byte is sent or received
- @param End Whether STOP is generated after a data byte is sent or received
-
- @return EFI_SUCCESS If the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteReadI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer,
- IN UINT8 Start,
- IN UINT8 End
- );
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be read
- @param *Byte Address to which the value written is stored
- @param Start Whether a RESTART is issued before the byte is sent or received
- @param End Whether STOP is generated after a data byte is sent or received
-
- @return EFI_SUCCESS IF the byte value has been successfully written
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteWriteI2CBasic(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer,
- IN UINT8 Start,
- IN UINT8 End
- );
-
-/**
- Reads a Byte from I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be read
- @param Offset Offset from which the data has to be read
- @param ReadBytes Number of bytes to be read
- @param *ReadBuffer Address to which the value read has to be stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteReadI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN ReadBytes,
- OUT UINT8 *ReadBuffer
- );
-
-/**
- Writes a Byte to I2C Device.
-
- @param I2cControllerIndex I2C Bus no to which the I2C device has been connected
- @param SlaveAddress Device Address from which the byte value has to be written
- @param Offset Offset from which the data has to be written
- @param WriteBytes Number of bytes to be written
- @param *Byte Address to which the value written is stored
-
- @return EFI_SUCCESS IF the byte value has been successfully read
- @return EFI_DEVICE_ERROR Operation Failed, Device Error
-**/
-EFI_STATUS
-ByteWriteI2C(
- IN UINT8 I2cControllerIndex,
- IN UINT8 SlaveAddress,
- IN UINT8 Offset,
- IN UINTN WriteBytes,
- IN UINT8 *WriteBuffer
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.inf
deleted file mode 100644
index a78212a0e7..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.inf
+++ /dev/null
@@ -1,40 +0,0 @@
-## @file
-# Instance of I2C Library.
-#
-# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = I2CLibPei
- FILE_GUID = 8EF61509-890B-4FF2-B352-1C0E9CDDEC8B
- MODULE_TYPE = PEIM
- VERSION_STRING = 1.0
- LIBRARY_CLASS = LockBoxLib|PEIM
- CONSTRUCTOR = IntelI2CPeiLibConstructor
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources.common]
- I2CLibPei.c
- I2CIoLibPei.c
-
-[LibraryClasses]
- TimerLib
-
-[PPIs]
- gEfiPeiStallPpiGuid
-
-
-[Packages]
- MdePkg/MdePkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
-
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.c
deleted file mode 100644
index b99c3b0122..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-#include "PiPei.h"
-#include <Library/HobLib.h>
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-#include <Guid/MemoryConfigData.h>
-#include <PlatformFspLib.h>
-
-EFI_STATUS
-PlatformHobCreateFromFsp (
- IN CONST EFI_PEI_SERVICES **PeiServices,
- VOID *HobList
- )
-{
- VOID *HobData;
- VOID *NewHobData;
- UINTN DataSize;
-
- //
- // Other hob, todo: put this into FspWrapPlatformLib
- //
- if ((HobList = GetNextGuidHob (&gEfiMemoryConfigDataGuid, HobList)) != NULL) {
- HobData = GET_GUID_HOB_DATA (HobList);
- DataSize = GET_GUID_HOB_DATA_SIZE(HobList);
- DEBUG((EFI_D_ERROR, "gEfiMemoryConfigDataGuid Hob found: 0x%x.\n", DataSize));
-
- NewHobData = BuildGuidHob (&gEfiMemoryConfigDataGuid, DataSize);
- (*PeiServices)->CopyMem (
- NewHobData,
- HobData,
- DataSize
- );
- }
-
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
deleted file mode 100644
index ddd97c5ad9..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-#
-# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-# FSP Platform HOB Library
-#
-#
-#
-##
-
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = PlatformFspLib
- FILE_GUID = 1305A712-33A6-4fa7-BA59-AEAC3362931A
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = PlatformFspLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- PlatformFspLib.c
-
-[Packages]
- MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- IntelFspWrapperPkg/IntelFspWrapperPkg.dec
-
-[LibraryClasses]
- BaseLib
- DebugLib
- HobLib
-
-[Guids]
- gEfiMemoryConfigDataGuid
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/PlatformSerialPortLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/PlatformSerialPortLib.h
deleted file mode 100644
index fe47e8f68d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/PlatformSerialPortLib.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/** @file
- Header file of Serial port hardware definition.
-
- Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef __PLATFORM_SERIAL_PORT_LIB_H_
-#define __PLATFORM_SERIAL_PORT_LIB_H_
-
-#include <Base.h>
-#include <Library/BaseLib.h>
-#include <Library/IoLib.h>
-#include <Library/PcdLib.h>
-#include <Library/SerialPortLib.h>
-
-//
-// UART Register Offsets
-//
-#define BAUD_LOW_OFFSET 0x00
-#define BAUD_HIGH_OFFSET 0x01
-#define IER_OFFSET 0x01
-#define LCR_SHADOW_OFFSET 0x01
-#define FCR_SHADOW_OFFSET 0x02
-#define IR_CONTROL_OFFSET 0x02
-#define FCR_OFFSET 0x02
-#define EIR_OFFSET 0x02
-#define BSR_OFFSET 0x03
-#define LCR_OFFSET 0x03
-#define MCR_OFFSET 0x04
-#define LSR_OFFSET 0x05
-#define MSR_OFFSET 0x06
-
-//
-// UART Register Bit Defines
-//
-#define LSR_TXRDY 0x20
-#define LSR_RXDA 0x01
-#define DLAB 0x01
-
-#define UART_DATA 8
-#define UART_STOP 1
-#define UART_PARITY 0
-#define UART_BREAK_SET 0
-
-VOID
-InitializeSio (
- VOID
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.c
deleted file mode 100644
index f6012593d0..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/** @file
- Serial I/O Port library functions with no library constructor/destructor
-
- Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "PlatformSerialPortLib.h"
-
-UINT16 gComBase = 0x3f8;
-UINTN gBps = 115200;
-UINT8 gData = 8;
-UINT8 gStop = 1;
-UINT8 gParity = 0;
-UINT8 gBreakSet = 0;
-
-/**
- Initialize Serial Port
-
- The Baud Rate Divisor registers are programmed and the LCR
- is used to configure the communications format. Hard coded
- UART config comes from globals in DebugSerialPlatform lib.
-
- @param None
-
- @retval None
-
-**/
-RETURN_STATUS
-EFIAPI
-UARTInitialize (
- VOID
- )
-{
- UINTN Divisor;
- UINT8 OutputData;
- UINT8 Data;
-
- //
- // Map 5..8 to 0..3
- //
- Data = (UINT8) (gData - (UINT8) 5);
-
- //
- // Calculate divisor for baud generator
- //
- Divisor = 115200 / gBps;
-
- //
- // Set communications format
- //
- OutputData = (UINT8) ((DLAB << 7) | ((gBreakSet << 6) | ((gParity << 3) | ((gStop << 2) | Data))));
- IoWrite8 (gComBase + LCR_OFFSET, OutputData);
-
- //
- // Configure baud rate
- //
- IoWrite8 (gComBase + BAUD_HIGH_OFFSET, (UINT8) (Divisor >> 8));
- IoWrite8 (gComBase + BAUD_LOW_OFFSET, (UINT8) (Divisor & 0xff));
-
- //
- // Switch back to bank 0
- //
- OutputData = (UINT8) ((~DLAB << 7) | ((gBreakSet << 6) | ((gParity << 3) | ((gStop << 2) | Data))));
- IoWrite8 (gComBase + LCR_OFFSET, OutputData);
-
- return RETURN_SUCCESS;
-}
-
-/**
- Common function to initialize UART Serial device and USB Serial device.
-
- @param None
-
- @retval None
-
-**/
-RETURN_STATUS
-EFIAPI
-SerialPortInitialize (
- VOID
- )
-{
-
- UARTInitialize ();
-
-
- return RETURN_SUCCESS;
-}
-
-/**
- Write data to serial device.
-
- If the buffer is NULL, then return 0;
- if NumberOfBytes is zero, then return 0.
-
- @param Buffer Point of data buffer which need to be writed.
- @param NumberOfBytes Number of output bytes which are cached in Buffer.
-
- @retval 0 Write data failed.
- @retval !0 Actual number of bytes writed to serial device.
-
-**/
-UINTN
-EFIAPI
-UARTDbgOut (
- IN UINT8 *Buffer,
- IN UINTN NumberOfBytes
-)
-{
- UINTN Result;
- UINT8 Data;
-
- if (NULL == Buffer) {
- return 0;
- }
-
- Result = NumberOfBytes;
-
- while (NumberOfBytes--) {
- //
- // Wait for the serial port to be ready.
- //
- do {
- Data = IoRead8 ((UINT16) PcdGet64 (PcdSerialRegisterBase) + LSR_OFFSET);
- } while ((Data & LSR_TXRDY) == 0);
- IoWrite8 ((UINT16) PcdGet64 (PcdSerialRegisterBase), *Buffer++);
- }
-
- return Result;
-}
-
-/**
- Common function to write data to UART Serial device and USB Serial device.
-
- @param Buffer Point of data buffer which need to be writed.
- @param NumberOfBytes Number of output bytes which are cached in Buffer.
-
-**/
-UINTN
-EFIAPI
-SerialPortWrite (
- IN UINT8 *Buffer,
- IN UINTN NumberOfBytes
-)
-{
- if (FeaturePcdGet (PcdStatusCodeUseIsaSerial)) {
- UARTDbgOut (Buffer, NumberOfBytes);
- }
-
- return RETURN_SUCCESS;
-}
-
-/**
- Read data from serial device and save the datas in buffer.
-
- If the buffer is NULL, then return 0;
- if NumberOfBytes is zero, then return 0.
-
- @param Buffer Point of data buffer which need to be writed.
- @param NumberOfBytes Number of output bytes which are cached in Buffer.
-
- @retval 0 Read data failed.
- @retval !0 Actual number of bytes raed to serial device.
-
-**/
-UINTN
-EFIAPI
-UARTDbgIn (
- OUT UINT8 *Buffer,
- IN UINTN NumberOfBytes
-)
-{
- UINTN Result;
- UINT8 Data;
-
- if (NULL == Buffer) {
- return 0;
- }
-
- Result = NumberOfBytes;
-
- while (NumberOfBytes--) {
- //
- // Wait for the serial port to be ready.
- //
- do {
- Data = IoRead8 ((UINT16) PcdGet64 (PcdSerialRegisterBase) + LSR_OFFSET);
- } while ((Data & LSR_RXDA) == 0);
-
- *Buffer++ = IoRead8 ((UINT16) PcdGet64 (PcdSerialRegisterBase));
- }
-
- return Result;
-}
-
-/**
- Common function to Read data from UART serial device, USB serial device and save the datas in buffer.
-
- @param Buffer Point of data buffer which need to be writed.
- @param NumberOfBytes Number of output bytes which are cached in Buffer.
-
-**/
-UINTN
-EFIAPI
-SerialPortRead (
- OUT UINT8 *Buffer,
- IN UINTN NumberOfBytes
-)
-{
- if (FeaturePcdGet (PcdStatusCodeUseIsaSerial)) {
- UARTDbgIn (Buffer, NumberOfBytes);
- }
-
- return RETURN_SUCCESS;
-}
-
-
-/**
- Polls a serial device to see if there is any data waiting to be read.
-
- Polls aserial device to see if there is any data waiting to be read.
- If there is data waiting to be read from the serial device, then TRUE is returned.
- If there is no data waiting to be read from the serial device, then FALSE is returned.
-
- @retval TRUE Data is waiting to be read from the serial device.
- @retval FALSE There is no data waiting to be read from the serial device.
-
-**/
-BOOLEAN
-EFIAPI
-SerialPortPoll (
- VOID
- )
-{
- UINT8 Data;
-
- //
- // Read the serial port status.
- //
- Data = IoRead8 ((UINT16) PcdGet64 (PcdSerialRegisterBase) + LSR_OFFSET);
-
- return (BOOLEAN) ((Data & LSR_RXDA) != 0);
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.inf
deleted file mode 100644
index 0e7a6d3cfc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.inf
+++ /dev/null
@@ -1,52 +0,0 @@
-#/** @file
-#
-# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SerialPortLib
- FILE_GUID = 15B26F43-A389-4bae-BDE3-4BB0719B7D4F
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = SerialPortLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-[Sources]
- SerialPortLib.c
- SioInit.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
-
-[LibraryClasses]
- BaseLib
- PcdLib
- IoLib
- PciLib
- TimerLib
-
-[FixedPcd.common]
- gEfiSerialPortTokenSpaceGuid.PcdSerialBoudRate
- gEfiSerialPortTokenSpaceGuid.PcdSerialRegisterBase
-
-[FeaturePcd]
- gEfiSerialPortTokenSpaceGuid.PcdStatusCodeUseIsaSerial
- gEfiSerialPortTokenSpaceGuid.PcdStatusCodeUseUsbSerial
- gEfiSerialPortTokenSpaceGuid.PcdStatusCodeUseRam
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.c
deleted file mode 100644
index d9d48539dc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- SioInit.c
-
-Abstract:
-
- Functions for LpcSio initialization
-
---*/
-
-#include "PlatformSerialPortLib.h"
-#include "SioInit.h"
-
-typedef struct {
- UINT8 Register;
- UINT8 Value;
-} EFI_SIO_TABLE;
-
-EFI_SIO_TABLE mSioTableWpcn381u[] = {
- {0x29, 0x0A0},
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_UART0}, // Select UART0 device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT0_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT0_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_IRQ1_REGISTER, 0x014}, // Set to IRQ4
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_UART1}, // Select UART1 device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT1_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT1_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_IRQ1_REGISTER, 0x013}, // Set to IRQ3
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_GPIO}, // Select GPIO device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_GPIO_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_GPIO_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {0x21, 0x001}, // Global Device Enable
- {0x26, 0x000}
-};
-
-EFI_SIO_TABLE mSioTableWdcp376[] = {
- {0x29, 0x0A0},
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_UART0}, // Select UART0 device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT0_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT0_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_IRQ1_REGISTER, 0x014}, // Set to IRQ4
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_UART1}, // Select UART1 device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT1_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_SERIAL_PORT1_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_IRQ1_REGISTER, 0x013}, // Set to IRQ3
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_GPIO}, // Select GPIO device
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_GPIO_BASE_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_GPIO_BASE_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {0x21, 0x001}, // Global Device Enable
- {0x26, 0x000},
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_PS2K}, // Select PS2 Keyboard
- {WPCN381U_BASE1_HI_REGISTER, (UINT8)(WPCN381U_KB_BASE1_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE1_LO_REGISTER, (UINT8)(WPCN381U_KB_BASE1_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_BASE2_HI_REGISTER, (UINT8)(WPCN381U_KB_BASE2_ADDRESS >> 8)}, // Set Base Address MSB
- {WPCN381U_BASE2_LO_REGISTER, (UINT8)(WPCN381U_KB_BASE2_ADDRESS & 0x00FF)}, // Set Base Address LSB
- {WPCN381U_IRQ1_REGISTER, 0x011}, // Set to IRQ1
- {0xF0, (SIO_KBC_CLOCK << 6)}, // Select KBC Clock Source
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE}, // Enable it with Activation bit
- {WPCN381U_LD_SEL_REGISTER, WPCN381U_LDN_PS2M}, // Select PS2 Mouse
- {WPCN381U_IRQ1_REGISTER, 0x01c}, // Set to IRQ12
- {WPCN381U_ACTIVATE_REGISTER, WPCN381U_ACTIVATE_VALUE} // Enable it with Activation bit
-};
-
-/**
- Initialization for SIO.
-
- @param FfsHeader FV this PEIM was loaded from.
- @param PeiServices General purpose services available to every PEIM.
-
- None
-
-**/
-VOID
-InitializeSio (
- VOID
- )
-{
- UINT16 Index;
- UINT16 IndexPort;
- UINT16 DataPort;
-
- //
- // Super I/O initialization for Winbond WPCN381U
- //
- IndexPort = WPCN381U_CONFIG_INDEX;
- DataPort = WPCN381U_CONFIG_DATA;
-
- //
- // Check for Winbond WPCN381U
- //
- IoWrite8 (IndexPort, WPCN381U_DEV_ID_REGISTER); // Winbond WPCN381U Device ID register is 0x20
-
- if (IoRead8 (DataPort) == WPCN381U_CHIP_ID) { // Winbond WPCN381U Device ID is 0xF4
- //
- // Configure WPCN381U SIO
- //
- for (Index = 0; Index < sizeof (mSioTableWpcn381u) / sizeof (EFI_SIO_TABLE); Index++) {
- IoWrite8 (IndexPort, mSioTableWpcn381u[Index].Register);
- IoWrite8 (DataPort, mSioTableWpcn381u[Index].Value);
- }
- }
-
- if (IoRead8 (DataPort) == WDCP376_CHIP_ID) { // Winbond WDCP376 Device ID is 0xF1
- //
- // Configure WDCP376 SIO
- //
- for (Index = 0; Index < sizeof (mSioTableWdcp376) / sizeof (EFI_SIO_TABLE); Index++) {
- IoWrite8 (IndexPort, mSioTableWdcp376[Index].Register);
- IoWrite8 (DataPort, mSioTableWdcp376[Index].Value);
- }
- }
- return;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.h
deleted file mode 100644
index 06fa19b93d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/** @file
- Header file of Serial port hardware definition.
-
- Copyright (c) 2012 - 2017, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef _SIO_INIT_H_
-#define _SIO_INIT_H_
-
-#define WPCN381U_CONFIG_INDEX 0x2E
-#define WPCN381U_CONFIG_DATA 0x2F
-#define WPCN381U_CONFIG_INDEX1 0x164E
-#define WPCN381U_CONFIG_DATA1 0x164F
-#define WPCN381U_CHIP_ID 0xF4
-#define WDCP376_CHIP_ID 0xF1
-
-//
-// SIO Logical Devices Numbers
-//
-#define WPCN381U_LDN_UART0 0x03 // LDN for Serial Port Controller
-#define WPCN381U_LDN_UART1 0x02 // LDN for Parallel Port Controller
-#define WPCN381U_LDN_PS2K 0x06 // LDN for PS2 Keyboard Controller
-#define WPCN381U_LDN_PS2M 0x05 // LDN for PS2 Mouse Controller
-#define WPCN381U_KB_BASE1_ADDRESS 0x60 // Base Address of KB controller
-#define WPCN381U_KB_BASE2_ADDRESS 0x64 // Base Address of KB controller
-#define SIO_KBC_CLOCK 0x01 // 0/1/2 - 8/12/16 MHz KBC Clock Source
-#define WPCN381U_LDN_GPIO 0x07 // LDN for GPIO
-
-//
-// SIO Registers Layout
-//
-#define WPCN381U_LD_SEL_REGISTER 0x07 // Logical Device Select Register Address
-#define WPCN381U_DEV_ID_REGISTER 0x20 // Device Identification Register Address
-#define WPCN381U_ACTIVATE_REGISTER 0x30 // Device Identification Register Address
-#define WPCN381U_BASE1_HI_REGISTER 0x60 // Device BaseAddres Register #1 MSB Address
-#define WPCN381U_BASE1_LO_REGISTER 0x61 // Device BaseAddres Register #1 LSB Address
-#define WPCN381U_BASE2_HI_REGISTER 0x62 // Device BaseAddres Register #1 MSB Address
-#define WPCN381U_BASE2_LO_REGISTER 0x63 // Device Ba1eAddres Register #1 LSB Address
-#define WPCN381U_IRQ1_REGISTER 0x70 // Device IRQ Register #1 Address
-#define WPCN381U_IRQ2_REGISTER 0x71 // Device IRQ Register #2 Address
-
-//
-// SIO Activation Values
-//
-#define WPCN381U_ACTIVATE_VALUE 0x01 // Value to activate Device
-#define WPCN381U_DEACTIVATE_VALUE 0x00 // Value to deactivate Device
-
-//
-// SIO GPIO
-//
-#define WPCN381U_GPIO_BASE_ADDRESS 0x0A20 // SIO GPIO Base Address
-
-//
-// SIO Serial Port Settings
-//
-#define WPCN381U_SERIAL_PORT0_BASE_ADDRESS 0x03F8 // Base Address of Serial Port 0 (COMA / UART0)
-#define WPCN381U_SERIAL_PORT1_BASE_ADDRESS 0x02F8 // Base Address of Serial Port 1 (COMB / UART1)
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c b/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c
deleted file mode 100644
index b1fb4adb34..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
-
- LegacyMetronome.c
-
-Abstract:
-
- This contains the installation function for the driver.
-
---*/
-
-#include "LegacyMetronome.h"
-
-//
-// Handle for the Metronome Architectural Protocol instance produced by this driver
-//
-EFI_HANDLE mMetronomeHandle = NULL;
-
-//
-// The Metronome Architectural Protocol instance produced by this driver
-//
-EFI_METRONOME_ARCH_PROTOCOL mMetronome = {
- WaitForTick,
- TICK_PERIOD
-};
-
-//
-// The CPU I/O Protocol used to access system hardware
-//
-EFI_CPU_IO_PROTOCOL *mCpuIo = NULL;
-
-//
-// Worker Functions
-//
-
-/**
- Write an 8 bit value to an I/O port and save it to the S3 script
-
- @param Port IO Port
- @param Data Data in IO Port
-
- @retval None.
-
-**/
-VOID
-ScriptWriteIo8 (
- UINT16 Port,
- UINT8 Data
- )
-{
- mCpuIo->Io.Write (
- mCpuIo,
- EfiCpuIoWidthUint8,
- Port,
- 1,
- &Data
- );
-
-}
-
-/**
-
- Read the refresh bit from the REFRESH_PORT
-
- @param None.
-
- @retval Refresh bit.
-
-**/
-UINT8
-ReadRefresh (
- VOID
- )
-{
- UINT8 Data;
-
- mCpuIo->Io.Read (
- mCpuIo,
- EfiCpuIoWidthUint8,
- REFRESH_PORT,
- 1,
- &Data
- );
- return (UINT8) (Data & REFRESH_ON);
-}
-
-/**
-
- Waits for the TickNumber of ticks from a known platform time source.
-
- @param This Pointer to the protocol instance.
- @param TickNumber Tick Number to be waited
-
-
- @retval EFI_SUCCESS If number of ticks occurred.
- @retval EFI_NOT_FOUND Could not locate CPU IO protocol
-
-**/
-EFI_STATUS
-EFIAPI
-WaitForTick (
- IN EFI_METRONOME_ARCH_PROTOCOL *This,
- IN UINT32 TickNumber
- )
-{
- //
- // Wait for TickNumber toggles of the Refresh bit
- //
- for (; TickNumber != 0x00; TickNumber--) {
- while (ReadRefresh () == REFRESH_ON)
- ;
- while (ReadRefresh () == REFRESH_OFF)
- ;
- }
-
- return EFI_SUCCESS;
-}
-
-//
-// Driver Entry Point
-//
-/**
- Install the LegacyMetronome driver. Loads a Metronome Arch Protocol based
- on the Port 61 timer.
-
- @param ImageHandle Handle for the image of this driver
- @param SystemTable Pointer to the EFI System Table
-
- @retval EFI_SUCCESS Metronome Architectural Protocol Installed
-
-**/
-EFI_STATUS
-EFIAPI
-InstallLegacyMetronome (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
-
- //
- // Make sure the Metronome Architectural Protocol is not already installed in the system
- //
- ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiMetronomeArchProtocolGuid);
-
- //
- // Get the CPU I/O Protocol that this driver requires
- // If the CPU I/O Protocol is not found, then ASSERT because the dependency expression
- // should guarantee that it is present in the handle database.
- //
- Status = gBS->LocateProtocol (
- &gEfiCpuIoProtocolGuid,
- NULL,
- (void **)&mCpuIo
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Program port 61 timer 1 as refresh timer. We could use ACPI timer in the
- // future.
- //
- ScriptWriteIo8 (TIMER1_CONTROL_PORT, LOAD_COUNTER1_LSB);
- ScriptWriteIo8 (TIMER1_COUNT_PORT, COUNTER1_COUNT);
-
- //
- // Install on a new handle
- //
- Status = gBS->InstallMultipleProtocolInterfaces (
- &mMetronomeHandle,
- &gEfiMetronomeArchProtocolGuid,
- &mMetronome,
- NULL
- );
- ASSERT_EFI_ERROR (Status);
-
- return Status;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h b/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h
deleted file mode 100644
index 9599eca702..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- LegacyMetronome.h
-
-Abstract:
-
- Driver implementing the EFI 2.0 metronome protocol using the legacy PORT 61
- timer.
-
---*/
-
-#ifndef _LEGACY_METRONOME_H
-#define _LEGACY_METRONOME_H
-
-//
-// Statements that include other files
-//
-#include "Protocol/Metronome.h"
-#include "Protocol/CpuIo.h"
-#include "Library/DebugLib.h"
-#include "Library/UefiBootServicesTableLib.h"
-
-
-//
-// Private definitions
-//
-#define TICK_PERIOD 300
-#define REFRESH_PORT 0x61
-#define REFRESH_ON 0x10
-#define REFRESH_OFF 0x00
-#define TIMER1_CONTROL_PORT 0x43
-#define TIMER1_COUNT_PORT 0x41
-#define LOAD_COUNTER1_LSB 0x54
-#define COUNTER1_COUNT 0x12
-
-//
-// Function Prototypes
-//
-/**
- Waits for the TickNumber of ticks from a known platform time source.
-
- @param This Pointer to the protocol instance.
- @param TickNumber Tick Number to be waited
-
- @retval EFI_SUCCESS If number of ticks occurred.
- @retval EFI_NOT_FOUND Could not locate CPU IO protocol
-
-**/
-EFI_STATUS
-EFIAPI
-WaitForTick (
- IN EFI_METRONOME_ARCH_PROTOCOL *This,
- IN UINT32 TickNumber
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/Metronome.inf b/Platform/Intel/Vlv2TbltDevicePkg/Metronome/Metronome.inf
deleted file mode 100644
index 173370d652..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Metronome/Metronome.inf
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-
-# Module Name:
-#
-# LegacyMetronome.inf
-#
-# Abstract:
-#
-# Component description file for LegacyMetronome module
-#
-#--*/
-[defines]
- INF_VERSION = 0x00010005
- BASE_NAME = LegacyMetronome
- FILE_GUID = 07A9330A-F347-11d4-9A49-0090273FC14D
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- ENTRY_POINT = InstallLegacyMetronome
-
-[sources.common]
- LegacyMetronome.c
- LegacyMetronome.h
-
-[Packages]
- MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
-
-[LibraryClasses]
- UefiDriverEntryPoint
- UefiBootServicesTableLib
- DevicePathLib
- UefiLib
-
-[Protocols]
-
-gEfiMetronomeArchProtocolGuid
-gEfiCpuIoProtocolGuid
-
-[Depex]
-gEfiCpuIoProtocolGuid AND gEfiBootScriptSaveProtocolGuid
-
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.c
deleted file mode 100644
index 26599620ba..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
-
- SmmScriptSave.c
-
-Abstract:
-
- ScriptTableSave module at run time
-
---*/
-
-#include "SmmScriptSave.h"
-
-//
-// internal functions
-//
-
-EFI_STATUS
-BootScriptIoWrite (
- IN EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN VA_LIST Marker
- );
-
-EFI_STATUS
-BootScriptPciCfgWrite (
- IN EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN VA_LIST Marker
- );
-
-VOID
-SmmCopyMem (
- IN UINT8 *Destination,
- IN UINT8 *Source,
- IN UINTN ByteCount
- );
-
-//
-// Function implementations
-//
-EFI_STATUS
-SmmBootScriptWrite (
- IN OUT EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN UINTN Type,
- IN UINT16 OpCode,
- ...
- )
-{
- EFI_STATUS Status;
- VA_LIST Marker;
-
- if (ScriptTable == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Build script according to opcode
- //
- switch ( OpCode ) {
-
- case EFI_BOOT_SCRIPT_IO_WRITE_OPCODE:
- VA_START(Marker, OpCode);
- Status = BootScriptIoWrite (ScriptTable, Marker);
- VA_END(Marker);
- break;
-
- case EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE_OPCODE:
- VA_START(Marker, OpCode);
- Status = BootScriptPciCfgWrite(ScriptTable, Marker);
- VA_END(Marker);
- break;
-
- default:
- Status = EFI_SUCCESS;
- break;
- }
-
- return Status;
-}
-
-
-EFI_STATUS
-SmmBootScriptCreateTable (
- IN OUT EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN UINTN Type
- )
-{
- BOOT_SCRIPT_POINTERS Script;
- UINT8 *Buffer;
-
- if (ScriptTable == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- Buffer = (UINT8*) ((UINTN)(*ScriptTable));
-
- //
- // Fill Table Header
- //
- Script.Raw = Buffer;
- Script.TableInfo->OpCode = EFI_BOOT_SCRIPT_TABLE_OPCODE;
- Script.TableInfo->Length = sizeof(EFI_BOOT_SCRIPT_TABLE_HEADER);
- Script.TableInfo->TableLength = sizeof(EFI_BOOT_SCRIPT_TABLE_HEADER);
-
- //
- // Update current table pointer
- //
- *ScriptTable = *ScriptTable + sizeof(EFI_BOOT_SCRIPT_TABLE_HEADER);
- return EFI_SUCCESS;
-}
-
-
-EFI_STATUS
-SmmBootScriptCloseTable (
- IN EFI_SMM_SCRIPT_TABLE ScriptTableBase,
- IN EFI_SMM_SCRIPT_TABLE ScriptTablePtr,
- IN UINTN Type
- )
-{
- BOOT_SCRIPT_POINTERS Script;
-
- //
- // Add final "termination" node to script table
- //
- Script.Raw = (UINT8*) ((UINTN)ScriptTablePtr);
- Script.Terminate->OpCode = EFI_BOOT_SCRIPT_TERMINATE_OPCODE;
- Script.Terminate->Length = sizeof (EFI_BOOT_SCRIPT_TERMINATE);
- ScriptTablePtr += sizeof (EFI_BOOT_SCRIPT_TERMINATE);
-
-
- //
- // Update Table Header
- //
- Script.Raw = (UINT8*) ((UINTN)ScriptTableBase);
- Script.TableInfo->OpCode = EFI_BOOT_SCRIPT_TABLE_OPCODE;
- Script.TableInfo->Length = sizeof (EFI_BOOT_SCRIPT_TABLE_HEADER);
- Script.TableInfo->TableLength = (UINT32)(ScriptTablePtr - ScriptTableBase);
-
- return EFI_SUCCESS;
-}
-
-
-EFI_STATUS
-BootScriptIoWrite (
- IN EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN VA_LIST Marker
- )
-{
- BOOT_SCRIPT_POINTERS Script;
- EFI_BOOT_SCRIPT_WIDTH Width;
- UINTN Address;
- UINTN Count;
- UINT8 *Buffer;
- UINTN NodeLength;
- UINT8 WidthInByte;
-
- Width = VA_ARG(Marker, EFI_BOOT_SCRIPT_WIDTH);
- Address = VA_ARG(Marker, UINTN);
- Count = VA_ARG(Marker, UINTN);
- Buffer = VA_ARG(Marker, UINT8*);
-
- WidthInByte = (UINT8)(0x01 << (Width & 0x03));
- Script.Raw = (UINT8*) ((UINTN)(*ScriptTable));
- NodeLength = sizeof (EFI_BOOT_SCRIPT_IO_WRITE) + (WidthInByte * Count);
-
- //
- // Build script data
- //
- Script.IoWrite->OpCode = EFI_BOOT_SCRIPT_IO_WRITE_OPCODE;
- Script.IoWrite->Length = (UINT8)(NodeLength);
- Script.IoWrite->Width = Width;
- Script.IoWrite->Address = Address;
- Script.IoWrite->Count = (UINT32)Count;
- SmmCopyMem (
- (UINT8*)(Script.Raw + sizeof (EFI_BOOT_SCRIPT_IO_WRITE)),
- Buffer,
- WidthInByte * Count
- );
-
- //
- // Update Script table pointer
- //
- *ScriptTable = *ScriptTable + NodeLength;
- return EFI_SUCCESS;
-}
-
-
-EFI_STATUS
-BootScriptPciCfgWrite (
- IN EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN VA_LIST Marker
- )
-{
- BOOT_SCRIPT_POINTERS Script;
- EFI_BOOT_SCRIPT_WIDTH Width;
- UINT64 Address;
- UINTN Count;
- UINT8 *Buffer;
- UINTN NodeLength;
- UINT8 WidthInByte;
-
- Width = VA_ARG(Marker, EFI_BOOT_SCRIPT_WIDTH);
- Address = VA_ARG(Marker, UINT64);
- Count = VA_ARG(Marker, UINTN);
- Buffer = VA_ARG(Marker, UINT8*);
-
- WidthInByte = (UINT8)(0x01 << (Width & 0x03));
- Script.Raw = (UINT8*) ((UINTN)(*ScriptTable));
- NodeLength = sizeof (EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE) + (WidthInByte * Count);
-
- //
- // Build script data
- //
- Script.PciWrite->OpCode = EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE_OPCODE;
- Script.PciWrite->Length = (UINT8)(NodeLength);
- Script.PciWrite->Width = Width;
- Script.PciWrite->Address = Address;
- Script.PciWrite->Count = (UINT32)Count;
- SmmCopyMem (
- (UINT8*)(Script.Raw + sizeof (EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE)),
- Buffer,
- WidthInByte * Count
- );
-
- //
- // Update Script table pointer
- //
- *ScriptTable = *ScriptTable + NodeLength;
- return EFI_SUCCESS;
-}
-
-VOID
-SmmCopyMem (
- IN UINT8 *Destination,
- IN UINT8 *Source,
- IN UINTN ByteCount
- )
-{
- UINTN Index;
-
- for (Index = 0; Index < ByteCount; Index++, Destination++, Source++) {
- *Destination = *Source;
- }
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.h
deleted file mode 100644
index d3eca8cdc0..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- SmmScriptSave.h
-
-Abstract:
-
- This is an implementation of the BootScript at run time.
-
---*/
-
-#ifndef _RUNTIME_SCRIPT_SAVE_H
-#define _RUNTIME_SCRIPT_SAVE_H
-
-#include "Efi.h"
-#include "EfiBootScript.h"
-
-
-typedef EFI_PHYSICAL_ADDRESS EFI_SMM_SCRIPT_TABLE;
-
-EFI_STATUS
-SmmBootScriptCreateTable (
- IN OUT EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN UINTN Type
- );
-
-EFI_STATUS
-SmmBootScriptWrite (
- IN OUT EFI_SMM_SCRIPT_TABLE *ScriptTable,
- IN UINTN Type,
- IN UINT16 OpCode,
- ...
- );
-
-EFI_STATUS
-SmmBootScriptCloseTable (
- IN EFI_SMM_SCRIPT_TABLE ScriptTableBase,
- IN EFI_SMM_SCRIPT_TABLE ScriptTablePtr,
- IN UINTN Type
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.c b/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.c
deleted file mode 100644
index 0dbd6f00e1..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.c
+++ /dev/null
@@ -1,459 +0,0 @@
-/** @file
- SMM SwDispatch2 Protocol on SMM SwDispatch Protocol Thunk driver.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-
-#include <PiDxe.h>
-#include <FrameworkSmm.h>
-
-#include <Protocol/SmmSwDispatch2.h>
-#include <Protocol/SmmSwDispatch.h>
-#include <Protocol/SmmControl.h>
-#include <Protocol/SmmCpu.h>
-
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/SmmServicesTableLib.h>
-#include <Library/BaseLib.h>
-#include <Library/IoLib.h>
-#include <Library/DebugLib.h>
-
-typedef struct {
- LIST_ENTRY Link;
- EFI_HANDLE DispatchHandle;
- UINTN SwSmiInputValue;
- UINTN DispatchFunction;
-} EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT;
-
-/**
- Register a child SMI source dispatch function for the specified software SMI.
-
- This service registers a function (DispatchFunction) which will be called when the software
- SMI source specified by RegisterContext->SwSmiCpuIndex is detected. On return,
- DispatchHandle contains a unique handle which may be used later to unregister the function
- using UnRegister().
-
- @param[in] This Pointer to the EFI_SMM_SW_DISPATCH2_PROTOCOL instance.
- @param[in] DispatchFunction Function to register for handler when the specified software
- SMI is generated.
- @param[in, out] RegisterContext Pointer to the dispatch function's context.
- The caller fills this context in before calling
- the register function to indicate to the register
- function which Software SMI input value the
- dispatch function should be invoked for.
- @param[out] DispatchHandle Handle generated by the dispatcher to track the
- function instance.
-
- @retval EFI_SUCCESS The dispatch function has been successfully
- registered and the SMI source has been enabled.
- @retval EFI_DEVICE_ERROR The SW driver was unable to enable the SMI source.
- @retval EFI_INVALID_PARAMETER RegisterContext is invalid. The SW SMI input value
- is not within valid range.
- @retval EFI_OUT_OF_RESOURCES There is not enough memory (system or SMM) to manage this
- child.
- @retval EFI_OUT_OF_RESOURCES A unique software SMI value could not be assigned
- for this dispatch.
-**/
-EFI_STATUS
-EFIAPI
-SmmSwDispatch2Register (
- IN CONST EFI_SMM_SW_DISPATCH2_PROTOCOL *This,
- IN EFI_SMM_HANDLER_ENTRY_POINT2 DispatchFunction,
- IN OUT EFI_SMM_SW_REGISTER_CONTEXT *RegisterContext,
- OUT EFI_HANDLE *DispatchHandle
- );
-
-/**
- Unregister a child SMI source dispatch function for the specified software SMI.
-
- This service removes the handler associated with DispatchHandle so that it will no longer be
- called in response to a software SMI.
-
- @param[in] This Pointer to the EFI_SMM_SW_DISPATCH2_PROTOCOL instance.
- @param[in] DispatchHandle Handle of dispatch function to deregister.
-
- @retval EFI_SUCCESS The dispatch function has been successfully unregistered.
- @retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
-**/
-EFI_STATUS
-EFIAPI
-SmmSwDispatch2UnRegister (
- IN CONST EFI_SMM_SW_DISPATCH2_PROTOCOL *This,
- IN EFI_HANDLE DispatchHandle
- );
-
-EFI_SMM_SW_DISPATCH2_PROTOCOL gSmmSwDispatch2 = {
- SmmSwDispatch2Register,
- SmmSwDispatch2UnRegister,
- 0 // MaximumSwiValue
-};
-
-EFI_SMM_SW_DISPATCH_PROTOCOL *mSmmSwDispatch;
-UINT8 mSmiTriggerRegister;
-UINT8 mSmiDataRegister;
-
-EFI_SMM_CPU_PROTOCOL *mSmmCpuProtocol;
-LIST_ENTRY mSmmSwDispatch2ThunkQueue = INITIALIZE_LIST_HEAD_VARIABLE (mSmmSwDispatch2ThunkQueue);
-
-/**
- This function find SmmSwDispatch2Context by SwSmiInputValue.
-
- @param SwSmiInputValue The SwSmiInputValue to indentify the SmmSwDispatch2 context
-
- @return SmmSwDispatch2 context
-**/
-EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *
-FindSmmSwDispatch2ContextBySwSmiInputValue (
- IN UINTN SwSmiInputValue
- )
-{
- LIST_ENTRY *Link;
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *ThunkContext;
-
- for (Link = mSmmSwDispatch2ThunkQueue.ForwardLink;
- Link != &mSmmSwDispatch2ThunkQueue;
- Link = Link->ForwardLink) {
- ThunkContext = BASE_CR (
- Link,
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT,
- Link
- );
- if (ThunkContext->SwSmiInputValue == SwSmiInputValue) {
- return ThunkContext;
- }
- }
- return NULL;
-}
-
-/**
- This function find SmmSwDispatch2Context by DispatchHandle.
-
- @param DispatchHandle The DispatchHandle to indentify the SmmSwDispatch2Thunk context
-
- @return SmmSwDispatch2Thunk context
-**/
-EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *
-FindSmmSwDispatch2ContextByDispatchHandle (
- IN EFI_HANDLE DispatchHandle
- )
-{
- LIST_ENTRY *Link;
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *ThunkContext;
-
- for (Link = mSmmSwDispatch2ThunkQueue.ForwardLink;
- Link != &mSmmSwDispatch2ThunkQueue;
- Link = Link->ForwardLink) {
- ThunkContext = BASE_CR (
- Link,
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT,
- Link
- );
- if (ThunkContext->DispatchHandle == DispatchHandle) {
- return ThunkContext;
- }
- }
- return NULL;
-}
-
-/**
- Framework dispatch function for a Software SMI handler.
-
- @param DispatchHandle The handle of this dispatch function.
- @param DispatchContext The pointer to the dispatch function's context.
- The SwSmiInputValue field is filled in
- by the software dispatch driver prior to
- invoking this dispatch function.
- The dispatch function will only be called
- for input values for which it is registered.
-
- @return None
-
-**/
-VOID
-EFIAPI
-FrameworkDispatchFunction (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
- )
-{
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *ThunkContext;
- EFI_SMM_HANDLER_ENTRY_POINT2 DispatchFunction;
- EFI_SMM_SW_REGISTER_CONTEXT RegisterContext;
- EFI_SMM_SW_CONTEXT SwContext;
- UINTN Size;
- UINTN Index;
- EFI_SMM_SAVE_STATE_IO_INFO IoInfo;
- EFI_STATUS Status;
-
- //
- // Search context
- //
- ThunkContext = FindSmmSwDispatch2ContextBySwSmiInputValue (DispatchContext->SwSmiInputValue);
- ASSERT (ThunkContext != NULL);
- if (ThunkContext == NULL) {
- return ;
- }
-
- //
- // Construct new context
- //
- RegisterContext.SwSmiInputValue = DispatchContext->SwSmiInputValue;
- Size = sizeof(SwContext);
- SwContext.CommandPort = IoRead8 (mSmiTriggerRegister);
- SwContext.DataPort = IoRead8 (mSmiDataRegister);
-
- //
- // Try to find which CPU trigger SWSMI
- //
- SwContext.SwSmiCpuIndex = 0;
- for (Index = 0; Index < gSmst->NumberOfCpus; Index++) {
- Status = mSmmCpuProtocol->ReadSaveState (
- mSmmCpuProtocol,
- sizeof(IoInfo),
- EFI_SMM_SAVE_STATE_REGISTER_IO,
- Index,
- &IoInfo
- );
- if (EFI_ERROR (Status)) {
- continue;
- }
- if (IoInfo.IoPort == mSmiTriggerRegister) {
- //
- // Great! Find it.
- //
- SwContext.SwSmiCpuIndex = Index;
- break;
- }
- }
-
- //
- // Dispatch
- //
- DispatchFunction = (EFI_SMM_HANDLER_ENTRY_POINT2)ThunkContext->DispatchFunction;
- DispatchFunction (
- DispatchHandle,
- &RegisterContext,
- &SwContext,
- &Size
- );
- return ;
-}
-
-/**
- Register a child SMI source dispatch function for the specified software SMI.
-
- This service registers a function (DispatchFunction) which will be called when the software
- SMI source specified by RegisterContext->SwSmiCpuIndex is detected. On return,
- DispatchHandle contains a unique handle which may be used later to unregister the function
- using UnRegister().
-
- @param[in] This Pointer to the EFI_SMM_SW_DISPATCH2_PROTOCOL instance.
- @param[in] DispatchFunction Function to register for handler when the specified software
- SMI is generated.
- @param[in, out] RegisterContext Pointer to the dispatch function's context.
- The caller fills this context in before calling
- the register function to indicate to the register
- function which Software SMI input value the
- dispatch function should be invoked for.
- @param[out] DispatchHandle Handle generated by the dispatcher to track the
- function instance.
-
- @retval EFI_SUCCESS The dispatch function has been successfully
- registered and the SMI source has been enabled.
- @retval EFI_DEVICE_ERROR The SW driver was unable to enable the SMI source.
- @retval EFI_INVALID_PARAMETER RegisterContext is invalid. The SW SMI input value
- is not within valid range.
- @retval EFI_OUT_OF_RESOURCES There is not enough memory (system or SMM) to manage this
- child.
- @retval EFI_OUT_OF_RESOURCES A unique software SMI value could not be assigned
- for this dispatch.
-**/
-EFI_STATUS
-EFIAPI
-SmmSwDispatch2Register (
- IN CONST EFI_SMM_SW_DISPATCH2_PROTOCOL *This,
- IN EFI_SMM_HANDLER_ENTRY_POINT2 DispatchFunction,
- IN OUT EFI_SMM_SW_REGISTER_CONTEXT *RegisterContext,
- OUT EFI_HANDLE *DispatchHandle
- )
-{
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *ThunkContext;
- EFI_SMM_SW_DISPATCH_CONTEXT DispatchContext;
- EFI_STATUS Status;
- UINTN Index;
-
- if (RegisterContext->SwSmiInputValue == (UINTN)-1) {
- //
- // If SwSmiInputValue is set to (UINTN) -1 then a unique value will be assigned and returned in the structure.
- //
- Status = EFI_NOT_FOUND;
- for (Index = 1; Index < gSmmSwDispatch2.MaximumSwiValue; Index++) {
- DispatchContext.SwSmiInputValue = Index;
- Status = mSmmSwDispatch->Register (
- mSmmSwDispatch,
- FrameworkDispatchFunction,
- &DispatchContext,
- DispatchHandle
- );
- if (!EFI_ERROR (Status)) {
- RegisterContext->SwSmiInputValue = Index;
- break;
- }
- }
- if (RegisterContext->SwSmiInputValue == (UINTN)-1) {
- return EFI_OUT_OF_RESOURCES;
- }
- } else {
- DispatchContext.SwSmiInputValue = RegisterContext->SwSmiInputValue;
- Status = mSmmSwDispatch->Register (
- mSmmSwDispatch,
- FrameworkDispatchFunction,
- &DispatchContext,
- DispatchHandle
- );
- }
- if (!EFI_ERROR (Status)) {
- //
- // Register
- //
- Status = gSmst->SmmAllocatePool (
- EfiRuntimeServicesData,
- sizeof(*ThunkContext),
- (VOID **)&ThunkContext
- );
- ASSERT_EFI_ERROR (Status);
- if (EFI_ERROR (Status)) {
- mSmmSwDispatch->UnRegister (mSmmSwDispatch, *DispatchHandle);
- return EFI_OUT_OF_RESOURCES;
- }
-
- ThunkContext->SwSmiInputValue = RegisterContext->SwSmiInputValue;
- ThunkContext->DispatchFunction = (UINTN)DispatchFunction;
- ThunkContext->DispatchHandle = *DispatchHandle;
- InsertTailList (&mSmmSwDispatch2ThunkQueue, &ThunkContext->Link);
- }
-
- return Status;
-}
-
-/**
- Unregister a child SMI source dispatch function for the specified software SMI.
-
- This service removes the handler associated with DispatchHandle so that it will no longer be
- called in response to a software SMI.
-
- @param[in] This Pointer to the EFI_SMM_SW_DISPATCH2_PROTOCOL instance.
- @param[in] DispatchHandle Handle of dispatch function to deregister.
-
- @retval EFI_SUCCESS The dispatch function has been successfully unregistered.
- @retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
-**/
-EFI_STATUS
-EFIAPI
-SmmSwDispatch2UnRegister (
- IN CONST EFI_SMM_SW_DISPATCH2_PROTOCOL *This,
- IN EFI_HANDLE DispatchHandle
- )
-{
- EFI_SMM_SW_DISPATCH2_THUNK_CONTEXT *ThunkContext;
- EFI_STATUS Status;
-
- Status = mSmmSwDispatch->UnRegister (mSmmSwDispatch, DispatchHandle);
- if (!EFI_ERROR (Status)) {
- //
- // Unregister
- //
- ThunkContext = FindSmmSwDispatch2ContextByDispatchHandle (DispatchHandle);
- ASSERT (ThunkContext != NULL);
- if (ThunkContext != NULL) {
- RemoveEntryList (&ThunkContext->Link);
- gSmst->SmmFreePool (ThunkContext);
- }
- }
-
- return Status;
-}
-
-/**
- Entry Point for this thunk driver.
-
- @param[in] ImageHandle Image handle of this driver.
- @param[in] SystemTable A Pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The entry point is executed successfully.
- @retval other Some error occurred when executing this entry point.
-**/
-EFI_STATUS
-EFIAPI
-SmmSwDispatch2ThunkMain (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
- EFI_SMM_CONTROL_PROTOCOL *SmmControl;
- EFI_SMM_CONTROL_REGISTER RegisterInfo;
-
- //
- // Locate Framework SMM SwDispatch Protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiSmmSwDispatchProtocolGuid,
- NULL,
- (VOID **)&mSmmSwDispatch
- );
- ASSERT_EFI_ERROR (Status);
- gSmmSwDispatch2.MaximumSwiValue = mSmmSwDispatch->MaximumSwiValue;
- if (gSmmSwDispatch2.MaximumSwiValue == 0x0) {
- DEBUG ((EFI_D_ERROR, "BUGBUG: MaximumSwiValue is 0, work-around to make it 0xFF\n"));
- gSmmSwDispatch2.MaximumSwiValue = 0xFF;
- }
-
- //
- // Locate Framework SMM Control Protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiSmmControlProtocolGuid,
- NULL,
- (VOID **)&SmmControl
- );
-
- ASSERT_EFI_ERROR (Status);
- Status = SmmControl->GetRegisterInfo (
- SmmControl,
- &RegisterInfo
- );
- ASSERT_EFI_ERROR (Status);
- mSmiTriggerRegister = RegisterInfo.SmiTriggerRegister;
- mSmiDataRegister = RegisterInfo.SmiDataRegister;
-
- //
- // Locate PI SMM CPU protocol
- //
- Status = gSmst->SmmLocateProtocol (
- &gEfiSmmCpuProtocolGuid,
- NULL,
- (VOID **)&mSmmCpuProtocol
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Publish PI SMM SwDispatch2 Protocol
- //
- ImageHandle = NULL;
- Status = gSmst->SmmInstallProtocolInterface (
- &ImageHandle,
- &gEfiSmmSwDispatch2ProtocolGuid,
- EFI_NATIVE_INTERFACE,
- &gSmmSwDispatch2
- );
- ASSERT_EFI_ERROR (Status);
- return Status;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf b/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
deleted file mode 100644
index 4f95fc281e..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
+++ /dev/null
@@ -1,54 +0,0 @@
-## @file
-# Component description file for SMM SwDispatch2 Protocol on SMM SwDispatch Protocol Thunk driver.
-#
-# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SmmSwDispatch2OnSmmSwDispatchThunk
- FILE_GUID = 1410C6AC-9F4B-495b-9C23-8A5AEB0165E9
- MODULE_TYPE = DXE_SMM_DRIVER
- VERSION_STRING = 1.0
- PI_SPECIFICATION_VERSION = 0x0001000A
- ENTRY_POINT = SmmSwDispatch2ThunkMain
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-[Sources]
- SmmSwDispatch2OnSmmSwDispatchThunk.c
-
-[Packages]
- MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
-
-[LibraryClasses]
- UefiDriverEntryPoint
- UefiBootServicesTableLib
- SmmServicesTableLib
- BaseLib
- IoLib
- DebugLib
-
-[Protocols]
- gEfiSmmControlProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiSmmSwDispatchProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiSmmCpuProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiSmmSwDispatch2ProtocolGuid # PROTOCOL ALWAYS_PRODUCED
-
-[Depex]
- gEfiSmmSwDispatchProtocolGuid AND
- gEfiSmmControlProtocolGuid AND
- gEfiSmmCpuProtocolGuid
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.c b/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.c
deleted file mode 100644
index de257b35b5..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/** @file
- A helper driver to save information to SMRAM after SMRR is enabled.
-
- This driver is for ECP platforms.
-
- Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-
-#include <PiSmm.h>
-#include <Library/DebugLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/SmmServicesTableLib.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/IoLib.h>
-#include <Protocol/SmmSwDispatch.h>
-#include <Protocol/SmmReadyToLock.h>
-#include <Protocol/SmmControl.h>
-#include <Guid/Vlv2DeviceRefCodePkgTokenSpace.h>
-
-#define SMM_FROM_SMBASE_DRIVER 0x55
-#define SMM_FROM_CPU_DRIVER_SAVE_INFO 0x81
-
-#define EFI_SMRAM_CPU_NVS_HEADER_GUID \
- { \
- 0x429501d9, 0xe447, 0x40f4, 0x86, 0x7b, 0x75, 0xc9, 0x3a, 0x1d, 0xb5, 0x4e \
- }
-
-UINT8 mSmiDataRegister;
-BOOLEAN mLocked = FALSE;
-EFI_GUID mSmramCpuNvsHeaderGuid = EFI_SMRAM_CPU_NVS_HEADER_GUID;
-
-/**
- Dispatch function for a Software SMI handler.
-
- @param DispatchHandle The handle of this dispatch function.
- @param DispatchContext The pointer to the dispatch function's context.
- The SwSmiInputValue field is filled in
- by the software dispatch driver prior to
- invoking this dispatch function.
- The dispatch function will only be called
- for input values for which it is registered.
-
- @return None
-
-**/
-VOID
-EFIAPI
-SmramSaveInfoHandler (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
- )
-{
- ASSERT (DispatchContext != NULL);
- ASSERT (DispatchContext->SwSmiInputValue == SMM_FROM_SMBASE_DRIVER);
-
- if (!mLocked && IoRead8 (mSmiDataRegister) == SMM_FROM_CPU_DRIVER_SAVE_INFO) {
- CopyMem (
- (VOID *)(UINTN)(PcdGetEx64 (&gEfiVLVTokenSpaceGuid, PcdCpuLockBoxDataAddress)),
- (VOID *)(UINTN)(PcdGetEx64 (&gEfiVLVTokenSpaceGuid, PcdCpuSmramCpuDataAddress)),
- (UINTN)(PcdGetEx64 (&gEfiVLVTokenSpaceGuid, PcdCpuLockBoxSize))
- );
- }
-}
-
-/**
- Smm Ready To Lock event notification handler.
-
- It sets a flag indicating that SMRAM has been locked.
-
- @param[in] Protocol Points to the protocol's unique identifier.
- @param[in] Interface Points to the interface instance.
- @param[in] Handle The handle on which the interface was installed.
-
- @retval EFI_SUCCESS Notification handler runs successfully.
- **/
-EFI_STATUS
-EFIAPI
-SmmReadyToLockEventNotify (
- IN CONST EFI_GUID *Protocol,
- IN VOID *Interface,
- IN EFI_HANDLE Handle
- )
-{
- mLocked = TRUE;
- return EFI_SUCCESS;
-}
-
-/**
- Entry point function of this driver.
-
- @param[in] ImageHandle The firmware allocated handle for the EFI image.
- @param[in] SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The entry point is executed successfully.
- @retval other Some error occurs when executing this entry point.
-**/
-EFI_STATUS
-EFIAPI
-SmramSaveInfoHandlerSmmMain (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
- EFI_SMM_SW_DISPATCH_PROTOCOL *SmmSwDispatch;
- EFI_SMM_SW_DISPATCH_CONTEXT SmmSwDispatchContext;
- EFI_HANDLE DispatchHandle;
- EFI_SMM_CONTROL_PROTOCOL *SmmControl;
- EFI_SMM_CONTROL_REGISTER SmmControlRegister;
- VOID *Registration;
-
- //
- // Get SMI data register
- //
- Status = SystemTable->BootServices->LocateProtocol (
- &gEfiSmmControlProtocolGuid,
- NULL,
- (VOID **)&SmmControl
- );
- ASSERT_EFI_ERROR (Status);
- Status = SmmControl->GetRegisterInfo (SmmControl, &SmmControlRegister);
- ASSERT_EFI_ERROR (Status);
- mSmiDataRegister = SmmControlRegister.SmiDataRegister;
-
- //
- // Register software SMI handler
- //
-
- Status = SystemTable->BootServices->LocateProtocol (
- &gEfiSmmSwDispatchProtocolGuid,
- NULL,
- (VOID **)&SmmSwDispatch
- );
- ASSERT_EFI_ERROR (Status);
-
- SmmSwDispatchContext.SwSmiInputValue = SMM_FROM_SMBASE_DRIVER;
- Status = SmmSwDispatch->Register (
- SmmSwDispatch,
- &SmramSaveInfoHandler,
- &SmmSwDispatchContext,
- &DispatchHandle
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Register SMM Ready To Lock Protocol notification
- //
- Status = gSmst->SmmRegisterProtocolNotify (
- &gEfiSmmReadyToLockProtocolGuid,
- SmmReadyToLockEventNotify,
- &Registration
- );
- ASSERT_EFI_ERROR (Status);
-
- return Status;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf b/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
deleted file mode 100644
index ec42c84472..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
+++ /dev/null
@@ -1,60 +0,0 @@
-## @file
-#
-# A helper driver to save information to SMRAM after SMRR is enabled.
-#
-# Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SmramSaveInfoHandlerSmm
- FILE_GUID = 63296C52-01CF-4eea-A47C-782A14DA6894
- MODULE_TYPE = DXE_SMM_DRIVER
- VERSION_STRING = 1.0
- PI_SPECIFICATION_VERSION = 0x0001000A
-
- ENTRY_POINT = SmramSaveInfoHandlerSmmMain
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64
-#
-
-[Sources.common]
- SmramSaveInfoHandlerSmm.c
-
-[Packages]
- MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
-
-[LibraryClasses]
- UefiDriverEntryPoint
- UefiRuntimeServicesTableLib
- SmmServicesTableLib
- BaseLib
- BaseMemoryLib
- IoLib
-
-[Protocols]
- gEfiSmmSwDispatchProtocolGuid ## CONSUMED
- gEfiSmmControlProtocolGuid ## CONSUMED
- gEfiSmmReadyToLockProtocolGuid ## CONSUMED
-
-[Pcd.common]
- gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress
- gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress
- gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize
-
-[Depex]
- gEfiSmmSwDispatchProtocolGuid AND
- gEfiSmmControlProtocolGuid
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIHeader/Vacant.bin b/Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIHeader/Vacant.bin
deleted file mode 100644
index 12d359146014baad9277a951b237fd27e819db6e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3928064
zcmeIuF#!Mo0K%aDspo45h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r
z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@
z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK
zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5
zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM
z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*
z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd
z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA
zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj
rFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFz^EdVf>G}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat b/Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat
deleted file mode 100644
index 200ca05a23..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat
+++ /dev/null
@@ -1,270 +0,0 @@
-@REM @file
-@REM Windows batch file to build BIOS ROM
-@REM
-@REM Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
-@REM
-@REM SPDX-License-Identifier: BSD-2-Clause-Patent
-@REM
-
-@echo off
-SetLocal EnableDelayedExpansion EnableExtensions
-
-set PLATFORM_BIN_PACKAGE=%WORKSPACE%\Vlv2SocBinPkg
-if not exist %PLATFORM_BIN_PACKAGE% (
- if defined PACKAGES_PATH (
- for %%i IN (%PACKAGES_PATH%) DO (
- if exist %%~fi\Vlv2SocBinPkg (
- set PLATFORM_BIN_PACKAGE=%%~fi\Vlv2SocBinPkg
- goto PlatformBinPackageFound
- )
- )
- ) else (
- echo.
- echo !!! ERROR !!! Cannot find %PLATFORM_NAME% !!!
- echo.
- goto BldFail
- )
-)
-:PlatformBinPackageFound
-
-
-:: Set script defaults
-set exitCode=0
-set BackupRom=1
-set UpdateVBios=1
-set SpiLock=0
-set Stitch_Config=Stitch_Config.txt
-copy /y nul Stitching.log >nul
-
-:: Set default Suffix as: YYYY_MM_DD_HHMM
-set hour=%time: =0%
-reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International_Temp" /f >nul
-reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy_MM_dd" /f >nul
-for /f "tokens=1" %%i in ("%date%") do set today=%%i
-reg copy "HKCU\Control Panel\International_Temp" "HKCU\Control Panel\International" /f >nul
-reg delete "HKCU\Control Panel\International_Temp" /f >nul
-set IFWI_Suffix=%today%_%hour:~0,2%%time:~3,2%
-
-:: Process input arguments
-if "%~1"=="?" goto Usage
-if "%~1"=="/?" goto Usage
-if /i "%~1"=="Help" goto Usage
-
-:OptLoop
-if /i "%~1"=="/nV" (
- set UpdateVBios=0
- shift
- goto OptLoop
-)
-if /i "%~1"=="/nB" (
- set BackupRom=0
- shift
- goto OptLoop
-)
-if /i "%~1"=="/yL" (
- set SpiLock=1
- shift
- goto OptLoop
-)
-
-if /i "%~1"=="/B" (
- if "%~2"=="" goto Usage
- if not exist %~2 echo BIOS not found. & goto Usage
- set BIOS_Names=%~2
- set BIOS_File_Name=%~n2
- shift & shift
- goto OptLoop
-)
-if /i "%~1"=="/C" (
- if "%~2"=="" goto Usage
- if not exist %~2 echo ConfigFile not found. & goto Usage
- set Stitch_Config=%~2
- shift & shift
- goto OptLoop
-)
-if /i "%~1"=="/S" (
- if "%~2"=="" goto Usage
- set IFWI_Suffix=%~2
- shift & shift
- goto OptLoop
-)
-
-if "%BIOS_File_Name:~0,4%"=="MNW2" (
- set Stitch_Config= MNW2_Stitch_Config.txt
-)
-if "%BIOS_File_Name:~3,4%"=="MNW2" (
- set Stitch_Config= MNW2_Stitch_Config.txt
-)
-
-:: if no rom specified by user, search in ./ for ROM files
-if "%BIOS_Names%"=="" (
- set "BIOS_Names= "
- for /f "tokens=*" %%i in ('dir /b *.rom') do set BIOS_Names=!BIOS_Names! %%i
- if "!BIOS_Names!"==" " (
- echo NO .ROM files found !!!
- goto Usage
- )
-)
-
-:: Parse the Stitch_Config File
-if not exist %Stitch_Config% (
- echo Stitch Configuration File %Stitch_Config% not found.
- goto ScriptFail
-)
-for /f "delims== tokens=1,2" %%i in (%Stitch_Config%) do (
- if /i "%%i"=="HEADER" set IFWI_HEADER=%%j
- if /i "%%i"=="SEC_VERSION" set SEC_VERSION=%%j
- if /i "%%i"=="Source" (
- if /i "%%j"=="ALPHA" set Source_Prefix=A_
- if /i "%%j"=="BF" set Source_Prefix=BF_
- if /i "%%j"=="BE" set Source_Prefix=BE_
- if /i "%%j"=="PV" set Source_Prefix=PV_
- if /i "%%j"=="PR1" set Source_Prefix=PR1_
- )
-)
-
-if %SpiLock% EQU 1 (
- set IFWI_HEADER_FILE=IFWIHeader\!IFWI_HEADER!_SPILOCK.bin
-) else (
- set IFWI_HEADER_FILE=IFWIHeader\!IFWI_HEADER!.bin
-)
-
-:: **********************************************************************
-:: The Main Stitching Loop
-:: **********************************************************************
-echo %date% %time% >>Stitching.log 2>&1
-echo %date% %time%
-echo.
-for %%i in (%BIOS_Names%) do (
-
- REM ----- Do NOT use :: for comments Inside of code blocks() -------
- set BIOS_Rom=%%i
- set BIOS_Name=%%~ni
- set BIOS_Version=!BIOS_Name:~-7,7!
-
- REM extract PlatformType from BIOS filename
- set Platform_Type=!BIOS_Name:~0,4!
-
- REM Special treat for BayLake FFD8
- set Temp_Name=!BIOS_Name:~0,7!
-
-
- REM Capitalize and validate the Platform_Type
- if /i "!Platform_Type!"=="MNW2" (
- set Platform_Type=MNW2
- ) else (
- echo Error - Unsupported PlatformType: !Platform_Type!
- goto Usage
- )
-
-
- REM search BIOS_Name for Arch substring: either IA32 or X64
- if not "!BIOS_Name!"=="!BIOS_Name:_IA32_=!" (
- set Arch=IA32
- ) else if not "!BIOS_Name!"=="!BIOS_Name:_X64_=!" (
- set Arch=X64
- ) else (
- echo Error: Could not determine Architecture for !BIOS_Rom!
- goto Usage
- )
- set IFWI_Prefix=!Platform_Type!_IFWI_%Source_Prefix%!Arch!_!!BIOS_Version!
-
- REM search BIOS_Name for Build_Target substring: either R or D
- if not "!BIOS_Name!"=="!BIOS_Name:_R_=!" (
- set Build_Target=Release
- set IFWI_Prefix=!IFWI_Prefix!_R
- ) else if not "!BIOS_Name!"=="!BIOS_Name:_D_=!" (
- set Build_Target=Debug
- set IFWI_Prefix=!IFWI_Prefix!_D
- ) else (
- echo Error: Could not determine Build Target for !BIOS_Rom!
- goto Usage
- )
-
- REM Create a BIOS backup before Stitching
- if %BackupRom% EQU 1 (
- echo Creating backup of original BIOS rom.
- copy /y !BIOS_Rom! !BIOS_Rom!.orig >nul
- )
-
- echo. >>Stitching.log
- echo ********** Stitching !BIOS_Rom! ********** >>Stitching.log
- echo. >>Stitching.log
- echo.
- echo Stitching IFWI for !BIOS_Rom! ...
- echo ---------------------------------------------------------------------------
- echo IFWI Header: !IFWI_HEADER_FILE!, SEC version: !SEC_VERSION!,
- echo BIOS Version: !BIOS_Version!
-
- echo Platform Type: !Platform_Type!, IFWI Prefix: %BIOS_ID%
- echo ---------------------------------------------------------------------------
-
- echo -----------------------------
- echo.
- echo Generating IFWI... %BIOS_ID%.bin
- echo.
-
- copy /b/y !IFWI_HEADER_FILE! + %PLATFORM_BIN_PACKAGE%\SEC\!SEC_VERSION!\VLV_SEC_REGION.bin + %PLATFORM_BIN_PACKAGE%\SEC\!SEC_VERSION!\Vacant.bin + !BIOS_Rom! %BIOS_ID%.bin
- echo.
- echo ===========================================================================
-)
-@echo off
-
-::**********************************************************************
-:: end of main loop
-::**********************************************************************
-
-echo.
-echo -- All specified ROM files Stitched. --
-echo.
-goto Exit
-
-:Usage
-echo.
-echo **************************************************************************************************
-echo This Script is used to Stitch together BIOS, GOP Driver, Microcode Patch and TXE FW
-echo into a single Integrated Firmware Image (IFWI).
-echo.
-echo Usage: IFWIStitch.bat [flags] [/B BIOS.ROM] [/C Stitch_Config] [/S IFWI_Suffix]
-echo.
-echo This script has NO Required arguments, so that the user can just double click from the GUI.
-echo However, this requires that the BIOS.ROM file name is formatted correctly.
-echo.
-echo /nG Do NOT update the GOP driver. (applies to all ROM files for this run)
-echo /nV Do NOT update the VBIOS. (applies to all ROM files for this run)
-echo /nM Do NOT update the Microcode. (applies to all ROM files for this run)
-echo /nB Do NOT backup BIOS.ROMs. (Default will backup to BIOS.ROM.Orig)
-echo.
-echo BIOS.ROM: A single BIOS ROM file to use for stitching
-echo (DEFAULT: ALL .ROM files inside the current directory)
-echo Stitch_Config: Text file containing version info of each FW component
-echo (DEFAULT: Stitch_Config.txt)
-echo IFWI_Suffix: Suffix to append to the end of the IFWI filename
-echo (DEFAULT: YYYY_MM_DD_HHMM)
-echo.
-echo Examples:
-echo IFIWStitch.bat : Stitch all ROMs with defaults
-echo IFIWStitch.bat /B C:/MyRoms/testBIOS.rom : Stitch single ROM with defaults
-echo IFIWStitch.bat /B ../testBIOS.rom /S test123 : Stitch single ROM and add custom suffix
-echo IFIWStitch.bat /nM /nB /B testBIOS.rom /S test456 : Stitch single ROM, keep uCode from .rom,
-echo don't create backup, and add custom suffix.
-echo ****************************************************************************************************
-pause
-exit /b 1
-
-:ScriptFail
-set exitCode=1
-
-:Exit
-echo -- See Stitching.log for more info. --
-echo.
-echo %date% %time%
-echo.
-if "%Platform_Type%"=="MNW2" (
- echo .
-) else (
- echo only support MNW2 for this project!
-pause
-)
-exit /b %exitCode%
-EndLocal
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Stitch/MNW2_Stitch_Config.txt b/Platform/Intel/Vlv2TbltDevicePkg/Stitch/MNW2_Stitch_Config.txt
deleted file mode 100644
index 82abe6548f..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Stitch/MNW2_Stitch_Config.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-
-HEADER=IFWI_HEADER
-SEC_VERSION=1.0.2.1060v5
-
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 04/14] Vlv2TbltDevicePkg: Switch from ISA to SIO modules
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (2 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 03/14] Vlv2TbltDevicePkg: Remove unused modules/libraries Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:07 ` Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 05/14] Vlv2TbltDevicePkg: Switch to CPU I/O 2 Protocol Michael D Kinney
` (10 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
Remove IntelFrameworkModulePkg ISA related modules and replace
with MdeModulePkg SIO modules.
* Retire Wpce791 module
* Retire gEfiLpcWpce791PolicyProtocolGuid and include file
* Retire gEfiLpcWpc83627PolicyProtocolGuid and include file
* Remove production of gEfiLpcWpc83627PolicyProtocolGuid from
PlatformDxe module
* Add PcuSio module
* Use PciSioSerialDxe module
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Include/Protocol/LpcWpc83627Policy.h | 92 --
.../Include/Protocol/LpcWpce791Policy.h | 55 -
.../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c | 951 ++++++++++++++++++
.../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h | 363 +++++++
.../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf | 38 +
.../Vlv2TbltDevicePkg/PlatformDxe/Platform.c | 4 -
.../PlatformDxe/PlatformDxe.inf | 2 -
.../PlatformDxe/SioPlatformPolicy.c | 82 --
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 1 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 2 +-
.../Vlv2TbltDevicePkg/Wpce791/LpcDriver.c | 340 -------
.../Vlv2TbltDevicePkg/Wpce791/LpcDriver.h | 112 ---
.../Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c | 366 -------
.../Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h | 103 --
.../Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c | 126 ---
.../Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h | 101 --
.../Vlv2TbltDevicePkg/Wpce791/Wpce791.inf | 63 --
18 files changed, 1354 insertions(+), 1449 deletions(-)
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpc83627Policy.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpce791Policy.h
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/SioPlatformPolicy.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/Wpce791.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpc83627Policy.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpc83627Policy.h
deleted file mode 100644
index 62d026f133..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpc83627Policy.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- LpcWpc83667Policy.h
-
-Abstract:
-
- Protocol used for WPC83627 Policy definition.
--------------------------------------------------------------------------------
- Rev Date<MM/DD/YYYY> Name Description
- -------------------------------------------------------------------------------
- R01 < 4/22/2011> LB Update driver for Sio83627UGH support.
- -------------------------------------------------------------------------------
-**/
-
-#ifndef _WPC83627_POLICY_PROTOCOL_H_
-#define _WPC83627_POLICY_PROTOCOL_H_
-
-EFI_FORWARD_DECLARATION (EFI_WPC83627_POLICY_PROTOCOL);
-
-#define EFI_WPC83627_POLICY_PROTOCOL_GUID \
- { \
- 0xd3ecc567, 0x9fd5, 0x44c1, 0x86, 0xcf, 0x5d, 0xa7, 0xa2, 0x4f, 0x4b, 0x5d \
- }
-
-#define EFI_WPC83627_COM1_ENABLE 0x01
-#define EFI_WPC83627_COM2_ENABLE 0x01
-
-#define EFI_WPC83627_COM3_ENABLE 0x01
-#define EFI_WPC83627_COM4_ENABLE 0x01
-
-#define EFI_WPC83627_LPT1_ENABLE 0x01
-#define EFI_WPC83627_LPT1_ENABLE 0x01
-#define EFI_WPC83627_FDD_ENABLE 0x01
-#define EFI_WPC83627_FDD_WRITE_ENABLE 0x01
-#define EFI_WPC83627_PS2_KBC_ENABLE 0x01
-#define EFI_WPC83627_ECIR_ENABLE 0x01
-
-#define EFI_WPC83627_COM1_DISABLE 0x00
-#define EFI_WPC83627_COM2_DISABLE 0x00
-
-#define EFI_WPC83627_COM3_DISABLE 0x00
-#define EFI_WPC83627_COM4_DISABLE 0x00
-
-#define EFI_WPC83627_LPT1_DISABLE 0x00
-#define EFI_WPC83627_FDD_DISABLE 0x00
-#define EFI_WPC83627_FDD_WRITE_PROTECT 0x00
-#define EFI_WPC83627_PS2_KBC_DISABLE 0x00
-#define EFI_WPC83627_ECIR_DISABLE 0x00
-#define EFI_WPC83627_RESERVED_DEFAULT 0x00
-
-typedef struct {
- UINT16 Com1 :1; // 0 = Disable, 1 = Enable
- UINT16 Lpt1 :1; // 0 = Disable, 1 = Enable
- UINT16 Floppy :1; // 0 = Disable, 1 = Enable
- UINT16 FloppyWriteProtect :1; // 0 = Write Protect, 1 = Write Enable
- UINT16 Port80 :1; // 0 = Disable, 1 = Enable
- UINT16 CIR :1; // CIR enable or disable
- UINT16 Ps2Keyboard :1; // 0 = Disable, 1 = Enable
- UINT16 Ps2Mouse :1; // 0 = Disable, 1 = Enable
- UINT16 Com2 :1; // 0 = Disable, 1 = Enable
-
- UINT16 Com3 :1; // 0 = Disable, 1 = Enable
- UINT16 Com4 :1; // 0 = Disable, 1 = Enable
-
- UINT16 Dac :1; // 0 = Disable, 1 = Enable
- UINT16 Rsvd :6;
-} EFI_WPC83627_DEVICE_ENABLES;
-
-typedef enum {
- LptModeOutput,
- LptModeBiDirectional,
- LptModeEpp,
- LptModeEcp
-} EFI_LPT_MODE;
-
-typedef struct _EFI_WPC83627_POLICY_PROTOCOL {
- EFI_WPC83627_DEVICE_ENABLES DeviceEnables;
- EFI_LPT_MODE LptMode;
-} EFI_WPC83627_POLICY_PROTOCOL;
-
-extern EFI_GUID gEfiLpcWpc83627PolicyProtocolGuid;
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpce791Policy.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpce791Policy.h
deleted file mode 100644
index 1b2459e54a..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpce791Policy.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- LpcWpce791Policy.h
-
-Abstract:
-
- Protocol used for WPCE791 Policy definition.
-
-**/
-
-#ifndef _WPCE791_POLICY_PROTOCOL_H_
-#define _WPCE791_POLICY_PROTOCOL_H_
-
-
-#define EFI_WPCE791_POLICY_PROTOCOL_GUID \
- { \
- 0xab2bee2f, 0xc1a6, 0x4399, 0x85, 0x3d, 0xc0, 0x7c, 0x77, 0x4f, 0xfd, 0xd \
- }
-
-#define EFI_WPCE791_PS2_KEYBOARD_ENABLE 0x01
-#define EFI_WPCE791_PS2_KEYBOARD_DISABLE 0x00
-
-#define EFI_WPCE791_PS2_MOUSE_ENABLE 0x01
-#define EFI_WPCE791_PS2_MOUSE_DISABLE 0x00
-
-typedef struct {
- UINT16 Com1 :1; // 0 = Disable, 1 = Enable
- UINT16 Lpt1 :1; // 0 = Disable, 1 = Enable
- UINT16 Floppy :1; // 0 = Disable, 1 = Enable
- UINT16 FloppyWriteProtect :1; // 0 = Write Protect, 1 = Write Enable
- UINT16 Port80 :1; // 0 = Disable, 1 = Enable
- UINT16 CIR :1; // CIR enable or disable
- UINT16 Ps2Keyboard :1; // 0 = Disable, 1 = Enable
- UINT16 Ps2Mouse :1; // 0 = Disable, 1 = Enable
- UINT16 Com2 :1; // 0 = Disable, 1 = Enable
- UINT16 Dac :1; // 0 = Disable, 1 = Enable
- UINT16 Rsvd :6;
-} EFI_WPCE791_DEVICE_ENABLES;
-
-typedef struct _EFI_WPCE791_POLICY_PROTOCOL {
- EFI_WPCE791_DEVICE_ENABLES DeviceEnables;
-} EFI_WPCE791_POLICY_PROTOCOL;
-
-extern EFI_GUID gEfiLpcWpce791PolicyProtocolGuid;
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c
new file mode 100644
index 0000000000..d16b1b0abd
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c
@@ -0,0 +1,951 @@
+/** @file
+ Produces the SIO Protocols for ISA devices integrated in the Platform
+ Controller Unit (PCU).
+
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "PcuSio.h"
+
+//
+// PCU SIO Driver Global Variables
+//
+EFI_DRIVER_BINDING_PROTOCOL gPcuSioDriverBinding = {
+ PcuSioDriverBindingSupported,
+ PcuSioDriverBindingStart,
+ PcuSioDriverBindingStop,
+ 0x10,
+ NULL,
+ NULL
+};
+
+//
+// Super I/O Protocol interfaces
+//
+EFI_SIO_PROTOCOL mSioInterface = {
+ SioRegisterAccess,
+ SioGetResources,
+ SioSetResources,
+ SioPossibleResources,
+ SioModify
+};
+
+//
+// COM 1 UART Controller
+//
+GLOBAL_REMOVE_IF_UNREFERENCED
+SIO_RESOURCES_IO mCom1Resources = {
+ { { ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR }, 0x3F8, 8 },
+ { ACPI_END_TAG_DESCRIPTOR, 0 }
+};
+
+//
+// Table of SIO Controllers
+//
+GLOBAL_REMOVE_IF_UNREFERENCED
+SIO_DEVICE_INFO mDevicesInfo[] = {
+ {
+ EISA_PNP_ID (0x501),
+ 0,
+ { (ACPI_SMALL_RESOURCE_HEADER *) &mCom1Resources }
+ }
+};
+
+//
+// ACPI Device Path Node template
+//
+GLOBAL_REMOVE_IF_UNREFERENCED
+ACPI_HID_DEVICE_PATH mAcpiDeviceNodeTemplate = {
+ { // Header
+ ACPI_DEVICE_PATH,
+ ACPI_DP,
+ {
+ (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)),
+ (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8)
+ }
+ },
+ 0x0, // HID
+ 0x0 // UID
+};
+
+/**
+ Provides a low level access to the registers for the Super I/O.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] Write Specifies the type of the register operation.
+ If this parameter is TRUE, Value is interpreted
+ as an input parameter and the operation is a
+ register write. If this parameter is FALSE,
+ Value is interpreted as an output parameter and
+ the operation is a register read.
+ @param[in] ExitCfgMode Exit Configuration Mode Indicator. If this
+ parameter is set to TRUE, the Super I/O driver
+ will turn off configuration mode of the Super
+ I/O prior to returning from this function. If
+ this parameter is set to FALSE, the Super I/O
+ driver will leave Super I/O in the
+ configuration mode. The Super I/O driver must
+ track the current state of the Super I/O and
+ enable the configuration mode of Super I/O if
+ necessary prior to register access.
+ @param[in] Register Register number.
+ @param[in,out] Value If Write is TRUE, Value is a pointer to the
+ buffer containing the byte of data to be
+ written to the Super I/O register. If Write is
+ FALSE, Value is a pointer to the destination
+ buffer for the byte of data to be read from the
+ Super I/O register.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER The Value is NULL.
+ @retval EFI_INVALID_PARAMETER Invalid Register number.
+
+**/
+EFI_STATUS
+EFIAPI
+SioRegisterAccess (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN BOOLEAN Write,
+ IN BOOLEAN ExitCfgMode,
+ IN UINT8 Register,
+ IN OUT UINT8 *Value
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ Provides an interface to get a list of the current resources consumed by the
+ device in the ACPI Resource Descriptor format.
+
+ GetResources() returns a list of resources currently consumed by the device.
+ The ResourceList is a pointer to the buffer containing resource descriptors
+ for the device. The descriptors are in the format of Small or Large ACPI
+ resource descriptor as defined by ACPI specification (2.0 & 3.0). The buffer
+ of resource descriptors is terminated with the 'End tag' resource descriptor.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[out] ResourceList A pointer to an ACPI resource descriptor list
+ that defines the current resources used by the
+ device.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceList is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioGetResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ OUT ACPI_RESOURCE_HEADER_PTR *ResourceList
+ )
+{
+ SIO_DEV *SioDevice;
+
+ if (ResourceList == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ SioDevice = SIO_DEV_FROM_SIO (This);
+ if (SioDevice->DeviceIndex < ARRAY_SIZE (mDevicesInfo)) {
+ *ResourceList = mDevicesInfo[SioDevice->DeviceIndex].Resources;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Sets the resources for the device.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] ResourceList Pointer to the ACPI resource descriptor list.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceList is invalid.
+ @retval EFI_ACCESS_DENIED Some of the resources in ResourceList are in
+ use.
+
+**/
+EFI_STATUS
+EFIAPI
+SioSetResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN ACPI_RESOURCE_HEADER_PTR ResourceList
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ Provides a collection of resource descriptor lists. Each resource descriptor
+ list in the collection defines a combination of resources that can
+ potentially be used by the device.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[out] ResourceCollection Collection of the resource descriptor
+ lists.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceCollection is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioPossibleResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ OUT ACPI_RESOURCE_HEADER_PTR *ResourceCollection
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ Provides an interface for a table based programming of the Super I/O
+ registers.
+
+ The Modify() function provides an interface for table based programming of
+ the Super I/O registers. This function can be used to perform programming of
+ multiple Super I/O registers with a single function call. For each table
+ entry, the Register is read, its content is bitwise ANDed with AndMask, and
+ then ORed with OrMask before being written back to the Register. The Super
+ I/O driver must track the current state of the Super I/O and enable the
+ configuration mode of Super I/O if necessary prior to table processing. Once
+ the table is processed, the Super I/O device has to be returned to the
+ original state.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] Command A pointer to an array of NumberOfCommands
+ EFI_SIO_REGISTER_MODIFY structures. Each
+ structure specifies a single Super I/O register
+ modify operation.
+ @param[in] NumberOfCommands Number of elements in the Command array.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER Command is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioModify (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN CONST EFI_SIO_REGISTER_MODIFY *Command,
+ IN UINTN NumberOfCommands
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ Create the child device with a given device index.
+
+ @param[in] This The EFI_DRIVER_BINDING_PROTOCOL instance.
+ @param[in] Controller The handle of ISA bus controller.
+ @param[in] PciIo The pointer to the PCI protocol.
+ @param[in] ParentDevicePath Device path of the ISA bus controller.
+ @param[in] DeviceIndex Index of the device supported by this driver.
+
+ @retval EFI_SUCCESS The child device has been created successfully.
+ @retval Others Error occurred during the child device creation.
+
+**/
+EFI_STATUS
+SioCreateChildDevice (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_PCI_IO_PROTOCOL *PciIo,
+ IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
+ IN UINT32 DeviceIndex
+ )
+{
+ EFI_STATUS Status;
+ SIO_DEV *SioDevice;
+
+ //
+ // Initialize the SIO_DEV structure
+ //
+ SioDevice = AllocateZeroPool (sizeof (SIO_DEV));
+ if (SioDevice == NULL) {
+ DEBUG ((DEBUG_ERROR, "SioCreateChildDevice(): Can not allocate SIO Device structure\n"));
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ SioDevice->Signature = SIO_DEV_SIGNATURE;
+ SioDevice->Handle = NULL;
+ SioDevice->PciIo = PciIo;
+ CopyMem (&SioDevice->Sio, &mSioInterface, sizeof (EFI_SIO_PROTOCOL));
+ SioDevice->DeviceIndex = DeviceIndex;
+
+ //
+ // Construct the child device path
+ //
+ mAcpiDeviceNodeTemplate.HID = mDevicesInfo[DeviceIndex].Hid;
+ mAcpiDeviceNodeTemplate.UID = mDevicesInfo[DeviceIndex].Uid;
+ SioDevice->DevicePath = AppendDevicePathNode (
+ ParentDevicePath,
+ (EFI_DEVICE_PATH_PROTOCOL *) &mAcpiDeviceNodeTemplate
+ );
+ if (SioDevice->DevicePath == NULL) {
+ DEBUG ((DEBUG_ERROR, "SioCreateChildDevice(): Can not allocate SIO Device path\n"));
+ Status = EFI_OUT_OF_RESOURCES;
+ goto Done;
+ }
+
+ //
+ // Create a child handle and install Device Path and Super I/O protocols
+ //
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &SioDevice->Handle,
+ &gEfiDevicePathProtocolGuid,
+ SioDevice->DevicePath,
+ &gEfiSioProtocolGuid,
+ &SioDevice->Sio,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "SioCreateChildDevice(): Can not install child protocols %r\n", Status));
+ goto Done;
+ }
+
+ Status = gBS->OpenProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ (VOID **) &PciIo,
+ This->DriverBindingHandle,
+ SioDevice->Handle,
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "SioCreateChildDevice(): Can not open parent PCI I/O Protocol by child controller %r\n", Status));
+ gBS->UninstallMultipleProtocolInterfaces (
+ SioDevice->Handle,
+ &gEfiDevicePathProtocolGuid,
+ SioDevice->DevicePath,
+ &gEfiSioProtocolGuid,
+ &SioDevice->Sio,
+ NULL
+ );
+ }
+
+Done:
+ if (EFI_ERROR (Status)) {
+ if (SioDevice->DevicePath != NULL) {
+ FreePool (SioDevice->DevicePath);
+ }
+ FreePool (SioDevice);
+ }
+
+ return Status;
+}
+
+/**
+ Create all the ISA child devices on the ISA bus controller (PCI to ISA
+ bridge).
+
+ @param[in] This The EFI_DRIVER_BINDING_PROTOCOL instance.
+ @param[in] Controller The handle of ISA bus controller.
+ @param[in] PciIo The pointer to the PCI protocol.
+ @param[in] ParentDevicePath Device path of the ISA bus controller.
+
+ @retval The number of child device that is successfully created.
+
+**/
+UINT32
+SioCreateAllChildDevices (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_PCI_IO_PROTOCOL *PciIo,
+ IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath
+ )
+{
+ UINT32 Index;
+ UINT32 ChildDeviceNumber;
+ EFI_STATUS Status;
+
+ ChildDeviceNumber = 0;
+
+ for (Index = 0; Index < ARRAY_SIZE (mDevicesInfo); Index++) {
+ Status = SioCreateChildDevice (
+ This,
+ Controller,
+ PciIo,
+ ParentDevicePath,
+ Index
+ );
+ if (!EFI_ERROR (Status)) {
+ ChildDeviceNumber++;
+ }
+ }
+
+ return ChildDeviceNumber;
+}
+
+/**
+ Tests to see if this driver supports a given controller. If a child device is
+ provided, it further tests to see if this driver supports creating a handle
+ for the specified child device.
+
+ This function checks to see if the driver specified by This supports the
+ device specified by ControllerHandle. Drivers will typically use the device
+ path attached to ControllerHandle and/or the services from the bus I/O
+ abstraction attached to ControllerHandle to determine if the driver supports
+ ControllerHandle. This function may be called many times during platform
+ initialization. In order to reduce boot times, the tests performed by this
+ function must be very small, and take as little time as possible to execute.
+ This function must not change the state of any hardware devices, and this
+ function must be aware that the device specified by ControllerHandle may
+ already be managed by the same driver or a different driver. This function
+ must match its calls to AllocatePages() with FreePages(), AllocatePool() with
+ FreePool(), and OpenProtocol() with CloseProtocol(). Since ControllerHandle
+ may have been previously started by the same driver, if a protocol is already
+ in the opened state, then it must not be closed with CloseProtocol(). This is
+ required to guarantee the state of ControllerHandle is not modified by this
+ function.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle The handle of the controller to test. This
+ handle must support a protocol interface
+ that supplies an I/O abstraction to the
+ driver.
+ @param[in] RemainingDevicePath A pointer to the remaining portion of a
+ device path. This parameter is ignored by
+ device drivers, and is optional for bus
+ drivers. For bus drivers, if this parameter
+ is not NULL, then the bus driver must
+ determine if the bus controller specified by
+ ControllerHandle and the child controller
+ specified by RemainingDevicePath are both
+ supported by this bus driver.
+
+ @retval EFI_SUCCESS The device specified by ControllerHandle and
+ RemainingDevicePath is supported by the
+ driver specified by This.
+ @retval EFI_ALREADY_STARTED The device specified by ControllerHandle and
+ RemainingDevicePath is already being managed
+ by the driver specified by This.
+ @retval EFI_ACCESS_DENIED The device specified by ControllerHandle and
+ RemainingDevicePath is already being managed
+ by a different driver or an application that
+ requires exclusive access.
+ @retval EFI_UNSUPPORTED The device specified by ControllerHandle and
+ RemainingDevicePath is not supported by the
+ driver specified by This.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingSupported (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
+ )
+{
+ EFI_STATUS Status;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ PCI_TYPE00 Pci;
+
+ //
+ // Get PciIo protocol instance
+ //
+ Status = gBS->OpenProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ (VOID **)&PciIo,
+ This->DriverBindingHandle,
+ Controller,
+ EFI_OPEN_PROTOCOL_BY_DRIVER
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = PciIo->Pci.Read (
+ PciIo,
+ EfiPciIoWidthUint32,
+ 0,
+ sizeof(Pci) / sizeof(UINT32),
+ &Pci
+ );
+
+ if (!EFI_ERROR (Status)) {
+ Status = EFI_UNSUPPORTED;
+ if ((Pci.Hdr.Command & 0x03) == 0x03) {
+ if (Pci.Hdr.ClassCode[2] == PCI_CLASS_BRIDGE) {
+ //
+ // See if this is a standard PCI to ISA Bridge from the Base Code
+ // and Class Code
+ //
+ if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA) {
+ Status = EFI_SUCCESS;
+ }
+ //
+ // See if this is an Intel PCI to ISA bridge in Positive Decode Mode
+ //
+ if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE &&
+ Pci.Hdr.VendorId == 0x8086 && Pci.Hdr.DeviceId == 0x7110) {
+ Status = EFI_SUCCESS;
+ }
+ }
+ }
+ }
+
+ gBS->CloseProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+
+ return Status;
+}
+
+/**
+ Starts a device controller or a bus controller.
+
+ The Start() function is designed to be invoked from the EFI boot service
+ ConnectController(). As a result, much of the error checking on the
+ parameters to Start() has been moved into this common boot service. It is
+ legal to call Start() from other locations, but the following calling
+ restrictions must be followed or the system behavior will not be
+ deterministic.
+ 1. ControllerHandle must be a valid EFI_HANDLE.
+ 2. If RemainingDevicePath is not NULL, then it must be a pointer to a
+ naturally aligned EFI_DEVICE_PATH_PROTOCOL.
+ 3. Prior to calling Start(), the Supported() function for the driver
+ specified by This must have been called with the same calling parameters,
+ and Supported() must have returned EFI_SUCCESS.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle The handle of the controller to start. This
+ handle must support a protocol interface
+ that supplies an I/O abstraction to the
+ driver.
+ @param[in] RemainingDevicePath A pointer to the remaining portion of a
+ device path. This parameter is ignored by
+ device drivers, and is optional for bus
+ drivers. For a bus driver, if this parameter
+ is NULL, then handles for all the children
+ of Controller are created by this driver. If
+ this parameter is not NULL and the first
+ Device Path Node is not the End of Device
+ Path Node, then only the handle for the
+ child device specified by the first Device
+ Path Node of RemainingDevicePath is created
+ by this driver. If the first Device Path
+ Node of RemainingDevicePath is the End of
+ Device Path Node, no child handle is created
+ by this driver.
+
+ @retval EFI_SUCCESS The device was started.
+ @retval EFI_DEVICE_ERROR The device could not be started due to a
+ device error.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
+ lack of resources.
+ @retval Others The driver failed to start the device.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingStart (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
+ )
+{
+ EFI_STATUS Status;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
+ UINT64 Supports;
+ UINT64 OriginalAttributes;
+ UINT64 Attributes;
+ BOOLEAN Enabled;
+ SIO_BUS_DRIVER_PRIVATE_DATA *Private;
+ UINT32 ChildDeviceNumber;
+
+ Enabled = FALSE;
+ Supports = 0;
+ OriginalAttributes = 0;
+ Private = NULL;
+
+ //
+ // Open the PCI I/O Protocol Interface
+ //
+ PciIo = NULL;
+ Status = gBS->OpenProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ (VOID**) &PciIo,
+ This->DriverBindingHandle,
+ Controller,
+ EFI_OPEN_PROTOCOL_BY_DRIVER
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): No PCI I/O Protocol %r\n", Status));
+ return Status;
+ }
+
+ //
+ // Open Device Path Protocol
+ //
+ Status = gBS->OpenProtocol (
+ Controller,
+ &gEfiDevicePathProtocolGuid,
+ (VOID **) &ParentDevicePath,
+ This->DriverBindingHandle,
+ Controller,
+ EFI_OPEN_PROTOCOL_BY_DRIVER
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): No Device Path Protocol %r\n", Status));
+ gBS->CloseProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+ return Status;
+ }
+
+ //
+ // Get supported PCI attributes
+ //
+ Status = PciIo->Attributes (
+ PciIo,
+ EfiPciIoAttributeOperationSupported,
+ 0,
+ &Supports
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error reading PCI I/O Supported Attributes %r\n", Status));
+ goto Done;
+ }
+ Supports &= (UINT64) (EFI_PCI_IO_ATTRIBUTE_ISA_IO |
+ EFI_PCI_IO_ATTRIBUTE_ISA_IO_16);
+
+ Status = PciIo->Attributes (
+ PciIo,
+ EfiPciIoAttributeOperationGet,
+ 0,
+ &OriginalAttributes
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error reading PCI I/O Attributes %r\n", Status));
+ goto Done;
+ }
+
+ Attributes = EFI_PCI_DEVICE_ENABLE |
+ Supports |
+ EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO;
+
+ Status = PciIo->Attributes (
+ PciIo,
+ EfiPciIoAttributeOperationEnable,
+ Attributes,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error enabling PCI I/O Attributes %r\n", Status));
+ goto Done;
+ }
+
+ Enabled = TRUE;
+
+ //
+ // Store the OriginalAttributes for the restore in BindingStop()
+ //
+ Private = AllocateZeroPool (sizeof (SIO_BUS_DRIVER_PRIVATE_DATA));
+ if (Private == NULL) {
+ Status = EFI_OUT_OF_RESOURCES;
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error allocating SIO private data structure %r\n", Status));
+ goto Done;
+ }
+ Private->PciIo = PciIo;
+ Private->OriginalAttributes = OriginalAttributes;
+
+ Status = gBS->InstallProtocolInterface (
+ &Controller,
+ &gEfiCallerIdGuid,
+ EFI_NATIVE_INTERFACE,
+ Private
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error installing gEfiCallerIdGuid %r\n", Status));
+ goto Done;
+ }
+
+ //
+ // Report status code for the start of general controller initialization
+ //
+ REPORT_STATUS_CODE_WITH_DEVICE_PATH (
+ EFI_PROGRESS_CODE,
+ (EFI_IO_BUS_LPC | EFI_IOB_PC_INIT),
+ ParentDevicePath
+ );
+
+ //
+ // Report status code for the start of enabling devices on the bus
+ //
+ REPORT_STATUS_CODE_WITH_DEVICE_PATH (
+ EFI_PROGRESS_CODE,
+ (EFI_IO_BUS_LPC | EFI_IOB_PC_ENABLE),
+ ParentDevicePath
+ );
+
+ //
+ // Create all the children upon the first entrance
+ //
+ ChildDeviceNumber = SioCreateAllChildDevices (
+ This,
+ Controller,
+ PciIo,
+ ParentDevicePath
+ );
+ if (ChildDeviceNumber == 0) {
+ Status = EFI_DEVICE_ERROR;
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error creating child SIO devices %r\n", Status));
+ goto Done;
+ }
+
+Done:
+ if (EFI_ERROR (Status)) {
+ if (PciIo != NULL && Enabled) {
+ PciIo->Attributes (
+ PciIo,
+ EfiPciIoAttributeOperationSet,
+ OriginalAttributes,
+ NULL
+ );
+ }
+
+ gBS->CloseProtocol (
+ Controller,
+ &gEfiDevicePathProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+
+ gBS->CloseProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+
+ if (Private != NULL) {
+ gBS->UninstallMultipleProtocolInterfaces (
+ Controller,
+ &gEfiCallerIdGuid,
+ Private,
+ NULL
+ );
+ FreePool (Private);
+ }
+ }
+
+ return Status;
+}
+
+/**
+ Stops a device controller or a bus controller.
+
+ The Stop() function is designed to be invoked from the EFI boot service
+ DisconnectController(). As a result, much of the error checking on the
+ parameters to Stop() has been moved into this common boot service. It is
+ legal to call Stop() from other locations, but the following calling
+ restrictions must be followed or the system behavior will not be
+ deterministic.
+ 1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous
+ call to this same driver's Start() function.
+ 2. The first NumberOfChildren handles of ChildHandleBuffer must all be a
+ valid EFI_HANDLE. In addition, all of these handles must have been created
+ in this driver's Start() function, and the Start() function must have
+ called OpenProtocol() on ControllerHandle with an Attribute of
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle A handle to the device being stopped. The
+ handle must support a bus specific I/O
+ protocol for the driver to use to stop the
+ device.
+ @param[in] NumberOfChildren The number of child device handles in
+ ChildHandleBuffer.
+ @param[in] ChildHandleBuffer An array of child handles to be freed. May be
+ NULL if NumberOfChildren is 0.
+
+ @retval EFI_SUCCESS The device was stopped.
+ @retval EFI_DEVICE_ERROR The device could not be stopped due to a
+ device error.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingStop (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN UINTN NumberOfChildren,
+ IN EFI_HANDLE *ChildHandleBuffer
+ )
+{
+ EFI_STATUS Status;
+ SIO_BUS_DRIVER_PRIVATE_DATA *Private;
+ UINTN Index;
+ BOOLEAN AllChildrenStopped;
+ EFI_SIO_PROTOCOL *Sio;
+ SIO_DEV *SioDevice;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+
+ if (NumberOfChildren == 0) {
+ //
+ // Restore PCI attributes
+ //
+ Status = gBS->OpenProtocol (
+ Controller,
+ &gEfiCallerIdGuid,
+ (VOID **) &Private,
+ This->DriverBindingHandle,
+ Controller,
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = Private->PciIo->Attributes (
+ Private->PciIo,
+ EfiPciIoAttributeOperationSet,
+ Private->OriginalAttributes,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ gBS->UninstallProtocolInterface (
+ Controller,
+ &gEfiCallerIdGuid,
+ Private
+ );
+ FreePool (Private);
+
+ //
+ // Close the bus driver
+ //
+ Status = gBS->CloseProtocol (
+ Controller,
+ &gEfiDevicePathProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = gBS->CloseProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ return EFI_SUCCESS;
+ }
+
+ //
+ // Stop all the children
+ //
+ AllChildrenStopped = TRUE;
+
+ for (Index = 0; Index < NumberOfChildren; Index++) {
+ Status = gBS->OpenProtocol (
+ ChildHandleBuffer[Index],
+ &gEfiSioProtocolGuid,
+ (VOID **) &Sio,
+ This->DriverBindingHandle,
+ Controller,
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL
+ );
+ if (!EFI_ERROR (Status)) {
+ SioDevice = SIO_DEV_FROM_SIO (Sio);
+
+ //
+ // Close the child handle
+ //
+ Status = gBS->CloseProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle,
+ ChildHandleBuffer[Index]
+ );
+ Status = gBS->UninstallMultipleProtocolInterfaces (
+ ChildHandleBuffer[Index],
+ &gEfiDevicePathProtocolGuid,
+ SioDevice->DevicePath,
+ &gEfiSioProtocolGuid,
+ &SioDevice->Sio,
+ NULL
+ );
+
+ if (!EFI_ERROR (Status)) {
+ FreePool (SioDevice->DevicePath);
+ FreePool (SioDevice);
+ } else {
+ //
+ // Re-open PCI IO Protocol on behalf of the child device
+ // because of failure of destroying the child device handle
+ //
+ gBS->OpenProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ (VOID **) &PciIo,
+ This->DriverBindingHandle,
+ ChildHandleBuffer[Index],
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
+ );
+ }
+ }
+
+ if (EFI_ERROR (Status)) {
+ AllChildrenStopped = FALSE;
+ }
+ }
+
+ if (!AllChildrenStopped) {
+ return EFI_DEVICE_ERROR;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ The entry point for the PCU SIO driver.
+
+ @param[in] ImageHandle The firmware allocated handle for the EFI image.
+ @param[in] SystemTable A pointer to the EFI System Table.
+
+ @retval EFI_SUCCESS The entry point is executed successfully.
+ @retval other Some error occurs when executing this entry point.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ return EfiLibInstallDriverBinding (
+ ImageHandle,
+ SystemTable,
+ &gPcuSioDriverBinding,
+ ImageHandle
+ );
+}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h
new file mode 100644
index 0000000000..3a47e2c5e2
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h
@@ -0,0 +1,363 @@
+/** @file
+ Produces the SIO Protocols for ISA devices integrated in the Platform
+ Controller Unit (PCU).
+
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef __PCU_SIO_H__
+#define __PCU_SIO_H__
+
+#include <Uefi.h>
+#include <Protocol/DriverBinding.h>
+#include <Protocol/PciIo.h>
+#include <Protocol/DevicePath.h>
+#include <Protocol/SuperIo.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/ReportStatusCodeLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/DevicePathLib.h>
+#include <Library/UefiLib.h>
+#include <IndustryStandard/Pci.h>
+
+#pragma pack(1)
+
+typedef struct {
+ EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR Io;
+ EFI_ACPI_END_TAG_DESCRIPTOR End;
+} SIO_RESOURCES_IO;
+
+#pragma pack()
+
+typedef struct {
+ UINT32 Hid;
+ UINT32 Uid;
+ ACPI_RESOURCE_HEADER_PTR Resources;
+} SIO_DEVICE_INFO;
+
+//
+// SIO Bus driver private data structure
+//
+typedef struct {
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ UINT64 OriginalAttributes;
+} SIO_BUS_DRIVER_PRIVATE_DATA;
+
+//
+// SIO device private data structure
+//
+typedef struct {
+ UINT32 Signature;
+ EFI_HANDLE Handle;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ EFI_SIO_PROTOCOL Sio;
+ UINT32 DeviceIndex;
+} SIO_DEV;
+#define SIO_DEV_SIGNATURE SIGNATURE_32 ('S', 'I', 'O', 'D')
+#define SIO_DEV_FROM_SIO(a) CR (a, SIO_DEV, Sio, SIO_DEV_SIGNATURE)
+
+/**
+ Tests to see if this driver supports a given controller. If a child device is
+ provided, it further tests to see if this driver supports creating a handle
+ for the specified child device.
+
+ This function checks to see if the driver specified by This supports the
+ device specified by ControllerHandle. Drivers will typically use the device
+ path attached to ControllerHandle and/or the services from the bus I/O
+ abstraction attached to ControllerHandle to determine if the driver supports
+ ControllerHandle. This function may be called many times during platform
+ initialization. In order to reduce boot times, the tests performed by this
+ function must be very small, and take as little time as possible to execute.
+ This function must not change the state of any hardware devices, and this
+ function must be aware that the device specified by ControllerHandle may
+ already be managed by the same driver or a different driver. This function
+ must match its calls to AllocatePages() with FreePages(), AllocatePool() with
+ FreePool(), and OpenProtocol() with CloseProtocol(). Since ControllerHandle
+ may have been previously started by the same driver, if a protocol is already
+ in the opened state, then it must not be closed with CloseProtocol(). This is
+ required to guarantee the state of ControllerHandle is not modified by this
+ function.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle The handle of the controller to test. This
+ handle must support a protocol interface
+ that supplies an I/O abstraction to the
+ driver.
+ @param[in] RemainingDevicePath A pointer to the remaining portion of a
+ device path. This parameter is ignored by
+ device drivers, and is optional for bus
+ drivers. For bus drivers, if this parameter
+ is not NULL, then the bus driver must
+ determine if the bus controller specified by
+ ControllerHandle and the child controller
+ specified by RemainingDevicePath are both
+ supported by this bus driver.
+
+ @retval EFI_SUCCESS The device specified by ControllerHandle and
+ RemainingDevicePath is supported by the
+ driver specified by This.
+ @retval EFI_ALREADY_STARTED The device specified by ControllerHandle and
+ RemainingDevicePath is already being managed
+ by the driver specified by This.
+ @retval EFI_ACCESS_DENIED The device specified by ControllerHandle and
+ RemainingDevicePath is already being managed
+ by a different driver or an application that
+ requires exclusive access.
+ @retval EFI_UNSUPPORTED The device specified by ControllerHandle and
+ RemainingDevicePath is not supported by the
+ driver specified by This.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingSupported (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
+ );
+
+/**
+ Starts a device controller or a bus controller.
+
+ The Start() function is designed to be invoked from the EFI boot service
+ ConnectController(). As a result, much of the error checking on the
+ parameters to Start() has been moved into this common boot service. It is
+ legal to call Start() from other locations, but the following calling
+ restrictions must be followed or the system behavior will not be
+ deterministic.
+ 1. ControllerHandle must be a valid EFI_HANDLE.
+ 2. If RemainingDevicePath is not NULL, then it must be a pointer to a
+ naturally aligned EFI_DEVICE_PATH_PROTOCOL.
+ 3. Prior to calling Start(), the Supported() function for the driver
+ specified by This must have been called with the same calling parameters,
+ and Supported() must have returned EFI_SUCCESS.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle The handle of the controller to start. This
+ handle must support a protocol interface
+ that supplies an I/O abstraction to the
+ driver.
+ @param[in] RemainingDevicePath A pointer to the remaining portion of a
+ device path. This parameter is ignored by
+ device drivers, and is optional for bus
+ drivers. For a bus driver, if this parameter
+ is NULL, then handles for all the children
+ of Controller are created by this driver. If
+ this parameter is not NULL and the first
+ Device Path Node is not the End of Device
+ Path Node, then only the handle for the
+ child device specified by the first Device
+ Path Node of RemainingDevicePath is created
+ by this driver. If the first Device Path
+ Node of RemainingDevicePath is the End of
+ Device Path Node, no child handle is created
+ by this driver.
+
+ @retval EFI_SUCCESS The device was started.
+ @retval EFI_DEVICE_ERROR The device could not be started due to a
+ device error.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
+ lack of resources.
+ @retval Others The driver failded to start the device.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingStart (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
+ );
+
+/**
+ Stops a device controller or a bus controller.
+
+ The Stop() function is designed to be invoked from the EFI boot service
+ DisconnectController(). As a result, much of the error checking on the
+ parameters to Stop() has been moved into this common boot service. It is
+ legal to call Stop() from other locations, but the following calling
+ restrictions must be followed or the system behavior will not be
+ deterministic.
+ 1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous
+ call to this same driver's Start() function.
+ 2. The first NumberOfChildren handles of ChildHandleBuffer must all be a
+ valid EFI_HANDLE. In addition, all of these handles must have been created
+ in this driver's Start() function, and the Start() function must have
+ called OpenProtocol() on ControllerHandle with an Attribute of
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle A handle to the device being stopped. The
+ handle must support a bus specific I/O
+ protocol for the driver to use to stop the
+ device.
+ @param[in] NumberOfChildren The number of child device handles in
+ ChildHandleBuffer.
+ @param[in] ChildHandleBuffer An array of child handles to be freed. May be
+ NULL if NumberOfChildren is 0.
+
+ @retval EFI_SUCCESS The device was stopped.
+ @retval EFI_DEVICE_ERROR The device could not be stopped due to a
+ device error.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingStop (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN UINTN NumberOfChildren,
+ IN EFI_HANDLE *ChildHandleBuffer
+ );
+
+/**
+ Provides a low level access to the registers for the Super I/O.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] Write Specifies the type of the register operation.
+ If this parameter is TRUE, Value is interpreted
+ as an input parameter and the operation is a
+ register write. If this parameter is FALSE,
+ Value is interpreted as an output parameter and
+ the operation is a register read.
+ @param[in] ExitCfgMode Exit Configuration Mode Indicator. If this
+ parameter is set to TRUE, the Super I/O driver
+ will turn off configuration mode of the Super
+ I/O prior to returning from this function. If
+ this parameter is set to FALSE, the Super I/O
+ driver will leave Super I/O in the
+ configuration mode. The Super I/O driver must
+ track the current state of the Super I/O and
+ enable the configuration mode of Super I/O if
+ necessary prior to register access.
+ @param[in] Register Register number.
+ @param[in,out] Value If Write is TRUE, Value is a pointer to the
+ buffer containing the byte of data to be
+ written to the Super I/O register. If Write is
+ FALSE, Value is a pointer to the destination
+ buffer for the byte of data to be read from the
+ Super I/O register.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER The Value is NULL.
+ @retval EFI_INVALID_PARAMETER Invalid Register number.
+
+**/
+EFI_STATUS
+EFIAPI
+SioRegisterAccess (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN BOOLEAN Write,
+ IN BOOLEAN ExitCfgMode,
+ IN UINT8 Register,
+ IN OUT UINT8 *Value
+ );
+
+/**
+ Provides an interface to get a list of the current resources consumed by the
+ device in the ACPI Resource Descriptor format.
+
+ GetResources() returns a list of resources currently consumed by the device.
+ The ResourceList is a pointer to the buffer containing resource descriptors
+ for the device. The descriptors are in the format of Small or Large ACPI
+ resource descriptor as defined by ACPI specification (2.0 & 3.0). The buffer
+ of resource descriptors is terminated with the 'End tag' resource descriptor.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[out] ResourceList A pointer to an ACPI resource descriptor list
+ that defines the current resources used by the
+ device.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceList is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioGetResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ OUT ACPI_RESOURCE_HEADER_PTR *ResourceList
+ );
+
+/**
+ Sets the resources for the device.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] ResourceList Pointer to the ACPI resource descriptor list.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceList is invalid.
+ @retval EFI_ACCESS_DENIED Some of the resources in ResourceList are in
+ use.
+
+**/
+EFI_STATUS
+EFIAPI
+SioSetResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN ACPI_RESOURCE_HEADER_PTR ResourceList
+ );
+
+/**
+ Provides a collection of resource descriptor lists. Each resource descriptor
+ list in the collection defines a combination of resources that can
+ potentially be used by the device.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[out] ResourceCollection Collection of the resource descriptor
+ lists.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceCollection is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioPossibleResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ OUT ACPI_RESOURCE_HEADER_PTR *ResourceCollection
+ );
+
+/**
+ Provides an interface for a table based programming of the Super I/O
+ registers.
+
+ The Modify() function provides an interface for table based programming of
+ the Super I/O registers. This function can be used to perform programming of
+ multiple Super I/O registers with a single function call. For each table
+ entry, the Register is read, its content is bitwise ANDed with AndMask, and
+ then ORed with OrMask before being written back to the Register. The Super
+ I/O driver must track the current state of the Super I/O and enable the
+ configuration mode of Super I/O if necessary prior to table processing. Once
+ the table is processed, the Super I/O device has to be returned to the
+ original state.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] Command A pointer to an array of NumberOfCommands
+ EFI_SIO_REGISTER_MODIFY structures. Each
+ structure specifies a single Super I/O register
+ modify operation.
+ @param[in] NumberOfCommands Number of elements in the Command array.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER Command is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioModify (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN CONST EFI_SIO_REGISTER_MODIFY *Command,
+ IN UINTN NumberOfCommands
+ );
+
+#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
new file mode 100644
index 0000000000..2379f93999
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
@@ -0,0 +1,38 @@
+## @file
+# Produces the SIO Protocols for ISA devices integrated in the Platform
+# Controller Unit (PCU).
+#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PcuSio
+ FILE_GUID = F749DEBC-42E6-4F59-821E-1E94EE9FBBB1
+ MODULE_TYPE = UEFI_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = PcuSioDriverEntryPoint
+
+[Sources]
+ PcuSio.h
+ PcuSio.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ UefiBootServicesTableLib
+ DebugLib
+ ReportStatusCodeLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DevicePathLib
+ UefiLib
+
+[Protocols]
+ gEfiPciIoProtocolGuid ## TO_START
+ gEfiSioProtocolGuid ## BY_START
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
index 1d90117af6..89923ffec6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
@@ -154,10 +154,6 @@ VOID
InitVlvPlatformPolicy (
);
-VOID
-InitSioPlatformPolicy(
- );
-
VOID
PchInitBeforeBoot(
);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index e8652f2a84..d3f8fa3833 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -36,7 +36,6 @@ [sources.common]
Platform.c
IchRegTable.c
IdccInfo.c
- SioPlatformPolicy.c
IchPlatformPolicy.c
PciDevice.c
SlotConfig.c
@@ -105,7 +104,6 @@ [Protocols]
gEfiSmbiosSlotPopulationGuid
gObservableProtocolGuid
gEfiCk505ClockPlatformInfoGuid
- gEfiLpcWpc83627PolicyProtocolGuid
gEfiTcoResetProtocolGuid
gEfiWatchdogTimerDriverProtocolGuid
gEfiPlatformIdeInitProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/SioPlatformPolicy.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/SioPlatformPolicy.c
deleted file mode 100644
index 32bee75f95..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/SioPlatformPolicy.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
-
- SioPlatformPolicy.c
-
-Abstract:
-
- Sio Platform Policy Setting.
-
-
---*/
-
-#include "PlatformDxe.h"
-#include <Protocol/LpcWpc83627Policy.h>
-
-
-EFI_WPC83627_POLICY_PROTOCOL mSio83627PolicyData = {
- { EFI_WPC83627_COM1_ENABLE, // Com1
- EFI_WPC83627_LPT1_ENABLE, // Lpt1
- EFI_WPC83627_FDD_DISABLE, // Floppy
- EFI_WPC83627_FDD_WRITE_ENABLE, // FloppyWriteProtect
- EFI_WPC83627_RESERVED_DEFAULT, // Port80
- EFI_WPC83627_ECIR_DISABLE, // CIR
- EFI_WPC83627_PS2_KBC_ENABLE, // Ps2Keyboard
- EFI_WPC83627_RESERVED_DEFAULT, // Ps2Mouse
- EFI_WPC83627_COM2_ENABLE, // Com2
- EFI_WPC83627_COM3_ENABLE, // Com3
- EFI_WPC83627_COM4_ENABLE, // Com4
- EFI_WPC83627_RESERVED_DEFAULT, // Dac
- 0x00 // Rsvd
- },
- LptModeEcp, // LptMode
-};
-
-/**
-
- Publish the platform SIO policy setting.
-
- @retval EFI_SUCCESS
-
-**/
-VOID
-InitSioPlatformPolicy(
- )
-{
-
- EFI_HANDLE Handle;
- EFI_STATUS Status;
-
- Handle = NULL;
-
- if((mSystemConfiguration.Serial) || (mBoardFeatures & B_BOARD_FEATURES_SIO_NO_COM1)) {
- mSio83627PolicyData.DeviceEnables.Com1 = EFI_WPC83627_COM1_DISABLE;
- }
-
- if((mSystemConfiguration.Serial2) || ((mBoardFeatures & B_BOARD_FEATURES_SIO_COM2)==0)) {
- mSio83627PolicyData.DeviceEnables.Com2 = EFI_WPC83627_COM2_DISABLE;
- }
-
- mSio83627PolicyData.LptMode = mSystemConfiguration.ParallelMode;
- if((!mSystemConfiguration.Parallel) || (mBoardFeatures & B_BOARD_FEATURES_SIO_NO_PARALLEL)) {
- mSio83627PolicyData.DeviceEnables.Lpt1 = EFI_WPC83627_LPT1_DISABLE;
- }
-
- Status = gBS->InstallProtocolInterface (
- &Handle,
- &gEfiLpcWpc83627PolicyProtocolGuid,
- EFI_NATIVE_INTERFACE,
- &mSio83627PolicyData
- );
- ASSERT_EFI_ERROR(Status);
-
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index 9951aa4a58..786b4f6e91 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -66,7 +66,6 @@ [Protocols]
gEfiSmbiosSlotPopulationGuid = { 0xef7bf7d6, 0xf8ff, 0x4a76, { 0x82, 0x47, 0xc0, 0xd0, 0xd1, 0xcc, 0x49, 0xc0 } }
gObservableProtocolGuid = { 0xe227c522, 0xd5fe, 0x4a53, { 0x87, 0xb1, 0x0f, 0xbe, 0x57, 0x0f, 0x98, 0xe9 } }
gEfiCk505ClockPlatformInfoGuid = { 0x3c485ea4, 0x449a, 0x46ce, { 0xbb, 0x08, 0x2a, 0x33, 0x6e, 0xa9, 0x6b, 0x4e } }
- gEfiLpcWpc83627PolicyProtocolGuid = { 0xd3ecc567, 0x9fd5, 0x44c1, { 0x86, 0xcf, 0x5d, 0xa7, 0xa2, 0x4f, 0x4b, 0x5d } }
gEfiTcoResetProtocolGuid = { 0xa6a79162, 0xe325, 0x4c30, { 0xbc, 0xc3, 0x59, 0x37, 0x30, 0x64, 0xef, 0xb3 } }
gEfiWatchdogTimerDriverProtocolGuid = { 0xd5b06d16, 0x2ea1, 0x4def, { 0x98, 0xd0, 0xa0, 0x5d, 0x40, 0x72, 0x84, 0x17 } }
gEfiPlatformIdeInitProtocolGuid = { 0x377c66a3, 0x8fe7, 0x4ee8, { 0x85, 0xb8, 0xf1, 0xa2, 0x82, 0x56, 0x9e, 0x3b } }
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index 87b905c95b..3165be1fca 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -535,7 +535,7 @@ [FV.FVMAIN]
#
INF Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
!if $(SOURCE_DEBUG_ENABLE) != TRUE
-INF IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
+INF MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
!endif
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index 110efe28c3..03941dd23e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -481,7 +481,7 @@ [FV.FVMAIN]
#
INF Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
!if $(SOURCE_DEBUG_ENABLE) != TRUE
-INF IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
+INF MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
!endif
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.c b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.c
deleted file mode 100644
index f98265761b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- LpcDriver.c
-
-Abstract:
-
- EFI Lpc Driver for a Generic PC Platform
-
-
-
---*/
-
-#include "LpcDriver.h"
-#include "IndustryStandard/Pci22.h"
-
-//
-// This driver is for ACPI(PNP0A03,0)/PCI(0x1f,0)
-//
-
-//
-// Lpc Driver Global Variables
-//
-
-EFI_DRIVER_BINDING_PROTOCOL gLpcDriver = {
- LpcDriverSupported,
- LpcDriverStart,
- LpcDriverStop,
- 0x10,
- NULL,
- NULL
-};
-
-LPC_DEV mLpc = {
- LPC_DEV_SIGNATURE,
- NULL,
- {
- IsaDeviceEnumerate,
- IsaDeviceSetPower,
- IsaGetCurrentResource,
- IsaGetPossibleResource,
- IsaSetResource,
- IsaEnableDevice,
- IsaInitDevice,
- LpcInterfaceInit
- },
- NULL
-};
-
-BOOLEAN InitExecuted = FALSE;
-
-/**
- the entry point of the Lpc driver
-
-**/
-EFI_STATUS
-EFIAPI
-LpcDriverEntryPoint(
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
-
-
- return EfiLibInstallDriverBinding (ImageHandle, SystemTable, &gLpcDriver, ImageHandle);
-}
-
-/**
-
- ControllerDriver Protocol Method
-
-**/
-EFI_STATUS
-EFIAPI
-LpcDriverSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_PCI_IO_PROTOCOL *PciIo;
- EFI_DEVICE_PATH_PROTOCOL *IsaBridgeDevicePath;
-
- ACPI_HID_DEVICE_PATH *AcpiNode;
- PCI_DEVICE_PATH *PciNode;
- PCI_TYPE00 Pci;
-
- //
- // Get the ISA bridge's Device Path and test it
- // the following code is specific
- //
- Status = gBS->OpenProtocol (
- Controller,
- &gEfiDevicePathProtocolGuid,
- (VOID **)&IsaBridgeDevicePath,
- This->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_BY_DRIVER
- );
-
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- Status = EFI_SUCCESS;
- AcpiNode = (ACPI_HID_DEVICE_PATH *)IsaBridgeDevicePath;
- if (AcpiNode->Header.Type != ACPI_DEVICE_PATH ||
- AcpiNode->Header.SubType != ACPI_DP ||
- DevicePathNodeLength (&AcpiNode->Header) != sizeof(ACPI_HID_DEVICE_PATH) ||
- AcpiNode -> HID != EISA_PNP_ID(0x0A03) ||
- AcpiNode -> UID != 0 ) {
- Status = EFI_UNSUPPORTED;
- } else {
- //
- // Get the next node
- //
- IsaBridgeDevicePath = NextDevicePathNode (IsaBridgeDevicePath);
- PciNode = (PCI_DEVICE_PATH *)IsaBridgeDevicePath;
- if (PciNode->Header.Type != HARDWARE_DEVICE_PATH ||
- PciNode->Header.SubType != HW_PCI_DP ||
- DevicePathNodeLength (&PciNode->Header) != sizeof (PCI_DEVICE_PATH) ||
- PciNode -> Function != 0x00 ||
- PciNode -> Device != 0x1f ) {
- Status = EFI_UNSUPPORTED;
- }
- }
-
- gBS->CloseProtocol (
- Controller,
- &gEfiDevicePathProtocolGuid,
- This->DriverBindingHandle,
- Controller
- );
-
- if (EFI_ERROR (Status)) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Get PciIo protocol instance
- //
- Status = gBS->OpenProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- (VOID **)&PciIo,
- This->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_BY_DRIVER
- );
-
- if (EFI_ERROR(Status)) {
- return Status;
- }
-
- Status = PciIo->Pci.Read (
- PciIo,
- EfiPciIoWidthUint32,
- 0,
- sizeof(Pci) / sizeof(UINT32),
- &Pci
- );
-
- if (!EFI_ERROR (Status)) {
- Status = EFI_SUCCESS; //TODO: force return success as temp solution EFI_UNSUPPORTED;
- if ((Pci.Hdr.Command & 0x03) == 0x03) {
- if (Pci.Hdr.ClassCode[2] == PCI_CLASS_BRIDGE) {
- //
- // See if this is a standard PCI to ISA Bridge from the Base Code
- // and Class Code
- //
- if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA) {
- Status = EFI_SUCCESS;
- } else {
- }
-
- //
- // See if this is an Intel PCI to ISA bridge in Positive Decode Mode
- //
- if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE &&
- Pci.Hdr.VendorId == 0x8086 &&
- Pci.Hdr.DeviceId == 0x7110) {
- Status = EFI_SUCCESS;
- } else {
- }
- } else {
- }
- }
- else {
- }
- }
-
- gBS->CloseProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- This->DriverBindingHandle,
- Controller
- );
- return Status;
-}
-
-
-/**
- Install EFI_ISA_ACPI_PROTOCOL
-
-**/
-EFI_STATUS
-EFIAPI
-LpcDriverStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_PCI_IO_PROTOCOL *PciIo;
-
- //
- // Get Pci IO
- //
- Status = gBS->OpenProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- (VOID **)&PciIo,
- This->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_BY_DRIVER
- );
-
- if (EFI_ERROR (Status) && Status != EFI_ALREADY_STARTED) {
- return Status;
- }
-
- mLpc.PciIo = PciIo;
-
- //
- // Install IsaAcpi interface, the Sio interface is not installed!
- //
- Status = gBS->InstallMultipleProtocolInterfaces (
- &Controller,
- &gEfiIsaAcpiProtocolGuid,
- &mLpc.IsaAcpi,
- NULL
- );
- return Status;
-}
-
-
-EFI_STATUS
-EFIAPI
-LpcDriverStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- )
-{
- EFI_STATUS Status;
- EFI_ISA_ACPI_PROTOCOL *IsaAcpi;
- LPC_DEV *LpcDev;
-
- //
- // Get EFI_ISA_ACPI_PROTOCOL interface
- //
- Status = gBS->OpenProtocol (
- Controller,
- &gEfiIsaAcpiProtocolGuid,
- (VOID **)&IsaAcpi,
- This->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- LpcDev = LPC_ISA_ACPI_FROM_THIS (IsaAcpi);
-
- //
- // Uninstall protocol interface: EFI_ISA_ACPI_PROTOCOL
- //
- Status = gBS->UninstallProtocolInterface (
- Controller,
- &gEfiIsaAcpiProtocolGuid,
- &LpcDev->IsaAcpi
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- gBS->CloseProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- This->DriverBindingHandle,
- Controller
- );
-
- return EFI_SUCCESS;
-}
-
-VOID
-LpcIoRead8 (
- IN UINT16 Port,
- OUT UINT8 *Data
- )
-{
- mLpc.PciIo->Io.Read(
- mLpc.PciIo,
- EfiPciWidthUint8,
- EFI_PCI_IO_PASS_THROUGH_BAR,
- Port,
- 1,
- Data
- );
-}
-
-VOID
-LpcIoWrite8 (
- IN UINT16 Port,
- IN UINT8 Data
- )
-{
- mLpc.PciIo->Io.Write(
- mLpc.PciIo,
- EfiPciWidthUint8,
- EFI_PCI_IO_PASS_THROUGH_BAR,
- Port,
- 1,
- &Data
- );
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.h b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.h
deleted file mode 100644
index 5e264485e7..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- LpcDriver.h
-
-Abstract:
-
- EFI Lpc Driver for a Generic PC Platform
-
-
-
---*/
-
-#ifndef _LPC_DRIVER_H
-#define _LPC_DRIVER_H
-
- #include "LpcSio.h"
- #include "LpcIsaAcpi.h"
-
-#include "Protocol/IsaAcpi.h"
-#include "Protocol/PciIo.h"
-#include "Protocol/DriverBinding.h"
-#include "Library/UefiBootServicesTableLib.h"
-#include "IsaAcpiDxe/PcatIsaAcpi.h"
-#include "IndustryStandard/Pci22.h"
-#include "Protocol/LpcWpce791Policy.h"
-
-#include <Library/DebugLib.h>
-
-#define ICH_LPC_BRIDGE_BUS_DEV_FUNC 0x1F0000
-
-//
-// LPC device private data structure
-//
-//#define LPC_DEV_SIGNATURE 'W87X'
-#define LPC_DEV_SIGNATURE SIGNATURE_32('X', '7', '8', 'W') //'W87X'
-#define EFI_WPCE791_PS2_KEYBOARD_ENABLE 0x01
-#define EFI_WPCE791_PS2_KEYBOARD_DISABLE 0x00
-
-#define EFI_WPCE791_PS2_MOUSE_ENABLE 0x01
-#define EFI_WPCE791_PS2_MOUSE_DISABLE 0x00
-
-
-
-typedef struct {
- UINTN Signature;
- EFI_HANDLE Handle;
- EFI_ISA_ACPI_PROTOCOL IsaAcpi;
- EFI_PCI_IO_PROTOCOL *PciIo;
-
-} LPC_DEV;
-
-#define LPC_ISA_ACPI_FROM_THIS(a) BASE_CR (a, LPC_DEV, IsaAcpi)
-
-//
-// Driver entry point
-//
-EFI_STATUS
-EFIAPI
-LpcDriverEntryPoint (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- );
-
-//
-// Prototypes for Driver model protocol interface
-//
-EFI_STATUS
-EFIAPI
-LpcDriverSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- );
-
-EFI_STATUS
-EFIAPI
-LpcDriverStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- );
-
-EFI_STATUS
-EFIAPI
-LpcDriverStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
-
-VOID
-LpcIoRead8 (
- IN UINT16 Port,
- OUT UINT8 *Data
- );
-
-VOID
-LpcIoWrite8 (
- IN UINT16 Port,
- IN UINT8 Data
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c
deleted file mode 100644
index 9c0b79b15c..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- LpcIsaAcpi.c
-
-Abstract: IsaAcpi implementation
-
-
-
---*/
-
-#include "LpcDriver.h"
-
-//
-// PS/2 Keyboard Controller
-//
-static EFI_ISA_ACPI_RESOURCE mLpcWpce791Ps2KeyboardDeviceResources[] = {
- {EfiIsaAcpiResourceIo, 0, 0x60, 0x64},
- {EfiIsaAcpiResourceInterrupt, 0, 1, 0},
- {EfiIsaAcpiResourceEndOfList, 0, 0, 0}
-};
-
-//
-// PS/2 Mouse Controller
-//
-static EFI_ISA_ACPI_RESOURCE mLpcWpce791Ps2MouseDeviceResources[] = {
- {EfiIsaAcpiResourceIo, 0, 0x60, 0x64},
- {EfiIsaAcpiResourceInterrupt, 0, 12, 0},
- {EfiIsaAcpiResourceEndOfList, 0, 0, 0}
-};
-
-//
-// COM
-//
-static EFI_ISA_ACPI_RESOURCE mLpcWpce791ComDeviceResources[] = {
- {EfiIsaAcpiResourceIo, 0, 0x3f8, 0x3ff},
- {EfiIsaAcpiResourceInterrupt, 0, 4, 0},
- {EfiIsaAcpiResourceEndOfList, 0, 0, 0}
-};
-
-//
-// Table of ISA Controllers
-//
-EFI_ISA_ACPI_RESOURCE_LIST mLpcWpce791DeviceList[] = {
- {{EISA_PNP_ID(0x303), 0}, mLpcWpce791Ps2KeyboardDeviceResources }, // PS/2 Keyboard Controller
- {{EISA_PNP_ID(0xF03), 0}, mLpcWpce791Ps2MouseDeviceResources }, // PS/2 Mouse Controller
- {{EISA_PNP_ID(0x501), 0}, mLpcWpce791ComDeviceResources }, // COM
- {{0, 0}, NULL } // End
-};
-
-static ICH_DMA_INIT mIchDmaInitTable [] = {
-//
-//Register OFFSET, Value
-//
-
- 0x0D8, 0x000, // Reset DMA Controller 2
- 0x0D0, 0x000, // Enable DMA controller 2
- 0x00C, 0x000, // Reset DMA Controller 1
- 0x008, 0x000, // Enable DMA controller 1
-
- //
- // Channel 4
- //
- 0x0D6, 0x0c0, // DMA contr. 2 Cascade mode, addr. increment, disable auto init.
- 0x0D2, 0x000, // Clear write request register
- 0x0d4, 0x000, // Enable DREQs for channel
-
- //
- // Channel 0
- //
- 0x00B, 0x040, // DMA contr. 1 single mode, addr. increment, disable auto init.
- 0x009, 0x000, // Clear write request register
- 0x00A, 0x000, // Enable DREQs for channel
-
- //
- // Channel 1
- //
- 0x00B, 0x041, // DMA contr. 1 single mode, addr. increment, disable auto init.
- 0x009, 0x001, // Clear write request register
- 0x00A, 0x001, // Enable DREQs for channel
-
- //
- // Channel 2
- //
- 0x00B, 0x042, // DMA contr. 1 single mode, addr. increment, disable auto init.
- 0x009, 0x002, // Clear write request register
- 0x00A, 0x002, // Enable DREQs for channel
-
- //
- // Channel 3
- //
- 0x00B, 0x043, // DMA contr. 1 single mode, addr. increment, disable auto init.
- 0x009, 0x003, // Clear write request register
- 0x00A, 0x003, // Enable DREQs for channel
-
- //
- // Channel 5
- //
- 0x0D6, 0x041, // DMA contr. 2 single mode, addr. increment, disable auto init.
- 0x0D2, 0x001, // Clear write request register
- 0x0D4, 0x001, // Enable DREQs for channel
-
- //
- // Channel 6
- //
- 0x0D6, 0x042, // DMA contr. 2 single mode, addr. increment, disable auto init.
- 0x0D2, 0x002, // Clear write request register
- 0x0D4, 0x002, // Enable DREQs for channel
-
- //
- // Channel 7
- //
- 0x0D6, 0x043, // DMA contr. 2 single mode, addr. increment, disable auto init.
- 0x0D2, 0x003, // Clear write request register
- 0x0D4, 0x003 // Enable DREQs for channel
-
-};
-
-//
-// ISA ACPI Protocol Functions
-//
-/**
-
- Enumerate the ISA devices on the ISA bus
-
-**/
-VOID
-IsaDeviceLookup (
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **IsaAcpiDevice,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **NextIsaAcpiDevice
- )
-{
- UINTN Index;
-
- *IsaAcpiDevice = NULL;
- if (NextIsaAcpiDevice != NULL) {
- *NextIsaAcpiDevice = NULL;
- }
- if (Device == NULL) {
- Index = 0;
- } else {
- for(Index = 0; mLpcWpce791DeviceList[Index].Device.HID != 0; Index++) {
- if (Device->HID == mLpcWpce791DeviceList[Index].Device.HID &&
- Device->UID == mLpcWpce791DeviceList[Index].Device.UID ) {
- break;
- }
- }
- if (mLpcWpce791DeviceList[Index].Device.HID == 0) {
- return;
- }
- *IsaAcpiDevice = &(mLpcWpce791DeviceList[Index]);
- Index++;
- }
- if (NextIsaAcpiDevice != NULL && mLpcWpce791DeviceList[Index].Device.HID != 0){
- *NextIsaAcpiDevice = &(mLpcWpce791DeviceList[Index]);
- }
-}
-
-
-/**
- Enumerate the ISA devices on the ISA bus
- It is hard code now and future it will get from ACPI table
-
-**/
-EFI_STATUS
-EFIAPI
-IsaDeviceEnumerate (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- OUT EFI_ISA_ACPI_DEVICE_ID **Device
- )
-{
- EFI_ISA_ACPI_RESOURCE_LIST *IsaAcpiDevice;
- EFI_ISA_ACPI_RESOURCE_LIST *NextIsaAcpiDevice;
-
- IsaDeviceLookup (*Device, &IsaAcpiDevice, &NextIsaAcpiDevice);
- if (NextIsaAcpiDevice == NULL) {
- return EFI_NOT_FOUND;
- }
- *Device = &(NextIsaAcpiDevice->Device);
- return EFI_SUCCESS;
-}
-
-/**
- Set ISA device power use sio
-
-**/
-EFI_STATUS
-EFIAPI
-IsaDeviceSetPower (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN BOOLEAN OnOff
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-
-/**
- Get current Resource of the specific ISA device
- It is hardcode now and future will get from ACPI table
-
-**/
-EFI_STATUS
-EFIAPI
-IsaGetCurrentResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList
- )
-{
- IsaDeviceLookup (Device, ResourceList, NULL);
- if (*ResourceList == NULL || (*ResourceList)->ResourceItem == NULL) {
- return EFI_NOT_FOUND;
- }
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-IsaGetPossibleResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList
- )
-{
- //
- // Not supported yet
- //
- return EFI_UNSUPPORTED;
-}
-
-
-EFI_STATUS
-EFIAPI
-IsaSetResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN EFI_ISA_ACPI_RESOURCE_LIST *ResourceList
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-EFI_STATUS
-EFIAPI
-IsaEnableDevice (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN BOOLEAN Enable
- )
-{
-
- return EFI_UNSUPPORTED;
-}
-
-/**
-
- Clear out Resource List if device is set to disable by platform policy
-
-**/
-VOID
-EmptyResourceList (
- IN UINT32 DeviceHid
- )
-{
- UINT8 Index;
- for (Index = 0; mLpcWpce791DeviceList[Index].Device.HID != 0; Index++) {
- if (DeviceHid == mLpcWpce791DeviceList[Index].Device.HID) {
- mLpcWpce791DeviceList[Index].ResourceItem = NULL;
- }
- }
- return;
-}
-
-/**
-
- Clear out Resource List if device is set to disable by platform policy
-
-**/
-VOID
-EmptyResourceListHidUid (
- IN UINT32 DeviceHid,
- IN UINT32 DeviceUid
- )
-{
- UINT8 Index;
- for (Index = 0; mLpcWpce791DeviceList[Index].Device.HID != 0; Index++) {
- if ((DeviceHid == mLpcWpce791DeviceList[Index].Device.HID) &&
- (DeviceUid == mLpcWpce791DeviceList[Index].Device.UID)) {
- mLpcWpce791DeviceList[Index].ResourceItem = NULL;
- }
- }
- return;
-}
-
-EFI_STATUS
-EFIAPI
-IsaInitDevice (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device
- )
-{
- EFI_WPCE791_POLICY_PROTOCOL *LpcWpce791Policy;
- EFI_STATUS Status;
-
- //
- // Disable configuration according to platform protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiLpcWpce791PolicyProtocolGuid,
- NULL,
- (VOID **) &LpcWpce791Policy
- );
- if (!EFI_ERROR(Status)) {
- if (LpcWpce791Policy->DeviceEnables.Ps2Keyboard == EFI_WPCE791_PS2_KEYBOARD_DISABLE) {
- EmptyResourceList(EISA_PNP_ID(0x303));
- DisableLogicalDevice (SIO_KEYBOARD);
- EmptyResourceList(EISA_PNP_ID(0xF03));
- DisableLogicalDevice (SIO_KEYBOARD);
- }
- if (LpcWpce791Policy->DeviceEnables.Ps2Mouse == EFI_WPCE791_PS2_MOUSE_DISABLE) {
- EmptyResourceList(EISA_PNP_ID(0xF03));
- DisableLogicalDevice (SIO_MOUSE);
- }
- }
-
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-LpcInterfaceInit (
- IN EFI_ISA_ACPI_PROTOCOL *This
- )
-{
- EFI_PCI_IO_PROTOCOL *PciIo;
- UINTN Index;
-
- PciIo = (LPC_ISA_ACPI_FROM_THIS (This))->PciIo;
-
- //
- // DMA controller initialize
- //
- for (Index=0; Index < (sizeof(mIchDmaInitTable)/sizeof(ICH_DMA_INIT)); Index++) {
- PciIo->Io.Write (
- PciIo,
- EfiPciIoWidthUint8,
- EFI_PCI_IO_PASS_THROUGH_BAR,
- mIchDmaInitTable[Index].Register,
- 1,
- &mIchDmaInitTable[Index].Value
- );
- }
-
- return EFI_SUCCESS;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h
deleted file mode 100644
index 2291fd2c1d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- LpcIsaAcpi.h
-
-Abstract:
-
- Isa Acpi interface
-
-
-
---*/
-
-#ifndef _LPC_ISA_ACPI_H
-#define _LPC_ISA_ACPI_H
-
-
-
-#include "Protocol/IsaAcpi.h"
-#include "Library/DevicePathLib.h"
-
-
-typedef struct {
- UINT8 Register;
- UINT8 Value;
-} ICH_DMA_INIT;
-
-//
-// Prototypes for the ISA ACPI protocol interface
-//
-EFI_STATUS
-EFIAPI
-IsaDeviceEnumerate (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- OUT EFI_ISA_ACPI_DEVICE_ID **Device
- );
-
-EFI_STATUS
-EFIAPI
-IsaDeviceSetPower (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN BOOLEAN OnOff
- );
-
-EFI_STATUS
-EFIAPI
-IsaGetCurrentResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList
- );
-
-EFI_STATUS
-EFIAPI
-IsaGetPossibleResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList
- );
-
-EFI_STATUS
-EFIAPI
-IsaSetResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN EFI_ISA_ACPI_RESOURCE_LIST *ResourceList
- );
-
-EFI_STATUS
-EFIAPI
-IsaEnableDevice (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN BOOLEAN Enable
- );
-
-EFI_STATUS
-EFIAPI
-IsaInitDevice (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device
- );
-
-EFI_STATUS
-EFIAPI
-LpcInterfaceInit (
- IN EFI_ISA_ACPI_PROTOCOL *This
-);
-
-VOID
-EmptyResourceList (
- IN UINT32 DeviceHid
-);
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c
deleted file mode 100644
index f23e48ccf2..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
-Module Name:
-
- LpcSio.c
-
-Abstract: Sio implementation
-
-Revision History
-
---*/
-
-#include "LpcDriver.h"
-#include <Library/S3BootScriptLib.h>
-
-VOID
-WriteRegister (
- IN UINT8 Index,
- IN UINT8 Data
- );
-
-typedef struct {
- UINT8 Register;
- UINT8 Value;
-} EFI_SIO_TABLE;
-
-EFI_SIO_TABLE mSioTable[] = {
- //
- // Init keyboard controller
- //
- { REG_LOGICAL_DEVICE, SIO_KEYBOARD },
- { BASE_ADDRESS_HIGH, 0x00 },
- { BASE_ADDRESS_LOW, 0x60 },
- { BASE_ADDRESS_HIGH2, 0x00 },
- { BASE_ADDRESS_LOW2, 0x64 },
- { PRIMARY_INTERRUPT_SELECT, 0x01 },
- { ACTIVATE, 0x1 },
-
- //
- // Init Mouse controller
- //
- { REG_LOGICAL_DEVICE, SIO_MOUSE },
- { BASE_ADDRESS_HIGH, 0x00 },
- { BASE_ADDRESS_LOW, 0x60 },
- { BASE_ADDRESS_HIGH2, 0x00 },
- { BASE_ADDRESS_LOW2, 0x64 },
- { PRIMARY_INTERRUPT_SELECT, 0x0c },
- { ACTIVATE, 0x1 },
-
- { REG_LOGICAL_DEVICE, SIO_COM },
- { BASE_ADDRESS_HIGH, 0x03 },
- { BASE_ADDRESS_LOW, 0xf8 },
- { PRIMARY_INTERRUPT_SELECT, 0x04 },
- { ACTIVATE, 0x1 },
-
-
-};
-
-VOID
-LPCWPCE791SetDefault ()
-{
- UINT8 Index;
-
- for (Index = 0; Index < sizeof(mSioTable)/sizeof(EFI_SIO_TABLE); Index++) {
- WriteRegisterAndSaveToScript (mSioTable[Index].Register, mSioTable[Index].Value);
- }
-
- return;
-}
-
-VOID
-DisableLogicalDevice (
- UINT8 DeviceId
- )
-{
- WriteRegisterAndSaveToScript (REG_LOGICAL_DEVICE, DeviceId);
- WriteRegisterAndSaveToScript (ACTIVATE, 0);
- WriteRegisterAndSaveToScript (BASE_ADDRESS_HIGH, 0);
- WriteRegisterAndSaveToScript (BASE_ADDRESS_LOW, 0);
-
- return;
-}
-
-VOID
-WriteRegister (
- IN UINT8 Index,
- IN UINT8 Data
- )
-{
- LpcIoWrite8(CONFIG_PORT, Index);
- LpcIoWrite8(DATA_PORT, Data);
-
- return;
-}
-
-VOID
-WriteRegisterAndSaveToScript (
- IN UINT8 Index,
- IN UINT8 Data
- )
-{
- UINT8 Buffer[2];
-
- LpcIoWrite8(CONFIG_PORT, Index);
- LpcIoWrite8(DATA_PORT, Data);
-
- Buffer[0] = Index;
- Buffer[1] = Data;
- S3BootScriptSaveIoWrite (
- EfiBootScriptWidthUint8,
- INDEX_PORT,
- 2,
- Buffer
- );
-
- return;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h
deleted file mode 100644
index 52c1499e3d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- LpcSio.h
-
-Abstract:
-
- Lpc driver's sio interface
-
-
-
---*/
-
-#ifndef _LPC_SIO_H
-#define _LPC_SIO_H
-
-#include "Protocol/PciRootBridgeIo.h"
-
-#define VARSIOINSTALLED L"VarSIOProcotolInstalled"
-
-//
-// Port address
-//
-#define CONFIG_PORT 0x04E
-#define INDEX_PORT 0x04E
-#define DATA_PORT INDEX_PORT + 1
-
-//
-// Logical Device
-//
-#define SIO_COM 0x3
-#define SIO_MSWC 0x4
-#define SIO_MOUSE 0x5
-#define SIO_KEYBOARD 0x6
-#define SIO_SHM 0xF
-#define SIO_PM1 0x11
-#define SIO_PM2 0x12
-#define SIO_PM3 0x17
-#define SIO_ESHM 0x1D
-
-//
-// Global register
-//
-#define REG_LOGICAL_DEVICE 0x07
-#define REG_DEVICE_ID 0x20
-#define SIO_CONFIG_1 0x21
-#define REG_CHIP_REV 0x24
-#define SIO_CONFIG_5 0x25
-#define SIO_CONFIG_6 0x26
-#define REG_DEVICE_REV 0x27
-#define SIO_CONFIG_9 0x29
-#define SIO_CONFIG_D 0x2D
-
-#define ACTIVATE 0x30
-#define BASE_ADDRESS_HIGH 0x60
-#define BASE_ADDRESS_LOW 0x61
-#define BASE_ADDRESS_HIGH2 0x62
-#define BASE_ADDRESS_LOW2 0x63
-#define PRIMARY_INTERRUPT_SELECT 0x70
-#define DMA_CHANNEL_SELECT 0x74
-
-EFI_STATUS
-InitializeLpcSio (
- IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *RootBridgeIo
- );
-
-//
-// Prototypes for the sio internal function
-//
-//
-// Internal function
-//
-VOID
-LPCWPCE791SetDefault (
- VOID
- );
-
-VOID
-WriteRegisterAndSaveToScript (
- IN UINT8 Index,
- IN UINT8 Data
- );
-
-VOID
-FloppyWriteProtect (
- VOID
- );
-
-VOID
-DisableLogicalDevice (
- UINT8 DeviceId
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/Wpce791.inf b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/Wpce791.inf
deleted file mode 100644
index 5fd458e265..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/Wpce791.inf
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-# Module Name:
-#
-# SiO791.inf
-#
-# Abstract:
-#
-# Component description file for SIO791 module.
-#
---*/
-
-[defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SIO791
- FILE_GUID = 04A76C80-06B9-445e-B73E-CB8C61A6A964
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- ENTRY_POINT = LpcDriverEntryPoint
-
-[sources.common]
- LpcIsaAcpi.h
- LpcSio.h
- LpcDriver.h
- LpcIsaAcpi.c
- LpcSio.c
- LpcDriver.c
-
-[Packages]
- MdePkg/MdePkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
- PcAtChipsetPkg/PcAtChipsetPkg.dec
-
-
-[LibraryClasses]
- UefiDriverEntryPoint
- UefiBootServicesTableLib
- DevicePathLib
- UefiLib
- S3BootScriptLib
- DebugLib
-
-[Ppis]
-
-[Protocols]
- gEfiPciIoProtocolGuid
- gEfiIsaAcpiProtocolGuid
- gEfiLpcWpce791PolicyProtocolGuid
-
-[Guids]
-
-[Depex]
- TRUE
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-platforms Patch 04/14] Vlv2TbltDevicePkg: Switch from ISA to SIO modules
2019-07-01 2:55 ` [edk2-platforms Patch 04/14] Vlv2TbltDevicePkg: Switch from ISA to SIO modules Michael D Kinney
@ 2019-07-01 4:07 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:07 UTC (permalink / raw)
To: Kinney, Michael D, devel@edk2.groups.io; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: Kinney, Michael D
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-platforms Patch 04/14] Vlv2TbltDevicePkg: Switch from ISA to SIO modules
Remove IntelFrameworkModulePkg ISA related modules and replace
with MdeModulePkg SIO modules.
* Retire Wpce791 module
* Retire gEfiLpcWpce791PolicyProtocolGuid and include file
* Retire gEfiLpcWpc83627PolicyProtocolGuid and include file
* Remove production of gEfiLpcWpc83627PolicyProtocolGuid from
PlatformDxe module
* Add PcuSio module
* Use PciSioSerialDxe module
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Include/Protocol/LpcWpc83627Policy.h | 92 --
.../Include/Protocol/LpcWpce791Policy.h | 55 -
.../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c | 951 ++++++++++++++++++
.../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h | 363 +++++++
.../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf | 38 +
.../Vlv2TbltDevicePkg/PlatformDxe/Platform.c | 4 -
.../PlatformDxe/PlatformDxe.inf | 2 -
.../PlatformDxe/SioPlatformPolicy.c | 82 --
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 1 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 2 +-
.../Vlv2TbltDevicePkg/Wpce791/LpcDriver.c | 340 -------
.../Vlv2TbltDevicePkg/Wpce791/LpcDriver.h | 112 ---
.../Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c | 366 -------
.../Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h | 103 --
.../Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c | 126 ---
.../Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h | 101 --
.../Vlv2TbltDevicePkg/Wpce791/Wpce791.inf | 63 --
18 files changed, 1354 insertions(+), 1449 deletions(-)
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpc83627Policy.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpce791Policy.h
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/SioPlatformPolicy.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/Wpce791.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpc83627Policy.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpc83627Policy.h
deleted file mode 100644
index 62d026f133..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpc83627Policy.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- LpcWpc83667Policy.h
-
-Abstract:
-
- Protocol used for WPC83627 Policy definition.
--------------------------------------------------------------------------------
- Rev Date<MM/DD/YYYY> Name Description
- -------------------------------------------------------------------------------
- R01 < 4/22/2011> LB Update driver for Sio83627UGH support.
- -------------------------------------------------------------------------------
-**/
-
-#ifndef _WPC83627_POLICY_PROTOCOL_H_
-#define _WPC83627_POLICY_PROTOCOL_H_
-
-EFI_FORWARD_DECLARATION (EFI_WPC83627_POLICY_PROTOCOL);
-
-#define EFI_WPC83627_POLICY_PROTOCOL_GUID \
- { \
- 0xd3ecc567, 0x9fd5, 0x44c1, 0x86, 0xcf, 0x5d, 0xa7, 0xa2, 0x4f, 0x4b, 0x5d \
- }
-
-#define EFI_WPC83627_COM1_ENABLE 0x01
-#define EFI_WPC83627_COM2_ENABLE 0x01
-
-#define EFI_WPC83627_COM3_ENABLE 0x01
-#define EFI_WPC83627_COM4_ENABLE 0x01
-
-#define EFI_WPC83627_LPT1_ENABLE 0x01
-#define EFI_WPC83627_LPT1_ENABLE 0x01
-#define EFI_WPC83627_FDD_ENABLE 0x01
-#define EFI_WPC83627_FDD_WRITE_ENABLE 0x01
-#define EFI_WPC83627_PS2_KBC_ENABLE 0x01
-#define EFI_WPC83627_ECIR_ENABLE 0x01
-
-#define EFI_WPC83627_COM1_DISABLE 0x00
-#define EFI_WPC83627_COM2_DISABLE 0x00
-
-#define EFI_WPC83627_COM3_DISABLE 0x00
-#define EFI_WPC83627_COM4_DISABLE 0x00
-
-#define EFI_WPC83627_LPT1_DISABLE 0x00
-#define EFI_WPC83627_FDD_DISABLE 0x00
-#define EFI_WPC83627_FDD_WRITE_PROTECT 0x00
-#define EFI_WPC83627_PS2_KBC_DISABLE 0x00
-#define EFI_WPC83627_ECIR_DISABLE 0x00
-#define EFI_WPC83627_RESERVED_DEFAULT 0x00
-
-typedef struct {
- UINT16 Com1 :1; // 0 = Disable, 1 = Enable
- UINT16 Lpt1 :1; // 0 = Disable, 1 = Enable
- UINT16 Floppy :1; // 0 = Disable, 1 = Enable
- UINT16 FloppyWriteProtect :1; // 0 = Write Protect, 1 = Write Enable
- UINT16 Port80 :1; // 0 = Disable, 1 = Enable
- UINT16 CIR :1; // CIR enable or disable
- UINT16 Ps2Keyboard :1; // 0 = Disable, 1 = Enable
- UINT16 Ps2Mouse :1; // 0 = Disable, 1 = Enable
- UINT16 Com2 :1; // 0 = Disable, 1 = Enable
-
- UINT16 Com3 :1; // 0 = Disable, 1 = Enable
- UINT16 Com4 :1; // 0 = Disable, 1 = Enable
-
- UINT16 Dac :1; // 0 = Disable, 1 = Enable
- UINT16 Rsvd :6;
-} EFI_WPC83627_DEVICE_ENABLES;
-
-typedef enum {
- LptModeOutput,
- LptModeBiDirectional,
- LptModeEpp,
- LptModeEcp
-} EFI_LPT_MODE;
-
-typedef struct _EFI_WPC83627_POLICY_PROTOCOL {
- EFI_WPC83627_DEVICE_ENABLES DeviceEnables;
- EFI_LPT_MODE LptMode;
-} EFI_WPC83627_POLICY_PROTOCOL;
-
-extern EFI_GUID gEfiLpcWpc83627PolicyProtocolGuid;
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpce791Policy.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpce791Policy.h
deleted file mode 100644
index 1b2459e54a..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpce791Policy.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- LpcWpce791Policy.h
-
-Abstract:
-
- Protocol used for WPCE791 Policy definition.
-
-**/
-
-#ifndef _WPCE791_POLICY_PROTOCOL_H_
-#define _WPCE791_POLICY_PROTOCOL_H_
-
-
-#define EFI_WPCE791_POLICY_PROTOCOL_GUID \
- { \
- 0xab2bee2f, 0xc1a6, 0x4399, 0x85, 0x3d, 0xc0, 0x7c, 0x77, 0x4f, 0xfd, 0xd \
- }
-
-#define EFI_WPCE791_PS2_KEYBOARD_ENABLE 0x01
-#define EFI_WPCE791_PS2_KEYBOARD_DISABLE 0x00
-
-#define EFI_WPCE791_PS2_MOUSE_ENABLE 0x01
-#define EFI_WPCE791_PS2_MOUSE_DISABLE 0x00
-
-typedef struct {
- UINT16 Com1 :1; // 0 = Disable, 1 = Enable
- UINT16 Lpt1 :1; // 0 = Disable, 1 = Enable
- UINT16 Floppy :1; // 0 = Disable, 1 = Enable
- UINT16 FloppyWriteProtect :1; // 0 = Write Protect, 1 = Write Enable
- UINT16 Port80 :1; // 0 = Disable, 1 = Enable
- UINT16 CIR :1; // CIR enable or disable
- UINT16 Ps2Keyboard :1; // 0 = Disable, 1 = Enable
- UINT16 Ps2Mouse :1; // 0 = Disable, 1 = Enable
- UINT16 Com2 :1; // 0 = Disable, 1 = Enable
- UINT16 Dac :1; // 0 = Disable, 1 = Enable
- UINT16 Rsvd :6;
-} EFI_WPCE791_DEVICE_ENABLES;
-
-typedef struct _EFI_WPCE791_POLICY_PROTOCOL {
- EFI_WPCE791_DEVICE_ENABLES DeviceEnables;
-} EFI_WPCE791_POLICY_PROTOCOL;
-
-extern EFI_GUID gEfiLpcWpce791PolicyProtocolGuid;
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c
new file mode 100644
index 0000000000..d16b1b0abd
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c
@@ -0,0 +1,951 @@
+/** @file
+ Produces the SIO Protocols for ISA devices integrated in the Platform
+ Controller Unit (PCU).
+
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "PcuSio.h"
+
+//
+// PCU SIO Driver Global Variables
+//
+EFI_DRIVER_BINDING_PROTOCOL gPcuSioDriverBinding = {
+ PcuSioDriverBindingSupported,
+ PcuSioDriverBindingStart,
+ PcuSioDriverBindingStop,
+ 0x10,
+ NULL,
+ NULL
+};
+
+//
+// Super I/O Protocol interfaces
+//
+EFI_SIO_PROTOCOL mSioInterface = {
+ SioRegisterAccess,
+ SioGetResources,
+ SioSetResources,
+ SioPossibleResources,
+ SioModify
+};
+
+//
+// COM 1 UART Controller
+//
+GLOBAL_REMOVE_IF_UNREFERENCED
+SIO_RESOURCES_IO mCom1Resources = {
+ { { ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR }, 0x3F8, 8 },
+ { ACPI_END_TAG_DESCRIPTOR, 0 }
+};
+
+//
+// Table of SIO Controllers
+//
+GLOBAL_REMOVE_IF_UNREFERENCED
+SIO_DEVICE_INFO mDevicesInfo[] = {
+ {
+ EISA_PNP_ID (0x501),
+ 0,
+ { (ACPI_SMALL_RESOURCE_HEADER *) &mCom1Resources }
+ }
+};
+
+//
+// ACPI Device Path Node template
+//
+GLOBAL_REMOVE_IF_UNREFERENCED
+ACPI_HID_DEVICE_PATH mAcpiDeviceNodeTemplate = {
+ { // Header
+ ACPI_DEVICE_PATH,
+ ACPI_DP,
+ {
+ (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)),
+ (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8)
+ }
+ },
+ 0x0, // HID
+ 0x0 // UID
+};
+
+/**
+ Provides a low level access to the registers for the Super I/O.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] Write Specifies the type of the register operation.
+ If this parameter is TRUE, Value is interpreted
+ as an input parameter and the operation is a
+ register write. If this parameter is FALSE,
+ Value is interpreted as an output parameter and
+ the operation is a register read.
+ @param[in] ExitCfgMode Exit Configuration Mode Indicator. If this
+ parameter is set to TRUE, the Super I/O driver
+ will turn off configuration mode of the Super
+ I/O prior to returning from this function. If
+ this parameter is set to FALSE, the Super I/O
+ driver will leave Super I/O in the
+ configuration mode. The Super I/O driver must
+ track the current state of the Super I/O and
+ enable the configuration mode of Super I/O if
+ necessary prior to register access.
+ @param[in] Register Register number.
+ @param[in,out] Value If Write is TRUE, Value is a pointer to the
+ buffer containing the byte of data to be
+ written to the Super I/O register. If Write is
+ FALSE, Value is a pointer to the destination
+ buffer for the byte of data to be read from the
+ Super I/O register.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER The Value is NULL.
+ @retval EFI_INVALID_PARAMETER Invalid Register number.
+
+**/
+EFI_STATUS
+EFIAPI
+SioRegisterAccess (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN BOOLEAN Write,
+ IN BOOLEAN ExitCfgMode,
+ IN UINT8 Register,
+ IN OUT UINT8 *Value
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ Provides an interface to get a list of the current resources consumed by the
+ device in the ACPI Resource Descriptor format.
+
+ GetResources() returns a list of resources currently consumed by the device.
+ The ResourceList is a pointer to the buffer containing resource descriptors
+ for the device. The descriptors are in the format of Small or Large ACPI
+ resource descriptor as defined by ACPI specification (2.0 & 3.0). The buffer
+ of resource descriptors is terminated with the 'End tag' resource descriptor.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[out] ResourceList A pointer to an ACPI resource descriptor list
+ that defines the current resources used by the
+ device.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceList is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioGetResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ OUT ACPI_RESOURCE_HEADER_PTR *ResourceList
+ )
+{
+ SIO_DEV *SioDevice;
+
+ if (ResourceList == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ SioDevice = SIO_DEV_FROM_SIO (This);
+ if (SioDevice->DeviceIndex < ARRAY_SIZE (mDevicesInfo)) {
+ *ResourceList = mDevicesInfo[SioDevice->DeviceIndex].Resources;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Sets the resources for the device.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] ResourceList Pointer to the ACPI resource descriptor list.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceList is invalid.
+ @retval EFI_ACCESS_DENIED Some of the resources in ResourceList are in
+ use.
+
+**/
+EFI_STATUS
+EFIAPI
+SioSetResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN ACPI_RESOURCE_HEADER_PTR ResourceList
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ Provides a collection of resource descriptor lists. Each resource descriptor
+ list in the collection defines a combination of resources that can
+ potentially be used by the device.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[out] ResourceCollection Collection of the resource descriptor
+ lists.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceCollection is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioPossibleResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ OUT ACPI_RESOURCE_HEADER_PTR *ResourceCollection
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ Provides an interface for a table based programming of the Super I/O
+ registers.
+
+ The Modify() function provides an interface for table based programming of
+ the Super I/O registers. This function can be used to perform programming of
+ multiple Super I/O registers with a single function call. For each table
+ entry, the Register is read, its content is bitwise ANDed with AndMask, and
+ then ORed with OrMask before being written back to the Register. The Super
+ I/O driver must track the current state of the Super I/O and enable the
+ configuration mode of Super I/O if necessary prior to table processing. Once
+ the table is processed, the Super I/O device has to be returned to the
+ original state.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] Command A pointer to an array of NumberOfCommands
+ EFI_SIO_REGISTER_MODIFY structures. Each
+ structure specifies a single Super I/O register
+ modify operation.
+ @param[in] NumberOfCommands Number of elements in the Command array.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER Command is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioModify (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN CONST EFI_SIO_REGISTER_MODIFY *Command,
+ IN UINTN NumberOfCommands
+ )
+{
+ return EFI_SUCCESS;
+}
+
+/**
+ Create the child device with a given device index.
+
+ @param[in] This The EFI_DRIVER_BINDING_PROTOCOL instance.
+ @param[in] Controller The handle of ISA bus controller.
+ @param[in] PciIo The pointer to the PCI protocol.
+ @param[in] ParentDevicePath Device path of the ISA bus controller.
+ @param[in] DeviceIndex Index of the device supported by this driver.
+
+ @retval EFI_SUCCESS The child device has been created successfully.
+ @retval Others Error occurred during the child device creation.
+
+**/
+EFI_STATUS
+SioCreateChildDevice (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_PCI_IO_PROTOCOL *PciIo,
+ IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
+ IN UINT32 DeviceIndex
+ )
+{
+ EFI_STATUS Status;
+ SIO_DEV *SioDevice;
+
+ //
+ // Initialize the SIO_DEV structure
+ //
+ SioDevice = AllocateZeroPool (sizeof (SIO_DEV));
+ if (SioDevice == NULL) {
+ DEBUG ((DEBUG_ERROR, "SioCreateChildDevice(): Can not allocate SIO Device structure\n"));
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ SioDevice->Signature = SIO_DEV_SIGNATURE;
+ SioDevice->Handle = NULL;
+ SioDevice->PciIo = PciIo;
+ CopyMem (&SioDevice->Sio, &mSioInterface, sizeof (EFI_SIO_PROTOCOL));
+ SioDevice->DeviceIndex = DeviceIndex;
+
+ //
+ // Construct the child device path
+ //
+ mAcpiDeviceNodeTemplate.HID = mDevicesInfo[DeviceIndex].Hid;
+ mAcpiDeviceNodeTemplate.UID = mDevicesInfo[DeviceIndex].Uid;
+ SioDevice->DevicePath = AppendDevicePathNode (
+ ParentDevicePath,
+ (EFI_DEVICE_PATH_PROTOCOL *) &mAcpiDeviceNodeTemplate
+ );
+ if (SioDevice->DevicePath == NULL) {
+ DEBUG ((DEBUG_ERROR, "SioCreateChildDevice(): Can not allocate SIO Device path\n"));
+ Status = EFI_OUT_OF_RESOURCES;
+ goto Done;
+ }
+
+ //
+ // Create a child handle and install Device Path and Super I/O protocols
+ //
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &SioDevice->Handle,
+ &gEfiDevicePathProtocolGuid,
+ SioDevice->DevicePath,
+ &gEfiSioProtocolGuid,
+ &SioDevice->Sio,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "SioCreateChildDevice(): Can not install child protocols %r\n", Status));
+ goto Done;
+ }
+
+ Status = gBS->OpenProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ (VOID **) &PciIo,
+ This->DriverBindingHandle,
+ SioDevice->Handle,
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "SioCreateChildDevice(): Can not open parent PCI I/O Protocol by child controller %r\n", Status));
+ gBS->UninstallMultipleProtocolInterfaces (
+ SioDevice->Handle,
+ &gEfiDevicePathProtocolGuid,
+ SioDevice->DevicePath,
+ &gEfiSioProtocolGuid,
+ &SioDevice->Sio,
+ NULL
+ );
+ }
+
+Done:
+ if (EFI_ERROR (Status)) {
+ if (SioDevice->DevicePath != NULL) {
+ FreePool (SioDevice->DevicePath);
+ }
+ FreePool (SioDevice);
+ }
+
+ return Status;
+}
+
+/**
+ Create all the ISA child devices on the ISA bus controller (PCI to ISA
+ bridge).
+
+ @param[in] This The EFI_DRIVER_BINDING_PROTOCOL instance.
+ @param[in] Controller The handle of ISA bus controller.
+ @param[in] PciIo The pointer to the PCI protocol.
+ @param[in] ParentDevicePath Device path of the ISA bus controller.
+
+ @retval The number of child device that is successfully created.
+
+**/
+UINT32
+SioCreateAllChildDevices (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_PCI_IO_PROTOCOL *PciIo,
+ IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath
+ )
+{
+ UINT32 Index;
+ UINT32 ChildDeviceNumber;
+ EFI_STATUS Status;
+
+ ChildDeviceNumber = 0;
+
+ for (Index = 0; Index < ARRAY_SIZE (mDevicesInfo); Index++) {
+ Status = SioCreateChildDevice (
+ This,
+ Controller,
+ PciIo,
+ ParentDevicePath,
+ Index
+ );
+ if (!EFI_ERROR (Status)) {
+ ChildDeviceNumber++;
+ }
+ }
+
+ return ChildDeviceNumber;
+}
+
+/**
+ Tests to see if this driver supports a given controller. If a child device is
+ provided, it further tests to see if this driver supports creating a handle
+ for the specified child device.
+
+ This function checks to see if the driver specified by This supports the
+ device specified by ControllerHandle. Drivers will typically use the device
+ path attached to ControllerHandle and/or the services from the bus I/O
+ abstraction attached to ControllerHandle to determine if the driver supports
+ ControllerHandle. This function may be called many times during platform
+ initialization. In order to reduce boot times, the tests performed by this
+ function must be very small, and take as little time as possible to execute.
+ This function must not change the state of any hardware devices, and this
+ function must be aware that the device specified by ControllerHandle may
+ already be managed by the same driver or a different driver. This function
+ must match its calls to AllocatePages() with FreePages(), AllocatePool() with
+ FreePool(), and OpenProtocol() with CloseProtocol(). Since ControllerHandle
+ may have been previously started by the same driver, if a protocol is already
+ in the opened state, then it must not be closed with CloseProtocol(). This is
+ required to guarantee the state of ControllerHandle is not modified by this
+ function.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle The handle of the controller to test. This
+ handle must support a protocol interface
+ that supplies an I/O abstraction to the
+ driver.
+ @param[in] RemainingDevicePath A pointer to the remaining portion of a
+ device path. This parameter is ignored by
+ device drivers, and is optional for bus
+ drivers. For bus drivers, if this parameter
+ is not NULL, then the bus driver must
+ determine if the bus controller specified by
+ ControllerHandle and the child controller
+ specified by RemainingDevicePath are both
+ supported by this bus driver.
+
+ @retval EFI_SUCCESS The device specified by ControllerHandle and
+ RemainingDevicePath is supported by the
+ driver specified by This.
+ @retval EFI_ALREADY_STARTED The device specified by ControllerHandle and
+ RemainingDevicePath is already being managed
+ by the driver specified by This.
+ @retval EFI_ACCESS_DENIED The device specified by ControllerHandle and
+ RemainingDevicePath is already being managed
+ by a different driver or an application that
+ requires exclusive access.
+ @retval EFI_UNSUPPORTED The device specified by ControllerHandle and
+ RemainingDevicePath is not supported by the
+ driver specified by This.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingSupported (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
+ )
+{
+ EFI_STATUS Status;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ PCI_TYPE00 Pci;
+
+ //
+ // Get PciIo protocol instance
+ //
+ Status = gBS->OpenProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ (VOID **)&PciIo,
+ This->DriverBindingHandle,
+ Controller,
+ EFI_OPEN_PROTOCOL_BY_DRIVER
+ );
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ Status = PciIo->Pci.Read (
+ PciIo,
+ EfiPciIoWidthUint32,
+ 0,
+ sizeof(Pci) / sizeof(UINT32),
+ &Pci
+ );
+
+ if (!EFI_ERROR (Status)) {
+ Status = EFI_UNSUPPORTED;
+ if ((Pci.Hdr.Command & 0x03) == 0x03) {
+ if (Pci.Hdr.ClassCode[2] == PCI_CLASS_BRIDGE) {
+ //
+ // See if this is a standard PCI to ISA Bridge from the Base Code
+ // and Class Code
+ //
+ if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA) {
+ Status = EFI_SUCCESS;
+ }
+ //
+ // See if this is an Intel PCI to ISA bridge in Positive Decode Mode
+ //
+ if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE &&
+ Pci.Hdr.VendorId == 0x8086 && Pci.Hdr.DeviceId == 0x7110) {
+ Status = EFI_SUCCESS;
+ }
+ }
+ }
+ }
+
+ gBS->CloseProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+
+ return Status;
+}
+
+/**
+ Starts a device controller or a bus controller.
+
+ The Start() function is designed to be invoked from the EFI boot service
+ ConnectController(). As a result, much of the error checking on the
+ parameters to Start() has been moved into this common boot service. It is
+ legal to call Start() from other locations, but the following calling
+ restrictions must be followed or the system behavior will not be
+ deterministic.
+ 1. ControllerHandle must be a valid EFI_HANDLE.
+ 2. If RemainingDevicePath is not NULL, then it must be a pointer to a
+ naturally aligned EFI_DEVICE_PATH_PROTOCOL.
+ 3. Prior to calling Start(), the Supported() function for the driver
+ specified by This must have been called with the same calling parameters,
+ and Supported() must have returned EFI_SUCCESS.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle The handle of the controller to start. This
+ handle must support a protocol interface
+ that supplies an I/O abstraction to the
+ driver.
+ @param[in] RemainingDevicePath A pointer to the remaining portion of a
+ device path. This parameter is ignored by
+ device drivers, and is optional for bus
+ drivers. For a bus driver, if this parameter
+ is NULL, then handles for all the children
+ of Controller are created by this driver. If
+ this parameter is not NULL and the first
+ Device Path Node is not the End of Device
+ Path Node, then only the handle for the
+ child device specified by the first Device
+ Path Node of RemainingDevicePath is created
+ by this driver. If the first Device Path
+ Node of RemainingDevicePath is the End of
+ Device Path Node, no child handle is created
+ by this driver.
+
+ @retval EFI_SUCCESS The device was started.
+ @retval EFI_DEVICE_ERROR The device could not be started due to a
+ device error.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
+ lack of resources.
+ @retval Others The driver failed to start the device.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingStart (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
+ )
+{
+ EFI_STATUS Status;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
+ UINT64 Supports;
+ UINT64 OriginalAttributes;
+ UINT64 Attributes;
+ BOOLEAN Enabled;
+ SIO_BUS_DRIVER_PRIVATE_DATA *Private;
+ UINT32 ChildDeviceNumber;
+
+ Enabled = FALSE;
+ Supports = 0;
+ OriginalAttributes = 0;
+ Private = NULL;
+
+ //
+ // Open the PCI I/O Protocol Interface
+ //
+ PciIo = NULL;
+ Status = gBS->OpenProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ (VOID**) &PciIo,
+ This->DriverBindingHandle,
+ Controller,
+ EFI_OPEN_PROTOCOL_BY_DRIVER
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): No PCI I/O Protocol %r\n", Status));
+ return Status;
+ }
+
+ //
+ // Open Device Path Protocol
+ //
+ Status = gBS->OpenProtocol (
+ Controller,
+ &gEfiDevicePathProtocolGuid,
+ (VOID **) &ParentDevicePath,
+ This->DriverBindingHandle,
+ Controller,
+ EFI_OPEN_PROTOCOL_BY_DRIVER
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): No Device Path Protocol %r\n", Status));
+ gBS->CloseProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+ return Status;
+ }
+
+ //
+ // Get supported PCI attributes
+ //
+ Status = PciIo->Attributes (
+ PciIo,
+ EfiPciIoAttributeOperationSupported,
+ 0,
+ &Supports
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error reading PCI I/O Supported Attributes %r\n", Status));
+ goto Done;
+ }
+ Supports &= (UINT64) (EFI_PCI_IO_ATTRIBUTE_ISA_IO |
+ EFI_PCI_IO_ATTRIBUTE_ISA_IO_16);
+
+ Status = PciIo->Attributes (
+ PciIo,
+ EfiPciIoAttributeOperationGet,
+ 0,
+ &OriginalAttributes
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error reading PCI I/O Attributes %r\n", Status));
+ goto Done;
+ }
+
+ Attributes = EFI_PCI_DEVICE_ENABLE |
+ Supports |
+ EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO;
+
+ Status = PciIo->Attributes (
+ PciIo,
+ EfiPciIoAttributeOperationEnable,
+ Attributes,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error enabling PCI I/O Attributes %r\n", Status));
+ goto Done;
+ }
+
+ Enabled = TRUE;
+
+ //
+ // Store the OriginalAttributes for the restore in BindingStop()
+ //
+ Private = AllocateZeroPool (sizeof (SIO_BUS_DRIVER_PRIVATE_DATA));
+ if (Private == NULL) {
+ Status = EFI_OUT_OF_RESOURCES;
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error allocating SIO private data structure %r\n", Status));
+ goto Done;
+ }
+ Private->PciIo = PciIo;
+ Private->OriginalAttributes = OriginalAttributes;
+
+ Status = gBS->InstallProtocolInterface (
+ &Controller,
+ &gEfiCallerIdGuid,
+ EFI_NATIVE_INTERFACE,
+ Private
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error installing gEfiCallerIdGuid %r\n", Status));
+ goto Done;
+ }
+
+ //
+ // Report status code for the start of general controller initialization
+ //
+ REPORT_STATUS_CODE_WITH_DEVICE_PATH (
+ EFI_PROGRESS_CODE,
+ (EFI_IO_BUS_LPC | EFI_IOB_PC_INIT),
+ ParentDevicePath
+ );
+
+ //
+ // Report status code for the start of enabling devices on the bus
+ //
+ REPORT_STATUS_CODE_WITH_DEVICE_PATH (
+ EFI_PROGRESS_CODE,
+ (EFI_IO_BUS_LPC | EFI_IOB_PC_ENABLE),
+ ParentDevicePath
+ );
+
+ //
+ // Create all the children upon the first entrance
+ //
+ ChildDeviceNumber = SioCreateAllChildDevices (
+ This,
+ Controller,
+ PciIo,
+ ParentDevicePath
+ );
+ if (ChildDeviceNumber == 0) {
+ Status = EFI_DEVICE_ERROR;
+ DEBUG ((DEBUG_ERROR, "PcuSioDriverBindingStart(): Error creating child SIO devices %r\n", Status));
+ goto Done;
+ }
+
+Done:
+ if (EFI_ERROR (Status)) {
+ if (PciIo != NULL && Enabled) {
+ PciIo->Attributes (
+ PciIo,
+ EfiPciIoAttributeOperationSet,
+ OriginalAttributes,
+ NULL
+ );
+ }
+
+ gBS->CloseProtocol (
+ Controller,
+ &gEfiDevicePathProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+
+ gBS->CloseProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+
+ if (Private != NULL) {
+ gBS->UninstallMultipleProtocolInterfaces (
+ Controller,
+ &gEfiCallerIdGuid,
+ Private,
+ NULL
+ );
+ FreePool (Private);
+ }
+ }
+
+ return Status;
+}
+
+/**
+ Stops a device controller or a bus controller.
+
+ The Stop() function is designed to be invoked from the EFI boot service
+ DisconnectController(). As a result, much of the error checking on the
+ parameters to Stop() has been moved into this common boot service. It is
+ legal to call Stop() from other locations, but the following calling
+ restrictions must be followed or the system behavior will not be
+ deterministic.
+ 1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous
+ call to this same driver's Start() function.
+ 2. The first NumberOfChildren handles of ChildHandleBuffer must all be a
+ valid EFI_HANDLE. In addition, all of these handles must have been created
+ in this driver's Start() function, and the Start() function must have
+ called OpenProtocol() on ControllerHandle with an Attribute of
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle A handle to the device being stopped. The
+ handle must support a bus specific I/O
+ protocol for the driver to use to stop the
+ device.
+ @param[in] NumberOfChildren The number of child device handles in
+ ChildHandleBuffer.
+ @param[in] ChildHandleBuffer An array of child handles to be freed. May be
+ NULL if NumberOfChildren is 0.
+
+ @retval EFI_SUCCESS The device was stopped.
+ @retval EFI_DEVICE_ERROR The device could not be stopped due to a
+ device error.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingStop (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN UINTN NumberOfChildren,
+ IN EFI_HANDLE *ChildHandleBuffer
+ )
+{
+ EFI_STATUS Status;
+ SIO_BUS_DRIVER_PRIVATE_DATA *Private;
+ UINTN Index;
+ BOOLEAN AllChildrenStopped;
+ EFI_SIO_PROTOCOL *Sio;
+ SIO_DEV *SioDevice;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+
+ if (NumberOfChildren == 0) {
+ //
+ // Restore PCI attributes
+ //
+ Status = gBS->OpenProtocol (
+ Controller,
+ &gEfiCallerIdGuid,
+ (VOID **) &Private,
+ This->DriverBindingHandle,
+ Controller,
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = Private->PciIo->Attributes (
+ Private->PciIo,
+ EfiPciIoAttributeOperationSet,
+ Private->OriginalAttributes,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ gBS->UninstallProtocolInterface (
+ Controller,
+ &gEfiCallerIdGuid,
+ Private
+ );
+ FreePool (Private);
+
+ //
+ // Close the bus driver
+ //
+ Status = gBS->CloseProtocol (
+ Controller,
+ &gEfiDevicePathProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = gBS->CloseProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ return EFI_SUCCESS;
+ }
+
+ //
+ // Stop all the children
+ //
+ AllChildrenStopped = TRUE;
+
+ for (Index = 0; Index < NumberOfChildren; Index++) {
+ Status = gBS->OpenProtocol (
+ ChildHandleBuffer[Index],
+ &gEfiSioProtocolGuid,
+ (VOID **) &Sio,
+ This->DriverBindingHandle,
+ Controller,
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL
+ );
+ if (!EFI_ERROR (Status)) {
+ SioDevice = SIO_DEV_FROM_SIO (Sio);
+
+ //
+ // Close the child handle
+ //
+ Status = gBS->CloseProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ This->DriverBindingHandle,
+ ChildHandleBuffer[Index]
+ );
+ Status = gBS->UninstallMultipleProtocolInterfaces (
+ ChildHandleBuffer[Index],
+ &gEfiDevicePathProtocolGuid,
+ SioDevice->DevicePath,
+ &gEfiSioProtocolGuid,
+ &SioDevice->Sio,
+ NULL
+ );
+
+ if (!EFI_ERROR (Status)) {
+ FreePool (SioDevice->DevicePath);
+ FreePool (SioDevice);
+ } else {
+ //
+ // Re-open PCI IO Protocol on behalf of the child device
+ // because of failure of destroying the child device handle
+ //
+ gBS->OpenProtocol (
+ Controller,
+ &gEfiPciIoProtocolGuid,
+ (VOID **) &PciIo,
+ This->DriverBindingHandle,
+ ChildHandleBuffer[Index],
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
+ );
+ }
+ }
+
+ if (EFI_ERROR (Status)) {
+ AllChildrenStopped = FALSE;
+ }
+ }
+
+ if (!AllChildrenStopped) {
+ return EFI_DEVICE_ERROR;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ The entry point for the PCU SIO driver.
+
+ @param[in] ImageHandle The firmware allocated handle for the EFI image.
+ @param[in] SystemTable A pointer to the EFI System Table.
+
+ @retval EFI_SUCCESS The entry point is executed successfully.
+ @retval other Some error occurs when executing this entry point.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ return EfiLibInstallDriverBinding (
+ ImageHandle,
+ SystemTable,
+ &gPcuSioDriverBinding,
+ ImageHandle
+ );
+}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h
new file mode 100644
index 0000000000..3a47e2c5e2
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h
@@ -0,0 +1,363 @@
+/** @file
+ Produces the SIO Protocols for ISA devices integrated in the Platform
+ Controller Unit (PCU).
+
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef __PCU_SIO_H__
+#define __PCU_SIO_H__
+
+#include <Uefi.h>
+#include <Protocol/DriverBinding.h>
+#include <Protocol/PciIo.h>
+#include <Protocol/DevicePath.h>
+#include <Protocol/SuperIo.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+#include <Library/ReportStatusCodeLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/DevicePathLib.h>
+#include <Library/UefiLib.h>
+#include <IndustryStandard/Pci.h>
+
+#pragma pack(1)
+
+typedef struct {
+ EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR Io;
+ EFI_ACPI_END_TAG_DESCRIPTOR End;
+} SIO_RESOURCES_IO;
+
+#pragma pack()
+
+typedef struct {
+ UINT32 Hid;
+ UINT32 Uid;
+ ACPI_RESOURCE_HEADER_PTR Resources;
+} SIO_DEVICE_INFO;
+
+//
+// SIO Bus driver private data structure
+//
+typedef struct {
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ UINT64 OriginalAttributes;
+} SIO_BUS_DRIVER_PRIVATE_DATA;
+
+//
+// SIO device private data structure
+//
+typedef struct {
+ UINT32 Signature;
+ EFI_HANDLE Handle;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ EFI_SIO_PROTOCOL Sio;
+ UINT32 DeviceIndex;
+} SIO_DEV;
+#define SIO_DEV_SIGNATURE SIGNATURE_32 ('S', 'I', 'O', 'D')
+#define SIO_DEV_FROM_SIO(a) CR (a, SIO_DEV, Sio, SIO_DEV_SIGNATURE)
+
+/**
+ Tests to see if this driver supports a given controller. If a child device is
+ provided, it further tests to see if this driver supports creating a handle
+ for the specified child device.
+
+ This function checks to see if the driver specified by This supports the
+ device specified by ControllerHandle. Drivers will typically use the device
+ path attached to ControllerHandle and/or the services from the bus I/O
+ abstraction attached to ControllerHandle to determine if the driver supports
+ ControllerHandle. This function may be called many times during platform
+ initialization. In order to reduce boot times, the tests performed by this
+ function must be very small, and take as little time as possible to execute.
+ This function must not change the state of any hardware devices, and this
+ function must be aware that the device specified by ControllerHandle may
+ already be managed by the same driver or a different driver. This function
+ must match its calls to AllocatePages() with FreePages(), AllocatePool() with
+ FreePool(), and OpenProtocol() with CloseProtocol(). Since ControllerHandle
+ may have been previously started by the same driver, if a protocol is already
+ in the opened state, then it must not be closed with CloseProtocol(). This is
+ required to guarantee the state of ControllerHandle is not modified by this
+ function.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle The handle of the controller to test. This
+ handle must support a protocol interface
+ that supplies an I/O abstraction to the
+ driver.
+ @param[in] RemainingDevicePath A pointer to the remaining portion of a
+ device path. This parameter is ignored by
+ device drivers, and is optional for bus
+ drivers. For bus drivers, if this parameter
+ is not NULL, then the bus driver must
+ determine if the bus controller specified by
+ ControllerHandle and the child controller
+ specified by RemainingDevicePath are both
+ supported by this bus driver.
+
+ @retval EFI_SUCCESS The device specified by ControllerHandle and
+ RemainingDevicePath is supported by the
+ driver specified by This.
+ @retval EFI_ALREADY_STARTED The device specified by ControllerHandle and
+ RemainingDevicePath is already being managed
+ by the driver specified by This.
+ @retval EFI_ACCESS_DENIED The device specified by ControllerHandle and
+ RemainingDevicePath is already being managed
+ by a different driver or an application that
+ requires exclusive access.
+ @retval EFI_UNSUPPORTED The device specified by ControllerHandle and
+ RemainingDevicePath is not supported by the
+ driver specified by This.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingSupported (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
+ );
+
+/**
+ Starts a device controller or a bus controller.
+
+ The Start() function is designed to be invoked from the EFI boot service
+ ConnectController(). As a result, much of the error checking on the
+ parameters to Start() has been moved into this common boot service. It is
+ legal to call Start() from other locations, but the following calling
+ restrictions must be followed or the system behavior will not be
+ deterministic.
+ 1. ControllerHandle must be a valid EFI_HANDLE.
+ 2. If RemainingDevicePath is not NULL, then it must be a pointer to a
+ naturally aligned EFI_DEVICE_PATH_PROTOCOL.
+ 3. Prior to calling Start(), the Supported() function for the driver
+ specified by This must have been called with the same calling parameters,
+ and Supported() must have returned EFI_SUCCESS.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle The handle of the controller to start. This
+ handle must support a protocol interface
+ that supplies an I/O abstraction to the
+ driver.
+ @param[in] RemainingDevicePath A pointer to the remaining portion of a
+ device path. This parameter is ignored by
+ device drivers, and is optional for bus
+ drivers. For a bus driver, if this parameter
+ is NULL, then handles for all the children
+ of Controller are created by this driver. If
+ this parameter is not NULL and the first
+ Device Path Node is not the End of Device
+ Path Node, then only the handle for the
+ child device specified by the first Device
+ Path Node of RemainingDevicePath is created
+ by this driver. If the first Device Path
+ Node of RemainingDevicePath is the End of
+ Device Path Node, no child handle is created
+ by this driver.
+
+ @retval EFI_SUCCESS The device was started.
+ @retval EFI_DEVICE_ERROR The device could not be started due to a
+ device error.
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a
+ lack of resources.
+ @retval Others The driver failded to start the device.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingStart (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
+ );
+
+/**
+ Stops a device controller or a bus controller.
+
+ The Stop() function is designed to be invoked from the EFI boot service
+ DisconnectController(). As a result, much of the error checking on the
+ parameters to Stop() has been moved into this common boot service. It is
+ legal to call Stop() from other locations, but the following calling
+ restrictions must be followed or the system behavior will not be
+ deterministic.
+ 1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous
+ call to this same driver's Start() function.
+ 2. The first NumberOfChildren handles of ChildHandleBuffer must all be a
+ valid EFI_HANDLE. In addition, all of these handles must have been created
+ in this driver's Start() function, and the Start() function must have
+ called OpenProtocol() on ControllerHandle with an Attribute of
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.
+
+ @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL
+ instance.
+ @param[in] ControllerHandle A handle to the device being stopped. The
+ handle must support a bus specific I/O
+ protocol for the driver to use to stop the
+ device.
+ @param[in] NumberOfChildren The number of child device handles in
+ ChildHandleBuffer.
+ @param[in] ChildHandleBuffer An array of child handles to be freed. May be
+ NULL if NumberOfChildren is 0.
+
+ @retval EFI_SUCCESS The device was stopped.
+ @retval EFI_DEVICE_ERROR The device could not be stopped due to a
+ device error.
+
+**/
+EFI_STATUS
+EFIAPI
+PcuSioDriverBindingStop (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE Controller,
+ IN UINTN NumberOfChildren,
+ IN EFI_HANDLE *ChildHandleBuffer
+ );
+
+/**
+ Provides a low level access to the registers for the Super I/O.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] Write Specifies the type of the register operation.
+ If this parameter is TRUE, Value is interpreted
+ as an input parameter and the operation is a
+ register write. If this parameter is FALSE,
+ Value is interpreted as an output parameter and
+ the operation is a register read.
+ @param[in] ExitCfgMode Exit Configuration Mode Indicator. If this
+ parameter is set to TRUE, the Super I/O driver
+ will turn off configuration mode of the Super
+ I/O prior to returning from this function. If
+ this parameter is set to FALSE, the Super I/O
+ driver will leave Super I/O in the
+ configuration mode. The Super I/O driver must
+ track the current state of the Super I/O and
+ enable the configuration mode of Super I/O if
+ necessary prior to register access.
+ @param[in] Register Register number.
+ @param[in,out] Value If Write is TRUE, Value is a pointer to the
+ buffer containing the byte of data to be
+ written to the Super I/O register. If Write is
+ FALSE, Value is a pointer to the destination
+ buffer for the byte of data to be read from the
+ Super I/O register.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER The Value is NULL.
+ @retval EFI_INVALID_PARAMETER Invalid Register number.
+
+**/
+EFI_STATUS
+EFIAPI
+SioRegisterAccess (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN BOOLEAN Write,
+ IN BOOLEAN ExitCfgMode,
+ IN UINT8 Register,
+ IN OUT UINT8 *Value
+ );
+
+/**
+ Provides an interface to get a list of the current resources consumed by the
+ device in the ACPI Resource Descriptor format.
+
+ GetResources() returns a list of resources currently consumed by the device.
+ The ResourceList is a pointer to the buffer containing resource descriptors
+ for the device. The descriptors are in the format of Small or Large ACPI
+ resource descriptor as defined by ACPI specification (2.0 & 3.0). The buffer
+ of resource descriptors is terminated with the 'End tag' resource descriptor.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[out] ResourceList A pointer to an ACPI resource descriptor list
+ that defines the current resources used by the
+ device.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceList is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioGetResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ OUT ACPI_RESOURCE_HEADER_PTR *ResourceList
+ );
+
+/**
+ Sets the resources for the device.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] ResourceList Pointer to the ACPI resource descriptor list.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceList is invalid.
+ @retval EFI_ACCESS_DENIED Some of the resources in ResourceList are in
+ use.
+
+**/
+EFI_STATUS
+EFIAPI
+SioSetResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN ACPI_RESOURCE_HEADER_PTR ResourceList
+ );
+
+/**
+ Provides a collection of resource descriptor lists. Each resource descriptor
+ list in the collection defines a combination of resources that can
+ potentially be used by the device.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[out] ResourceCollection Collection of the resource descriptor
+ lists.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER ResourceCollection is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioPossibleResources (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ OUT ACPI_RESOURCE_HEADER_PTR *ResourceCollection
+ );
+
+/**
+ Provides an interface for a table based programming of the Super I/O
+ registers.
+
+ The Modify() function provides an interface for table based programming of
+ the Super I/O registers. This function can be used to perform programming of
+ multiple Super I/O registers with a single function call. For each table
+ entry, the Register is read, its content is bitwise ANDed with AndMask, and
+ then ORed with OrMask before being written back to the Register. The Super
+ I/O driver must track the current state of the Super I/O and enable the
+ configuration mode of Super I/O if necessary prior to table processing. Once
+ the table is processed, the Super I/O device has to be returned to the
+ original state.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] Command A pointer to an array of NumberOfCommands
+ EFI_SIO_REGISTER_MODIFY structures. Each
+ structure specifies a single Super I/O register
+ modify operation.
+ @param[in] NumberOfCommands Number of elements in the Command array.
+
+ @retval EFI_SUCCESS The operation completed successfully.
+ @retval EFI_INVALID_PARAMETER Command is NULL.
+
+**/
+EFI_STATUS
+EFIAPI
+SioModify (
+ IN CONST EFI_SIO_PROTOCOL *This,
+ IN CONST EFI_SIO_REGISTER_MODIFY *Command,
+ IN UINTN NumberOfCommands
+ );
+
+#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
new file mode 100644
index 0000000000..2379f93999
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
@@ -0,0 +1,38 @@
+## @file
+# Produces the SIO Protocols for ISA devices integrated in the Platform
+# Controller Unit (PCU).
+#
+# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PcuSio
+ FILE_GUID = F749DEBC-42E6-4F59-821E-1E94EE9FBBB1
+ MODULE_TYPE = UEFI_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = PcuSioDriverEntryPoint
+
+[Sources]
+ PcuSio.h
+ PcuSio.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ UefiBootServicesTableLib
+ DebugLib
+ ReportStatusCodeLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ DevicePathLib
+ UefiLib
+
+[Protocols]
+ gEfiPciIoProtocolGuid ## TO_START
+ gEfiSioProtocolGuid ## BY_START
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
index 1d90117af6..89923ffec6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
@@ -154,10 +154,6 @@ VOID
InitVlvPlatformPolicy (
);
-VOID
-InitSioPlatformPolicy(
- );
-
VOID
PchInitBeforeBoot(
);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index e8652f2a84..d3f8fa3833 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -36,7 +36,6 @@ [sources.common]
Platform.c
IchRegTable.c
IdccInfo.c
- SioPlatformPolicy.c
IchPlatformPolicy.c
PciDevice.c
SlotConfig.c
@@ -105,7 +104,6 @@ [Protocols]
gEfiSmbiosSlotPopulationGuid
gObservableProtocolGuid
gEfiCk505ClockPlatformInfoGuid
- gEfiLpcWpc83627PolicyProtocolGuid
gEfiTcoResetProtocolGuid
gEfiWatchdogTimerDriverProtocolGuid
gEfiPlatformIdeInitProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/SioPlatformPolicy.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/SioPlatformPolicy.c
deleted file mode 100644
index 32bee75f95..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/SioPlatformPolicy.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
-
- SioPlatformPolicy.c
-
-Abstract:
-
- Sio Platform Policy Setting.
-
-
---*/
-
-#include "PlatformDxe.h"
-#include <Protocol/LpcWpc83627Policy.h>
-
-
-EFI_WPC83627_POLICY_PROTOCOL mSio83627PolicyData = {
- { EFI_WPC83627_COM1_ENABLE, // Com1
- EFI_WPC83627_LPT1_ENABLE, // Lpt1
- EFI_WPC83627_FDD_DISABLE, // Floppy
- EFI_WPC83627_FDD_WRITE_ENABLE, // FloppyWriteProtect
- EFI_WPC83627_RESERVED_DEFAULT, // Port80
- EFI_WPC83627_ECIR_DISABLE, // CIR
- EFI_WPC83627_PS2_KBC_ENABLE, // Ps2Keyboard
- EFI_WPC83627_RESERVED_DEFAULT, // Ps2Mouse
- EFI_WPC83627_COM2_ENABLE, // Com2
- EFI_WPC83627_COM3_ENABLE, // Com3
- EFI_WPC83627_COM4_ENABLE, // Com4
- EFI_WPC83627_RESERVED_DEFAULT, // Dac
- 0x00 // Rsvd
- },
- LptModeEcp, // LptMode
-};
-
-/**
-
- Publish the platform SIO policy setting.
-
- @retval EFI_SUCCESS
-
-**/
-VOID
-InitSioPlatformPolicy(
- )
-{
-
- EFI_HANDLE Handle;
- EFI_STATUS Status;
-
- Handle = NULL;
-
- if((mSystemConfiguration.Serial) || (mBoardFeatures & B_BOARD_FEATURES_SIO_NO_COM1)) {
- mSio83627PolicyData.DeviceEnables.Com1 = EFI_WPC83627_COM1_DISABLE;
- }
-
- if((mSystemConfiguration.Serial2) || ((mBoardFeatures & B_BOARD_FEATURES_SIO_COM2)==0)) {
- mSio83627PolicyData.DeviceEnables.Com2 = EFI_WPC83627_COM2_DISABLE;
- }
-
- mSio83627PolicyData.LptMode = mSystemConfiguration.ParallelMode;
- if((!mSystemConfiguration.Parallel) || (mBoardFeatures & B_BOARD_FEATURES_SIO_NO_PARALLEL)) {
- mSio83627PolicyData.DeviceEnables.Lpt1 = EFI_WPC83627_LPT1_DISABLE;
- }
-
- Status = gBS->InstallProtocolInterface (
- &Handle,
- &gEfiLpcWpc83627PolicyProtocolGuid,
- EFI_NATIVE_INTERFACE,
- &mSio83627PolicyData
- );
- ASSERT_EFI_ERROR(Status);
-
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index 9951aa4a58..786b4f6e91 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -66,7 +66,6 @@ [Protocols]
gEfiSmbiosSlotPopulationGuid = { 0xef7bf7d6, 0xf8ff, 0x4a76, { 0x82, 0x47, 0xc0, 0xd0, 0xd1, 0xcc, 0x49, 0xc0 } }
gObservableProtocolGuid = { 0xe227c522, 0xd5fe, 0x4a53, { 0x87, 0xb1, 0x0f, 0xbe, 0x57, 0x0f, 0x98, 0xe9 } }
gEfiCk505ClockPlatformInfoGuid = { 0x3c485ea4, 0x449a, 0x46ce, { 0xbb, 0x08, 0x2a, 0x33, 0x6e, 0xa9, 0x6b, 0x4e } }
- gEfiLpcWpc83627PolicyProtocolGuid = { 0xd3ecc567, 0x9fd5, 0x44c1, { 0x86, 0xcf, 0x5d, 0xa7, 0xa2, 0x4f, 0x4b, 0x5d } }
gEfiTcoResetProtocolGuid = { 0xa6a79162, 0xe325, 0x4c30, { 0xbc, 0xc3, 0x59, 0x37, 0x30, 0x64, 0xef, 0xb3 } }
gEfiWatchdogTimerDriverProtocolGuid = { 0xd5b06d16, 0x2ea1, 0x4def, { 0x98, 0xd0, 0xa0, 0x5d, 0x40, 0x72, 0x84, 0x17 } }
gEfiPlatformIdeInitProtocolGuid = { 0x377c66a3, 0x8fe7, 0x4ee8, { 0x85, 0xb8, 0xf1, 0xa2, 0x82, 0x56, 0x9e, 0x3b } }
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index 87b905c95b..3165be1fca 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -535,7 +535,7 @@ [FV.FVMAIN]
#
INF Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
!if $(SOURCE_DEBUG_ENABLE) != TRUE
-INF IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
+INF MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
!endif
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index 110efe28c3..03941dd23e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -481,7 +481,7 @@ [FV.FVMAIN]
#
INF Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
!if $(SOURCE_DEBUG_ENABLE) != TRUE
-INF IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
+INF MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
!endif
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.c b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.c
deleted file mode 100644
index f98265761b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- LpcDriver.c
-
-Abstract:
-
- EFI Lpc Driver for a Generic PC Platform
-
-
-
---*/
-
-#include "LpcDriver.h"
-#include "IndustryStandard/Pci22.h"
-
-//
-// This driver is for ACPI(PNP0A03,0)/PCI(0x1f,0)
-//
-
-//
-// Lpc Driver Global Variables
-//
-
-EFI_DRIVER_BINDING_PROTOCOL gLpcDriver = {
- LpcDriverSupported,
- LpcDriverStart,
- LpcDriverStop,
- 0x10,
- NULL,
- NULL
-};
-
-LPC_DEV mLpc = {
- LPC_DEV_SIGNATURE,
- NULL,
- {
- IsaDeviceEnumerate,
- IsaDeviceSetPower,
- IsaGetCurrentResource,
- IsaGetPossibleResource,
- IsaSetResource,
- IsaEnableDevice,
- IsaInitDevice,
- LpcInterfaceInit
- },
- NULL
-};
-
-BOOLEAN InitExecuted = FALSE;
-
-/**
- the entry point of the Lpc driver
-
-**/
-EFI_STATUS
-EFIAPI
-LpcDriverEntryPoint(
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
-
-
- return EfiLibInstallDriverBinding (ImageHandle, SystemTable, &gLpcDriver, ImageHandle);
-}
-
-/**
-
- ControllerDriver Protocol Method
-
-**/
-EFI_STATUS
-EFIAPI
-LpcDriverSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_PCI_IO_PROTOCOL *PciIo;
- EFI_DEVICE_PATH_PROTOCOL *IsaBridgeDevicePath;
-
- ACPI_HID_DEVICE_PATH *AcpiNode;
- PCI_DEVICE_PATH *PciNode;
- PCI_TYPE00 Pci;
-
- //
- // Get the ISA bridge's Device Path and test it
- // the following code is specific
- //
- Status = gBS->OpenProtocol (
- Controller,
- &gEfiDevicePathProtocolGuid,
- (VOID **)&IsaBridgeDevicePath,
- This->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_BY_DRIVER
- );
-
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- Status = EFI_SUCCESS;
- AcpiNode = (ACPI_HID_DEVICE_PATH *)IsaBridgeDevicePath;
- if (AcpiNode->Header.Type != ACPI_DEVICE_PATH ||
- AcpiNode->Header.SubType != ACPI_DP ||
- DevicePathNodeLength (&AcpiNode->Header) != sizeof(ACPI_HID_DEVICE_PATH) ||
- AcpiNode -> HID != EISA_PNP_ID(0x0A03) ||
- AcpiNode -> UID != 0 ) {
- Status = EFI_UNSUPPORTED;
- } else {
- //
- // Get the next node
- //
- IsaBridgeDevicePath = NextDevicePathNode (IsaBridgeDevicePath);
- PciNode = (PCI_DEVICE_PATH *)IsaBridgeDevicePath;
- if (PciNode->Header.Type != HARDWARE_DEVICE_PATH ||
- PciNode->Header.SubType != HW_PCI_DP ||
- DevicePathNodeLength (&PciNode->Header) != sizeof (PCI_DEVICE_PATH) ||
- PciNode -> Function != 0x00 ||
- PciNode -> Device != 0x1f ) {
- Status = EFI_UNSUPPORTED;
- }
- }
-
- gBS->CloseProtocol (
- Controller,
- &gEfiDevicePathProtocolGuid,
- This->DriverBindingHandle,
- Controller
- );
-
- if (EFI_ERROR (Status)) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Get PciIo protocol instance
- //
- Status = gBS->OpenProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- (VOID **)&PciIo,
- This->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_BY_DRIVER
- );
-
- if (EFI_ERROR(Status)) {
- return Status;
- }
-
- Status = PciIo->Pci.Read (
- PciIo,
- EfiPciIoWidthUint32,
- 0,
- sizeof(Pci) / sizeof(UINT32),
- &Pci
- );
-
- if (!EFI_ERROR (Status)) {
- Status = EFI_SUCCESS; //TODO: force return success as temp solution EFI_UNSUPPORTED;
- if ((Pci.Hdr.Command & 0x03) == 0x03) {
- if (Pci.Hdr.ClassCode[2] == PCI_CLASS_BRIDGE) {
- //
- // See if this is a standard PCI to ISA Bridge from the Base Code
- // and Class Code
- //
- if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA) {
- Status = EFI_SUCCESS;
- } else {
- }
-
- //
- // See if this is an Intel PCI to ISA bridge in Positive Decode Mode
- //
- if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE &&
- Pci.Hdr.VendorId == 0x8086 &&
- Pci.Hdr.DeviceId == 0x7110) {
- Status = EFI_SUCCESS;
- } else {
- }
- } else {
- }
- }
- else {
- }
- }
-
- gBS->CloseProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- This->DriverBindingHandle,
- Controller
- );
- return Status;
-}
-
-
-/**
- Install EFI_ISA_ACPI_PROTOCOL
-
-**/
-EFI_STATUS
-EFIAPI
-LpcDriverStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_PCI_IO_PROTOCOL *PciIo;
-
- //
- // Get Pci IO
- //
- Status = gBS->OpenProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- (VOID **)&PciIo,
- This->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_BY_DRIVER
- );
-
- if (EFI_ERROR (Status) && Status != EFI_ALREADY_STARTED) {
- return Status;
- }
-
- mLpc.PciIo = PciIo;
-
- //
- // Install IsaAcpi interface, the Sio interface is not installed!
- //
- Status = gBS->InstallMultipleProtocolInterfaces (
- &Controller,
- &gEfiIsaAcpiProtocolGuid,
- &mLpc.IsaAcpi,
- NULL
- );
- return Status;
-}
-
-
-EFI_STATUS
-EFIAPI
-LpcDriverStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- )
-{
- EFI_STATUS Status;
- EFI_ISA_ACPI_PROTOCOL *IsaAcpi;
- LPC_DEV *LpcDev;
-
- //
- // Get EFI_ISA_ACPI_PROTOCOL interface
- //
- Status = gBS->OpenProtocol (
- Controller,
- &gEfiIsaAcpiProtocolGuid,
- (VOID **)&IsaAcpi,
- This->DriverBindingHandle,
- Controller,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- LpcDev = LPC_ISA_ACPI_FROM_THIS (IsaAcpi);
-
- //
- // Uninstall protocol interface: EFI_ISA_ACPI_PROTOCOL
- //
- Status = gBS->UninstallProtocolInterface (
- Controller,
- &gEfiIsaAcpiProtocolGuid,
- &LpcDev->IsaAcpi
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- gBS->CloseProtocol (
- Controller,
- &gEfiPciIoProtocolGuid,
- This->DriverBindingHandle,
- Controller
- );
-
- return EFI_SUCCESS;
-}
-
-VOID
-LpcIoRead8 (
- IN UINT16 Port,
- OUT UINT8 *Data
- )
-{
- mLpc.PciIo->Io.Read(
- mLpc.PciIo,
- EfiPciWidthUint8,
- EFI_PCI_IO_PASS_THROUGH_BAR,
- Port,
- 1,
- Data
- );
-}
-
-VOID
-LpcIoWrite8 (
- IN UINT16 Port,
- IN UINT8 Data
- )
-{
- mLpc.PciIo->Io.Write(
- mLpc.PciIo,
- EfiPciWidthUint8,
- EFI_PCI_IO_PASS_THROUGH_BAR,
- Port,
- 1,
- &Data
- );
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.h b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.h
deleted file mode 100644
index 5e264485e7..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- LpcDriver.h
-
-Abstract:
-
- EFI Lpc Driver for a Generic PC Platform
-
-
-
---*/
-
-#ifndef _LPC_DRIVER_H
-#define _LPC_DRIVER_H
-
- #include "LpcSio.h"
- #include "LpcIsaAcpi.h"
-
-#include "Protocol/IsaAcpi.h"
-#include "Protocol/PciIo.h"
-#include "Protocol/DriverBinding.h"
-#include "Library/UefiBootServicesTableLib.h"
-#include "IsaAcpiDxe/PcatIsaAcpi.h"
-#include "IndustryStandard/Pci22.h"
-#include "Protocol/LpcWpce791Policy.h"
-
-#include <Library/DebugLib.h>
-
-#define ICH_LPC_BRIDGE_BUS_DEV_FUNC 0x1F0000
-
-//
-// LPC device private data structure
-//
-//#define LPC_DEV_SIGNATURE 'W87X'
-#define LPC_DEV_SIGNATURE SIGNATURE_32('X', '7', '8', 'W') //'W87X'
-#define EFI_WPCE791_PS2_KEYBOARD_ENABLE 0x01
-#define EFI_WPCE791_PS2_KEYBOARD_DISABLE 0x00
-
-#define EFI_WPCE791_PS2_MOUSE_ENABLE 0x01
-#define EFI_WPCE791_PS2_MOUSE_DISABLE 0x00
-
-
-
-typedef struct {
- UINTN Signature;
- EFI_HANDLE Handle;
- EFI_ISA_ACPI_PROTOCOL IsaAcpi;
- EFI_PCI_IO_PROTOCOL *PciIo;
-
-} LPC_DEV;
-
-#define LPC_ISA_ACPI_FROM_THIS(a) BASE_CR (a, LPC_DEV, IsaAcpi)
-
-//
-// Driver entry point
-//
-EFI_STATUS
-EFIAPI
-LpcDriverEntryPoint (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- );
-
-//
-// Prototypes for Driver model protocol interface
-//
-EFI_STATUS
-EFIAPI
-LpcDriverSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- );
-
-EFI_STATUS
-EFIAPI
-LpcDriverStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- );
-
-EFI_STATUS
-EFIAPI
-LpcDriverStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
-
-VOID
-LpcIoRead8 (
- IN UINT16 Port,
- OUT UINT8 *Data
- );
-
-VOID
-LpcIoWrite8 (
- IN UINT16 Port,
- IN UINT8 Data
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c
deleted file mode 100644
index 9c0b79b15c..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- LpcIsaAcpi.c
-
-Abstract: IsaAcpi implementation
-
-
-
---*/
-
-#include "LpcDriver.h"
-
-//
-// PS/2 Keyboard Controller
-//
-static EFI_ISA_ACPI_RESOURCE mLpcWpce791Ps2KeyboardDeviceResources[] = {
- {EfiIsaAcpiResourceIo, 0, 0x60, 0x64},
- {EfiIsaAcpiResourceInterrupt, 0, 1, 0},
- {EfiIsaAcpiResourceEndOfList, 0, 0, 0}
-};
-
-//
-// PS/2 Mouse Controller
-//
-static EFI_ISA_ACPI_RESOURCE mLpcWpce791Ps2MouseDeviceResources[] = {
- {EfiIsaAcpiResourceIo, 0, 0x60, 0x64},
- {EfiIsaAcpiResourceInterrupt, 0, 12, 0},
- {EfiIsaAcpiResourceEndOfList, 0, 0, 0}
-};
-
-//
-// COM
-//
-static EFI_ISA_ACPI_RESOURCE mLpcWpce791ComDeviceResources[] = {
- {EfiIsaAcpiResourceIo, 0, 0x3f8, 0x3ff},
- {EfiIsaAcpiResourceInterrupt, 0, 4, 0},
- {EfiIsaAcpiResourceEndOfList, 0, 0, 0}
-};
-
-//
-// Table of ISA Controllers
-//
-EFI_ISA_ACPI_RESOURCE_LIST mLpcWpce791DeviceList[] = {
- {{EISA_PNP_ID(0x303), 0}, mLpcWpce791Ps2KeyboardDeviceResources }, // PS/2 Keyboard Controller
- {{EISA_PNP_ID(0xF03), 0}, mLpcWpce791Ps2MouseDeviceResources }, // PS/2 Mouse Controller
- {{EISA_PNP_ID(0x501), 0}, mLpcWpce791ComDeviceResources }, // COM
- {{0, 0}, NULL } // End
-};
-
-static ICH_DMA_INIT mIchDmaInitTable [] = {
-//
-//Register OFFSET, Value
-//
-
- 0x0D8, 0x000, // Reset DMA Controller 2
- 0x0D0, 0x000, // Enable DMA controller 2
- 0x00C, 0x000, // Reset DMA Controller 1
- 0x008, 0x000, // Enable DMA controller 1
-
- //
- // Channel 4
- //
- 0x0D6, 0x0c0, // DMA contr. 2 Cascade mode, addr. increment, disable auto init.
- 0x0D2, 0x000, // Clear write request register
- 0x0d4, 0x000, // Enable DREQs for channel
-
- //
- // Channel 0
- //
- 0x00B, 0x040, // DMA contr. 1 single mode, addr. increment, disable auto init.
- 0x009, 0x000, // Clear write request register
- 0x00A, 0x000, // Enable DREQs for channel
-
- //
- // Channel 1
- //
- 0x00B, 0x041, // DMA contr. 1 single mode, addr. increment, disable auto init.
- 0x009, 0x001, // Clear write request register
- 0x00A, 0x001, // Enable DREQs for channel
-
- //
- // Channel 2
- //
- 0x00B, 0x042, // DMA contr. 1 single mode, addr. increment, disable auto init.
- 0x009, 0x002, // Clear write request register
- 0x00A, 0x002, // Enable DREQs for channel
-
- //
- // Channel 3
- //
- 0x00B, 0x043, // DMA contr. 1 single mode, addr. increment, disable auto init.
- 0x009, 0x003, // Clear write request register
- 0x00A, 0x003, // Enable DREQs for channel
-
- //
- // Channel 5
- //
- 0x0D6, 0x041, // DMA contr. 2 single mode, addr. increment, disable auto init.
- 0x0D2, 0x001, // Clear write request register
- 0x0D4, 0x001, // Enable DREQs for channel
-
- //
- // Channel 6
- //
- 0x0D6, 0x042, // DMA contr. 2 single mode, addr. increment, disable auto init.
- 0x0D2, 0x002, // Clear write request register
- 0x0D4, 0x002, // Enable DREQs for channel
-
- //
- // Channel 7
- //
- 0x0D6, 0x043, // DMA contr. 2 single mode, addr. increment, disable auto init.
- 0x0D2, 0x003, // Clear write request register
- 0x0D4, 0x003 // Enable DREQs for channel
-
-};
-
-//
-// ISA ACPI Protocol Functions
-//
-/**
-
- Enumerate the ISA devices on the ISA bus
-
-**/
-VOID
-IsaDeviceLookup (
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **IsaAcpiDevice,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **NextIsaAcpiDevice
- )
-{
- UINTN Index;
-
- *IsaAcpiDevice = NULL;
- if (NextIsaAcpiDevice != NULL) {
- *NextIsaAcpiDevice = NULL;
- }
- if (Device == NULL) {
- Index = 0;
- } else {
- for(Index = 0; mLpcWpce791DeviceList[Index].Device.HID != 0; Index++) {
- if (Device->HID == mLpcWpce791DeviceList[Index].Device.HID &&
- Device->UID == mLpcWpce791DeviceList[Index].Device.UID ) {
- break;
- }
- }
- if (mLpcWpce791DeviceList[Index].Device.HID == 0) {
- return;
- }
- *IsaAcpiDevice = &(mLpcWpce791DeviceList[Index]);
- Index++;
- }
- if (NextIsaAcpiDevice != NULL && mLpcWpce791DeviceList[Index].Device.HID != 0){
- *NextIsaAcpiDevice = &(mLpcWpce791DeviceList[Index]);
- }
-}
-
-
-/**
- Enumerate the ISA devices on the ISA bus
- It is hard code now and future it will get from ACPI table
-
-**/
-EFI_STATUS
-EFIAPI
-IsaDeviceEnumerate (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- OUT EFI_ISA_ACPI_DEVICE_ID **Device
- )
-{
- EFI_ISA_ACPI_RESOURCE_LIST *IsaAcpiDevice;
- EFI_ISA_ACPI_RESOURCE_LIST *NextIsaAcpiDevice;
-
- IsaDeviceLookup (*Device, &IsaAcpiDevice, &NextIsaAcpiDevice);
- if (NextIsaAcpiDevice == NULL) {
- return EFI_NOT_FOUND;
- }
- *Device = &(NextIsaAcpiDevice->Device);
- return EFI_SUCCESS;
-}
-
-/**
- Set ISA device power use sio
-
-**/
-EFI_STATUS
-EFIAPI
-IsaDeviceSetPower (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN BOOLEAN OnOff
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-
-/**
- Get current Resource of the specific ISA device
- It is hardcode now and future will get from ACPI table
-
-**/
-EFI_STATUS
-EFIAPI
-IsaGetCurrentResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList
- )
-{
- IsaDeviceLookup (Device, ResourceList, NULL);
- if (*ResourceList == NULL || (*ResourceList)->ResourceItem == NULL) {
- return EFI_NOT_FOUND;
- }
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-IsaGetPossibleResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList
- )
-{
- //
- // Not supported yet
- //
- return EFI_UNSUPPORTED;
-}
-
-
-EFI_STATUS
-EFIAPI
-IsaSetResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN EFI_ISA_ACPI_RESOURCE_LIST *ResourceList
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-EFI_STATUS
-EFIAPI
-IsaEnableDevice (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN BOOLEAN Enable
- )
-{
-
- return EFI_UNSUPPORTED;
-}
-
-/**
-
- Clear out Resource List if device is set to disable by platform policy
-
-**/
-VOID
-EmptyResourceList (
- IN UINT32 DeviceHid
- )
-{
- UINT8 Index;
- for (Index = 0; mLpcWpce791DeviceList[Index].Device.HID != 0; Index++) {
- if (DeviceHid == mLpcWpce791DeviceList[Index].Device.HID) {
- mLpcWpce791DeviceList[Index].ResourceItem = NULL;
- }
- }
- return;
-}
-
-/**
-
- Clear out Resource List if device is set to disable by platform policy
-
-**/
-VOID
-EmptyResourceListHidUid (
- IN UINT32 DeviceHid,
- IN UINT32 DeviceUid
- )
-{
- UINT8 Index;
- for (Index = 0; mLpcWpce791DeviceList[Index].Device.HID != 0; Index++) {
- if ((DeviceHid == mLpcWpce791DeviceList[Index].Device.HID) &&
- (DeviceUid == mLpcWpce791DeviceList[Index].Device.UID)) {
- mLpcWpce791DeviceList[Index].ResourceItem = NULL;
- }
- }
- return;
-}
-
-EFI_STATUS
-EFIAPI
-IsaInitDevice (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device
- )
-{
- EFI_WPCE791_POLICY_PROTOCOL *LpcWpce791Policy;
- EFI_STATUS Status;
-
- //
- // Disable configuration according to platform protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiLpcWpce791PolicyProtocolGuid,
- NULL,
- (VOID **) &LpcWpce791Policy
- );
- if (!EFI_ERROR(Status)) {
- if (LpcWpce791Policy->DeviceEnables.Ps2Keyboard == EFI_WPCE791_PS2_KEYBOARD_DISABLE) {
- EmptyResourceList(EISA_PNP_ID(0x303));
- DisableLogicalDevice (SIO_KEYBOARD);
- EmptyResourceList(EISA_PNP_ID(0xF03));
- DisableLogicalDevice (SIO_KEYBOARD);
- }
- if (LpcWpce791Policy->DeviceEnables.Ps2Mouse == EFI_WPCE791_PS2_MOUSE_DISABLE) {
- EmptyResourceList(EISA_PNP_ID(0xF03));
- DisableLogicalDevice (SIO_MOUSE);
- }
- }
-
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-LpcInterfaceInit (
- IN EFI_ISA_ACPI_PROTOCOL *This
- )
-{
- EFI_PCI_IO_PROTOCOL *PciIo;
- UINTN Index;
-
- PciIo = (LPC_ISA_ACPI_FROM_THIS (This))->PciIo;
-
- //
- // DMA controller initialize
- //
- for (Index=0; Index < (sizeof(mIchDmaInitTable)/sizeof(ICH_DMA_INIT)); Index++) {
- PciIo->Io.Write (
- PciIo,
- EfiPciIoWidthUint8,
- EFI_PCI_IO_PASS_THROUGH_BAR,
- mIchDmaInitTable[Index].Register,
- 1,
- &mIchDmaInitTable[Index].Value
- );
- }
-
- return EFI_SUCCESS;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h
deleted file mode 100644
index 2291fd2c1d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- LpcIsaAcpi.h
-
-Abstract:
-
- Isa Acpi interface
-
-
-
---*/
-
-#ifndef _LPC_ISA_ACPI_H
-#define _LPC_ISA_ACPI_H
-
-
-
-#include "Protocol/IsaAcpi.h"
-#include "Library/DevicePathLib.h"
-
-
-typedef struct {
- UINT8 Register;
- UINT8 Value;
-} ICH_DMA_INIT;
-
-//
-// Prototypes for the ISA ACPI protocol interface
-//
-EFI_STATUS
-EFIAPI
-IsaDeviceEnumerate (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- OUT EFI_ISA_ACPI_DEVICE_ID **Device
- );
-
-EFI_STATUS
-EFIAPI
-IsaDeviceSetPower (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN BOOLEAN OnOff
- );
-
-EFI_STATUS
-EFIAPI
-IsaGetCurrentResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList
- );
-
-EFI_STATUS
-EFIAPI
-IsaGetPossibleResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList
- );
-
-EFI_STATUS
-EFIAPI
-IsaSetResource (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN EFI_ISA_ACPI_RESOURCE_LIST *ResourceList
- );
-
-EFI_STATUS
-EFIAPI
-IsaEnableDevice (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device,
- IN BOOLEAN Enable
- );
-
-EFI_STATUS
-EFIAPI
-IsaInitDevice (
- IN EFI_ISA_ACPI_PROTOCOL *This,
- IN EFI_ISA_ACPI_DEVICE_ID *Device
- );
-
-EFI_STATUS
-EFIAPI
-LpcInterfaceInit (
- IN EFI_ISA_ACPI_PROTOCOL *This
-);
-
-VOID
-EmptyResourceList (
- IN UINT32 DeviceHid
-);
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c
deleted file mode 100644
index f23e48ccf2..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
-Module Name:
-
- LpcSio.c
-
-Abstract: Sio implementation
-
-Revision History
-
---*/
-
-#include "LpcDriver.h"
-#include <Library/S3BootScriptLib.h>
-
-VOID
-WriteRegister (
- IN UINT8 Index,
- IN UINT8 Data
- );
-
-typedef struct {
- UINT8 Register;
- UINT8 Value;
-} EFI_SIO_TABLE;
-
-EFI_SIO_TABLE mSioTable[] = {
- //
- // Init keyboard controller
- //
- { REG_LOGICAL_DEVICE, SIO_KEYBOARD },
- { BASE_ADDRESS_HIGH, 0x00 },
- { BASE_ADDRESS_LOW, 0x60 },
- { BASE_ADDRESS_HIGH2, 0x00 },
- { BASE_ADDRESS_LOW2, 0x64 },
- { PRIMARY_INTERRUPT_SELECT, 0x01 },
- { ACTIVATE, 0x1 },
-
- //
- // Init Mouse controller
- //
- { REG_LOGICAL_DEVICE, SIO_MOUSE },
- { BASE_ADDRESS_HIGH, 0x00 },
- { BASE_ADDRESS_LOW, 0x60 },
- { BASE_ADDRESS_HIGH2, 0x00 },
- { BASE_ADDRESS_LOW2, 0x64 },
- { PRIMARY_INTERRUPT_SELECT, 0x0c },
- { ACTIVATE, 0x1 },
-
- { REG_LOGICAL_DEVICE, SIO_COM },
- { BASE_ADDRESS_HIGH, 0x03 },
- { BASE_ADDRESS_LOW, 0xf8 },
- { PRIMARY_INTERRUPT_SELECT, 0x04 },
- { ACTIVATE, 0x1 },
-
-
-};
-
-VOID
-LPCWPCE791SetDefault ()
-{
- UINT8 Index;
-
- for (Index = 0; Index < sizeof(mSioTable)/sizeof(EFI_SIO_TABLE); Index++) {
- WriteRegisterAndSaveToScript (mSioTable[Index].Register, mSioTable[Index].Value);
- }
-
- return;
-}
-
-VOID
-DisableLogicalDevice (
- UINT8 DeviceId
- )
-{
- WriteRegisterAndSaveToScript (REG_LOGICAL_DEVICE, DeviceId);
- WriteRegisterAndSaveToScript (ACTIVATE, 0);
- WriteRegisterAndSaveToScript (BASE_ADDRESS_HIGH, 0);
- WriteRegisterAndSaveToScript (BASE_ADDRESS_LOW, 0);
-
- return;
-}
-
-VOID
-WriteRegister (
- IN UINT8 Index,
- IN UINT8 Data
- )
-{
- LpcIoWrite8(CONFIG_PORT, Index);
- LpcIoWrite8(DATA_PORT, Data);
-
- return;
-}
-
-VOID
-WriteRegisterAndSaveToScript (
- IN UINT8 Index,
- IN UINT8 Data
- )
-{
- UINT8 Buffer[2];
-
- LpcIoWrite8(CONFIG_PORT, Index);
- LpcIoWrite8(DATA_PORT, Data);
-
- Buffer[0] = Index;
- Buffer[1] = Data;
- S3BootScriptSaveIoWrite (
- EfiBootScriptWidthUint8,
- INDEX_PORT,
- 2,
- Buffer
- );
-
- return;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h
deleted file mode 100644
index 52c1499e3d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- LpcSio.h
-
-Abstract:
-
- Lpc driver's sio interface
-
-
-
---*/
-
-#ifndef _LPC_SIO_H
-#define _LPC_SIO_H
-
-#include "Protocol/PciRootBridgeIo.h"
-
-#define VARSIOINSTALLED L"VarSIOProcotolInstalled"
-
-//
-// Port address
-//
-#define CONFIG_PORT 0x04E
-#define INDEX_PORT 0x04E
-#define DATA_PORT INDEX_PORT + 1
-
-//
-// Logical Device
-//
-#define SIO_COM 0x3
-#define SIO_MSWC 0x4
-#define SIO_MOUSE 0x5
-#define SIO_KEYBOARD 0x6
-#define SIO_SHM 0xF
-#define SIO_PM1 0x11
-#define SIO_PM2 0x12
-#define SIO_PM3 0x17
-#define SIO_ESHM 0x1D
-
-//
-// Global register
-//
-#define REG_LOGICAL_DEVICE 0x07
-#define REG_DEVICE_ID 0x20
-#define SIO_CONFIG_1 0x21
-#define REG_CHIP_REV 0x24
-#define SIO_CONFIG_5 0x25
-#define SIO_CONFIG_6 0x26
-#define REG_DEVICE_REV 0x27
-#define SIO_CONFIG_9 0x29
-#define SIO_CONFIG_D 0x2D
-
-#define ACTIVATE 0x30
-#define BASE_ADDRESS_HIGH 0x60
-#define BASE_ADDRESS_LOW 0x61
-#define BASE_ADDRESS_HIGH2 0x62
-#define BASE_ADDRESS_LOW2 0x63
-#define PRIMARY_INTERRUPT_SELECT 0x70
-#define DMA_CHANNEL_SELECT 0x74
-
-EFI_STATUS
-InitializeLpcSio (
- IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *RootBridgeIo
- );
-
-//
-// Prototypes for the sio internal function
-//
-//
-// Internal function
-//
-VOID
-LPCWPCE791SetDefault (
- VOID
- );
-
-VOID
-WriteRegisterAndSaveToScript (
- IN UINT8 Index,
- IN UINT8 Data
- );
-
-VOID
-FloppyWriteProtect (
- VOID
- );
-
-VOID
-DisableLogicalDevice (
- UINT8 DeviceId
- );
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/Wpce791.inf b/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/Wpce791.inf
deleted file mode 100644
index 5fd458e265..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Wpce791/Wpce791.inf
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-#
-# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-# Module Name:
-#
-# SiO791.inf
-#
-# Abstract:
-#
-# Component description file for SIO791 module.
-#
---*/
-
-[defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SIO791
- FILE_GUID = 04A76C80-06B9-445e-B73E-CB8C61A6A964
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- ENTRY_POINT = LpcDriverEntryPoint
-
-[sources.common]
- LpcIsaAcpi.h
- LpcSio.h
- LpcDriver.h
- LpcIsaAcpi.c
- LpcSio.c
- LpcDriver.c
-
-[Packages]
- MdePkg/MdePkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
- PcAtChipsetPkg/PcAtChipsetPkg.dec
-
-
-[LibraryClasses]
- UefiDriverEntryPoint
- UefiBootServicesTableLib
- DevicePathLib
- UefiLib
- S3BootScriptLib
- DebugLib
-
-[Ppis]
-
-[Protocols]
- gEfiPciIoProtocolGuid
- gEfiIsaAcpiProtocolGuid
- gEfiLpcWpce791PolicyProtocolGuid
-
-[Guids]
-
-[Depex]
- TRUE
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 05/14] Vlv2TbltDevicePkg: Switch to CPU I/O 2 Protocol
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (3 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 04/14] Vlv2TbltDevicePkg: Switch from ISA to SIO modules Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:07 ` Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 06/14] Vlv2TbltDevicePkg: Remove use of PS/2 Policy Protocol Michael D Kinney
` (9 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
* Remove unused references to CPU I/O Protocol defined in
IntelFrameworkPkg
* Convert valid usage of CPU I/O Protocol to the CPU I/O 2
Protocol
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../AcpiPlatform/AcpiPlatform.c | 47 ---------------
.../AcpiPlatform/AcpiPlatform.h | 1 -
.../AcpiPlatform/AcpiPlatform.inf | 4 +-
.../Include/Library/EfiRegTableLib.h | 40 ++-----------
.../Library/EfiRegTableLib/EfiRegTableLib.c | 57 ++-----------------
.../PciPlatform/PciPlatform.c | 7 +--
.../PciPlatform/PciPlatform.inf | 1 -
.../PlatformCpuInfoDxe/PlatformCpuInfoDxe.c | 8 +--
.../PlatformDxe/IchRegTable.c | 8 +--
.../Vlv2TbltDevicePkg/PlatformDxe/Platform.c | 4 +-
.../PlatformDxe/PlatformDxe.h | 4 +-
.../PlatformDxe/PlatformDxe.inf | 1 -
.../PlatformGopPolicy/PlatformGopPolicy.inf | 3 +-
.../PlatformInitPei/PchInitPeim.c | 10 +---
.../PlatformSetupDxe/PlatformSetupDxe.inf | 1 -
.../PlatformSetupDxe/SetupInfoRecords.c | 1 -
.../Vlv2TbltDevicePkg/PlatformSmm/Platform.c | 1 -
.../PlatformSmm/PlatformSmm.inf | 1 -
.../SmBiosMiscDxe/MiscOemType0x94Function.c | 2 -
.../VlvPlatformInitDxe/IgdOpRegion.c | 6 +-
.../VlvPlatformInitDxe/VlvPlatformInitDxe.inf | 4 +-
21 files changed, 30 insertions(+), 181 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
index 1f4d575b73..cb280764b3 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
@@ -34,7 +34,6 @@ Abstract:
#include <Guid/GlobalVariable.h>
#include <Guid/SetupVariable.h>
#include <Guid/PlatformInfo.h>
-#include <Protocol/CpuIo.h>
#include <Guid/BoardFeatures.h>
#include <Protocol/AcpiSupport.h>
#include <Protocol/AcpiS3Save.h>
@@ -54,7 +53,6 @@ CHAR16 gACPIOSFRModelStringVariableName[] = ACPI_OSFR_MODEL_STRING_VARIABLE_N
CHAR16 gACPIOSFRRefDataBlockVariableName[] = ACPI_OSFR_REF_DATA_BLOCK_VARIABLE_NAME;
CHAR16 gACPIOSFRMfgStringVariableName[] = ACPI_OSFR_MFG_STRING_VARIABLE_NAME;
-EFI_CPU_IO_PROTOCOL *mCpuIo;
EFI_GLOBAL_NVS_AREA_PROTOCOL mGlobalNvsArea;
#ifndef __GNUC__
#pragma optimize("", off)
@@ -776,7 +774,6 @@ AcpiPlatformEntryPoint (
EFI_HANDLE Handle;
EFI_PS2_POLICY_PROTOCOL *Ps2Policy;
EFI_PEI_HOB_POINTERS GuidHob;
- UINT8 PortData;
EFI_MP_SERVICES_PROTOCOL *MpService;
UINTN MaximumNumberOfCPUs;
UINTN NumberOfEnabledCPUs;
@@ -1132,53 +1129,9 @@ AcpiPlatformEntryPoint (
//
// SIO related option.
//
- Status = gBS->LocateProtocol (&gEfiCpuIoProtocolGuid, NULL, (void **)&mCpuIo);
- ASSERT_EFI_ERROR (Status);
-
mGlobalNvsArea.Area->WPCN381U = GLOBAL_NVS_DEVICE_DISABLE;
-
mGlobalNvsArea.Area->DockedSioPresent = GLOBAL_NVS_DEVICE_DISABLE;
- if (mGlobalNvsArea.Area->DockedSioPresent != GLOBAL_NVS_DEVICE_ENABLE) {
- //
- // Check ID for SIO WPCN381U.
- //
- Status = mCpuIo->Io.Read (
- mCpuIo,
- EfiCpuIoWidthUint8,
- WPCN381U_CONFIG_INDEX,
- 1,
- &PortData
- );
- ASSERT_EFI_ERROR (Status);
- if (PortData != 0xFF) {
- PortData = 0x20;
- Status = mCpuIo->Io.Write (
- mCpuIo,
- EfiCpuIoWidthUint8,
- WPCN381U_CONFIG_INDEX,
- 1,
- &PortData
- );
- ASSERT_EFI_ERROR (Status);
- Status = mCpuIo->Io.Read (
- mCpuIo,
- EfiCpuIoWidthUint8,
- WPCN381U_CONFIG_DATA,
- 1,
- &PortData
- );
- ASSERT_EFI_ERROR (Status);
- if ((PortData == WPCN381U_CHIP_ID) || (PortData == WDCP376_CHIP_ID)) {
- mGlobalNvsArea.Area->WPCN381U = GLOBAL_NVS_DEVICE_ENABLE;
- mGlobalNvsArea.Area->OnboardCom = GLOBAL_NVS_DEVICE_ENABLE;
- mGlobalNvsArea.Area->OnboardComCir = GLOBAL_NVS_DEVICE_DISABLE;
- }
- }
- }
-
-
-
//
// Get Ps2 policy to set. Will be use if present.
//
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
index f45590ea24..b27ca661ff 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
@@ -36,7 +36,6 @@ Abstract:
#include <IndustryStandard/Acpi.h>
#include <Protocol/AcpiSystemDescriptionTable.h>
#include <Protocol/MpService.h>
-#include <Protocol/CpuIo.h>
#include <IndustryStandard/Acpi30.h>
#include <IndustryStandard/Acpi20.h>
#include <Library/HobLib.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
index 817ad58a81..ce4db9fa85 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
@@ -79,6 +79,4 @@ [Depex]
gEfiVariableArchProtocolGuid AND
gEfiVariableWriteArchProtocolGuid AND
gEfiAcpiSupportProtocolGuid AND
- gEfiMpServiceProtocolGuid AND
- gEfiCpuIoProtocolGuid
-
+ gEfiMpServiceProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
index 12e44efed0..b295cf46cc 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
@@ -13,7 +13,7 @@ Abstract:
Definitions and macros for building register tables for chipset
initialization..
- Components linking this lib must include CpuIo, PciRootBridgeIo, and
+ Components linking this lib must include PciRootBridgeIo and
BootScriptSave protocols in their DPX.
@@ -129,10 +129,9 @@ typedef union {
entries.
No parameter checking is done so the caller must be careful about omitting
- values for PciRootBridgeIo or CpuIo parameters. If the regtable does
+ values for PciRootBridgeIo parameters. If the regtable does
not contain any PCI accesses, it is safe to omit the PciRootBridgeIo (supply
- NULL). If the regtable does not contain any IO or Mem entries, it is safe to
- omit the CpuIo (supply NULL).
+ NULL).
The RegTableEntry parameter is not checked, but is required.
@@ -146,44 +145,13 @@ typedef union {
@param[in] PciRootBridgeIo A pointer to the instance of PciRootBridgeIo that is used
when processing PCI table entries
- @param[in] CpuIo A pointer to the instance of CpuIo that is used when processing IO and
- MEM table entries
-
@retval Nothing.
**/
VOID
ProcessRegTablePci (
EFI_REG_TABLE * RegTableEntry,
- EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * PciRootBridgeIo,
- EFI_CPU_IO_PROTOCOL * CpuIo
- );
-
-/**
- Processes register table assuming which may contain IO, MEM, and STALL
- entries, but must NOT contain any PCI entries. Any PCI entries cause an
- ASSERT in a DEBUG build and are skipped in a free build.
-
- No parameter checking is done. Both RegTableEntry and CpuIo parameters are
- required.
-
- gBS is assumed to have been defined and is used when processing stalls.
-
- The function processes each entry sequentially until an OP_TERMINATE_TABLE
- entry is encountered.
-
- @param[in] RegTableEntry - A pointer to the register table to process
-
- @param[in] CpuIo - A pointer to the instance of CpuIo that is used when processing IO and
- MEM table entries
-
- @retval Nothing.
-
-**/
-VOID
-ProcessRegTableCpu (
- EFI_REG_TABLE * RegTableEntry,
- EFI_CPU_IO_PROTOCOL * CpuIo
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * PciRootBridgeIo
);
#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.c
index b7d896d9fd..d698f3ada9 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-
+Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
EfiRegTableLib.c
@@ -188,10 +185,9 @@ MemReadModifyWrite (
entries.
No parameter checking is done so the caller must be careful about omitting
- values for PciRootBridgeIo or CpuIo parameters. If the regtable does
+ values for PciRootBridgeIo parameters. If the regtable does
not contain any PCI accesses, it is safe to omit the PciRootBridgeIo (supply
- NULL). If the regtable does not contain any IO or Mem entries, it is safe to
- omit the CpuIo (supply NULL).
+ NULL).
The RegTableEntry parameter is not checked, but is required.
@@ -205,17 +201,13 @@ MemReadModifyWrite (
@param PciRootBridgeIo A pointer to the instance of PciRootBridgeIo that is used
when processing PCI table entries
- @param CpuIo A pointer to the instance of CpuIo that is used when processing IO and
- MEM table entries
-
@retval Nothing.
**/
VOID
ProcessRegTablePci (
EFI_REG_TABLE *RegTableEntry,
- EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
- EFI_CPU_IO_PROTOCOL *CpuIo
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo
)
{
while (OPCODE_BASE (RegTableEntry->Generic.OpCode) != OP_TERMINATE_TABLE) {
@@ -241,42 +233,3 @@ ProcessRegTablePci (
RegTableEntry++;
}
}
-
-/**
- Processes register table assuming which may contain IO, MEM, and STALL
- entries, but must NOT contain any PCI entries. Any PCI entries cause an
- ASSERT in a DEBUG build and are skipped in a free build.
-
- No parameter checking is done. Both RegTableEntry and CpuIo parameters are
- required.
-
- gBS is assumed to have been defined and is used when processing stalls.
-
- The function processes each entry sequentially until an OP_TERMINATE_TABLE
- entry is encountered.
-
- @param RegTableEntry A pointer to the register table to process
-
- @param CpuIo A pointer to the instance of CpuIo that is used when processing IO and
- MEM table entries
-
- @retval Nothing.
-
-**/
-VOID
-ProcessRegTableCpu (
- EFI_REG_TABLE *RegTableEntry,
- EFI_CPU_IO_PROTOCOL *CpuIo
- )
-{
- while (OPCODE_BASE (RegTableEntry->Generic.OpCode) != OP_TERMINATE_TABLE) {
- switch (OPCODE_BASE (RegTableEntry->Generic.OpCode)) {
- default:
- DEBUG ((EFI_D_ERROR, "RegTable ERROR: Unknown RegTable OpCode (%x)\n", OPCODE_BASE (RegTableEntry->Generic.OpCode)));
- ASSERT (0);
- break;
- }
-
- RegTableEntry++;
- }
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c
index b135e2646c..b1c01afc16 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -23,7 +21,6 @@ Abstract:
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
-#include <Protocol/CpuIo.h>
#include <Protocol/PciIo.h>
#include <Guid/SetupVariable.h>
#include <Protocol/PciRootBridgeIo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
index 18012a1d53..685c6103a9 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
@@ -33,7 +33,6 @@ [Guids]
[Protocols]
gEfiPciPlatformProtocolGuid
- gEfiCpuIoProtocolGuid
gEfiFirmwareVolume2ProtocolGuid
gEfiPciRootBridgeIoProtocolGuid
gEfiPciIoProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.c
index d35a158181..7f3f58e4d1 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
PlatformCpuInfoDxe.c
@@ -41,7 +39,7 @@ PlatformCpuInfoInit (
//
// Write the Platform CPU Info to volatile memory for runtime purposes.
// This must be done in its own driver because SetVariable protocol is dependent on chipset,
- // which is dependent on CpuIo, PlatformInfo, and Metronome.
+ // which is dependent on CpuIo2, PlatformInfo, and Metronome.
//
Status = gRT->SetVariable(
EfiPlatformCpuInfoVariable,
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IchRegTable.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IchRegTable.c
index cac61bffd0..28883c166d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IchRegTable.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IchRegTable.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -129,6 +127,6 @@ InitializeSubsystemIds (
//
// Program the SSVID/SSDID
//
- ProcessRegTablePci (mSubsystemIdRegs, mPciRootBridgeIo, NULL);
+ ProcessRegTablePci (mSubsystemIdRegs, mPciRootBridgeIo);
}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
index 89923ffec6..7e083e3933 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
@@ -1260,7 +1260,7 @@ UpdateDVMTSetup(
UINT8
ReadCmosBank1Byte (
- IN EFI_CPU_IO_PROTOCOL *CpuIo,
+ IN EFI_CPU_IO2_PROTOCOL *CpuIo,
IN UINT8 Index
)
{
@@ -1273,7 +1273,7 @@ ReadCmosBank1Byte (
VOID
WriteCmosBank1Byte (
- IN EFI_CPU_IO_PROTOCOL *CpuIo,
+ IN EFI_CPU_IO2_PROTOCOL *CpuIo,
IN UINT8 Index,
IN UINT8 Data
)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
index 621fb08274..5c60f823de 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
@@ -145,13 +145,13 @@ PciBusEvent (
UINT8
ReadCmosBank1Byte (
- IN EFI_CPU_IO_PROTOCOL *CpuIo,
+ IN EFI_CPU_IO2_PROTOCOL *CpuIo,
IN UINT8 Index
);
VOID
WriteCmosBank1Byte (
- IN EFI_CPU_IO_PROTOCOL *CpuIo,
+ IN EFI_CPU_IO2_PROTOCOL *CpuIo,
IN UINT8 Index,
IN UINT8 Data
);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index d3f8fa3833..a81f102bac 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -108,7 +108,6 @@ [Protocols]
gEfiWatchdogTimerDriverProtocolGuid
gEfiPlatformIdeInitProtocolGuid
gEfiGlobalNvsAreaProtocolGuid
- gEfiCpuIo2ProtocolGuid
gIgdOpRegionProtocolGuid
gEdkiiVariableLockProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
index c00553e224..584355291b 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
@@ -37,9 +37,8 @@ [Guids]
gEfiNormalSetupGuid
[Protocols]
- gEfiCpuIoProtocolGuid
gEfiFirmwareVolume2ProtocolGuid
gPlatformGOPPolicyGuid
[Depex]
- gEfiCpuIoProtocolGuid AND gEfiVariableArchProtocolGuid
+ gEfiVariableArchProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PchInitPeim.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PchInitPeim.c
index 38b17156f4..4a51a47e36 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PchInitPeim.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PchInitPeim.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
PchInitPeim.c
@@ -84,9 +81,6 @@ WriteCmosBank1Byte (
/**
Turn off system if needed.
- @param PeiServices Pointer to PEI Services
- @param CpuIo Pointer to CPU I/O Protocol
-
@retval None.
**/
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
index ae100df26d..1afd8a254e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
@@ -120,7 +120,6 @@ [Protocols]
gEfiDiskInfoProtocolGuid ## CONSUMED
gEfiMpServiceProtocolGuid
gDxePchPlatformPolicyProtocolGuid
- gEfiCpuIo2ProtocolGuid
gEfiTdtOperationProtocolGuid
gEfiSmbiosProtocolGuid ## PROTOCOL CONSUMES
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
index fb82cdb984..c767021aed 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
@@ -23,7 +23,6 @@ Revision History:
#include <Protocol/IdeControllerInit.h>
#include <Protocol/MpService.h>
#include <Protocol/PchPlatformPolicy.h>
-#include <Protocol/CpuIo2.h>
#include <Protocol/Smbios.h>
#include <IndustryStandard/SmBios.h>
#include <Library/IoLib.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
index 14b9250e99..fb9d090ada 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
@@ -16,7 +16,6 @@ Abstract:
--*/
#include "SmmPlatform.h"
-#include <Protocol/CpuIo2.h>
//
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
index 3c4f55cf54..73c3b6f2d0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
@@ -56,7 +56,6 @@ [Protocols]
gEfiSmmPowerButtonDispatchProtocolGuid
gEfiSmmSxDispatchProtocolGuid
gEfiSmmVariableProtocolGuid
- gEfiCpuIo2ProtocolGuid
[Packages]
MdePkg/MdePkg.dec
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
index 81b66ce9af..2f25ab802b 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
@@ -19,7 +19,6 @@ Abstract:
#include "MiscSubclassDriver.h"
#include <Protocol/DataHub.h>
#include <Library/HiiLib.h>
-#include <Protocol/CpuIo2.h>
#include <Library/PrintLib.h>
#include <Protocol/PciRootBridgeIo.h>
#include <Protocol/SimpleNetwork.h>
@@ -28,7 +27,6 @@ Abstract:
#include <Protocol/IdeControllerInit.h>
#include <Protocol/MpService.h>
#include <Protocol/PchPlatformPolicy.h>
-#include <Protocol/CpuIo2.h>
#include <Protocol/I2cBus.h>
#include <Library/IoLib.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
index 8fe1482106..99db5490b6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
@@ -41,7 +41,7 @@ Abstract:
#include <Protocol/FirmwareVolume2.h>
#include <Protocol/PlatformGopPolicy.h>
#include <Protocol/PciIo.h>
-#include <Protocol/CpuIo.h>
+#include <Protocol/CpuIo2.h>
#include <Protocol/GlobalNvsArea.h>
#include <Protocol/DxeSmmReadyToLock.h>
#include <Protocol/PciRootBridgeIo.h>
@@ -631,7 +631,7 @@ IgdOpRegionInit (
EFI_STATUS Status;
EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsArea;
UINT32 DwordData;
- EFI_CPU_IO_PROTOCOL *CpuIo;
+ EFI_CPU_IO2_PROTOCOL *CpuIo;
UINT16 Data16;
UINT16 AcpiBase;
VOID *gConOutNotifyReg;
@@ -879,7 +879,7 @@ IgdOpRegionInit (
// Find the CPU I/O Protocol. ASSERT if not found.
//
Status = gBS->LocateProtocol (
- &gEfiCpuIoProtocolGuid,
+ &gEfiCpuIo2ProtocolGuid,
NULL,
(void **)&CpuIo
);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
index 1e86adadb3..fe81a6e3bd 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
@@ -59,12 +59,12 @@ [Protocols]
gEfiGlobalNvsAreaProtocolGuid
gEfiPciIoProtocolGuid
gEfiFirmwareVolume2ProtocolGuid
- gEfiCpuIoProtocolGuid
+ gEfiCpuIo2ProtocolGuid
[Depex]
gDxeVlvPlatformPolicyGuid AND
gEfiPciRootBridgeIoProtocolGuid AND
- gEfiCpuIoProtocolGuid AND
+ gEfiCpuIo2ProtocolGuid AND
gEfiDataHubProtocolGuid AND
gEfiGlobalNvsAreaProtocolGuid AND
gEfiFirmwareVolume2ProtocolGuid AND
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-platforms Patch 05/14] Vlv2TbltDevicePkg: Switch to CPU I/O 2 Protocol
2019-07-01 2:55 ` [edk2-platforms Patch 05/14] Vlv2TbltDevicePkg: Switch to CPU I/O 2 Protocol Michael D Kinney
@ 2019-07-01 4:07 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:07 UTC (permalink / raw)
To: Kinney, Michael D, devel@edk2.groups.io; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: Kinney, Michael D
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-platforms Patch 05/14] Vlv2TbltDevicePkg: Switch to CPU I/O 2 Protocol
* Remove unused references to CPU I/O Protocol defined in
IntelFrameworkPkg
* Convert valid usage of CPU I/O Protocol to the CPU I/O 2
Protocol
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../AcpiPlatform/AcpiPlatform.c | 47 ---------------
.../AcpiPlatform/AcpiPlatform.h | 1 -
.../AcpiPlatform/AcpiPlatform.inf | 4 +-
.../Include/Library/EfiRegTableLib.h | 40 ++-----------
.../Library/EfiRegTableLib/EfiRegTableLib.c | 57 ++-----------------
.../PciPlatform/PciPlatform.c | 7 +--
.../PciPlatform/PciPlatform.inf | 1 -
.../PlatformCpuInfoDxe/PlatformCpuInfoDxe.c | 8 +--
.../PlatformDxe/IchRegTable.c | 8 +--
.../Vlv2TbltDevicePkg/PlatformDxe/Platform.c | 4 +-
.../PlatformDxe/PlatformDxe.h | 4 +-
.../PlatformDxe/PlatformDxe.inf | 1 -
.../PlatformGopPolicy/PlatformGopPolicy.inf | 3 +-
.../PlatformInitPei/PchInitPeim.c | 10 +---
.../PlatformSetupDxe/PlatformSetupDxe.inf | 1 -
.../PlatformSetupDxe/SetupInfoRecords.c | 1 -
.../Vlv2TbltDevicePkg/PlatformSmm/Platform.c | 1 -
.../PlatformSmm/PlatformSmm.inf | 1 -
.../SmBiosMiscDxe/MiscOemType0x94Function.c | 2 -
.../VlvPlatformInitDxe/IgdOpRegion.c | 6 +-
.../VlvPlatformInitDxe/VlvPlatformInitDxe.inf | 4 +-
21 files changed, 30 insertions(+), 181 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
index 1f4d575b73..cb280764b3 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
@@ -34,7 +34,6 @@ Abstract:
#include <Guid/GlobalVariable.h>
#include <Guid/SetupVariable.h>
#include <Guid/PlatformInfo.h>
-#include <Protocol/CpuIo.h>
#include <Guid/BoardFeatures.h>
#include <Protocol/AcpiSupport.h>
#include <Protocol/AcpiS3Save.h>
@@ -54,7 +53,6 @@ CHAR16 gACPIOSFRModelStringVariableName[] = ACPI_OSFR_MODEL_STRING_VARIABLE_N
CHAR16 gACPIOSFRRefDataBlockVariableName[] = ACPI_OSFR_REF_DATA_BLOCK_VARIABLE_NAME;
CHAR16 gACPIOSFRMfgStringVariableName[] = ACPI_OSFR_MFG_STRING_VARIABLE_NAME;
-EFI_CPU_IO_PROTOCOL *mCpuIo;
EFI_GLOBAL_NVS_AREA_PROTOCOL mGlobalNvsArea;
#ifndef __GNUC__
#pragma optimize("", off)
@@ -776,7 +774,6 @@ AcpiPlatformEntryPoint (
EFI_HANDLE Handle;
EFI_PS2_POLICY_PROTOCOL *Ps2Policy;
EFI_PEI_HOB_POINTERS GuidHob;
- UINT8 PortData;
EFI_MP_SERVICES_PROTOCOL *MpService;
UINTN MaximumNumberOfCPUs;
UINTN NumberOfEnabledCPUs;
@@ -1132,53 +1129,9 @@ AcpiPlatformEntryPoint (
//
// SIO related option.
//
- Status = gBS->LocateProtocol (&gEfiCpuIoProtocolGuid, NULL, (void **)&mCpuIo);
- ASSERT_EFI_ERROR (Status);
-
mGlobalNvsArea.Area->WPCN381U = GLOBAL_NVS_DEVICE_DISABLE;
-
mGlobalNvsArea.Area->DockedSioPresent = GLOBAL_NVS_DEVICE_DISABLE;
- if (mGlobalNvsArea.Area->DockedSioPresent != GLOBAL_NVS_DEVICE_ENABLE) {
- //
- // Check ID for SIO WPCN381U.
- //
- Status = mCpuIo->Io.Read (
- mCpuIo,
- EfiCpuIoWidthUint8,
- WPCN381U_CONFIG_INDEX,
- 1,
- &PortData
- );
- ASSERT_EFI_ERROR (Status);
- if (PortData != 0xFF) {
- PortData = 0x20;
- Status = mCpuIo->Io.Write (
- mCpuIo,
- EfiCpuIoWidthUint8,
- WPCN381U_CONFIG_INDEX,
- 1,
- &PortData
- );
- ASSERT_EFI_ERROR (Status);
- Status = mCpuIo->Io.Read (
- mCpuIo,
- EfiCpuIoWidthUint8,
- WPCN381U_CONFIG_DATA,
- 1,
- &PortData
- );
- ASSERT_EFI_ERROR (Status);
- if ((PortData == WPCN381U_CHIP_ID) || (PortData == WDCP376_CHIP_ID)) {
- mGlobalNvsArea.Area->WPCN381U = GLOBAL_NVS_DEVICE_ENABLE;
- mGlobalNvsArea.Area->OnboardCom = GLOBAL_NVS_DEVICE_ENABLE;
- mGlobalNvsArea.Area->OnboardComCir = GLOBAL_NVS_DEVICE_DISABLE;
- }
- }
- }
-
-
-
//
// Get Ps2 policy to set. Will be use if present.
//
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
index f45590ea24..b27ca661ff 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
@@ -36,7 +36,6 @@ Abstract:
#include <IndustryStandard/Acpi.h>
#include <Protocol/AcpiSystemDescriptionTable.h>
#include <Protocol/MpService.h>
-#include <Protocol/CpuIo.h>
#include <IndustryStandard/Acpi30.h>
#include <IndustryStandard/Acpi20.h>
#include <Library/HobLib.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
index 817ad58a81..ce4db9fa85 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
@@ -79,6 +79,4 @@ [Depex]
gEfiVariableArchProtocolGuid AND
gEfiVariableWriteArchProtocolGuid AND
gEfiAcpiSupportProtocolGuid AND
- gEfiMpServiceProtocolGuid AND
- gEfiCpuIoProtocolGuid
-
+ gEfiMpServiceProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
index 12e44efed0..b295cf46cc 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/EfiRegTableLib.h
@@ -13,7 +13,7 @@ Abstract:
Definitions and macros for building register tables for chipset
initialization..
- Components linking this lib must include CpuIo, PciRootBridgeIo, and
+ Components linking this lib must include PciRootBridgeIo and
BootScriptSave protocols in their DPX.
@@ -129,10 +129,9 @@ typedef union {
entries.
No parameter checking is done so the caller must be careful about omitting
- values for PciRootBridgeIo or CpuIo parameters. If the regtable does
+ values for PciRootBridgeIo parameters. If the regtable does
not contain any PCI accesses, it is safe to omit the PciRootBridgeIo (supply
- NULL). If the regtable does not contain any IO or Mem entries, it is safe to
- omit the CpuIo (supply NULL).
+ NULL).
The RegTableEntry parameter is not checked, but is required.
@@ -146,44 +145,13 @@ typedef union {
@param[in] PciRootBridgeIo A pointer to the instance of PciRootBridgeIo that is used
when processing PCI table entries
- @param[in] CpuIo A pointer to the instance of CpuIo that is used when processing IO and
- MEM table entries
-
@retval Nothing.
**/
VOID
ProcessRegTablePci (
EFI_REG_TABLE * RegTableEntry,
- EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * PciRootBridgeIo,
- EFI_CPU_IO_PROTOCOL * CpuIo
- );
-
-/**
- Processes register table assuming which may contain IO, MEM, and STALL
- entries, but must NOT contain any PCI entries. Any PCI entries cause an
- ASSERT in a DEBUG build and are skipped in a free build.
-
- No parameter checking is done. Both RegTableEntry and CpuIo parameters are
- required.
-
- gBS is assumed to have been defined and is used when processing stalls.
-
- The function processes each entry sequentially until an OP_TERMINATE_TABLE
- entry is encountered.
-
- @param[in] RegTableEntry - A pointer to the register table to process
-
- @param[in] CpuIo - A pointer to the instance of CpuIo that is used when processing IO and
- MEM table entries
-
- @retval Nothing.
-
-**/
-VOID
-ProcessRegTableCpu (
- EFI_REG_TABLE * RegTableEntry,
- EFI_CPU_IO_PROTOCOL * CpuIo
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * PciRootBridgeIo
);
#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.c
index b7d896d9fd..d698f3ada9 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTableLib.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/EfiRegTableLib/EfiRegTabl
+++ eLib.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-
+Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
EfiRegTableLib.c
@@ -188,10 +185,9 @@ MemReadModifyWrite (
entries.
No parameter checking is done so the caller must be careful about omitting
- values for PciRootBridgeIo or CpuIo parameters. If the regtable does
+ values for PciRootBridgeIo parameters. If the regtable does
not contain any PCI accesses, it is safe to omit the PciRootBridgeIo (supply
- NULL). If the regtable does not contain any IO or Mem entries, it is safe to
- omit the CpuIo (supply NULL).
+ NULL).
The RegTableEntry parameter is not checked, but is required.
@@ -205,17 +201,13 @@ MemReadModifyWrite (
@param PciRootBridgeIo A pointer to the instance of PciRootBridgeIo that is used
when processing PCI table entries
- @param CpuIo A pointer to the instance of CpuIo that is used when processing IO and
- MEM table entries
-
@retval Nothing.
**/
VOID
ProcessRegTablePci (
EFI_REG_TABLE *RegTableEntry,
- EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
- EFI_CPU_IO_PROTOCOL *CpuIo
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo
)
{
while (OPCODE_BASE (RegTableEntry->Generic.OpCode) != OP_TERMINATE_TABLE) { @@ -241,42 +233,3 @@ ProcessRegTablePci (
RegTableEntry++;
}
}
-
-/**
- Processes register table assuming which may contain IO, MEM, and STALL
- entries, but must NOT contain any PCI entries. Any PCI entries cause an
- ASSERT in a DEBUG build and are skipped in a free build.
-
- No parameter checking is done. Both RegTableEntry and CpuIo parameters are
- required.
-
- gBS is assumed to have been defined and is used when processing stalls.
-
- The function processes each entry sequentially until an OP_TERMINATE_TABLE
- entry is encountered.
-
- @param RegTableEntry A pointer to the register table to process
-
- @param CpuIo A pointer to the instance of CpuIo that is used when processing IO and
- MEM table entries
-
- @retval Nothing.
-
-**/
-VOID
-ProcessRegTableCpu (
- EFI_REG_TABLE *RegTableEntry,
- EFI_CPU_IO_PROTOCOL *CpuIo
- )
-{
- while (OPCODE_BASE (RegTableEntry->Generic.OpCode) != OP_TERMINATE_TABLE) {
- switch (OPCODE_BASE (RegTableEntry->Generic.OpCode)) {
- default:
- DEBUG ((EFI_D_ERROR, "RegTable ERROR: Unknown RegTable OpCode (%x)\n", OPCODE_BASE (RegTableEntry->Generic.OpCode)));
- ASSERT (0);
- break;
- }
-
- RegTableEntry++;
- }
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c
index b135e2646c..b1c01afc16 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights
+ reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -23,7 +21,6 @@ Abstract:
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
-#include <Protocol/CpuIo.h>
#include <Protocol/PciIo.h>
#include <Guid/SetupVariable.h>
#include <Protocol/PciRootBridgeIo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
index 18012a1d53..685c6103a9 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
@@ -33,7 +33,6 @@ [Guids]
[Protocols]
gEfiPciPlatformProtocolGuid
- gEfiCpuIoProtocolGuid
gEfiFirmwareVolume2ProtocolGuid
gEfiPciRootBridgeIoProtocolGuid
gEfiPciIoProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.c
index d35a158181..7f3f58e4d1 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInfoDxe.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformCpuInfoDxe/PlatformCpuInf
+++ oDxe.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights
+ reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
PlatformCpuInfoDxe.c
@@ -41,7 +39,7 @@ PlatformCpuInfoInit (
//
// Write the Platform CPU Info to volatile memory for runtime purposes.
// This must be done in its own driver because SetVariable protocol is dependent on chipset,
- // which is dependent on CpuIo, PlatformInfo, and Metronome.
+ // which is dependent on CpuIo2, PlatformInfo, and Metronome.
//
Status = gRT->SetVariable(
EfiPlatformCpuInfoVariable, diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IchRegTable.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IchRegTable.c
index cac61bffd0..28883c166d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IchRegTable.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IchRegTable.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights
+ reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -129,6 +127,6 @@ InitializeSubsystemIds (
//
// Program the SSVID/SSDID
//
- ProcessRegTablePci (mSubsystemIdRegs, mPciRootBridgeIo, NULL);
+ ProcessRegTablePci (mSubsystemIdRegs, mPciRootBridgeIo);
}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
index 89923ffec6..7e083e3933 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
@@ -1260,7 +1260,7 @@ UpdateDVMTSetup(
UINT8
ReadCmosBank1Byte (
- IN EFI_CPU_IO_PROTOCOL *CpuIo,
+ IN EFI_CPU_IO2_PROTOCOL *CpuIo,
IN UINT8 Index
)
{
@@ -1273,7 +1273,7 @@ ReadCmosBank1Byte (
VOID
WriteCmosBank1Byte (
- IN EFI_CPU_IO_PROTOCOL *CpuIo,
+ IN EFI_CPU_IO2_PROTOCOL *CpuIo,
IN UINT8 Index,
IN UINT8 Data
)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
index 621fb08274..5c60f823de 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
@@ -145,13 +145,13 @@ PciBusEvent (
UINT8
ReadCmosBank1Byte (
- IN EFI_CPU_IO_PROTOCOL *CpuIo,
+ IN EFI_CPU_IO2_PROTOCOL *CpuIo,
IN UINT8 Index
);
VOID
WriteCmosBank1Byte (
- IN EFI_CPU_IO_PROTOCOL *CpuIo,
+ IN EFI_CPU_IO2_PROTOCOL *CpuIo,
IN UINT8 Index,
IN UINT8 Data
);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index d3f8fa3833..a81f102bac 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -108,7 +108,6 @@ [Protocols]
gEfiWatchdogTimerDriverProtocolGuid
gEfiPlatformIdeInitProtocolGuid
gEfiGlobalNvsAreaProtocolGuid
- gEfiCpuIo2ProtocolGuid
gIgdOpRegionProtocolGuid
gEdkiiVariableLockProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
index c00553e224..584355291b 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPoli
+++ cy.inf
@@ -37,9 +37,8 @@ [Guids]
gEfiNormalSetupGuid
[Protocols]
- gEfiCpuIoProtocolGuid
gEfiFirmwareVolume2ProtocolGuid
gPlatformGOPPolicyGuid
[Depex]
- gEfiCpuIoProtocolGuid AND gEfiVariableArchProtocolGuid
+ gEfiVariableArchProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PchInitPeim.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PchInitPeim.c
index 38b17156f4..4a51a47e36 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PchInitPeim.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PchInitPeim.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights
+ reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
PchInitPeim.c
@@ -84,9 +81,6 @@ WriteCmosBank1Byte (
/**
Turn off system if needed.
- @param PeiServices Pointer to PEI Services
- @param CpuIo Pointer to CPU I/O Protocol
-
@retval None.
**/
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
index ae100df26d..1afd8a254e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe
+++ .inf
@@ -120,7 +120,6 @@ [Protocols]
gEfiDiskInfoProtocolGuid ## CONSUMED
gEfiMpServiceProtocolGuid
gDxePchPlatformPolicyProtocolGuid
- gEfiCpuIo2ProtocolGuid
gEfiTdtOperationProtocolGuid
gEfiSmbiosProtocolGuid ## PROTOCOL CONSUMES
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
index fb82cdb984..c767021aed 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords
+++ .c
@@ -23,7 +23,6 @@ Revision History:
#include <Protocol/IdeControllerInit.h> #include <Protocol/MpService.h> #include <Protocol/PchPlatformPolicy.h> -#include <Protocol/CpuIo2.h> #include <Protocol/Smbios.h> #include <IndustryStandard/SmBios.h> #include <Library/IoLib.h> diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
index 14b9250e99..fb9d090ada 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
@@ -16,7 +16,6 @@ Abstract:
--*/
#include "SmmPlatform.h"
-#include <Protocol/CpuIo2.h>
//
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
index 3c4f55cf54..73c3b6f2d0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
@@ -56,7 +56,6 @@ [Protocols]
gEfiSmmPowerButtonDispatchProtocolGuid
gEfiSmmSxDispatchProtocolGuid
gEfiSmmVariableProtocolGuid
- gEfiCpuIo2ProtocolGuid
[Packages]
MdePkg/MdePkg.dec
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
index 81b66ce9af..2f25ab802b 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Func
+++ tion.c
@@ -19,7 +19,6 @@ Abstract:
#include "MiscSubclassDriver.h"
#include <Protocol/DataHub.h>
#include <Library/HiiLib.h>
-#include <Protocol/CpuIo2.h>
#include <Library/PrintLib.h>
#include <Protocol/PciRootBridgeIo.h>
#include <Protocol/SimpleNetwork.h>
@@ -28,7 +27,6 @@ Abstract:
#include <Protocol/IdeControllerInit.h> #include <Protocol/MpService.h> #include <Protocol/PchPlatformPolicy.h> -#include <Protocol/CpuIo2.h> #include <Protocol/I2cBus.h>
#include <Library/IoLib.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
index 8fe1482106..99db5490b6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
@@ -41,7 +41,7 @@ Abstract:
#include <Protocol/FirmwareVolume2.h>
#include <Protocol/PlatformGopPolicy.h> #include <Protocol/PciIo.h> -#include <Protocol/CpuIo.h>
+#include <Protocol/CpuIo2.h>
#include <Protocol/GlobalNvsArea.h>
#include <Protocol/DxeSmmReadyToLock.h> #include <Protocol/PciRootBridgeIo.h> @@ -631,7 +631,7 @@ IgdOpRegionInit (
EFI_STATUS Status;
EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsArea;
UINT32 DwordData;
- EFI_CPU_IO_PROTOCOL *CpuIo;
+ EFI_CPU_IO2_PROTOCOL *CpuIo;
UINT16 Data16;
UINT16 AcpiBase;
VOID *gConOutNotifyReg;
@@ -879,7 +879,7 @@ IgdOpRegionInit (
// Find the CPU I/O Protocol. ASSERT if not found.
//
Status = gBS->LocateProtocol (
- &gEfiCpuIoProtocolGuid,
+ &gEfiCpuIo2ProtocolGuid,
NULL,
(void **)&CpuIo
);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
index 1e86adadb3..fe81a6e3bd 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformIni
+++ tDxe.inf
@@ -59,12 +59,12 @@ [Protocols]
gEfiGlobalNvsAreaProtocolGuid
gEfiPciIoProtocolGuid
gEfiFirmwareVolume2ProtocolGuid
- gEfiCpuIoProtocolGuid
+ gEfiCpuIo2ProtocolGuid
[Depex]
gDxeVlvPlatformPolicyGuid AND
gEfiPciRootBridgeIoProtocolGuid AND
- gEfiCpuIoProtocolGuid AND
+ gEfiCpuIo2ProtocolGuid AND
gEfiDataHubProtocolGuid AND
gEfiGlobalNvsAreaProtocolGuid AND
gEfiFirmwareVolume2ProtocolGuid AND
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 06/14] Vlv2TbltDevicePkg: Remove use of PS/2 Policy Protocol
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (4 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 05/14] Vlv2TbltDevicePkg: Switch to CPU I/O 2 Protocol Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:07 ` [edk2-devel] " Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 07/14] Vlv2TbltDevicePkg: Remove use of BIOS ID tools Michael D Kinney
` (8 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
This platform does not have a PS/2 controller, so remove all
references to the PS/2 Policy Protocol.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
index cb280764b3..13d904b834 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
@@ -37,7 +37,6 @@ Abstract:
#include <Guid/BoardFeatures.h>
#include <Protocol/AcpiSupport.h>
#include <Protocol/AcpiS3Save.h>
-#include <Protocol/Ps2Policy.h>
#include <Library/CpuIA32.h>
#include <SetupMode.h>
#include <Guid/AcpiTableStorage.h>
@@ -772,7 +771,6 @@ AcpiPlatformEntryPoint (
UINTN VarSize;
UINTN SysCfgSize;
EFI_HANDLE Handle;
- EFI_PS2_POLICY_PROTOCOL *Ps2Policy;
EFI_PEI_HOB_POINTERS GuidHob;
EFI_MP_SERVICES_PROTOCOL *MpService;
UINTN MaximumNumberOfCPUs;
@@ -1131,19 +1129,6 @@ AcpiPlatformEntryPoint (
//
mGlobalNvsArea.Area->WPCN381U = GLOBAL_NVS_DEVICE_DISABLE;
mGlobalNvsArea.Area->DockedSioPresent = GLOBAL_NVS_DEVICE_DISABLE;
-
- //
- // Get Ps2 policy to set. Will be use if present.
- //
- Status = gBS->LocateProtocol (
- &gEfiPs2PolicyProtocolGuid,
- NULL,
- (VOID **)&Ps2Policy
- );
- if (!EFI_ERROR (Status)) {
- Status = Ps2Policy->Ps2InitHardware (ImageHandle);
- }
-
mGlobalNvsArea.Area->SDIOMode = mSystemConfiguration.LpssSdioMode;
Handle = NULL;
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 06/14] Vlv2TbltDevicePkg: Remove use of PS/2 Policy Protocol
2019-07-01 2:55 ` [edk2-platforms Patch 06/14] Vlv2TbltDevicePkg: Remove use of PS/2 Policy Protocol Michael D Kinney
@ 2019-07-01 4:07 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:07 UTC (permalink / raw)
To: devel@edk2.groups.io, Kinney, Michael D; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Michael D Kinney
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-devel] [edk2-platforms Patch 06/14] Vlv2TbltDevicePkg: Remove use of PS/2 Policy Protocol
This platform does not have a PS/2 controller, so remove all references to the PS/2 Policy Protocol.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
index cb280764b3..13d904b834 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
@@ -37,7 +37,6 @@ Abstract:
#include <Guid/BoardFeatures.h>
#include <Protocol/AcpiSupport.h>
#include <Protocol/AcpiS3Save.h>
-#include <Protocol/Ps2Policy.h>
#include <Library/CpuIA32.h>
#include <SetupMode.h>
#include <Guid/AcpiTableStorage.h>
@@ -772,7 +771,6 @@ AcpiPlatformEntryPoint (
UINTN VarSize;
UINTN SysCfgSize;
EFI_HANDLE Handle;
- EFI_PS2_POLICY_PROTOCOL *Ps2Policy;
EFI_PEI_HOB_POINTERS GuidHob;
EFI_MP_SERVICES_PROTOCOL *MpService;
UINTN MaximumNumberOfCPUs;
@@ -1131,19 +1129,6 @@ AcpiPlatformEntryPoint (
//
mGlobalNvsArea.Area->WPCN381U = GLOBAL_NVS_DEVICE_DISABLE;
mGlobalNvsArea.Area->DockedSioPresent = GLOBAL_NVS_DEVICE_DISABLE;
-
- //
- // Get Ps2 policy to set. Will be use if present.
- //
- Status = gBS->LocateProtocol (
- &gEfiPs2PolicyProtocolGuid,
- NULL,
- (VOID **)&Ps2Policy
- );
- if (!EFI_ERROR (Status)) {
- Status = Ps2Policy->Ps2InitHardware (ImageHandle);
- }
-
mGlobalNvsArea.Area->SDIOMode = mSystemConfiguration.LpssSdioMode;
Handle = NULL;
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 07/14] Vlv2TbltDevicePkg: Remove use of BIOS ID tools
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (5 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 06/14] Vlv2TbltDevicePkg: Remove use of PS/2 Policy Protocol Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:07 ` Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 08/14] Vlv2TbltDevicePkg: Remove use of Data Hub Protocol Michael D Kinney
` (7 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
Remove the use of VLV2 specific BIOS ID tools.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env | 25 --
Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env | 25 --
.../Intel/Vlv2TbltDevicePkg/BiosIdx64D.env | 25 --
.../Intel/Vlv2TbltDevicePkg/BiosIdx64R.env | 25 --
Platform/Intel/Vlv2TbltDevicePkg/GenBiosId | Bin 12236 -> 0 bytes
.../Intel/Vlv2TbltDevicePkg/GenBiosId.exe | Bin 384000 -> 0 bytes
.../Vlv2TbltDevicePkg/Include/Guid/BiosId.h | 30 --
.../Include/Library/BiosIdLib.h | 22 +-
.../Library/BiosIdLib/BiosIdLib.c | 279 ++----------------
.../Library/BiosIdLib/BiosIdLib.inf | 21 +-
.../PlatformDxe/PlatformDxe.inf | 2 +-
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 1 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 4 -
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 4 -
.../PlatformSetupDxe/PlatformSetupDxe.inf | 1 +
.../SmBiosMiscDxe/MiscBiosVendorFunction.c | 9 +-
Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat | 8 +-
Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh | 52 +---
18 files changed, 33 insertions(+), 500 deletions(-)
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64D.env
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64R.env
delete mode 100755 Platform/Intel/Vlv2TbltDevicePkg/GenBiosId
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/GenBiosId.exe
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/BiosId.h
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env b/Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env
deleted file mode 100644
index 85313dfbd7..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env
+++ /dev/null
@@ -1,25 +0,0 @@
-#/** @file
-# This file is used to define the BIOS ID parameters of the build.
-# This file is processed by GenBiosId.
-# The BIOS ID format conforms to "BIOS Revision Identification Specification", Rev. 0.7, 6/27/2001.
-#
-# BIOS ID string format:
-# $(BOARD_ID)$(BOARD_REV).$(OEM_ID).$(VERSION_MAJOR).$(BUILD_TYPE)$(VERSION_MINOR).YYMMDDHHMM
-# All fields must have a fixed length.
-# Example: "TRFTCRB1.86C.0008.D03.0506081529"
-#
-# Copyright (c) 2008 - 2015, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#**/
-
-BOARD_REV = 1
-OEM_ID = I32
-BUILD_TYPE = D
-
-BOARD_ID = BLAKCRB
-VERSION_MAJOR = 0084
-VERSION_MINOR = 01
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env b/Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env
deleted file mode 100644
index 4af249dc19..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env
+++ /dev/null
@@ -1,25 +0,0 @@
-#/** @file
-# This file is used to define the BIOS ID parameters of the build.
-# This file is processed by GenBiosId.
-# The BIOS ID format conforms to "BIOS Revision Identification Specification", Rev. 0.7, 6/27/2001.
-#
-# BIOS ID string format:
-# $(BOARD_ID)$(BOARD_REV).$(OEM_ID).$(VERSION_MAJOR).$(BUILD_TYPE)$(VERSION_MINOR).YYMMDDHHMM
-# All fields must have a fixed length.
-# Example: "TRFTCRB1.86C.0008.D03.0506081529"
-#
-# Copyright (c) 2008 - 2015, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#**/
-
-BOARD_REV = 1
-OEM_ID = I32
-BUILD_TYPE = R
-
-BOARD_ID = BLAKCRB
-VERSION_MAJOR = 0084
-VERSION_MINOR = 01
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64D.env b/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64D.env
deleted file mode 100644
index a2173b7e44..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64D.env
+++ /dev/null
@@ -1,25 +0,0 @@
-#/** @file
-# This file is used to define the BIOS ID parameters of the build.
-# This file is processed by GenBiosId.
-# The BIOS ID format conforms to "BIOS Revision Identification Specification", Rev. 0.7, 6/27/2001.
-#
-# BIOS ID string format:
-# $(BOARD_ID)$(BOARD_REV).$(OEM_ID).$(VERSION_MAJOR).$(BUILD_TYPE)$(VERSION_MINOR).YYMMDDHHMM
-# All fields must have a fixed length.
-# Example: "TRFTCRB1.86C.0008.D03.0506081529"
-#
-# Copyright (c) 2008 - 2015, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#**/
-
-BOARD_REV = 1
-OEM_ID = X64
-BUILD_TYPE = D
-
-VERSION_MAJOR = 0084
-VERSION_MINOR = 01
-BOARD_ID = BBAYCRB
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64R.env b/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64R.env
deleted file mode 100644
index c235177e1b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64R.env
+++ /dev/null
@@ -1,25 +0,0 @@
-#/** @file
-# This file is used to define the BIOS ID parameters of the build.
-# This file is processed by GenBiosId.
-# The BIOS ID format conforms to "BIOS Revision Identification Specification", Rev. 0.7, 6/27/2001.
-#
-# BIOS ID string format:
-# $(BOARD_ID)$(BOARD_REV).$(OEM_ID).$(VERSION_MAJOR).$(BUILD_TYPE)$(VERSION_MINOR).YYMMDDHHMM
-# All fields must have a fixed length.
-# Example: "TRFTCRB1.86C.0008.D03.0506081529"
-#
-# Copyright (c) 2008 - 2015, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#**/
-
-BOARD_REV = 1
-OEM_ID = X64
-BUILD_TYPE = R
-
-VERSION_MAJOR = 0084
-VERSION_MINOR = 01
-BOARD_ID = BBAYCRB
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/GenBiosId b/Platform/Intel/Vlv2TbltDevicePkg/GenBiosId
deleted file mode 100755
index ef1578f2bcb8922905e0693035245c4329809aa7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 12236
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
Oj(!g3>{OC7S^N)t{R~b3
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/GenBiosId.exe b/Platform/Intel/Vlv2TbltDevicePkg/GenBiosId.exe
deleted file mode 100644
index 323b87c444915b173b7f32d5481c67e4471b047b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 384000
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%0D_cl4iKT8j
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
ZjZG+N4<D9DmnW{lYNQ{GdHj36{y$a{V$uKr
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/BiosId.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/BiosId.h
deleted file mode 100644
index e86fc852fc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/BiosId.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*++
-
-Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- BiosId.h
-
-Abstract:
-
- GUIDs used for Bios ID.
-
---*/
-
-#ifndef _BIOS_ID_H_
-#define _BIOS_ID_H_
-
-
-#define EFI_BIOS_ID_GUID \
-{ 0xC3E36D09, 0x8294, 0x4b97, 0xA8, 0x57, 0xD5, 0x28, 0x8F, 0xE3, 0x3E, 0x28 }
-
-
-extern EFI_GUID gEfiBiosIdGuid;
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/BiosIdLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/BiosIdLib.h
index 484b358264..bd08c9a80f 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/BiosIdLib.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/BiosIdLib.h
@@ -1,12 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
BiosIdLib.h
@@ -66,21 +63,6 @@ typedef struct {
#pragma pack()
-/**
- This function returns BIOS ID by searching HOB or FV.
-
- @param[in] BiosIdImage The BIOS ID got from HOB or FV
-
- @retval EFI_SUCCESS All parameters were valid and BIOS ID has been got.
- @retval EFI_NOT_FOUND BiosId image is not found, and no parameter will be modified.
- @retval EFI_INVALID_PARAMETER The parameter is NULL.
-
-**/
-EFI_STATUS
-GetBiosId (
- OUT BIOS_ID_IMAGE *BiosIdImage
- );
-
/**
This function returns the Version & Release Date and Time by getting and converting
BIOS ID.
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.c
index 3f0e20c7a8..f6ab37313c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.c
@@ -1,11 +1,9 @@
/*++
-Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved
-
+Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
BiosIdLib.c
@@ -21,237 +19,8 @@ Abstract:
#include <PiDxe.h>
#include <Library/BaseLib.h>
-#include <Library/HobLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
#include <Library/BiosIdLib.h>
-#include <Guid/BiosId.h>
-#include <Protocol/FirmwareVolume2.h>
-#include <Protocol/LoadedImage.h>
-
-
-EFI_STATUS
-GetImageFromFv (
- IN EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv,
- IN EFI_GUID *NameGuid,
- IN EFI_SECTION_TYPE SectionType,
- OUT VOID **Buffer,
- OUT UINTN *Size
- )
-{
- EFI_STATUS Status;
- EFI_FV_FILETYPE FileType;
- EFI_FV_FILE_ATTRIBUTES Attributes;
- UINT32 AuthenticationStatus;
-
- //
- // Read desired section content in NameGuid file
- //
- *Buffer = NULL;
- *Size = 0;
- Status = Fv->ReadSection (
- Fv,
- NameGuid,
- SectionType,
- 0,
- Buffer,
- Size,
- &AuthenticationStatus
- );
-
- if (EFI_ERROR (Status) && (SectionType == EFI_SECTION_TE)) {
- //
- // Try reading PE32 section, since the TE section does not exist
- //
- *Buffer = NULL;
- *Size = 0;
- Status = Fv->ReadSection (
- Fv,
- NameGuid,
- EFI_SECTION_PE32,
- 0,
- Buffer,
- Size,
- &AuthenticationStatus
- );
- }
-
- if (EFI_ERROR (Status) &&
- ((SectionType == EFI_SECTION_TE) || (SectionType == EFI_SECTION_PE32))) {
- //
- // Try reading raw file, since the desired section does not exist
- //
- *Buffer = NULL;
- *Size = 0;
- Status = Fv->ReadFile (
- Fv,
- NameGuid,
- Buffer,
- Size,
- &FileType,
- &Attributes,
- &AuthenticationStatus
- );
- }
-
- return Status;
-}
-
-
-EFI_STATUS
-GetImageEx (
- IN EFI_HANDLE ImageHandle,
- IN EFI_GUID *NameGuid,
- IN EFI_SECTION_TYPE SectionType,
- OUT VOID **Buffer,
- OUT UINTN *Size,
- BOOLEAN WithinImageFv
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE *HandleBuffer;
- UINTN HandleCount;
- UINTN Index;
- EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
-
- EFI_FIRMWARE_VOLUME2_PROTOCOL *ImageFv;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
-
-
- if (ImageHandle == NULL && WithinImageFv) {
- return EFI_INVALID_PARAMETER;
- }
-
- Status = EFI_NOT_FOUND;
- ImageFv = NULL;
- if (ImageHandle != NULL) {
- Status = gBS->HandleProtocol (
- ImageHandle,
- &gEfiLoadedImageProtocolGuid,
- (VOID **) &LoadedImage
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- Status = gBS->HandleProtocol (
- LoadedImage->DeviceHandle,
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &ImageFv
- );
- if (!EFI_ERROR (Status)) {
- Status = GetImageFromFv (ImageFv, NameGuid, SectionType, Buffer, Size);
- }
- }
-
- if (Status == EFI_SUCCESS || WithinImageFv) {
- return Status;
- }
-
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Find desired image in all Fvs
- //
- for (Index = 0; Index < HandleCount; ++Index) {
- Status = gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID**)&Fv
- );
-
- if (EFI_ERROR (Status)) {
- gBS->FreePool(HandleBuffer);
- return Status;
- }
-
- if (ImageFv != NULL && Fv == ImageFv) {
- continue;
- }
-
- Status = GetImageFromFv (Fv, NameGuid, SectionType, Buffer, Size);
-
- if (!EFI_ERROR (Status)) {
- break;
- }
- }
- gBS->FreePool(HandleBuffer);
-
- //
- // Not found image
- //
- if (Index == HandleCount) {
- return EFI_NOT_FOUND;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- This function returns BIOS ID by searching HOB or FV.
-
- @param BiosIdImage The BIOS ID got from HOB or FV.
-
- @retval EFI_SUCCESS All parameters were valid and BIOS ID has been got.
- @retval EFI_NOT_FOUND BiosId image is not found, and no parameter will be modified.
- @retval EFI_INVALID_PARAMETER The parameter is NULL.
-
-**/
-EFI_STATUS
-GetBiosId (
- OUT BIOS_ID_IMAGE *BiosIdImage
- )
-
-{
- EFI_STATUS Status;
- VOID *Address = NULL;
- UINTN Size = 0;
-
- DEBUG ((EFI_D_INFO, "Get BIOS ID from FV\n"));
-
- Status = GetImageEx (
- NULL,
- &gEfiBiosIdGuid,
- EFI_SECTION_RAW,
- &Address,
- &Size,
- FALSE
- );
-
- if (Status == EFI_SUCCESS) {
- //
- // BiosId image is present in FV
- //
- if (Address != NULL) {
- Size = sizeof (BIOS_ID_IMAGE);
- gBS->CopyMem (
- (void *) BiosIdImage,
- Address,
- Size
- );
- //
- // GetImage () allocated buffer for Address, now clear it.
- //
- gBS->FreePool (Address);
-
- DEBUG ((EFI_D_INFO, "Get BIOS ID from FV successfully\n"));
- DEBUG ((EFI_D_INFO, "BIOS ID: %s\n", (CHAR16 *) (&(BiosIdImage->BiosIdString))));
-
- return EFI_SUCCESS;
- }
- }
- return EFI_NOT_FOUND;
-}
/**
This function returns the Version & Release Date and Time by getting and converting
@@ -273,47 +42,39 @@ GetBiosVersionDateTime (
OUT CHAR16 *BiosReleaseTime OPTIONAL
)
{
- EFI_STATUS Status;
- BIOS_ID_IMAGE BiosIdImage;
-
if ((BiosVersion == NULL) && (BiosReleaseDate == NULL) && (BiosReleaseTime == NULL)) {
return EFI_INVALID_PARAMETER;
}
- Status = GetBiosId (&BiosIdImage);
- if (EFI_ERROR (Status)) {
- return EFI_NOT_FOUND;
- }
-
if (BiosVersion != NULL) {
//
// Fill the BiosVersion data from the BIOS ID.
//
- StrCpy (BiosVersion, (CHAR16 *) (&(BiosIdImage.BiosIdString)));
+ StrCpy (BiosVersion, L"MNW2MAX1.X64.0084.D01");
}
if (BiosReleaseDate != NULL) {
//
// Fill the build timestamp date from the BIOS ID in the "MM/DD/YY" format.
//
- BiosReleaseDate[0] = BiosIdImage.BiosIdString.TimeStamp[2];
- BiosReleaseDate[1] = BiosIdImage.BiosIdString.TimeStamp[3];
- BiosReleaseDate[2] = (CHAR16) ((UINT8) ('/'));
+ BiosReleaseDate[0] = L'0';
+ BiosReleaseDate[1] = L'1';
+ BiosReleaseDate[2] = L'/';
- BiosReleaseDate[3] = BiosIdImage.BiosIdString.TimeStamp[4];
- BiosReleaseDate[4] = BiosIdImage.BiosIdString.TimeStamp[5];
- BiosReleaseDate[5] = (CHAR16) ((UINT8) ('/'));
+ BiosReleaseDate[3] = L'0';
+ BiosReleaseDate[4] = L'1';
+ BiosReleaseDate[5] = L'/';
//
// Add 20 for SMBIOS table
// Current Linux kernel will misjudge 09 as year 0, so using 2009 for SMBIOS table
//
- BiosReleaseDate[6] = '2';
- BiosReleaseDate[7] = '0';
- BiosReleaseDate[8] = BiosIdImage.BiosIdString.TimeStamp[0];
- BiosReleaseDate[9] = BiosIdImage.BiosIdString.TimeStamp[1];
+ BiosReleaseDate[6] = L'2';
+ BiosReleaseDate[7] = L'0';
+ BiosReleaseDate[8] = L'1';
+ BiosReleaseDate[9] = L'9';
- BiosReleaseDate[10] = (CHAR16) ((UINT8) ('\0'));
+ BiosReleaseDate[10] = L'\0';
}
if (BiosReleaseTime != NULL) {
@@ -322,14 +83,14 @@ GetBiosVersionDateTime (
// Fill the build timestamp time from the BIOS ID in the "HH:MM" format.
//
- BiosReleaseTime[0] = BiosIdImage.BiosIdString.TimeStamp[6];
- BiosReleaseTime[1] = BiosIdImage.BiosIdString.TimeStamp[7];
- BiosReleaseTime[2] = (CHAR16) ((UINT8) (':'));
+ BiosReleaseTime[0] = L'0';
+ BiosReleaseTime[1] = L'0';
+ BiosReleaseTime[2] = L':';
- BiosReleaseTime[3] = BiosIdImage.BiosIdString.TimeStamp[8];
- BiosReleaseTime[4] = BiosIdImage.BiosIdString.TimeStamp[9];
+ BiosReleaseTime[3] = L'0';
+ BiosReleaseTime[4] = L'0';
- BiosReleaseTime[5] = (CHAR16) ((UINT8) ('\0'));
+ BiosReleaseTime[5] = L'\0';
}
return EFI_SUCCESS;
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
index 3e53680d08..0d38d73ada 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
@@ -1,11 +1,8 @@
#/*++
#
-# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved
-#
+# Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-
#
# Module Name:
#
@@ -34,17 +31,3 @@ [Packages]
MdeModulePkg/MdeModulePkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
-
-[LibraryClasses]
- HobLib
-
-[Guids]
- gEfiBiosIdGuid
-
-[Protocols]
- gEfiLoadedImageProtocolGuid
- gEfiFirmwareVolume2ProtocolGuid
-
-[Depex]
- gEfiLoadedImageProtocolGuid AND
- gEfiFirmwareVolume2ProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index a81f102bac..0c432642e4 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -73,9 +73,9 @@ [LibraryClasses]
EfiRegTableLib
BiosIdLib
BaseCryptLib
+ HobLib
[Guids]
- gEfiBiosIdGuid
gEfiPlatformBootModeGuid
gEfiBoardFeaturesGuid
gItkDataVarGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index 786b4f6e91..bfde7be398 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -37,7 +37,6 @@ [Guids]
gProcessorProducerGuid = { 0x1bf06aea, 0x5bec, 0x4a8d, { 0x95, 0x76, 0x74, 0x9b, 0x09, 0x56, 0x2d, 0x30 } }
gEfiPowerOnHobGuid = { 0x0468a601, 0xc535, 0x46fd, { 0xa9, 0x5d, 0xbb, 0xab, 0x99, 0x1b, 0x17, 0x8c } }
gEfiPlatformCpuInfoGuid = { 0xbb9c7ab7, 0xb8d9, 0x4bf3, { 0x9c, 0x29, 0x9b, 0xf3, 0x41, 0xe2, 0x17, 0xbc } }
- gEfiBiosIdGuid = { 0xC3E36D09, 0x8294, 0x4b97, { 0xA8, 0x57, 0xD5, 0x28, 0x8F, 0xE3, 0x3E, 0x28 } }
gEfiPlatformBootModeGuid = { 0xce845704, 0x1683, 0x4d38, { 0xa4, 0xf9, 0x7d, 0x0b, 0x50, 0x77, 0x57, 0x93 } }
gEfiBoardFeaturesGuid = { 0x94b9e8ae, 0x8877, 0x479a, { 0x98, 0x42, 0xf5, 0x97, 0x4b, 0x82, 0xce, 0xd3 } }
gItkDataVarGuid = { 0x3812723d, 0x7e48, 0x4e29, { 0xbc, 0x27, 0xf5, 0xa3, 0x9a, 0xc9, 0x4e, 0xf1 } }
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index 3165be1fca..4c60d0a0f2 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -381,10 +381,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
}
-FILE FREEFORM = C3E36D09-8294-4b97-A857-D5288FE33E28 {
- SECTION RAW = $(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/$(DXE_ARCHITECTURE)/BiosId.bin
- }
-
#
# EDK II Related Platform codes
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index 03941dd23e..61e1adcd14 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -327,10 +327,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
}
-FILE FREEFORM = C3E36D09-8294-4b97-A857-D5288FE33E28 {
- SECTION RAW = $(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/$(DXE_ARCHITECTURE)/BiosId.bin
- }
-
#
# EDK II Related Platform codes
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
index 1afd8a254e..b745574421 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
@@ -80,6 +80,7 @@ [LibraryClasses]
BiosIdLib
CpuIA32Lib
IoLib
+ HobLib
[Guids]
## This GUID C Name is not required for build since it is from UefiLib and not directly used by this module source.
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBiosVendorFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBiosVendorFunction.c
index 1817f456cb..fb4fa820a5 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBiosVendorFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBiosVendorFunction.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscBiosVendorFunction.c
@@ -166,7 +163,6 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBiosVendor)
SMBIOS_TABLE_TYPE0 *SmbiosRecord;
EFI_SMBIOS_HANDLE SmbiosHandle;
EFI_MISC_BIOS_VENDOR *ForType0InputData;
- BIOS_ID_IMAGE BiosIdImage;
UINT16 UVerStr[32];
UINTN LoopIndex;
UINTN CopyIndex;
@@ -183,7 +179,6 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBiosVendor)
if (RecordData == NULL) {
return EFI_INVALID_PARAMETER;
}
- GetBiosId (&BiosIdImage);
//
// Add VLV2 BIOS Version and Release data
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
index 8cf8938a4e..5cae78bb6d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
+++ b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
@@ -137,19 +137,15 @@ if /i "%~1"=="/IA32" (
:: Required argument(s)
if "%~1"=="" goto Usage
-::Remove the values for Platform_Type and Build_Target from BiosIdX.env and stage in Conf\
if "%Arch%"=="IA32" (
- findstr /b /v "BOARD_ID BUILD_TYPE" %PLATFORM_PACKAGE%\BiosIdR.env > %WORKSPACE%\Conf\BiosId.env
echo DEFINE X64_CONFIG = FALSE >> %auto_config_inc%
) else if "%Arch%"=="X64" (
- findstr /b /v "BOARD_ID BUILD_TYPE" %PLATFORM_PACKAGE%\BiosIdx64R.env > %WORKSPACE%\Conf\BiosId.env
echo DEFINE X64_CONFIG = TRUE >> %auto_config_inc%
)
:: -- Build flags settings for each Platform --
-echo Setting %1 platform configuration and BIOS ID...
+echo Setting %1 platform configuration...
if /i "%~1" == "MNW2" (
- echo BOARD_ID = MNW2MAX >> %WORKSPACE%\Conf\BiosId.env
echo DEFINE ENBDT_PF_BUILD = TRUE >> %auto_config_inc%
) else (
@@ -160,10 +156,8 @@ set Platform_Type=%~1
if /i "%~2" == "RELEASE" (
set target=RELEASE
- echo BUILD_TYPE = R >> %WORKSPACE%\Conf\BiosId.env
) else (
set target=DEBUG
- echo BUILD_TYPE = D >> %WORKSPACE%\Conf\BiosId.env
)
::**********************************************************************
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh
index ec3a325db7..1eefa5de73 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh
+++ b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh
@@ -97,11 +97,6 @@ for (( i=1; i<=$#; ))
rm -r Build
fi
shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/ECP" ]; then
- ECP_SOURCE=$WORKSPACE/EdkCompatibilityPkgEcp
- EDK_SOURCE=$WORKSPACE/EdkCompatibilityPkgEcp
- echo DEFINE ECP_BUILD_ENABLE = TRUE >> $auto_config_inc
- shift
elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/X64" ]; then
Arch=X64
shift
@@ -113,10 +108,6 @@ for (( i=1; i<=$#; ))
fi
done
-
-
-
-
## Required argument(s)
if [ "$2" == "" ]; then
Usage
@@ -203,54 +194,19 @@ fi
##**********************************************************************
## Build BIOS
##**********************************************************************
-echo Skip "Running UniTool..."
-echo "Make GenBiosId Tool..."
-BUILD_PATH=Build/$PLATFORM_PACKAGE/"$TARGET"_"$TOOL_CHAIN_TAG"
-if [ ! -d "$BUILD_PATH/$Arch" ]; then
- mkdir -p $BUILD_PATH/$Arch
-fi
-if [ -e "$BUILD_PATH/$Arch/BiosId.bin" ]; then
- rm -f $BUILD_PATH/$Arch/BiosId.bin
-fi
-
-
-./$PLATFORM_PACKAGE/GenBiosId -i Conf/BiosId.env -o $BUILD_PATH/$Arch/BiosId.bin
-
-
echo "Invoking EDK2 build..."
build
-if [ $SpiLock == "1" ]; then
- IFWI_HEADER_FILE=./$PLATFORM_PACKAGE/Stitch/IFWIHeader/IFWI_HEADER_SPILOCK.bin
-else
- IFWI_HEADER_FILE=./$PLATFORM_PACKAGE/Stitch/IFWIHeader/IFWI_HEADER.bin
-fi
-
-echo $IFWI_HEADER_FILE
-
##**********************************************************************
## Post Build processing and cleanup
##**********************************************************************
-
echo Skip "Running fce..."
-echo Skip "Running KeyEnroll..."
+##**********************************************************************
+## Build Capsules
+##**********************************************************************
+build -p %PLATFORM_PACKAGE%\PlatformCapsule.dsc
-## Set the Board_Id, Build_Type, Version_Major, and Version_Minor environment variables
-VERSION_MAJOR=$(grep '^VERSION_MAJOR' Conf/BiosId.env | cut -d ' ' -f 3 | cut -c 1-4)
-VERSION_MINOR=$(grep '^VERSION_MINOR' Conf/BiosId.env | cut -d ' ' -f 3 | cut -c 1-2)
-BOARD_ID=$(grep '^BOARD_ID' Conf/BiosId.env | cut -d ' ' -f 3 | cut -c 1-7)
-BIOS_Name="$BOARD_ID"_"$Arch"_"$BUILD_TYPE"_"$VERSION_MAJOR"_"$VERSION_MINOR".ROM
-BIOS_ID="$BOARD_ID"_"$Arch"_"$BUILD_TYPE"_"$VERSION_MAJOR"_"$VERSION_MINOR"_GCC.bin
-SEC_VERSION=1.0.2.1060v5
-cat $IFWI_HEADER_FILE ../Vlv2Binaries/Vlv2SocBinPkg/SEC/$SEC_VERSION/VLV_SEC_REGION.bin ../Vlv2Binaries/Vlv2SocBinPkg/SEC/$SEC_VERSION/Vacant.bin $BUILD_PATH/FV/VLV.fd > ./$PLATFORM_PACKAGE/Stitch/$BIOS_ID
-
-
-echo Skip "Running BIOS_Signing ..."
-
-echo
-echo Build location: $BUILD_PATH
-echo BIOS ROM Created: $BIOS_Name
echo
echo -------------------- The EDKII BIOS build has successfully completed. --------------------
echo
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-platforms Patch 07/14] Vlv2TbltDevicePkg: Remove use of BIOS ID tools
2019-07-01 2:55 ` [edk2-platforms Patch 07/14] Vlv2TbltDevicePkg: Remove use of BIOS ID tools Michael D Kinney
@ 2019-07-01 4:07 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:07 UTC (permalink / raw)
To: Kinney, Michael D, devel@edk2.groups.io; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: Kinney, Michael D
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-platforms Patch 07/14] Vlv2TbltDevicePkg: Remove use of BIOS ID tools
Remove the use of VLV2 specific BIOS ID tools.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env | 25 --
Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env | 25 --
.../Intel/Vlv2TbltDevicePkg/BiosIdx64D.env | 25 --
.../Intel/Vlv2TbltDevicePkg/BiosIdx64R.env | 25 --
Platform/Intel/Vlv2TbltDevicePkg/GenBiosId | Bin 12236 -> 0 bytes
.../Intel/Vlv2TbltDevicePkg/GenBiosId.exe | Bin 384000 -> 0 bytes
.../Vlv2TbltDevicePkg/Include/Guid/BiosId.h | 30 --
.../Include/Library/BiosIdLib.h | 22 +-
.../Library/BiosIdLib/BiosIdLib.c | 279 ++----------------
.../Library/BiosIdLib/BiosIdLib.inf | 21 +-
.../PlatformDxe/PlatformDxe.inf | 2 +-
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 1 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 4 -
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 4 -
.../PlatformSetupDxe/PlatformSetupDxe.inf | 1 +
.../SmBiosMiscDxe/MiscBiosVendorFunction.c | 9 +-
Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat | 8 +-
Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh | 52 +---
18 files changed, 33 insertions(+), 500 deletions(-)
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64D.env
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64R.env
delete mode 100755 Platform/Intel/Vlv2TbltDevicePkg/GenBiosId
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/GenBiosId.exe
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/BiosId.h
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env b/Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env
deleted file mode 100644
index 85313dfbd7..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env
+++ /dev/null
@@ -1,25 +0,0 @@
-#/** @file
-# This file is used to define the BIOS ID parameters of the build.
-# This file is processed by GenBiosId.
-# The BIOS ID format conforms to "BIOS Revision Identification Specification", Rev. 0.7, 6/27/2001.
-#
-# BIOS ID string format:
-# $(BOARD_ID)$(BOARD_REV).$(OEM_ID).$(VERSION_MAJOR).$(BUILD_TYPE)$(VERSION_MINOR).YYMMDDHHMM
-# All fields must have a fixed length.
-# Example: "TRFTCRB1.86C.0008.D03.0506081529"
-#
-# Copyright (c) 2008 - 2015, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#**/
-
-BOARD_REV = 1
-OEM_ID = I32
-BUILD_TYPE = D
-
-BOARD_ID = BLAKCRB
-VERSION_MAJOR = 0084
-VERSION_MINOR = 01
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env b/Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env
deleted file mode 100644
index 4af249dc19..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env
+++ /dev/null
@@ -1,25 +0,0 @@
-#/** @file
-# This file is used to define the BIOS ID parameters of the build.
-# This file is processed by GenBiosId.
-# The BIOS ID format conforms to "BIOS Revision Identification Specification", Rev. 0.7, 6/27/2001.
-#
-# BIOS ID string format:
-# $(BOARD_ID)$(BOARD_REV).$(OEM_ID).$(VERSION_MAJOR).$(BUILD_TYPE)$(VERSION_MINOR).YYMMDDHHMM
-# All fields must have a fixed length.
-# Example: "TRFTCRB1.86C.0008.D03.0506081529"
-#
-# Copyright (c) 2008 - 2015, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#**/
-
-BOARD_REV = 1
-OEM_ID = I32
-BUILD_TYPE = R
-
-BOARD_ID = BLAKCRB
-VERSION_MAJOR = 0084
-VERSION_MINOR = 01
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64D.env b/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64D.env
deleted file mode 100644
index a2173b7e44..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64D.env
+++ /dev/null
@@ -1,25 +0,0 @@
-#/** @file
-# This file is used to define the BIOS ID parameters of the build.
-# This file is processed by GenBiosId.
-# The BIOS ID format conforms to "BIOS Revision Identification Specification", Rev. 0.7, 6/27/2001.
-#
-# BIOS ID string format:
-# $(BOARD_ID)$(BOARD_REV).$(OEM_ID).$(VERSION_MAJOR).$(BUILD_TYPE)$(VERSION_MINOR).YYMMDDHHMM
-# All fields must have a fixed length.
-# Example: "TRFTCRB1.86C.0008.D03.0506081529"
-#
-# Copyright (c) 2008 - 2015, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#**/
-
-BOARD_REV = 1
-OEM_ID = X64
-BUILD_TYPE = D
-
-VERSION_MAJOR = 0084
-VERSION_MINOR = 01
-BOARD_ID = BBAYCRB
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64R.env b/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64R.env
deleted file mode 100644
index c235177e1b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64R.env
+++ /dev/null
@@ -1,25 +0,0 @@
-#/** @file
-# This file is used to define the BIOS ID parameters of the build.
-# This file is processed by GenBiosId.
-# The BIOS ID format conforms to "BIOS Revision Identification Specification", Rev. 0.7, 6/27/2001.
-#
-# BIOS ID string format:
-# $(BOARD_ID)$(BOARD_REV).$(OEM_ID).$(VERSION_MAJOR).$(BUILD_TYPE)$(VERSION_MINOR).YYMMDDHHMM
-# All fields must have a fixed length.
-# Example: "TRFTCRB1.86C.0008.D03.0506081529"
-#
-# Copyright (c) 2008 - 2015, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#**/
-
-BOARD_REV = 1
-OEM_ID = X64
-BUILD_TYPE = R
-
-VERSION_MAJOR = 0084
-VERSION_MINOR = 01
-BOARD_ID = BBAYCRB
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/GenBiosId b/Platform/Intel/Vlv2TbltDevicePkg/GenBiosId
deleted file mode 100755
index ef1578f2bcb8922905e0693035245c4329809aa7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 12236
zcmeHNeQ;dWb-yb;!9rw7c0^*Z3a?>pY_Qjok&SGi=xc3cj4fozCgtOKwfk1P@oHDI
z`&L*K20LpRwnCr~k}^};!SRfT={Sj#P!OLZu&@nv8)ZrpXvyGCp<QPk>VN`j;<Eky
z?%lU~T9VMt@LzrHyXXGyIrp4%&;5A!>D~K$o7THrE@7uKQ7(w4hBbF1=o^2mIE_LV
z7l@_eQn5&!hbr<KcS8nQM+4>x)M?1&$lbu*do(xm7lE0{L$%BxLZB^k%|${mv%RQM
z{MyTesQtd?W_}Ef&Oj;cl3xb06#S*&F&_tJCZ9H#!)OzRZRU1hW}Dafo)vs*fe=qU
zqPdwZ@R)7>E#L!wD%twGz<2t08j{Rx&;G59MtWC9gDawuSZbFy8TYPIJh(3T8#ec#
zr20Xf3z6Bj7MZal|DnNuxgp}4_n&W_I9zeyZ+`j8zTg$-v){H387p1rsFHQxz3Ja3
zSazlc2S9g4v;-$g@Nfy<T7rj4@UjxTxdby7cG6MUZ39sH^XDb_PfBo833d(&+t-)y
zF9CjhOmj1q^F_4~hSAp_j~PkJpRf!=U|0eijy1yQ*n-+%Bxa<NW>6%pL||Y@BnJ|a
zm=zMC_<$Kh<47_dSi9CpCIkLhNDQQ`Br2gSu+s>HcN!soB+A-A*q;!gJ`?OvAR14a
zB6L?GVwoZu5BQ^2q~Am{+AcWK?~la9hD{x<ZN@6^HN{e6vD8p3v4>^&SB|X766XMG
zDr8-moKG(BI4_u)z8s0n<7#>wW!BY7tcimKJYV8+akzkMBrX%r0W+P!nmX?S6b@_d
z^D&4TDGa+wF+nRy5#$<DOvGAJOyq^6=L=Cs>J~yLg&q&-g;=koUl3wBX(h&w6rMJc
zRteEWiecNDKJCuZk=ynh*?yG}Bk8mGe13Sss>ps9wb>`(Q}&xsl%90oc7%enDZhFK
z-scye#V>2~i`k1Xi>FRPOMWqX6DIG}l*H^+m|;3KAu)Rw=8`;hSYq}vtP?*WF?$<c
zN<1bpdmXMP-YqeEALi6OH6Ssg5N;;kAu*#7zLB_7Vn!w0N!%<kqZ7WBxL#sLDZGPN
zmzdECvqPt9BxcmY1H=Nj;g@%2{x$vXna=L6aPt^AQx9wITegMw?$g}ahaoUMHYfFD
z-b1*x-Pcb*jY!?Fe-iY09nss9tHbZhzb#AWTx;J<UOM_TY>4!P>i|XawZmjf@wIOz
zvPUbZz?GiVZoA{isI^3lzHkNQp+9|k;eHQfF@OukS%<;}$21S?@>8!J8H3FBZSXmL
zT0hqAsiR1?3G*#|ue-upkTp?cJ$rlV6vlqUSDBvBMnvY7@h8SK_p{tHGe6B7`|x1(
zU%XQN$VBEROJB|$uYPG_cp|ky3cDfP?$KcMB)rUS_#~f~^_5b|fzME4)#ifPcVM{a
zMZor=rl?r_5Q^Xb?|lAPh4_)0d&eqH{y>$UI|viww4LepXc^6u^}vM#6x`1rM5H#?
znEf-SjXZia{v_JLswSJF*$Nu4WASrHJa?3uY24QQIz$f8@P7Uv1S`i+6tqY&X!#GU
zCux_S{05+?l3Q|Cha2$dvhmX;*1zu%&GlxV!rGT|mETZa+WPNz%B>q;1~x4Xuv+tk
z4<l07W4}NdyMo9rg~#L9mFQ@LupOIuMQ3kjt?HLGPZp^78q|&;Dx>DioyHwU)SR=m
zzpkwAfd1^AsyxPWmnusS4x;?pY`ZD)S1JBkmX|nW@3v*PZ`*Ua9&^v!&j)wLH{CE1
zIyU?P*y!5uX-TmvJ=iHnho=GQ>I6_mGSe?gk?Or?p<_f=RX;7RyS#eu`>1&CavV%l
z?da$<CQD|MrxGQE3Z>#;|NU?C`SeU#_3(>m11n^|GJX}>KFbaK_pJ&GqR@G4_+7Zg
zghmh-BcrUy{Op78WsZM5mCm}-Gv}wcC^Zh6YQ$dn(2G!dlznyOt{88GJqWq6_j8SC
zv`?}7euII<>fL=R=5)`bdyM<%;GRplH#o<=gRoX`ugu{drnPjB_UYcq|FYftF`O($
zFHZN^mCwPwa^>FLbKK)IwBVlRa1XW8J=&*xEk*b0o$d|NJv{tA5BCbudvK0>VOT4;
z=XSVfN00XD-gjo~=zRmMV)XXVJv_`m5BD?`y|2%4?=@H}xL4zF4>M9mkM`+adC|QO
zz$v=-@MpQVOU?5C&C)1S?maZey(?$k({oo9mj+@g-J^ZF7yP&oz1+63oHmwojg4Hy
zCjqQ;1$KMnw$En(rPo7xc%pjvDJ=KuXXGA}K6yiW<_7D0xxRAqvD-ZgKe7v9UM=OG
zY4hrfxHI9{v<B_>OmefD-5*CT;yyaQ1Fc}LlIs_3rIQ;AW~<RGJ>!BAEQj5>3aMD_
zllS7VP%m+A?TF9KolCcB3#ALJ3k#(SQ|G09ZddL+;9Sj^s@*%0Iw6~?ts1H<Z~ER!
zky?~nq9m%Hp2G7vl&N9kw6C&^@sU>0_H6)rlgAN3q%O`~PUbVB`soQq>&=hgw$E)h
zdPaos6#TjLd;2z=c5a7s#y4s2+wV3^jQXb7F#qd(zEJFjj*Rb(5&Yk!@pr(@-&-sB
z+gyWVP{ubQ%eA8qL=m3nE*s9>f?e|$nW>j&Dl)zoGRI$@xoo88g=Mc~rglyQGq1Do
z>|bI0M|<AN+~Zl8u{^bz+dVZScT9j(;(+4D)~;o0J=rC&KH{6?nPt@X7G3*Cd1QIl
zyt<+=qyhMvp1l1w4yfZq*MlBrBN)FuM;7TgLY=M~iF)cspXb>zdte&<OS8D_*vt8{
z;k>o1;Ujgf8)^46WtMyB1d5HcoPYF36ipv>t^FkRPI|IV+RDvySQ{Jr@W@D=$KgQX
zJh`9m?dh4k^~L8|3XP?6T7GJz99605v^*q^jXBTxalFrG<FZfkOwY~Gh4-8l5wRjJ
z62g~A#1lGS%p$QqJrcuvmmZ2l&2{?X<b~p{UWgZD0twS^Q7E3W=1O(M2K~`UP!Ggo
zp-7)>u7~1@e!r!(wE1IKSh{?7`*h>hjxAgDj&@zDH-qaCT)V0_67wg9l)fUHZXs<j
zW37>RvLmRctVlFs4K3FP%|tR1kFC=O8@%;;{hF2aO)FQ`*RR%f=xmD*3?(9cVM|{c
zSf;ajx!w`8%&6WLPYlEp=vqAH)mx%bU5X|3gqbuGgJ#ex+xH~>eF(~Dr#Zf@h(JAq
zvK}GTSH$%#GIkP)#Yz2oL|L?MY3XV=I@(p7;l4kbGWB=}JUtnXr=meU>>o6BbC*A0
zMThjoh%{b}5eL<>%ePHz@!d=ftvwx^+Kuk7cKXCNU)R=-Et`#-TQ+X#nnfL(ffm=V
z3YKR0?OIfREnj%>>L}_y$mbsfo%%4JKMbm4<-84gE9hC!y`Xj2*P5|&-UzxIGz|K8
zpbvmnV7Gk|v<dV$XdO;a)1VK6^0E66XgerZ9h2+sF5$Yz?OIf+X>6~fj&Cdv{0hfD
zU{U2>UsbuW`U{q}OWbhDwO6k4e1$KI&BzPkV<&WpmMZsfS?j!t&VAbb<>l+jj<y_Y
zfxcJ4qAvcO<~l5eCeWg+^(rJ3pZ)Cyf4P$%R(#qzguDa%7x+xHZS9n{Mzj)JZ$jh@
z4jRp%McI31ZOx#%2FJLYocyv4(p&n<=gqa?uXFMTRcFX=0>20RtDXG#tgp9%9|r#|
zC;yIg1-&i%+aoQuyNtzN$m$q3e^Iujs`CEwma3Y4T1!=Jx?*!xec8sUT2veX=P0^<
ztffkOwFdGNXxojp3_la=-auU|>KLYT>0AWPMc`Zn&PCu{1kOd^Tm;TV;Qwy~@Y2ga
zyzq01q%7m8D9?<QppWj=+<f=AXH0Yd`jdS85WX?vPvPS2uj9KJ=m}uH{7oYB4|P0i
z;`6ple6O9x8!^wJyO8-_F(3KM$aT=maxEyoZ@Q8B-JBG!|MAH*KA3>gmouPG0HgSS
zPW)zWH~M$j`Uv^FVa@#|<R!>!kk=z`Lk=MiBJV@~Hu6E_r;(2$+dBRb^>pwpxx=H2
zx&OQc?8R4H^^Y|y&DPi)Ql<@UZR_-<J-w-zm0G!pFWqsy(YwZb^@@g+tX#cJVIjQ9
zp?=HX3u+}44cjGr;x!Wk!W)ZQrnjZFV}<4KE1<qu%G;ZY;M091D7-{re=;n*!J!!R
zDQYDYr|=d(2N>Wb%qZnmVIXP=ZzLAMuVwDSZwLUac+hY8h1U!lp@hHRG{Ql&w2|-z
ztau^`bBcT|047xW`y&CEi$e{5yi&K))0>2JAl~0^#;iXy7$v+#z?@5*i}J1p0Oy;X
z$YZ)3nST$boV-&3hK{nG?Dr?$H?ZX%z#8EDvBwqywdLAT#%p<;`nYxu74&fpF;R}0
z_X)UuD91H*0&+FTTw@?ohHGmZGS?O5xCY-wVG?CKQI_dWWUe2|aqT>TMqfeMw#$0v
zoyc5oEOX6GLaq~Kr(HmCH!{DnP>yT17EW_f*!tK9;xw`?$2DFD2G>62xS!Z^528$8
zX@`5vqhNSZwiD%;?nk!erXV*(hTTaN8534LQmCdr-shQu!9((|Qm8<p9MfaSwm$A@
z_keMU<ftFp?q3(=*x$z>_ZZ~}3dxo`2uyus$vZaK%$)PmmV3$}xAdF1%Y(_6b@aoQ
zd#NDDG3H+rdH2S-`Pg!=I^_6qy6*SLop8wUBeVx{whpk0<)5I;*wL=MYXrIDg*uSp
zxcxKAbenR#J8|ZB=%fC39CCaHOhfKQ)Y*wL%voexUo-wZ->lEQy8|fG`}k!XXm<i~
zhjiR?a*PL{OdsNx`sx)Fl)JJ}CLxcR&mQWs(@%9F&e{N!GEAfnGh*)&tS8K^KSKQq
zWcGn`i*w$o&$C>JCmj{GK8SrPaX(_Ex{apx9fg%;?k@@}h1^FJrggPnD9lx+_63DG
zqVTuy>@1f%mRjeEFV)EPtT20_p3MrY1;q8KFn1`duOjA(R_l$lT>h0(ofQ=3w=uPT
z6vl-YB(4*M89B^1tOtcTDr(*<%##89!TeEJ?bw{h3iCvv=BvW$<iUBV@RvyB8AM^8
zJcQspQ+T1ooKFg0EV2Dlj-A0dZkqU2o;~Keq>KwUySR7Q{<-i(Sqg0X=fa6+H3e}W
zg`^Dexe1i^sMjSf7JmxLJ0=`S;xOnAhkU7h?kx))_V)l+e#`b}zIYheY5y;QJI7}2
z{{Yxd?9Yn;c7J$N?H_>cGm{G^xu2Ere*w((3<7@<PdLcCH=L;p&_6!2PNF}opO5}r
z3ffw*zo2ZMSPlH_Lz?^Qg8YrZO&QJ2zu&U`c3^vableu~1-27sg9SW2ihTlQ%Jc7}
zb|U{<z=vobsRsRfyoCR~68sWyCG2ClN`3s|%I5;xFA!DY$0hPP;5Q!7+)V}fk4yL$
zI5rFVvj~_sjHqvZ8RiGD-M<?2Z*_^h&w+Kc=>~2u^k;tALg5F#5Aj<E9{ZmFcHRTr
z<7iL&-v;KlPtGrn$9~{OwC6lzdwx>26XpL2nAfQMD3kwQ3E#QNQGUK-k0bT~YxuT{
zqKyACU_OtDsgK`f`8-wrREukXo#WL8ychGI-wr5$Bk*bX%fFcuZv(cIj>6Z7e+c~;
z2lj8s!KXhD0`EZlHljQq@qUba_-DuCJHYn-wty$FK*CB|sZhupz)i-s?k!!$rjD)M
zxKU{s?Q_t^HU}#hH~OOSUVqe(2U)|P+9hyE9f+D1zE-ViSiM$|VMKzvfYvk!brue$
z`um4$JHE~B(#-m<mYaQsjcCR$&sveEW@)AP(M>wc^S9woB>Y2$84C)d{i~Z>ZtiG<
z2?s~s5f#RUO<P)9HW^#iuixtHHo99{H~H90d3!UEOd0b0-odYr{5G~3XLqVu)3nBm
z`=7=@z_7xp*iLWnF44)mq&=}nARaWgS^#~b6CcCOVq?LxySfr8)Wy^0X8TrXz1Yqh
zq_bb))csPYfMLqBzq)Zc%V-e1a5{_Y3y$!!piu6Y-eH{;ZdAgp{#eY!l~(yBbe3CR
zxF_qZDNKOkU^u#j>#}nt=iJ3Lj9@Zug#EE#)D-ykh}S8rJ6?!a>HXZ|MOvpqM{pS5
zfla0#7kc})hY`4~1OCA8xOMAn?if`0f>v_fcUJTobsu=PqQSoOJ6lyR)YK}>qR@a5
zz6%or?`4GnmUn(JWun~}ovoI?e?S-;2aPVXFOtOTXj{~uOqxkC+b21-3Kx={cGSn@
Oj(!g3>{OC7S^N)t{R~b3
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/GenBiosId.exe b/Platform/Intel/Vlv2TbltDevicePkg/GenBiosId.exe
deleted file mode 100644
index 323b87c444915b173b7f32d5481c67e4471b047b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 384000
zcmeFaeSB2awKsl}OkjWs6ExANh(UvI0U8@yL7)a?lv+|Vfx-8;ig<``RA&^uM4^+Z
zOpeo1B`vo0Dpzl>ZS5^>siFlMUL;_#jg<D%mRo~QuI^z{jT$A;$UNWg+UJ}(LxR2c
zK7ai_pC5cObLQ-|_gZ`HwbxpE?REC4zjl>TWEh4If7z^IY`{1F)ye0le{`XE^ck;=
zHr9`Lef)-kxv!6(Z!W&Ca>>2-+<xyZcU9hc%iVY16RrHpZI$=N?yg*XcjfFW=T+Wy
z&%)a#mz0dGvYY<h_l6Z)N6ZDz-wV@ET(DApFJ6$r_t(DGvtXTkf3o0d`OYjDCEte^
zwBoyQ@vSE79*@$7kYUU%C^FPd$$AH-%P1-sRWQOZ_M+ES1#)}UG<=ofua}&t)7OQD
zQH)>w=X@KL!!)yS4}4oLfUL*L^6h@{rqRB)*f>|NKK-NfeV;M*Q$Y4@E6yJi(AlC%
zAF|fu=xs}*DEZ+Y^oMk@uk4!VU!`H(Jo(;*w?uC-jH~~K0`~n~eDBK#tOG+PYcONy
z=TP1SZk&Yg9WGb!L%7y17ytjq|7SQ5v3kNCp@H4_hcA+?c0ugp&Hm!($@m-|9i#ej
z1BF@qOJ9j=b8c72utEWAjxVh4I1$j>{fYM2Nme9a&GI*xl?9g>YTgNQKQl(X?5SSL
z>J6-3AF#rKMm5n>oh_Dz&AK8~FLSFu<f;A!B%VaYE-~k`5h5&WQ1579p@HpIG@5mV
zXykWe92!37Y2-09(otLq0RHPJ4uD*JRb}5ZuSVm#8@n-g(7k5~9-kqVV&kO9ydFSm
zV3d?Q?5RQ9<}%inUVOu@O%(ANf(W%)WG-jz&H1%I02$J~FPP6r8|=gtb{ixvK0`=k
z8~9~D$2K0yZ{y$5hWa|lNVG?7LU$8vUOw2P1iK0I7htDpih2k(F%K+rtB_NrVlE`{
z1`YtSFduTNS;M<MBgqe+>1Sg%4c9+rvt*B5BE6r(JMD7EZ?iQzdM(-8pq}(gEt_A_
zpjAS~h1Ck@zVHC|%X!hL7VG;~XaI<(^{B-db?d)w*hZP&4f!_jB(ixn`X&5vnf>D#
z{+Me2=;Duw`Ujdh6V2SPjrF@(aH0*>!ym)!9~0lgkHfGe8uNP?DjTmL*Z5cTRKZeQ
zmD;o)Q|RSgVEhJ_e)!|HHQgbj_SIx)ptgNcGQr}GL>E2*Vpt{QM%d(!R9pYiY_?II
zQBF*OM0>CWCe27Cc)LMWU~oV{QtHMxNei*U%qA<v%i!iQ@gry9_fJv@h2IUSRPQI*
zY}l*;@m3o_8r7>ZgG%H5h0(%Hi#Y{FsRY3qRBMo}bAn%!O0j{k8ZOYjc>nO&IWp3z
zHWoChzrt_;Hu#csCcd-4?p9`8({OV(8Z{fpu?`urzy?gp<>~9G5?Y8*)1^-FAhg^4
zwoGIoEC9ljAX;`;)Ljn36uB4QRk$cAS3p=`t|G#xh;V@yVTN<GlL*_`!$$S|=v)sq
zi_`=MVG$6XN`!XT2f%mfVVfX)&9^8iS3p=~?jyo3BK$9re7lDa5n<W?A=R3t7kLoc
z?XH(uZuf8^5!zk19E3JY{W+Evn3ZVMoQMw<^&%WWgf|nR&C(quxgOf>Ug{w9p@(OB
zSbD01&}M0Aj-@_x2@x(Q!XhuiH4svBJrUY0jkpLGI778Zh7~<51j5N4mi`a|;ALs0
z!_w253eD|AxR(eYhvNm|7oo|VpC<bqIqSM4-hWASxGoBs7ou@>mUP2c+umrs-jFIU
zJ-N<MkASMHuf55tAE<p@eFc+g#dc0jO!m*AggRptei{{k<;*g`#;b76LF4rmYy)U{
zJssEcqW505__jM2F1Y2+*lq5wFW+*P{FuA=?%NFNpS4t94NV12SC|GVJ6y(&V6GK_
zWN>kLrm(ghH2f?uNPCF>TG4Yg2}x~w9yGm7Pj`_1SnG!-Ns2mvw&Znc0KisxDX-h$
z*=L_A!{y3^50~bLXrl?jQH&p9^~F<!v8lEfP^D38?g%hqOi~HngT^2`!s?r%_WZWu
zZ7OgS&><OZp9^>LP(9S+u%-e$JOtC>j>Dhf0j${0E`kR?L5Yk5WWsm`u+BKVifhs`
zi`~cdti|`-_r--6fyH;<Zp^wRdaHTa;yZ7<^q#w;x7{5z9PKOog9$TY5QNMnR>&XR
z>`&~9)>;u<6~_B3qbFJQxP*!v5gnz=<A+DaMgbtcwICVsXNqw*<I8NTZKrC-c(T3d
zuy}L8fKsh?+Z>N7i-Io}!n0YFEO6_?Pl~q}CPRVDABL(wne|^HP2=dzg#4}kl_RBc
zA&^Vu0#@FKW_J`EYh7G=KuML`(y6GA-ZiLT1xL|`9>%v6ChPr~{b2DG7{r{BVt;xj
zUX^Oz`!ZNRSh7-~9{5)%K|87Xp0N6rzD|bvtw_H$%hzDl_gi6qqlFuD0%5sX8gDO<
z`!mam?}UUu`SL>4I&`?vtbh=vBKsQE>XX^zSkT;%s^1q@&tYsKa9T(<o(dt^1GDN1
z$uC78PXzfEZc{>1Uo<Eq+X31GF@}OSx^cY^*X+oCTthnMFUDlNG^W2P73eQ<s=a4O
zm(bwFXfTf-Qr_p5pPE;0Wzj;@QFG}I=q2OJb;iQAz-BbWxA)FlaFtl}3qt+1uQsGY
zy$hdZQAem7G-YesDL28k_GG9l-rQxthr9WM*_eh+pD_(y6sjeYNK+ZDT)}REsaE^X
zLkqIlav{y0_h&=BqmCLqLD$%s&0K{+w`K+6U3Jj_2E1b?w25J4X5e<C`u17UTie5z
z4ql2<It`(2+y(QqitNmkpl(<VtCGTPR;b&m?_HS0{5FhhZo2V0*ROJBnD8Us6X*!_
zAJfaecyk|n`JC?MwN5WvCu*AQUIJ#a`uJQ=FEymuf_hR}oh#Io#dl`YUjrTJQ8F?B
zcMtNm;y@gCqPJL)fkw6D9=l8ZC~Qz~+$BGu?ZYahuN&0$O>#5Q-aNu4851Wm5PxW_
z5rw^xR>y|bFQI23jwtDvCChRYbkqq;Dd>)OxqG)G4{HX=gF22pcm!czym=p4RP&(-
z!spFSEeN+)6T2%2fSIg*e~yPm8q#bhi&$9|%K!_D9s@&Ckw7xit%8+kr@a!kNA-=D
z4%rf*KB9P|MD1R}`w)Zu80&^6Lx%r9oYH^3m!+i;S+&i+XGQims*k_ww3d^cGWCoN
z0(2A36aWZN*QX1R@GqPS0mlGG3Q7>F1QYc4kFte;ht(o-$A#ba>F@!&ee{qMqHSns
zdpw7tCq8ryhn{2Fj|>fMw;%8Ei>82sT)S&(@y#EFjNs}m$@&2?Eu*b+E)3$Y!Tj`R
zhC@s-q6Wn7Sprf*bK<AvZ-~aMEn25J^0{G<e0Cj2KB2FOuOrmOFORhDk2mk9w3hbS
z(z=dfTc}>f<n>4^U?!;vP)x4c`n*X<^C^C?vbw5LYSgx;7r^Y-?x8IWwrx#DoC&dv
zEgMZ2NkyPokdFcrVv^blt>B{2kQxOmE3LoFfP&5rj3;dTp+BFt=g^;%k-g}|e2rm>
zgQ4%7yiV*ThMT<@G^EDB%Ia}S`*vdZ7BHx1Q-%R$8gK44VnH=Qs#XXCGf_wHil>p-
z6FXlOyG?h5Iss)g9fiSYFgfsQ!#CM7oPo~FRI9!lbD|V;A^?jD)%;Hh7II1+qqig7
zjq1zeSm^tdX{Y6(&TVc#d|Tjh4WO21&!|Ht2aMQwvrb0c{AbYW@T~o8;ecbW09K<W
zLJ>Kmk^?qtP+OW%*9nPb8yG*#Ofr|_%juuGQWJxIY6t3KBTBz*xcVd1i6v(LDr;Gl
zKXZ5LIWQ3Svew)x-&KdU6yZno#MXlNmV%b{=nQ=$_8!U$UdbLk`fyQayf<6BHNM67
zL!+QzMO0Zc2LO0hOLz3tA0qN?L`UPx$YS;Tdg{S!rX=;?(TqR!;3t`))Pn;+60mWc
z-a3Xj_Cy!0JUQM`U?V!1DNf?2PjFcUHZ}{OHogO>abe5H(Q^)M6>KN)ThMhRPqt=P
z`ES~`NMG!@ywGre+_Y__UFzD~`BgrU<3F^OU5-t+3NJ2*O&-}EJ^SKY3StvRc1KU&
zqDn8GSr|J7H^*FjOHr&8RK&OXMs~;cSa3tOtvap!jV^d-+YW8T>@%Vjt%Y!P(abyO
z87l2Rw6&1;pIc<1fbIVlcXzP;SJD0^_>!5G4n45~hDhQ)Mnfa?i52oSA%b(V2(Tai
z!nId>l@%&!`2uKd*7{)T7py-en+G1AWnJd80#k}QRxCS3LXol2R)eqTjTO^RC7x&*
z%jZskIrfDc)h^68+UC$eUA!YOZ5TBBvdxZfBJD4*-cNiS9iP|}J$;^agFo??XxUZk
zc3VfS*FOA_Rg}EUms}7?*4}j8jW=xddDaTV<<e(;01E#!?ND^y)Gv_6xvB4gDTYJo
zD+Hc8|CE8)NUP3Qv}I~pMf4Qw%RXy<5R~~E8`PPaOaaWJbz`Pj-;DWzVh1Q)fF>?S
zfTbVTS4=%A7M!}EEH-lLf{Ix2)CFUsCtCHss}_V+r?eQ*l`jiSonJHHmaX@e-S4|H
z@p0@$&6E5tE}yXwM#PAn0rgsdKm6ZO%v%L&d>i~&WvwQ6D|Ga1_ig~$V5$J+P<T!W
z832A^{@GKb%9(y&cBWr3Ic85)XU2Z&eEcltW0jtdC+6nkOqu1?TehWU9wk1x`oz8B
z^yEEF5B+nG{ieOw9)(%=E37K$!l4tcRLXeAdoE0c_9jDpuoGc*9voS5i3U8DsWaZ(
zN#nOq8^6z*OL<YKHi}>6x@v%#tj>jsb97*nhBR-c0%T=%tt_|2ReKS{)b5Hmm%{qN
z{KMzp?QsWd9UNEZ;{Z&x+J3qRhlbQR#2x$?mWL)8>w<_C>VxO{MWC|k`@oE37y`<k
zCjBd#5zWXxa(}>z^mWW)XyB2|2q_#$&hc513YeWTn4MCXpuWZ|mc%qX@UC+nu%0ie
zP?_t$<!qJa_;+Px=WyJCcl<ri__XiE_}rNX?aasHv@bO-&Z{BqV|})7kiWC>IQ|a2
zO?tnuIrUhWAyg2gI}*k6U?X^D&;i>>J!wTY!gYu@!!;OZuKU<_P#SnqsD7!P0ml@I
z`!F602UiR(G6`wc@q?AsJXrwKeQ1Zar4+yi`aYz<k+e#-Y&1=gia^nrj{=f5No_vO
zgF-`U6s)XzVPmz2asyFd0ZKu`0@M*SL!+4Lpm<N)W~Ubrv`OkZFA5E*QLwT~xhRf+
zM-memjxPNTKVa3d2H~ngom@^re6AbRovhz!MRw}tYA~@zWOHX&J$;kFB}3ce&D*ol
z@%TI%J<W=2-*N;|nC<bdGq!XMEAq8H<GT#L)&>sEh9!!dNgG<jRh@5j9tm#V3OzbA
zuX_FVEr*NINc^ocw!Ag0s4OMbBkNgxy;KjaZ=F-se!yryJUqDh4VVoK{yJyy*U8|A
z)+Iw=U^@rj_((?POAgyMU@mgD*(+MWOj1>+dPYV=+H6B*wLlnBX8YJ&>IYkBUNAl5
z2jTVyf-PU?Pb|OZ_~L0qle&{v`0z8n)MqR^15Tke1`(bKSpX$NFUW7$Z~!DrGeP={
z>cdxUUcO*OUeKO(Hg=*F+CMGikD-5EsA^=+%Z#_`_qRs&twehv1ex~32T0<xe<VUm
z#pyes6R_gjQOFIz+*+?hhP6xf?mo@i+`W5R30>M);fLGO@9#DYcfH&{Xnr0qej>9G
z;kHsEM$vi!WK)#OhK!}uo27?jLRMk&dB&v6fYZGSTG5@58qyqq6zf>ZR_P5UWM-}v
zDQi?;(VHBO(7KAyUY}kHIz$}~il3B))ec?vzaKxDeoQZ)gLmiYrL*+1BSv3!die!R
zPERjo>GdNh7Pprg(p=u}^m4yYMzu4OD6sTmP|CCPx*niVJNG&${sKYvppd24<z5sT
zQlnsH^`ML5uTVR%LA84h#RAhprKjx@;o|b^T#e;E2TLp;i|Ee-&@FC9G^EDD%IZWH
z%TizwC5~8CAo$bz(qw&)73q-}QJKVu0+_;x?ncV2Sry4pFDHI4lOnjZ3AS)=*s3qX
zcJzw3{D2I$yoRxb<>O=vwrt{$`m*?gKBM`IXe0g*F2<WnC}-HXLaEb<b+%;}J)m2R
zzgCHck_}kQ^;Bb@kDN$%P&)!)WMEp@cOM<uB$j$3q=qjU>BPb>8B$igg4yk+3AV8A
z`|!^k2UzNX>WFgs=But(AW3uspo;Xbk(ixDA%)dwdcL3<m{#8#{MtcwgggjLU^k<c
zKp0lju4lVGYy+2iX*>%M@#bD5dIHEJ*}eF#-U{218HP9woE0mwI~h?{NWnqi8WmIK
z&1<Bs2K7fwbr1_*A>Q1djh(?h%n8JIRSL0r%y>n3-9Ig)?)Rh1una&D=}*Eugm#Kc
zHc(yPhu8>sQ55MDlS1hG#vY%;88dSuh{BRT8R-IUP}qh2<6R`m9|u9uU+!>ZrlDnt
z^}|>V#1+Erh(uw$D~yL-nb}U6*$$py;I=30d(&I6RJB5-t{*ARC;j31RRQ{=Fd~a<
z+gq`+Ye8njiX+@Jx_5MZ#wwUDBU+qZy&qdT*5UXO-@O+c`cwQsQ8ZBf#>(MXQbOIw
zKDKsl>GBtC;a4fXUW>m~v?W~_9rodm(eOwOcaU(hbi}96cFV>8Q76I8Wq3~_X)kw4
zzdi9FxxGibx$eqe_dx2$d!}fA*mg_koH}j^{Y&VF#pXIr;X?H*?EyH(PaNQLpi14D
zt0B#20Ip+|*U0XtIKbqJC)VKjCAO1&w}a!Vd>rsgCaZ0j|1J&<sd0#t{ShM8)LIA`
zKZQX{(HB9;7@n|rx$uM$AfLtIjPy}=%!2H}Irb;VKn5fX%B_sPM)lMUY=~a3_=a#p
z`ZM)(k!`!&Cv&e)>@rMgpEU-yvbNo}%sb_dSmr)h<}vsgZo>Z84jGYT2r`~?rSsM=
zL;2I{k^@4FSLhsn+JUD(o%6ue4Q~q{ay1-y=s`Q)S_TbMiW$NVBQjc@U*lMKwtq~G
zClzs2XdDjwShs!eBEq(vx94g&@W-RS=YLFpehsI6Cq65Eyy`8s>L<lRmOn7K+*z+U
zt4UQWF#rAd^rfEyAMdGIaFrW(?Soj--O^wE{PN6^E_?H6{t=mnA+z_e%)?skzBuy`
z4o{7G8e8t}9MO<wC%{csR&QV<5OYK#ap|x75QD6eY!hM8g@2d0AQ3Y*i$#OugS<d|
zM$;Sz@hjR8JBZ<f)Tpz)h&7}}%*yI&FX9p)=BhNZ&kF71G<xKWWtfcn;!}<L%GG~D
zSLhySGT(&LBG7xS&|W|fUv}mrqpbS9E2d`ese9u7a`nP775*I+)a@{RAh}UU)`Tnt
zAt_Gq%-_icUxRuakPu_Q&GW#`Asly;F2#5VT$2ko-vd`hxcdIE`kn(fOT!7ZH0k0^
zJoYab%}3y&cdnSaysyXzejRZe_!|9BVggzhRQFmleWz_r#$ddAQsMw$O8O5GHCCw-
zU5>(G=uZE!5cjab7QIrG`R96tI#_XRau1*}RSn(JgQj3oJxy);cyLn|nnEKTb(OSl
zY3AFx+8{Lq{B;iMiv;y6?>VT?!6Mo!c+%QweSjVnfsX2(r+q*QVsOa(9kT>MrUKP0
z!vXWafc4YixIrJO2KB^IlHmq|o8d$FE$m|h!k>hPqvC41Ro@f;6Ba=58i>G}<$KcV
zwT?(T*tZ53Fdm;EQMdQRBjjmwPacXI8^uh7I{ezLBNAwKjfE?&A<_5;qq*={G!<@7
zcA<zpnThx%(D>m!3L10<K>p+v7*L?8@b(6D<{H=skzyw!J@MuqW7+ISuo_av{pdcN
zKlHkyXv>o?569RYI*f*s4QPo4MOVPl@+aqDJ6QkZZhLah*fiJMY$^E7Z{TX#NVXP?
ze+}0hz%a%~rDhin{|9aQ;|~UmN9u$Eq&Q$viY~%GRnob!snuidf;<U9V^P*Ivy}Vt
z0$v6$OTf#pSd|Jz4TMRC$JVyrbYsq1!JlG0PfTxN2K0}`pjL>p=@>2b&@jqhneE4D
z_#VIdJ=VssL9%<nO@vBNg38znP9Bj|1MQsZ9fl%I8jt;o_mrkW{SDc2qjxrV(!U~Y
zEdRnE;Ciq4^Iw1VeZ)h}<=<XoG=|k=I51dHBqQAH9=`09M@Fn@?iEcm8cPf~SlNzH
zAHUdx=xB1LzBdUu=u0+0xO(Y*csBFsKeE5-k7!qo0lSXz&g^o;w<<c0%|AHaesl6R
z)e+i{wvhjX0l~%*_GkZVTmiKiVkIM+#;S{OAHUQkCl?rUt5h*99=8Dc8bXIGytk~t
zu}bRgmzX%(JhJIDWfe+G*>WFv_3ZX?WUQWhLV@wDiI}qbMhP1PoL}9l;nZJ7*|$ch
z27L=S&MuHf91RD#Mbzj5U2K&+e;7$jB`@I9D(7|M+Gp_DV3j<Dudtf>dofjFp<wn#
z$PRTBEvld5!;V`p`KQP7TUZgm&`>uZ>EsL~%0aPivu?u#*_VvK#7P68{S9g!8~8@9
z0YpxQ+R4`PHe(5TTNo`?e*<4BXzIc<q(@><)kVefgM;bFr`Y#8Ov3?@i-F)v{uPJo
zuf^Jc!ise!yw!oCS<@MAg#b?Fa|}{68H=OfOS39wfRFkPW=?<n!RY7*SQGQ9A4dBX
zcvx7;wzVH4UK;;~If%(<(Gq&X@fqzHI3pJ5D3%Lo_{@p=W?Az{eG@rdhMC|;l&(i%
zlW#3y8`NP$126%feWsWR%KS89mw4)|^wzOTSShTw4^e64hEoBW{uw@O_Xmq&<Yq7r
zixau5`4li^OIL9*>Bn5Q%84!MYt8J-RluBY=Nb+bikcSzN}_)QI{Ih%B>EShUYLze
zId0j}D0q6DdPc02We18oR$L7#7!%7_wJx9a{QW^an7_HW9r6j2T&zxl<wJ5w3CRts
zt1HPczYKuDuW0tONB3Tci|5}C84ob4Y!Yv6=`W7Amo}(>#d;i*5IT}!ir0+gwq^}T
z!cKfkWjI^z#{?W&UqJhmHJ^nxrLAk6wwQtMv=u;%f^7wkY3um(Nn|Da2;+mWVKg;)
z6xV7j9{K|RkUr%9Bcn&R8PIJC#qXRcz4y@Pwk7ld_p?he1JQf=9bU^{_6kIe7$dc9
zV}PN}+t<)bk}L#lds*geENEZT$d0u$=w+jVb4gM6Oe)Qvo+)tl+;r~Vj>Jx;iQ-?=
zT;y3McH>urI`E$8sZ@%E$@>0OTP1=B5N+59!geIa;y167iB6WJcJs4sCqKWxou9vK
z=jW!4_+0c@o06{-x9}G|_Wcd=l~^xd|GG}Te)0mop895@3tt@xqAP%9!Tw}2u@65|
z^}b}Pn->wEHEST5*eh_P?_{6R-XVlT&0wwpa4&9W%PTR82+K4X+48ZtOhx(|v*i`M
zDdfjDNhh%B%<Qj`;O9f*h5aU5%$An{5{9)DUr?t=!~IJd5|p!ndi?C!oHvZKg3d6?
zP+U6N{t53%kG^ZebtJ<R&)^d-<ZE7gA2<zA)4CMc@>Br>Q3gN5vy}c9@FwSHI5>_E
z|JL#07bqQb^wSl9SV0%c?Cw?EI7!yrn489V{NUzXPP<LI?{sJ)G%&5~^_|cfG0edM
z%lGPTTxTxIV5`c1;=S0+@>e}DVguqKM&`^+B{a-NT;6*EE?&b0iu^1Zo+*|Umdgmc
zgBrj32qxX}rbcW)bjiq!&IHsKKra0@zpDT>yl1_tJ+Sd+&EL6fG&iBD*(nA@EyvOi
z9CcQX$RC;Dg)lb&OzNq#A$ow+Nh70G2O2@YEhCA{>3oW9dP76gyO|aLNA!N=p|?|3
zbjQ-`LYNKcqNewLSv|Y-Uj7g1ZG(==@wWzhS{Xm$pd4)pQ#j&g>o;{<9{hz~`23KB
z@B{whltKPt_i^?^#Z{%)6mT1CFG!a?(7mDuxJwQ%35)!3X8(W$0&X$a@S;%tjO)VO
zZ~|tsIvpy*jX-Efa|ytuvbs_{af#A>1(iM9?M@=t9F5~E4vzYK9FiINGHkGmLqlpD
ztgJGJMRXVmJc=$f1=TfUMRV9X!74Gin^@mXU!xmKNXH4~HX01%v`7FuVTGBu$dO>;
z-@p#$ctuV4sMZ|6vpEMX#GkT<3?Fh1W6Iblh;pY4D@rz9h@__aZp1YZY3EOA--m@j
zhW;*ql0pjn1g3J;VzUZPLgvEScJR7aW>3>24j)43ipy(k=7G&wMV+r1kv`;*c`s4T
zg5f7_S%UH>76JG<P4GqQ0WvhL7NVg-7*@iO?hf!C(+77n%h0QG@(y>B?2INq^N9H*
zz|3}1T-a2qUct&#Z<LX5F>ZPawS_{hsFJxuwjQ6s*12($ho)mDcQ4=}c8Nryd!ayb
z78bcS0T|cZM&&4s_YY5%@g6!UPUZ*lF;k&WjaXv87M(!QwBHdMJ8&!Yhgz44V*m04
zqOQoPbKC#E`b@0GZkbu&^%<OipZEgt<_cKP4eVk16{sC~Kuo=fXE%Jfmr8a0C!WWk
z4X%PA#gc6b6z6o5h<upm7GiPOUVx8P{E#YbtkS3gP}$g-X;9B%c?!}}3EtPMjIi1~
zLs%8>ue<+dEF>D$PxK9}FjDhpE=N8p@KE+Vc-9#qqiNXMDbPVMn(%7aVD)Qn9Ns{@
z)mz@^;_a~7GmUM-mpxBo<`!=B9N9OzJcsrqZr7;KJ7~**_Umww)Ly6x==;PzG_E@E
zgEjzT((Et9swJ@(w|8b|8<~;%dONP+!3AF$gZ&ab*HHnN3Lq@zcV6)cP9wWf^1R&$
zuLUZEM)-IJknF_0XY6ubvz+_V+*&M6wr$5PBH*`Mglg^hy~?h}Yh8vE6VMe%CN|pD
z`0W;<+6MeyZdc>AF2iyW@y>x{YCWr+BTVEjRkCdzZvZ{N32Vt!GC@FDW}?j(aD68x
zCgFIk+r&7a?0J^i_;@XCq{!H?)kdZ@S_yKc!Ai07xXF&<Ci{e&q#rj)DsB=hZW0M@
zvOR?L`XLE^t1Pu1Bs7}sM_~uDh!mULi^a2X5bp+c+7yb(Y`B>8Ae+yJz}=iLaL=P&
z)0s^tsdhYaz^&2eDG1vu)jIxeql6^I{cPr}xHZ3WDUojY1Rq|cA75<Giqzj^R+uMX
z!DcQ2SSm%b!s^0WfxuImXg<D)pGC1TAmWbCu)x<;q{hDwGNi;88!l6q4|ZuU_oKhs
zUar<Rj0R!5)jus1fQ6{{PpdDD%5z3%Sdl6)suGME3-?p+ov818NUF+E!J|n${_Q{3
zUlDOgj;Ft{|F9$UCRA!4m<4?vh%0R(x)7p7{MN!Q>a5b*Vy1E=LwgZV1Z{g8C7uKu
z1-ckCJ+LU4I2{c@^FdJ{J|_#XF02reVFbIntT|=L`hDEp#ojy({Lx@bM)2*sqaFHt
zZ)$#loiapYSl>z0g(s&F{_Dg({I3X#U}1fyO5VyiRxfBS;2w4J7<&aJdwuE0DGs<D
z{01Wr;O>g4x88SGSM0p_jH}l%j8bXxTfGm3iIKwsJ=nzOwXlxieRc?$U|amE5ok2s
z)9Uv{PnP6tP|&E05iwF%*bwzS$vN21M^R{RgEC0~S|PFB)))P%_bX82eAq5?Hdq;d
zsO)I;blsZlo)g(CVzZ6_ki81NSpOz;4*UeWNo{|?=^^8V7=MgGe9F=21Wqtm?SK_P
z8bm*x<WQh!majI{uXVh-V?QL3VFZ>46qgVJ6{uw<!T{8Z3K5E{GLhG?-a}^^V4!jB
znyhGgOuWxXM`i2ISwaasqSweSMVp-OVZ{Xo#8+fj%YTpGHly5H8FHn4q12(kB7?w)
zogy0SMD;qNsTi=4YCA5d2SIt>4yr@%v4LWc@l}^vX$<piAX6(TYoo2m*p5QFBD}|)
zh6eQuM>>!!P(QY#fTf796=t5zTX5v{7u7bxSi{P>^Hi4~HLw0}``_+9U>7hNO+NKQ
z9lx+S7N7AHVjIT&k+u9rAbo0a3oc@xR|Qx`!W9^AzEA{<Y?u#H^UdLPp(;Nl8bmL(
zI-~|$N4T(@wHacQi?y?1#*^5Hn=uC$Sw2d(Z(0ej`AFJ~t23NGvD_B$J`o8rj3bT-
z1OPnN2QnJOGD05pGTICXQ6d?J`avD1-dIgerqWb&Si13{%dth?A`lfCB0UAJCuDEM
zTa1syj}%77tep;;;#~zX<YjbIYr%+bynhnq&D@x4s6b8gHUvkY!{A7!-=?CfXS9he
z9`;2qh9ne3FU-SoHtrQcU93EYJjBm0VFzsTfHc0PDp|i*l;T10bNED+tdkJ*cW~ZI
zoF(Ki^PuzvmlBBf?suH){m4+@$RHCBj;>sxa8_XBEBlX12pT&$Pz$(K21$dwq5@V5
zbQAFr-<7Q{S%v|fR`0)mj8)FdBB*1zfYC4J4d|il+SM#U;Dp~+2|uTmti&gBfy?<T
zS<YYa8IR!;tC+R?22Dr{<~nJAvV1vjASPbI62>t=lBS%2^3voS-h$o`*L**1LKqeg
zMFCNjDB72tg`KMXNok?U7ksgNE?5H<x<B4Nwn6<IDhQq`3rbi3NyB8{pPE}*8CGq&
z5VsnGFBV^kVyF@1E~4lmr)YnCYbEl3j#&@*)RQ{!^Xcn>JpFV`B<S1$nM}v(rVHTL
zif%d=7l>OY(ce7XM2qd{KZvVw{~a5+6k>K2J%Q8OC2-x38QiC5@EnM}GlS=8AHWHg
zKqpR8zeYq+%QL3C3v70xwltyMJt&kyZ+!`Z9sDURGZvf2D8~|NbeYI%ldQ<0b|q}X
z<gb8a!(iL&%)iKZFvgS%*SY=4<5&I;9S2D<?M5%4^7Q#9@7g@;!^QFSxu^vg6i=SY
zFJ#+~l;%<7=-Z`(^ljg9;vLYimm@(Co`Bs4TCQCDFXdRVS)5;70_G=tj>^@CM0F3f
zN8|=?a^qj&KGhen5HtX{k$8T(<M8Q>dpyzlFg#jVlk~5Oso?O4>ghCHv6D3?VAD#V
zBH(HuopTLAY}>HFDi`B$uwbfabr^?kxY%Cf@R~=o`ei|8$F=f|Lx~s%Dl1-C<zgKo
zDrX%+YFhCz*5SdNJ!fhlorVESYFLOuuYG8gr3>tX78bK&xJUbcUHtK!edrr@tbJH0
z5VitF_n%}ev3X$Q{WnXy=jB*A5H{DLx@}ns)cI1g(zZP?_5%(17Gs3BX>}c*F4uDm
zSZW1JX#t`?ky6JR`J&fiJSK=C!TBlm$8_vwFY=#E%{P35EsG@(cE>Vd(Tnw3FZ$zM
z$WKJ7N(c5Kpc<iUE)auP>P2ydw*mE3#)%1m{3uL@I5#iCpA^>@x@KoFnPZMYnWJmo
z!DMu!OPId#gHWW%lS7(YSrIL6zqYvj1~<|ARy-)?i94@-@rNpm=y-FAZuB%yqmO$V
z%`9YQT)52PVPOob8;6Ht)Ok`AEKZ*`V$;H<_gz5JO`o)^6@t1^7K=8s)H-N89sfdK
zSE9a5nF+Fm$W>KegSt!XHWoL%Tp>t8`Aq=KoCVzj8xC1TO3+eq{qle=1`q;q1B1*r
z^zgFy3^A+sO|>GuYk65ctMplZd(81b&KwU6Hpff_5F=bYr!*-S+6ouJiikNDdp)h#
zw$K8R6nhPnV&;0-ME$_DIi>ek;U1(KL^Qy3(l(-7xYJXFJL<YWh#L2r)gGW}RI_w}
zsOQt9wK6f{s97OKycesHB(p<^2wn)e8~coW!q)dri}YdOpYe$_#XST6BxX=fn(BL}
z)%WrE3<wYGc~AOHjx&0Jhdp61d$C6kViAU&>B~&9O6X>=!g$lvEwA>pd`Vu*sLL3t
zI3{S1(bpgwWc0O{(bvpH+FQ}>U8vi8+SA^9m@GL;NsD$)95)D0W{V$$jE`CLgOJPN
zpc4m)VbI==nc5AC^d@cS9*@Da?SH9lYiu)MuV1+s@i+yNGv6*wK`$oiouVO4Ht$T-
zFL((SiJqi>^p2yjFsof)vjMfG3H2v<(dZ?dg4?0R;1nSFP7Dy)g(b`>60n5>i_C*u
z5CUTkF@h!kuGl0j`XoRTt%Q>^Ei`Z+Tsb6a_ai8YIaI{h;rqxihL*}-vr7K~g#Wn(
zqTc_?TSq!J)3N7k2HErDJul+fd+L&Wj`8Mp&AA_VIOo%zk>gGwWIstQdE3z+;G7F=
zzCg~g3H3Bq3z~B{7cH>y{-By6RqVClm*ENw6y>=RU`8(g6{j+YAykKCH8!LxVb?#d
zE1~%T)?uJliARzj6LR>q;aGn4_&>$}$s^ibx7X<QA*$Yhx=&rL!M6?N>*(=y9Ff6`
z)a&7}c>RzfxGjz}FHxT9m*<D%FH*%>Do)=i#yC(AyOPSRm`1XJOR)n3@iY!5{1*{p
z8p+R4Zq0q8JWjxb&wAEx>H(b4VsD&aml|%AUgyr%J_C~>Db@bQrXsHgGr`<|Ci9oA
zuV3J4H~kuP3k|foObj;Dtz3IM!PD^vFl9Y@#~)XfIu7HpkiO__D0LX%g6K3%HBU)l
z^n6`XL@g=3G^;(WpOV*lxh$OD@&yx2&lApZbp_7B0OI76JH)T%8FL8+(r7%9vWQJ0
zINEZ)&j9w1G;}3hJ8Kqw<s3bhuPut@a)a4E(!=jx;$X!1_H%8gYr2@^N=yc{N&gS6
zl!*gn1rn@{!|A-WACTI%%a%v7#YN?SUK9R|9<ZE__y0)w$`KyQ|1R;}{{iKOxArEf
zZBuTKQtUSH%i}YF!QwM5_lxOV=oz{j|H~^F<Z@|zYZaHgU$)0AtXf|u3=%J4!zYXD
z>Pv?iX%J~CjFm93L8mRCJt__rHZ>tDbsFKl9)y3xOvp(h5Q_Iv9WJ%q5FK?X3?{h!
zLXpwCnFHL-M8mS1`T4bCv_k_xQKnI>@SteTL&2f<Ju5aFtvx6<Tkf&FF?eR;b7EOx
zVbGd_5{7EFJgrSXwza}%b*N%UUfsAm$E!l|lYN<U!KjY9GW3TX0*AfqjWeQfu3gKG
zhthOG|6)l6fg4)??mJfhZtppc{`J@^9Wiq4)$cw1od17310#W@3sn1?j@klKTwt>*
z;MlA8{;Vru?;DQtr!5a(g=~1$@}E4YZGS<}-8{9NzdVHXJBl=$+(KI1g)fbeTVB=o
zj;HZu+8NP}Q+uZ?v4<`j4q79``+d<%8F7CQn(yMg0xCW!@F>2&dD^bbYa7RIEiD^7
z9l9{$c&KcUk-JZK<+z5}c2KmvTgx@DsBCzQyoO9^r_Zs+{e$G;Q{oXX>1PsbA5mn@
zCkuUURzQ1bE_HK%#MYZOm%1G;c?yI}EbwsYVkmjX>K;K1DmUdB!C-`L5I=6!G!1F=
z9cRsnZ-m#<fI9r(bv{3&Sck|p|A37vN-O~pFhEL0vc42Otqi^>N8$xv#6p273`y*m
zy%vQklWeX`r`u|d0EgcdJ246J&SyK`c}H#}+1_sd8;mwYx%P-xl$G!EOwgf2nGLpd
zbK*C5VgKsSqBXi?v#K+`br_!B#BNnl@X<EuPG`0%QE^wDVJ;ngtf%nod0tQ9>i{?B
z4+47F3zS)C)(nEUJ`ZA+85jg{aUMja*;R5ZDHUD_J6Al-01>V^EP8Dd>ds(e3=f`T
zwlI?;*z#`zvQLj3@<hsV(e$$*o7m?nh@Q%rSgxcniXZ_?iegwu=1Q<BOuLT*7Wkm$
z-hH6aYv;SgHDOYu82H#j(g@s=8PW(JU1M4c91%d$Ex|9kC40kOH^fkr&-J<?lTbO%
zrzDx^LpOad4q(dp9fr!DLvY)AcZBwV7eba3s0RIr#doJ>kF0D^pY>1&G9DD_NC<bq
zfB<J34o2s3H4L>%&^fNgB=&JDog|>4leD+d^!OIY9~pu=GT=cx8lRv*2^%B`KyQIu
zVS6em;cIw!v4x~)DG2?nP{`E@aQPiba|(yS{;xhb+rx~^nZyKEo9ke0T$tYqj2(}$
z8761kJ>+1TF$j}|sD#~^^wIP-*eng^SVBfJC(|A`jPG<W_?NvjI+A=j24;{tTP+VZ
z@$3R@NgR8^A<mZk-QqgqC-}4Qw+MfZhH>=EltKFCc=lcNizJo#v(b~GyzN<XU?=nI
z_EV-P^D@)8vw{ucW-Ld?o9&p&FzidQj&XGLmn8=8W*`ErM!oVM9xuQJHlLy*U=u1W
z>+mw6BXb{A+tnX=Rhv~prw$2lSXO1D7r|)9-|`_Lq?jRO&g~3bZ2y*i9i4lYcXLhv
zx|5XpgBV<^k^HypC-M`o9>mZ8!TLU0DxCU>hf`Iy>*GC3bJZU`oN|H9I@C7Vg!=Ux
zVhS_&S@tTa0I7eAz_GKDl$G;qhSrDCDw#bwB^VpS?Q&aI<?tMT=C_0RG)gypJi99L
z=DLW^^Qy7}=4lvlj1OjCCGDev62e-*R*`%d#Ej2~B89Ff_C@V8gw<UaauWMsnq?3C
zWRCVhS%@{LpGlcN^I1HhCoTq8z2!YeuqT%-KNopsnTib3vjh=JN?3x&4p@>4a5?j1
z>3@4Xk;sQmz}C>J!mJ{n3Te)zTww4gl9PBc0?$m~Ppp(+K`NZ>Qh4D95uDJmY%+uf
z83Pvkz&l{NJA?g7C^79<o^p&|35+Z#iroQM--+6MRS+?t5J55Y5K}|1kOYy6X|kL9
z$aFUyOy5r8**bJUjuBu244zz+F5m{tA8rJaBklcb>Hy)uAPGq`uSgE{8)A1!_>KGw
zFyeq1AO;zVdGHhRSGAuwpx4(Pe>A*y6=t#HpYhuDq@+D5_V{O*pKAt<=kfHNE3D2A
zI97pUWPW}CAJ)-iEtre0*D33n$*LEM%1PukU0}19^OH@eGkz<T(mHaXR`uo$a>Q>3
zVQoe-KnoiMXOjL(aWf8B?gpbeX7d~vF81I+<5w#pK2UPMw`X-1y__z3IiiPyEuDmw
z>?N(Zmo3T@mg43GA`SLd1`t?tSNVX}0|h+ExnJ{nTfr@Bb}J@YSJ6!P5M9<4w&EZx
z3UHn;7c8*NpONONNGL$C&0US=I#GDq?5b<zQM25J7S6gbAM*lC5dhmNr^i7>kV@G;
zNY0rEgtBRooK-VO^zPQr_8w0;IsSgUr)&Z0l8>Izm-sO3m_7Q_un=@c|Lc46Mjua#
z)Tj?SJ)`den@ch9di2N3GMq=(JPBpsNfy_8IpfXwTFj<<5S^Zn2wOfiD(OY!0&7HU
zLT&hsPzOYOormXuHhKOQJ*v@&W_S>-mxmBt%iKdmm0m<Hutvlt)RitGYCC%`0Ah=z
zCoXoF`c&Nf2(o7pr^ihTPk792t*D;+^$H~CVhodWS3!dEN_{BBeurJ^lTv?tSu4_s
zk&50=ov>^LqAXRi0W%Jtg|RX6d4gl~N@aybeVe{lWTg~KLaSk7b$B9iHcZ4C4NB3P
zSyMf$1`Q@>)<A|FjXaR|_^y*5!1W}>19}GMefOvdxaRjHpn>;?5GnF2q2>I%sR(H2
z7-;>*<6lApJ8%FqEnhJ413;+p2RMlbB&nT2Nk(rP?vxWeFj1)VW}4WikwDV4@>TDL
zaKbb79LmB=&MJSQ7fDScm31v1h(arvuM9;^D_-{=0LQWxQsibWIjdLzN2#rsYd}6N
zF6ibgi61D8jm`bqh0J}HB<Cza^&K+<1#q1(&kL<9SSML1XN52@kUNvn+rQw8a{|cv
zE6=rf;FDa7njv0z@<@I|KW`YMpO5E1+4dGjvLWNupQd>NW?EhnR`yhS3%24Q=dokQ
z{6gr)p?#oW%ehz+!sVG3>I$}u<uyHacbm5;dY;!w;@NKANCh6P6lXGipfpyT=E9O|
z7KWc6fUZN(O;#sLea!huLwq95v#k8G<r5_n9$pwR1{%%z=#INE`JA^Wne%KIyFqh~
z7j&e6+PMb;Q4u!lyb$UX4_mzbK^|E!L6=O3l4T7#zvYOXD&Y8nX29FpccnF3edB;2
zSYsnPQ98!un$xiuo_*zd(^;Hl%L$1YL-)KJa|kC_^5H?;N&mAZfeY~1wESvjx9Be0
zbc_?+PG991C%ltsgKj2+v<6^w9oj;;k!1Gq`?cQN_SOo|dJz@Tdpve<y-nhdp%!IX
z%zSz}=2K`WUlgO#nk|ZhS8UGm%+WVd_hC$GLa3Z))X$LuZEGQV2H5R@X8_+Q5Pzt&
zw3)g1;BK;hH65|l4DDj-O^d7!riM`tL&#qoXq{8Jvi@l{7Q-4E@>k32#kjUg<FCAc
zIt33`^40>}YA~-t#o&vfryJDA_mLMkgJxA`oPE3g=`bND5>lP*mdBe{!NW!1>*-|V
zF_Q9FB}oD9`o~tzEncU7vy0f0ku_=yuC$jdNX+$+D)j4)T}7{4fI8K0fa3#qv=^o3
z7H<!$-@n93gRq*U)ZgluF7q+eGToH=yQK9-6_J%trMiK?>(?ax>DS=>f+IU-m#@Qt
zDBHo(bzyUvSCHR0iJi2CiG8aC$6<i*kmtug#g!;9(N}Wb>h1>h^hc!0C+l6jYz(Kq
zjd2w~^dbfhq8FGONnoB@G6j(>3&<5+Bae9bHh|rRq}<!KgF<2BLxz-C4jyEqGm2fm
zqztFgIDW~y+8{f-!bt9ztghYZ@k?A_bIOSzi>{4IZWDJQ{av8X2^jXxoafeyo4-K2
zV{dIyqiZJ-Q`x?RhN(b%uDbeqxo7TVenI#-6T@bom)&0x7-vQhq9$za^+MF;L3r$k
z#^dhuVrpUFJo(v9x;IvN&f*8FR2RmbYz}{&_NW=`W2Cl2_rr9!dC*QBZLg%K4i*>3
z&Bd%UHm{DrJNbB|$MZz)%|qa@;dO>1;g312Y5?B87l%s^mYg~25gxaDE9LQ?N-zt#
z)@OwRhxXZdnmup?_sO7{Q%B`Q=*O5bo`sD#f+z3rh>#0xK0^^=6Y8=pQVAYs6~}^W
zU<41a!1UjX7?CUsWqn8qhf>C2Fg&vb1T549T<js>{ColcR-?ZCs)qm<SQEe|)T`|d
z0nf7Q%>f@y<6~k-7x8v+iNy5?5627C?y5$R{y-6q!E>@3V6EzVi{KhW0;$<!uoivw
zcWe(&fapa4gAw&e<|?WW6tPw*p&%=V-Z*PZH6Ij#58Gdjq@9CEP#y4Y=R-|nFaHPY
z*c|sbkxhau8^GIh+%ta8NyT=O#Vi@aV<pf7pUd%dXM!A9nJ0nv_)nCG%lJX5v$VQ@
zl67}k`a2XyWbojWRp!a?fOaT1jOoKDz!aA3J!F+B_Rmdejvw^leHut3(H@OXa$8d7
zDuV*`pydDC6J7lV+Qv<Ct3u0ct=!HKRPlDC2R`q#hJzQG4}YPzwQ6r`5PFg7Qdg?G
zb5i{$k5K&q66}#`JjYq1X1bI#8Kw(t4!BaiWV2KP2bPIcBN76s=H@e{`k2UPXusZG
z@ksTbJp|0pCqN>f?OPpIfB+X*6ChIk-X@0tY+gYZ;INtob+POUVp*UtOx0s}rX_^5
zlmbsl+(&`mCjyT{$Yd+3c26~q{d}tk2QWDTK=%x3b4YF~P0cOD@@20qPEkLXSoo;m
z>@A9v7O`R(0U`Q__MG)vbv+)1f@jiSji;OVtd+=o2}hAeA-)wd@$;XEOwe-JX9j_B
zBoc1KULL}ULowxv13EY`vp63fL4QaQX_KDzO0*a?+}YyV!~ci;vnpgeIreh%_B^q`
z@_LdwAG*v<N_T<H4G=<|e|F7AdsGl-&CfqWUb8bPF@aWySwe5YC~ndWk&AXCyeG-Y
z{ztiJx4mF9bI9kX$U%i;>^NWZtdGsFu+0AA^tU;pxrwX?&3QIKCh{cNrsvWGx&qm%
z{obj!u7p<Ip2(TG-ibRP6Zbt4P43JLF>&wp*2Wk^E+BUSiF4=92oQZ0URwuAa^icu
zCUnmK3a?#b$N!w$j(OJpk`#O5e~|K=ZG^i-DYN-x>&MED5LfN+e|q#+zy3mmjyLH&
zctb-B$Z?{Z<q{bD&?8cJU{dF6n#t-vph(=npbKo)p|&)khP|RIA?*2p6KUW+#(*{`
zHm~abN+<-sVQuJmRpa48m9u7$p-(e=41z@Zu-E6W##wAQOsc-W8prJ6(LY$UP_J!}
zw0*((^Mlso$2*@3vUM~zPMsxvB%hRm+UhXiq4V(M^bbUL`i*6L{&QOKY6SG}gZkV@
zUqEyf>)<gh=jefPX8TEEJw9XJ%!@)*p}h;otA*~Is@4k*R#gwW=-|icN@fFUN;~Su
z8ywcA#{wm2z?noaEAazoY&kH@DogM*_2A~&BYk)pi)Q4|J_LSoWI>gtqQ;@(aqVI_
zRN#1sscLeLiVvX`bf-auuB548J8D9X3Ymm7uw#~RIyp~md^%w;JPb13jsA)RbZ0J9
zD_o3lu@LCOgE%02m55~1#SYnj`L#zLAzMcQs9<)TSEX5+isS8b>G`+-)HSH~JA_~y
zKpedRqh1g@0VhHU_rBFa!rm%~mEnG2?A*2b_MF-A1K2{x0ci<c)#}A?KB%v!^<p=X
zd|0f1<5ZmsbqEB~A;GrHh-`TcZcz~sKi&hz-h&fzBo^ie55%{R#M&{t)Cczk&zFN$
zc-&{+%Q9KGlYpm~-JqWCk7qR{8%f}seKh%bX3fbWbk9PbJ@Xh(tyHVvuX6LaNkf{I
z0M`ew&wSC5G(IDY*xTUKl^y%Vr)9>OeZ)jzS*20dcu}I42m`Hni{Y5)m(YJ~w!{zk
zqjfxA1C4_poe~_DkQN~iak<I>CmwqA>-{D`cFe-Ag~+}AWM003aOQjep!t5h{2s9-
z0W4eBihc8C>SS;}{Dtt_(O#6+I^fmPdW_t0)Nfrc@W+!oN1+RSF3QPyDDC!PtYpKe
z+F_Z20)|S#q7sNZNWl9NvFCydPH@VD%LLs%-~VUFcj3(7<sx{tBLI&Hk7~x2F#(+C
zddZ>VcSDEr#>i?OmLf~>hp**P69UEU4LpGHolk76-&jHpAP>HuXNc=&mV+zER7W#>
z+u<klgJuS>F{y9ttkgF^52v(^jT>*c?3hKrE@uqg^=pAD!+rG6?N=WE5MQm>1u@Ob
zCpzB#m%U!I9bC-a^dF>Yn?rW^l~MjKiSl=0e`lJUiWf}LPGW;+tsJE{eHC(S{*!mG
zA0;Q<S-w``BxO3-veg4@1y+G|T{z$4=VTopucm$Ao>2)Kv&vS0T@z$7+$OpQPhRC(
z#rSHLQ#a+d%`$i>7BdYG#cGm(MaH#|-c7D$ykF9-%|z4v<h<QottycP<N?Qz234d9
z-InfyhyfU%wq6|to_(}ec(zSQ9gZb$rZ`hHWUhuYQ1-VikA5M1ocTh9sEA9<IlL%T
zCAOnrAJNZ8@8AnGstK6;BIf}u=WxNen~W1E4YljvQPy5LH8jBYW{6{xIbHoi?$$YX
z$?XiQ{0<juqj0Y<xX<z%+Ef&gyo7)dKaqjyk55lLgJL6gZPRsTnUE)EQmCXD%2N0j
zNt{;579s#{)4<4Cg0EPHM(uqM=yomLcvEEs?GgZ>sl-BI>k!@RM@lv;vx0P&TNGHZ
z4|L3|;2{`b04D~o*jQl2uEH^L7boyZOwCzqlf}Yc@rR>0d<17iAzM{=Y^H$QVe=1c
zb8WLZU_ap)y_}90<dDda%t<@*E6sVkAd82@a9a+NWrxtFbco;Nr1MO)8{rdrR`gV0
zvF(O@H*_SPfk3iK2VV3bU$%GJseg6ruYLMUyi@wPsrq(hA?4bhqulx9+cCBzQ%_OA
zH}R8htG0D!A+(8k?x`YJ>m|JE?El%2m#NdCrCra}g*Qu4NgKVnh>XHab|lV4+x$lw
z-T@7k+(~bjVeuyuYfx^b<ddqkE|~ZYsJG;PgSt%~%E7UItA$X0W}}nhn|N^)dm<@b
z(CW7dK;D~h+DcJ|hr<*6miOVv6<&$cd7$&Kybve0KsS}wrr@G8D2;1>uqYt@U@{f3
z+vK;j*~Y8ZSyk;_MteVAv$GRBT{v~dkGmWN;^(z!tu|gI+g9N-zKNe?x_;}9>GLrC
z65C_YNj^5@W$JmT7MJNRyk<IEQU4)JYcRbEZSx<QelL7LOYWqv4C-xPo_vnMe@y7$
zC+W~HKrn}U=y>UuGKjWoyGcV{rYgO3xbT_|c}>@q4jnw1(V^oYmXMa5)tKgUo*i<c
zqZU*NnRFzcBPIA}iz(hu#a{>v;N8)wpQ13hxs6|pS#lpakk}J!xrL9QY+BE%!N=y~
zM{u*i#t&C6n_yRnA6fdyDZ$MN-NwpZOzil9U^3-HEe;UB1yvibaO4m^am)}uQzR<5
zdG(gkQ*dhO5nr;6H!PtwnJ{o2-^9=1!AJMtEJ7>AAK9wZ(toLQ)`uK~)6sc6wJ78_
zs-NCTr^AnDQCijmZ%SB!m8d`Lf^1~B_>h^~dBh+k@{TutN=NK9Nn#}sV)%MMAHqdE
z@7|fa{o;DLbC-Zd>@sx=f{v~jx$t`U*os>9V|(uM$V+GVs<DQ*<S5LvA017#k>&7i
z{OFc29Ot2En$x?m?6ptWL*}DC0Us+;M5d6k;%Y7=5l|zEl1hIYRqVk^whh3=u@d~`
z14H^^6MvRI@Fgq7i{OjjS_cMatJ>D!3#-)lPAq?WGuXoKjqk$#S8rxK9*&H^hL?@^
zGP$d_WH}g35O@Iqfr0EzkIx~EA2~mEF5bq5^HHP|XiY-V%~&)59H;gmx~uq-Rh7Yd
zRo&4((w4K-e19kIruQPKXTS3_y%X2=D8>8FkBv+5g*4YX4KtJ4Xof!_96)oC&O7#?
zIT=+1(>jrLolZy-A}`6deqjhd<LZmagj{Um=j7m{h@L>|_ybJYr<t-{m;yoZ#}D5b
zg9~X(4*5V6mE!|827A*yFB35G;`q<U&PG5WxH()9KXPFV{tc!Y!U<S9^x{1;%TX5<
zR(LAZ#?Eppe3nn}dn(A0x2TYr=QO_%iJ0=v+W3*h(TM;S8t;MMW#f<W#r3$07uPS9
zgTw^jYUC>ha|$B;FX%2^V~lVmM;N=D=ouC?=vkUCg0}}Jnd$?i)yB{G!I?>Yv57w~
z3O;%oDp(2r2)?*-_Oq0ylpkMccg0&ZD2#dAB?k_a;%+q3k!ayu!oL(>57Z7hf|Io<
znRp(zgD=TfgUR=}r&2t=Hk{(irC+|Cv%WMbmE)VF38tjzh{xF?eV=oiT8?_HDSob$
zHtbB=R2v(_W<vUg;b@)`%OiY%KABjClK3Wm;@~qYB|q`x5k|4RfpIeihw#RS@hO1G
ztFbfCIp`D_7d_i*V+D%`MGol7!Cx0VS-tg*e#AX6PYcl9%o+BC9SRuf6Z_L0*kZz9
zOc3_jQiJ9p1d#eHkF@IrzwwW6WQ=qs+xXLxo5@5J1jt;O4CxmV;pSm1gzIqcvDo&n
zozJeo7qk!cf>V`RLc-fv+mbf8pCcDIByXH0#rnj&F;;@G6luB0?9!#x^#gAl#_QoS
z*9nplUWO$TOWANrninK|m7QF`)Q_{I7*dKKW2`p9QccSRnwQdQo<Fre{bTF{O82gW
zgvyBB31~GY!9Dk2;yEz5b`PD09`Hoi4co+PN}45C$%IJ+oA^ni{fyT7ZQ#12^$Y31
zyT_H<ke8`De&o^mF1*(IY(;(dU!`70q5^I6AMMuX_LHZ)lRg3RmR2w?oOW+j;tZ7p
z$zNopXbBc2{h85L8}HzdJbWe#ZOKlrM;(|0cF3{KTPn3dml<4#8JtRNU>y$YM$Q{i
zkyw><a>p`L&7ZMyr}p97xnSuO4wbGz5h^@PeaZ{`ein5eo@M@-Ou3T`LS&?K#nu~8
zp-~k{d;uF8UEH3>D|ka)6nMP2WD5b3^&1&{ls2%Z6W@xBJHX&IU;S1CMD1ph*|rd$
zWY1-Pfm!GC6{sJ!?H6p~M*JQKr`ibIxOU_Fcx+T%_e&Y`Y$tYUW!5bRl~J6;gq|U{
zqFo(9#JhouwzWH@!uh!heoxPl*N7Rx%CYgRwoR(>xUrJ$s25frz@>n25fQd!21Kh*
zij`{xE<J=Pvp4ZYAB;(I;4$s@r$=D90l@gKI!sus2_dIO<{sx_5%_|+4A<=$bPVDk
z-Yu`s;oVR_Op8{Y%W)Asc}J+H#uC_gdw6B&Z-^jZfQ-yIfU=z&8xVo+#fj}Gg)C5g
z(9%Rtm&q~<h-9)f08z4SK0ebwWo`077F?%`8a#CfxJNaX_<_pkEXvwjb<wc`{5oU<
zjjnkznaDMp87l~Xrptmawda@4uv<7yTCg-!KFF!kz!F_lyT{u&dKK@gi`K<Au?NN@
z7cCnR-$dNTeG{z|FAn|5lHSGl7;rRFb8su!HW!~_+&FS@Un(@LF4piakZ_Imn>rn1
z5j)LlV=GpIt;D;Gr2I_kpL9apX><xl{lFoN`mys#H!(^GkweMAQrMlB^rXSWk{5e+
zCU!kC+DZ`HC}}?WPuQM&va!KR5jT#?WKp9kUIZK1UXx5*kDoS#zypvFVfBmep`+4}
z?pJ&hL8m@^g4M>0qBhD~Qm!GrttsAINkJDn2GX}vbA?{gDi_nxNr$4aK)#~qF)5p#
z1!e}^qnapkPVKt5x5KEB^S0nZ;-S@jMlf*zjJF5=5|K>&j+Q{QCqbNXZQwy$@~%K`
zRy#MbR}OJ2jE(|irF|2AV|8eMHS!!1vq7~~3&h5HTxl!Cf^bu%x*jtT&VsiLX>2LH
zMM$mCMIums<^=+~Z^&k9RJn$Y<H*rq%Wpv~dmsG9c3gENCIS~O(7l0VTOBFFW_4mZ
zFH-W^#!s<!yh!W{wj>FjAnYQ`zbKhH2<sGlsf}NaO~X=&8k97oQd961Ry%LB9UdaG
z1Owi?u2ID|3HBH!0fG674lx@vJejjSD<Z3n<&AdJss&>RzND`u+-WJXJ%|wUA+-IX
zbrnzC286vPTvjCm;lsSot+K2(vbhm#{s<#TV48w**a=4PzO{+^5TV8{GAF(4eey$0
zTB;1ysC38SOc^V|UwB0?^1$AO3S~6O%C@YoGnTj28Na~ax!<lcV)$EuzwP+Tey7eT
z#CHk)4xzjUf2ZR5Ec_Y8#RbLsUtw`kaj_52YSjR~8-E4(dk=p{@Mriw^<M!>3v&=f
ztG@ZYI%E2pI%C<Bb;kAIuQT4p^$&2b5#JZ%_nPn48Q;fu1b>eMW-h)>{9XDCaE&e)
zZQy_IUm-7xM*H-g;?cu~gXGb}`O`mQ<ml0(Mh8ZZF3H8y;NZ*lL>*@t5)u(~#aS$+
zeBTu|^GlN>GfM=-C&!KB)fjk|ARzA?<SN7((;D)xEDUazXUi}aI<L_x#Ofc#IQRx@
zr$8fK@QaB4KP})$GUWg+To#^teQ8I5NK*+g*>y@0AJic>iLVhi-VDNI2y9M2j75mf
zs=_g)*ru3@+FXLe3%EFo1xR7$ceyaSju)~o+<uY%l{)>CH<q#<`gij&IAG!Zt%WN?
z5FCB_9&#L!DEYeVM}Qh~Cdq^&L0YNSKLaABoX=yVbRJOCCF&Us41x+X&*b;VPu3zS
zTV5rGAJ)tPO|#u!DM#zM@_s8!5O2As{vxLVDaU?6-Jtz~<L&>d#cM!%dnFzb<hGjq
zw!MAw*yK1n+SGKR`Mi!Z&V825c48IKyx3OT@N~{)wIR)wj4(=&>EL&D4Q%8sW*V+a
zKFJ%oeN((@X@{J=Lf6J&H--ahqC4!o^u0@G@Z!ZtN7Ag$9fn-U9!I3&mD8QNVQfit
zLD?=$BK%<(*W7gDb)EpS&A(hef!V&Q4*6#?R5&(uaCzmhS%&)8PbnXV^29Oa`qV<?
zK1u7hJEeB~nw>*#AcWVH)-V5*a<+cXG3D`|`D=S{W+JixV6xatH~pcPzwFJ2%CQVJ
zHO)5LPm>t&s<nAzhfJ|?=5s7EnnDiDo%t|jgt0d<E^}b!cww9<KqVL9cDyfh5O-V0
ztc+}5-n{*m=oEb38};M!f#}JZ>CVy=sYg2z9qf_!!Eu=g8_0Li?J7*x_sEllxH&@1
zdXGeidNN<FZRbO)?PAa2{<pKYR(-p80oc(WXPUY{UvX%Cit{ojuYj4P{NMM;tA;e^
zqn=b&7jruBc&hZvSO>zo5SiOG-CYJWFQWZ|Jqor=!W97Er(jiLMK;QDbsOW&8|ULW
ze9|A<h``0_f0w|;&G<@xEWPTZ<ALsUu@{+hu)!GLi5L#IFXIP}Cb5Yb=~?mGauiDD
zR}T{S$gY=J8K>UieerN{-1<;tefn)mI4du`TJZKwI2H!=b{Tb4(S2!T4xk4(0M>2e
zM8^XnVgZZvq`x=_>;wla)H5ObYq)u!>MVg$p2m>lrErt9;?2uMn8hz9j^+@$FgUsI
zHDs0drT@YjArKD7I0pxfOTuxF?Yu-7)Of2d2Z8-eu&)m66L}K&<$xnRmlud<k{E~E
z4`2n4Zp;1>7m^!L2D}@1_As>?a)U&Y%w4$e2-B7SoF_~Gt5Ls#dUK<+F0e<Q4z@Y+
zv={=O{yCfxIUT&kq}bTuG|nEr`-&DWbFit1_R<W10yXM4bk3O3^?(-s_3Q>oUN0oq
zuSXi5<gU9UbI;Zx`6<Y{NB)uGUZeb8l3idA$rrgKzepN6t&1eKr~`h3rn-ayXE+3|
za|m3g30#LbsVtve0uOo!{QFaR1Y(t4qi%;HcX{dpdkFmYYKN!g4uRZf7+M!K6`Q5t
zBnrc7(+-=Pc$|gN)?zu2whxxV2W{Gy-V4f_{APs%pE?F!pI=M(LV<sd@Wah22mS^Z
zUPp6>yY2J%j=szTwYw;GFE}iEL0A-dAsN{nZ{F<@y8=KsW4P~oc`O20jhYQD<+8{H
z_OR%_Cma^xQDk;r25G3FJM`z%_Q;OKPDuSk^aR@zqde%Z$w$AFD)iOwc+k7R8a<m(
zeUIDdGxwXz(HPu3$*tf<L<&I{bt{xO1QT-2<m|9jE_>EI2V6F-ad0!z<oIl1Pcn?{
zm3}+>1-G2kn0_}k28CmVk%S+RgPtYj6u$XK&%+<b-{K$D8B_6hHU8fJVV&_h{>pKE
z5x$q>@89ruJ^miVJtN@$D=2g?^Dm0rpFUg_4;$|O=7oPm?&nCk9OcaqfPZ%LAph(i
zJug?FDly}8j+1TqnaF|DC?NjbaDtpf4kkRqWAY?&{92@-dx%7i#M3OYfpv-n*5Jz#
z1xzGR0t-?2Fdo$GE^Dq3R5--*vY!hjeAGLQd~S?xu3>T8ly4QsA0Dix!D%**1`&$|
ztxj497KCsBV;VeN17F_T7{Y&Ps*&^$@X>UQIh!s`Vbc`V4WAPWLKhY<VRT!KPhVj~
z?>C>pE~*EAoJVQ>?Nv%0cJyNBFxu!67gm?bMz~9Ghi?@y8kx_#7?AwJ!&>xv4!w6l
zBXU{rK6j~ra{=kC!7*Sc3-7H!w!w08s7sOxx;ke02nQdvqs}i^s0$X7RupPEW??B<
zF*q^hdd>Oc`nWjc%bH(RYR#@Hv*uP+L>e2yVYBOJb;iQ%=ZHinDQr*9uJSKTP7t)S
zt7@#P@zi+L#M)D=C4u<Sqd4Jje$|EXBS)jYX&>A_Id$Rvsq24HYK_9XeB=Lwjf&kS
zHI8+uUtJ4*M}I_q+=(BVbql`<w~69W0nd9In)Mx;=|iN=5L+9q1!>5I^VjZFH$Rlc
z+h)y*?2<rsNojUTnfd~{3}bhLz@Qt+!VR#Q#<mEW@muF*zdAPi)r#y_&sF6%;8vdz
zS#Z@n>tJnr?O$s5)P7u>&AxHnO?ZKwb<ld>+JaP`moVf~x(nsm?Av(1EtmwK*DxRb
zc^v|=A5QccAoT`dxwFdO7|uqk%G7#sxdS(B^}9!}$PCsmAcWRB+4PknIfvtgIf)y?
zq<`CL+wqpw+&^bMw*1)n-cxm)^Vsmd+}ie)p?5k$y9<B;s|483ROB6;O@u{rs(yF4
zX;_1~^2EF9vgOl}U6~o75#uGY_L>Mw)pw4!0J7IN0UX%%KouSdyBfPRNTRJc16%Ef
zv(X?Tfgyhw?~j#!VL|jt6jQEo1ILs_GT10DbINmFl`Cm~MbC6>qPqDo1M{pK{E*A$
zvU$l(+YzS0tBml877Vo;k^%nV^+>pbX&IcSe(2mHkoCDa=p#p~DT_ff)1Med_K!0d
zBE0YHhE!rNU>dwd7>UuT6mR4GmH1@d0Ke-h;oui?$QEO0t>#iaY7?wBmRi0|HDE#G
zyoRfk_`7^kF__@fP@hG@;kttOCL!7SCFzX$6CVd#I0ssQ%@K)U;yv_8zwIj3^LIqn
zQf-88)VC6S@cbI$+x|XJUA~Q4s3P%kbdn`RTGIXSRi*(dQ*Er=2>+xZm13oEWA=|}
z3vF97X4}j#M`B)}_a8~`Z7`cXzf$N)_CF|+sqYg)WL+w>bs<luu_>EM5Cztt!q3fn
za}|C`2rI==VmL<A1@EEJTo0fH4fDd;Hgdv#&~jL|ybdHGetXl6wXa{NQum{tn;Zp+
zaOD4)|Bd`}xU~F(8IXTC5qN`-%moGtka5l#5!sE9=Kpp^*z)R!QqIY1e8$a~76`K<
z@2MY*;^MBQ9Rsj@iZO3Nutie9cc#8tU}am!%xu{cJ6!$S_?Ag44#SHy9{8u!_Xkj^
zc2{a)mC^dGIpEvM)g`<|(08rQR)1Z~uGrzLQk!_Qdh3;~R~B53JN?$qE$Kq*gAf1J
z+KK1eHY`NV51+GkwwBfrhYh~PdOyE{4gTSCH)V={^#TNFEvZMY0UDpzRM-$!w<GKe
zV~IdW{Q#n%Dw-Q4yZ^Hx%enr~vraeB!~z`nfLZIu3ty=X|BjRAM8f;VgE{5%G49Na
z`3;3$;TB9|1MWThJaYXwKVYc@;79nz$XN>l=6-<T$S!=w4^}mr&*LKXaOG9z8eEtS
z{FQ14Dsu`h!`V($A>37|(0VwHDy+VNrsCVDm=_W>vcA!*;RRk|WLCMAaU{@Okdazl
z%%<@CI_bgd!SExM;H`!x-#p}(gF848meC<$%J1*fOfmO?gMhe7T_6x}F>KlXnGKPr
z@q~Z!{-eM=@QZOx1RJla%~tQA1IzGX{BY^L#V<pYjcJGPJG*sk4Sdw#i@yoW1JgEr
z@z4O$OZ#E_R*t*;GVDhqsv7dA${yU|8*c3IolFBI^U5ACW|if}D?VePEw90r7lCKq
z0uIb7@|{xZk<p878GXQ!(bjJ*{a?%H%KwFY8fQX2N$tF*BG?mTcE5HwPdLAHZ%#PD
zX)!z=iz@vGYiPelSiVFT+PeWp*NOP*a)f6O`yRmFP5@6A(8MLn<m-lQc%Hxk&DksH
zn6)o3L$!pT9mVVL$$xIV73I8_Ea7KIF`?{ospp|j;5@%$1#l~R;yp$~Bka97<tzw#
zEk2rNnSCG~{>iDx0(DpD80KrQ_9{^6&xXn;W|A2E)4z=`)_H%g=$Q+9=*mNTDse94
zJQ;e-N#aTb@Ef~4PWS^)$0zHz<D3EZqIS<B92?mo_DO!XJ5k_74}%q(_{pWIoq6~R
zv}2xIMMqrCkQ@~!9Be~gpniaT7I$^(!kcBNq=UkLXyKsCn^$*~lLVdVx-}^;m5y&x
zHcC6w^+gZL*B;YV?W9W$d4a0+qIBUkO17fDl0!KUC}~&Z-P2ZEH;}<k$F{GX)GGJG
zYSrt+1mC1f*uYOoK;;FKTHAQB<w&um0lLoE(lxBe*T!dOl8K!tqwm3QNkC2Usx@5I
z`BvwV;O4FHb&%9LsLhnL$wXOR=qF@~%H*Z-c*CRJCckx}EU%C#+m2Y^VI;M_fkYZ?
z(6!?(N0Rt?4ent#kXLwrAU^SyKtf<h?W9(Ekj{`cS$X``kQb=mKk6A$7hdyMl3EMn
zx*i@G`|w2I!;|u<)By0P4I8rA9SH`pnQg~!9psc3#07#c7E)VX$U2Bpyf~&&9okC&
zh)y+*H|vw9z7Z7V!x{d@6knt9`I9(j_<V@IKt&xp!;I&y&C}Q!dOECr>a-L4Yo-lF
zKo#$w5KOFPemQY5du~Fo<y-iTgeUR@|8|6)z^}0+SNO)OWTFzER*Ij=`ZYU3pBSx?
zPgX{bwuX+b487Z0|L)5Aw_77`uZ+C8Bk^}Ov?KIR0WxdY1UA0jrZ+i?u__OxASW5x
z4N`Z9Rf~i}*yVGqHe!+FBtaTlgA*`Pcz`0bJ2khV6X??$F<w?=cd~6GP+19n#?|?F
zmnSde_3ZV*N54U!6mKEpaNrF_pWF81EB!DET0`$lEWj$GHAQNdrwdlfMfxk!GFUUK
zAm0D^*mTXNLM9p3NFWd-BhI!@*u4)q+aQ&F>`0W^S81H~Wu#kiPdLtYYH>=Dup8}s
z7KiLOxrgaKKxMw-4#mPKao`xDg81RZm|z?+*1realFo1~MarB5b9L-&gmF*DtGpxt
zGBi0fgNVAFj`t->lxs++%tA24M}}l>by3|J!@>6Umd2-cIrEv!h}OtE%eNM+jJ(q-
z<BzuFJ5vVPSiYrTW&OK^d0SxKPNz94n?vtH3!EyRtm01MR-co^G~gTr1L7e{Z$pOK
zI8cc_vCm8QVc_QRTt9FKGJR=mj6IORBm<cVwn~NN2Mbopg<Xq*c!nD9j$VS#TcZf<
z?EWY2`r0#V{|Pd)l41=qry-0kBaN*HJo9yl6ha|#RU(ayj&I_17IC2a5N?TYqQn|e
zoHDq^2)2yGDiBhel%z3B(j(*PTa)@?6En#wf{%V3!Bo7q6+eP6el5C(Vw#wXFS{+A
z(<`%%WXOdTStH}P2D(I8(*E#>*7`Sv$8V;;3*mEl^{~G+^d?93&GgsgzOW{-3l$=7
z%1FHF8DKmmvKM*K!q6M>Y$U?!jK}ZAL?;&`pEOls(+)?^sPEj3?r#r}b$n79RgeaI
zL#zy%;|64zi7;ZZvVF(QQI$@MHw0V$55^ME+!%Y@1;g}zJbrjm>_nWo^Mrm`FxtcL
z-Vm#8jXb_G@&uOiPi*Ng62Jq)UqMHV-@k>{gPVN?qqgGq6I%{r!(jVL-^k3vXct-d
z^^XIsa0zXN&_ey=)3!AGrM>quf!5FyD?{(K)<3?o{)yJe6Cfu8PCZUeJx*AV^4_%9
z9+`x?kAEuW$8(r}O|_XG4OsvQ=s;o@Wa1`_t#AnsR3gC~Gk0||w39-`y?hZWB=%zH
z8`PzxB6yAjl|komq>;iIS;LH$d(dwh14cT<7^t67;Aoyj8nqk-Tl4`YknC%K_`cX_
zT0loIi;Hk258D@&u_>f1nD~&R(#EnaN8p2lt!1T{nxE8mTC)0%AJ8w;{e9P2oxzq@
z0gXh5cR^C(-{m^;CU*lL!*#1rvNEwxWLYoW)vu;IwhV`j^~sp@!GCQ~A7FBT{FMow
z-|_M#sK1DT9&Iw)@aP6s{{tveNnBf{*4MaKfO~8m2}Yfb%GkoDp-xvXLS7>>JFUoS
zChkO5GxvRUt5Cq4E8GPeS2I++Qy922Gj7O1*eo>pGsWpB=CM`3b6WlC=mo*ek$0hZ
zutDjb3kd#JfDL>}?8w?ZqyVo<7-rS4W(cr2efubwfWMERzqxxM$kx1{6f0?s9F=)@
zG&3r5slHnsyVwe?5hK4QR_2WVsMh+oWlFydC6vdvS142Y!(J0i{0Ug{mDS^3IOqzI
zl75&EBx%a^;j3ez{H8@*b4_bq2Gg@9p2nW^8Ys1b=A05o-<ASv<`z6|0dA48`l5OF
zQY4Jps*r*#(!M5^SM?rNJv-mM5h-j`Q-pHA_Q-1pcRjrchl!ZJM>$oG;h~Gh!$Zg3
zfQNZg=YGVhb3A1J9Q_XncI0gcb7Cc~F*%m<HCelt#I6axXiw6AhU15N@KP?a#PnNj
zH2XjEsr9Izlv_!;g@;YZ<o`?E`@qLpRr&vue{^V55+IQ%6$%tV0$40)YpAxhfr<ns
zk)W=u;#%1uu!=M(EmGPriDo(-tzTP(udGWgeq~p7msMPf77S3E0Ci1km8exi>FNy=
zC4Q+(z}S4>pL3t*nVBR-{q6Vnd%b>z%=0|=|2_BIbI(2J+;f}V)1X3BRpAn-850%U
z{ZLr&$Eot;9T)k|E?jq7Q9Whu@=5hjVuUDfE=pVK=90F|+H|6CW{I0UHG2pn&!u&I
zER(g-)N-R2PoGk5{$0MPOjbQU@u{G*_7#pbo)ZI#)iHBp<F7PGLf@h_^ba!&;W1}g
z1bC~#EN+?vnso$tpPI>v)spS0>JMyB73ASPtlgdOLRB{;r*Ql(i3Z~rY>fQ)!DWiy
zee577rSuYw#K}eND}e5YIrF3;ZE=I&3QJjTgLP&&SeWfwp+jY9dnp{8lYE6fMYeMD
z-e=QUB`!dTU<9t6JOWm2kn!^B0iW+Lf%&JQM0p&X9_CM2n)vVzKpMdOxQw;%rJn>f
zuG@1-2RkZZ1-J`Qv$u8(%8fo=T0kH19LM>XEt#!0Lcm3XrYq%6hid*Bs)@1N7T=|G
zX%6!xNVtu|b?M`wpJyQgAN~$99?-*s(yuvKw{0KZPI$1f4@m;b=1pa-qq|Evo;zw3
zp0hSN&R=T4>N~JK4QNm?z56%{s0c0rKxI3OZdn)+%-~@*@P;&1U7d6r9FOQV{K_XL
zkCwG0SPDyJ^eQH5G|S;|FP1=(w+YF(BogTUMiVY=@_sbIFbwCTXDFU8Plx8>>Wa4-
z?$)xHaLqm@6Bk3JG2_pg-0)ac_Y9^$aZ9VZY^5)nj2|m3Jkz+TtZ{T>lbI=Vt07C~
zXcj}$Y*x|~mfTJBK+R6jt7f;4rkVnqX5Ye)MAPHpZxqAJ_HTX(U?P7av(@N}&Yl>3
z@wHmRwO0S>ir-&Q@e$Mj#bf%VP<s-=E5OsLu6som3?)9=KHI-ER(0DpaT2q2tDt8M
z+a2S+mp?s*-va<4Fxu3nA~4S=Y*UD{OT!Az`*SK-Sx|vaKY-rv2+<oIZ6U8HL$o_>
z65KhN_}*@y3s}a8<i-E3c)*HEW59}+_e|3!e8_DyqSSMIG~cqgz0PhGrXZr&1kwmo
zkXVeixcg{t2%IL#0E*V)=dEW!n+(A<pyGRtPxMS^vpd6@9uJAm<pI%I77-oaF8Hs2
zZEU$um<rOuoh3wdKtaqbdO3X3;yUh7lkD(GHS~tnH<r7?ZxI^|72CN%Wtvv}y)`yI
z{3&H%iz#7_Z87!26x4<mHjo3PH9;hMVoSwA&mvJyu$EjN6nK$gT(H?5j_J#ULC9w~
z6BBOu&(s~S(ILsg&A`0|;{b|&TkIhhrEhqQ(~HwJ;YrIHAC|r%!in+=!Zq%eVq9(r
zE7}hc@({~x4c-muD!C#E*8)Xb9K|QxwZ5WBahj(Ix7^3&=0~v}yC=+0$qTMJ%)rTn
zRv&9GW!N4a(Keh*=#P_0{HBDv{WIE_f+Q+*qT^CI+3q+AvZ&!<M^<RO4<yIZb~-rY
z4}x_MkSRc(|KyMv%0B{fZ_FXQ8AF+xkL|Nq1>|N086H$nQ!m=3jeo_P+1MZKT@qXM
z-6gRt{H1wc!}Iez_wn}|{$ewZ{;y=ljM5o1%4YC9%D-~LEAny2WF}ts_>x$CA2vNt
zFNyu~drM-c@;r<0s|f!U-#7By^aJWGDJ?BMw(MB`m6uc;d+agCmK=NRjAM_Dhw^pq
zGXT`_hWP5!k~<{mjwSy!mY0yOK*=fLwf8O&B(3WHN0OKcdqZPQ$2G|Zm7~YR<cyB2
z<XhYoUPdZCrtIpubGAd)Pq*NAu1`2Gq$gcqL#`aRy;T!cBCkw*@3SB?w(9RpK3Y_^
z;-EAb&nMiRjcOZLdwRb}DxEV!)iR5MR^<yZn}I?_gK0xT`{bs$JMmtIF_zh|ld1|d
zCZ>Pj_`7zn178p4$g$8D%oN6Rvms0Pb^2xMc`V=1gauyTg2D^niwQ_M1PQT{9VUp|
zVFF|+c=zTc+?isqq)O8_D=`~p_Lo(X0lWYCdLvz?Xq!^J*N>n~n9yauG9f3&*~YK>
zd-8nyDK9wNU<UU1g<i>g5i1lNODN49k01mywHq<jGv=q`>1lcsz^ij)O=*Gt<$-K>
z9rKNYz7!g%V8pa|6^sdmvrU`RO%L`pcF|L>g4xyAElq^JBXjOO{;StN4(O3L(w`*D
zpGH0NWmJ|CriN1g3*3yG3S{|t_00S;L-ovCZt(e#<+r@HNIfIzL+TOzN_{YmdZxa(
zN}uuqx8>snRp!+*R;8(Do@k4z{AHac0_qtftDd+Psb>`4?0)x6<$&aiOr;*tuc>GB
zV(J;an0m$%6su<*AWrHLJ-vEHZ<EzC%2-rpRw3rcL@$%nGxrmuGWGQ88NE$a&)i3-
zMp9|@ZWG_$(%mAesYmpC6!py0pHQzOjhjz-fx8fqWTbJ+t7i<prk?r8^*$d%y8a|1
zRH$c0sK>qbAEcf+35;a}Y0qiYGjmY1_!YUuz3(5xd4Cl3%-6sfQ_tM)U&v^?08G?P
zJ@Z-S)@Petby&_M^-LP$BC9J<&v2m_`UUC31hw6bDZa#A=__Mzelza3$myn@VEW(*
z0=wGalz^#h8vlscWMk72r12YDf7{b~aAV`ap2lZ(cjr|2?#Aa(*$k*y=-EMu_;hD!
z#6dt%5Nu-Ok9>4zi`)CZLNJ`=1rH_x(uOb7)RSrL$zqb&v@?6vQv6Qz3_oHF&d#)X
zB=PP_Qp4w@&2LHSk$b5hmCa@)GS4N*!q0xeWZ`ih!|RFI*z}zAG)>QK+^Xgp+ocz;
zvk6%w>1<4If?7a28-X6-6`<#SK$uDty|DmxI8+JV3UoGMInvpL<w$1}mJ{l1LfwpX
zHlc1tI-4-RbT(lc>1@I@(%JN)jlm{d8^h_Fvza0Anw<gTsisYp`=}ry)yi||kixp8
zw8^8}tMoZ{zJ%V-Nl5eD#;ie9$`ifhP6RtlPWfA<IjA%ThaEA&HvDxuG^X2pYVezy
z=G1vp4ac+6tzELqH;TTy@t|gtN`oc7$hwb`Ksp=4qSVXM+4zAJi)_^%x6v}7n6qb)
zNv<<=n#5E#J56P?Qz{#?q(02~H?IRt+v+h{T6#CCZX=RfTC5OMHhP!J=2Gc%9udZx
z%BBY~;4cuv2c29?@{hEm<=DAOg20`h?BKrkLtaBQsoMa;?2l_W)CTJhbTZ30tKwbB
zpl)&{tLo9p7&P|XK662Drm5>X&IO_t=-OQxbE_dv-e>RdH>I0xWS-nZBQsh3n$E~x
z9?>s4qkV|}Gj_t5d2)}RCu?{FosrH+y%L7m3$xLXzb6_J>5QH+<as9483nClz@O28
zKNISVEZlTP&lpZT!w7m#p8-lY^=Df9^E#t`!|MJ?I->^@?ju);{tB9=Ga^f<GfJT|
z3dHi6rU$*w$d?%DjQS<wxFbpi`Me|48Ku0=hzz05=#HM&6bxF*Yi{m9e-Y`79*lHG
zDbw6M80d`pr8ByNju@0EtC13#?(jMz$}^o&%5+9|^faY5wx(!~rp6tD)E!D&pfkGT
zRcpQ@Uo$$RRH!pj2TW)54XJemC6J@vbVgn2#vReNNQ%gep?boddZLgUUwhyw{(_td
zSzL(GpkYs@vBxwEJ<`#9UevWnFmZdR(6rg%=S5Z53es7bsE~G=3Q5tXLeh(=ko00I
zq@AdcPEx_vCVI{oqCzTRGi)j(E4fI8H0;+GQz7l+T_>X0nfX&~!@srI)@Rh<t-Nov
za(m2<1d*JIYj)S29xgqTlq3Jl>|wh1bU#VDhu=YdluEmTg?<Tgy+rVSA@2oBCE2DR
z;o8;WzHX};%ySn?rCp{}>N2HL7suiamM#bN?%HT(GZKJw*<|R7;4g<UI}DL_pk^xG
zajW?)?r*J?QZpqqOV{;6cz#M--N!x}(gDCH3)Ynjo}{qrbZy<9iT0~H`Nbto`@8up
zS>1?knHDXokca72$7N>g>3!wpSnu}OiTJyzG1INzy+euQ5o+NmI7?!)+ncZ%nfo9$
zK!mJ@mav9*Sq<-;zJ@y~EnkDa0zY{9@=KcCCw%$C&!TLhiiXy%sxFB+yqKh_`z%Ap
zF(Vjb!ndlf8jJRWpP{KCp|rMrGHlz;P|f<*9eZB^$PKM~R{afQP~W&?ue5WSrakrj
ziwqJ#q}Cu}KKJBZt2kBK{N{O&e0vYJ__haWfDw#KX^Xr6N)M!U<lZe@Wf(pYHY5oi
z)C-y=4NZGi;YL->qESGt{_)AfvROc5P8Oy~cPliL)o-(JfW>nVFMD}4Fg!1)zGC=G
zQYpR(<piE*RstHoicM813d2mL7)*Sr6#WW^O7Wmk{DYGh$y>ZC)~}$x;AvHgR~DvY
zDY3a7s1)ses!DNAVV1BZs1$olrPz~N*JCQhgSN69q;H{0Q4Fpomhrb>hp7~OM_@O|
z4)fF_m0~{Yv?@hE<9<I|bODv3K0}q_bEp*ceO|{Tm7)R#!>F197>4x$!y+-}0;_@D
zm@@0QU!+nzm{%#%3vm)&rKp4n_wKtxQie)VoM~pOxKdP#A4Xn{>pnix78Fsxo=|(K
z5~M#0KrkGr6n(*O{!&;lD#e|qQdESg6btGpb1!c%u18v{5K&Mm7Njk8-zROE1)b=d
zS>nDuHG9|~X8J+6KU9h~n&L+E;+G1qQnb>u>akRc)>-=sQ3aJ^j|qc&q*C;p=wzw(
zj!?yF@R+RLQecZaJgrJm^+~0u`U91sHNgTxl_FgTRf^I0Nu{WQn_UKr8xxSoaBYYn
zQz_~NS*nsG++e6uwDuK1S1Lu{yzaZgQcx)}Sf~^gu@Jw0w()yRDn%7qI5?;j735O{
zD#akpq!B=+SUdvW=F>`q(4bOOzP|+K%ZvInJ<K;)n#n3f)g+ao)wph_sT9>XXc|P#
z-lkP44wy=@E3?%`2)Jm_LY3lkUZvROVc}JZEZ_zouTuN~I+)=XkhU{zJtzY<Un<3C
z2#-{X0{nT1owrJSHLX@rDNL&vkfCA?)Ekc#tqCcCC%)1u_E4O(ipt&WKL5pF#H+eK
zP0x#Ywf0-43|P>ZfE_ASEDoZUle`VqMv2hENYsW972Tqo?}e%t>CKASzxAR1Q%xHF
zFqt_R!)wC*{&~;=SM^1@MWvE%@kA}$lXy!FUvc557Z#o|S>QD4#X(xF#?xvwp023z
z3DYp%V`?+67`>Yjie}4uzfcUj#-4~&!!zBIG3BZ_Fnh_@ZJ;kwGQL{%rxjHHdLd4c
z8O}QmvcV`D>;mNF2m<i&^Vjr@0vme9dyL(YV8qii8Fg(^SO}V8RpYCT>ZeT?<^hvJ
zaZ(KU==_)}4p+EK3#utpIKEmna|^1OLp5IKs8Z{(!ZaCA*cIs<dyEh6nM|EuXJ8Bf
z716{kIA}1k8K8erX$+xX_QUlbKaU`XsU1~)k=k(()DZ@OI!XjS34_oFpn3ct!xp0d
zUrCfzv}A9v{uK`4B%Pn?YIYA>GL%Z5HsQy|%pF$bHIHHIO!;Us#UEirp70ceiP$Cm
z<8y`j$KQX{XoQ^KN&omLc#v!Ll92|(()M$vZOeJSErFBGNDV3BrOCte;`wW-ArF}v
z(jp~e(aRJyr25$6eq?}(5C3=7kmp%B0Z2_IRhqH>@NQe8%4yV)z6mWs6TSf@iO^&n
zI|9GDPEteeGJPQx?V|l2a2Y!v5D6!yQ9~+i!VP;>qb5y(6{Z@2e<L4Pq=r<?tEwS?
zJj^^>H(1hfJc=%lgzm73sX-c_yD8E{Y7o38a+AvCpZ1GrBK4W+)~~l?4>qbF;9Q5d
za3AgiGQ;=rgLAZ!s&3sfieWc8%^os=K_*bwJFkd`^p@V*%Wvut{Ys!d=Cyer0gaNu
z5tdugR~87=eac4n+|>mF^(cMP1nMfqozP<WOgFlN;)C{non<a#2G2R9gn@=Ni2JO?
zJxJnA(*vkVKeU)PRHgVS_~K8O#NP0eC9xI!E#|#m?>s-n-&gqizpX31;=q#F?awWV
zZT$6;*qaY7iQUZeR=#@(U&Qx4JS#`2_f>SI(&~l!v{%!Y*1f*~!r&*mord_Ir7u0@
zx&X$1w!ZZ8*NL$F`TEk48&$)9Q(qeBLwhl$@ssucOMU3Zn32-IKp$Fnr`q}dOdop9
zXM;Yznm#l&Qa#Om?8rE<Mu^-=U7vg(`bN%>z06F@Pe7$P-+lBw`PtXzQzlnPJt<#Q
z?u%FW9O$z4Gw-ED_R3~m^O6D{IvJsh9yrp~9@iyS|Ey$o5r%v&;r&_{P2iPCdhyFD
zl_H}QK`?4*1^ds=XDf;7IF7Iu_w#?U?#q!i%4uEEokmnfVRbCHx_cYW4XyFjxJLmK
zpr;0Egi+(V2^{6}8ty(vR5_knTRzcozU8q?ZBj$ksorWLW-axpReRv`M9mwaS5_ex
z1>M1W$9m!u?l)hsigazt607+@7;vQhP1fS4eL!aPu_G0h<=a7uKp*-oJFbRn8aVXB
zrnPK3j9c+?UrpyLR@n*U1Ymeznk#Sz!0B95r*rsnEUqg?QU~MGN?5{YbrQORJ8$d~
z4Ri_??lu187AP`!%RRpHpoq0OlO+H_k_w**>mFYCWb_4pDZP`=kMHU_y8i_HAW&*7
z+jtLWl2>vVIB<-RJJ-w}o{*~qTc@=A1aW@h8h#D!4nmSWl#$$NNZPgpCzPAnA%Li9
zB%bTKaB;11`4tN$Qn0jLq}6A)qs=9o)-=SXOHc{fU0N0L-My%>Yt;uyynAUmK<w%(
zRrQjqEvcAEaCo;!YZup4%-cXn&r;4n+1L8$YxlA<fe(4!;PWh`HkGz}*@dy(#;S)J
z_vtj<7$_^JP*q*O6<%|&1+U+m?a&GOs!e7qhW){YPOf{VWn4eqx*1>Cv`0#5Jr#^s
zY~Hvvx~~x_jrFSOZj)EuovGDDa1E`StFp2XN%rce09GrnErQkTZAwl_!=E8xrs-~4
z%$Z!_p2gr<WxG-Ux2CStV@uLaU76Oqb#V-V5%8E?e<|=@6<nVmK9~Ll$6zJU+F~sH
z7Qkb@+>~kEV283c5Y^B~U+=NjZ%8fTEc|EnPJ*``sp=BZ!2(OJYVk0;2D3Z)a~_II
zak>FJo{8FPK|?lY=z6x;1$JACFDy}ik+5&b$RI^;n^4JIRvtL90hPEHeLh-X=r$51
zL%ka`vW;E%Qn7i{mA))Kyr`f*oc0L%lUlc>tSWo1VZs(}%_}o(H5hl{GgBw(x>5^|
zRCWJv>z-iTNgi|dim!l)|KcylY3eO(cf7Z#-{V-FK-{?V%Otyo-lf?At?L0WpQ9As
zKt9{qH}!BNU)@h*mdUxW_IB%FPnu2qot@8$0Hj_n<-ipJ@<*4I<HXI7y&UC1>z$rJ
zq+Tfll8wY;HS{D_vRx5uq<+ADr-nm~9yS$B%UlaZK%7k$-IY$nWdud;=JM22ODLx&
zQO<W?3B2e;F06R=2H*RhrRBqq5#v#up?e=~mn42Vmy$-GIR77z9Pk$+&$i9%h?cBd
z3u#PUY<M1PM}0aTpftV#gz5<YLG`hGc!26-s}K>7rPjuAVGI+g(VwVI(u~~Gvh>qk
z-kKQAE^7=D02%M|bA>L%hBa#g+b(Ng=g8TRsqMZ0r6cS+^;^3`zpsB#zZX5A-^KUy
zd)=nmL3_;JV~^M0XOD_|?Q!Nk_Biiu9(RAXVt_}cF}8h|J<GTE^UOBJx9`_?_s}>q
ztD>6s68_t!$nCrA^!yHfk1db&_EqfUO>`wQd;TGskR2pXruIU;Z#}@f_pGu#PF@bm
z|J(J(=(OQ`Vh*54jzF0wYU_ASEmjiN8&YL_s-$X|sI4Iu^sMIL0TPVY9J?qv;zd>_
z*Sx`ak-rN#3vb#d^)7=m*5bN9YwIkYz1j6@C4AP_#d&V$Wnxs2ctHxr#Bt~XxG`Kk
zX>que)iHNo5CJQ4y31Pf)0Lc(Su>xSOMzVZr{uamD+oSV(ysk=-szdGuhs1c8pkY&
z@f~Ujo+7CLZY2j-V*%o76rdvUeZ&~~VEkPvIQV?_h3GS=B|u>?){f?>H)k5_^A>l>
zGP<uT$i~`dyG8cF&0}MtZdk&<k3lrP7XwuRYsWVG_7(Yi_o}*H4nRa>bobs`_F`ID
zW667n2*Ll`%Wc&NEi0|7)%7r0V(;jMr*vcD5csNN|7x8m*KH8D0~@^S3#{@ojqq=P
zlGzK$@7^bHxj4~&8ox)lS+Hr;E}+Emw=SRzkJq=3hzA-m9;k7|NX@fz+uw@2F`8-O
zlz*^}aVG&*5Ds@^XP^-so51Jql(EcR=^L_9j*;a^f86jK-Y_fuwOaS)sCDeb8=A(s
z;$R8}<>FX*m@#B%su}V_LsR&nqxtv67*hAUzH@~TRsUSvUWKzl5qWfy_l3Xse%Iy6
zQ9o%GzPn)5<oS%7Rrg;SRd<)YsyYDaGbIm@)8Fs<w6Mv0f_Rf5>tA@kYh&1oZ!onA
zwh?%GUF5FFx8lUYR`^W56?VUCW4;ytNJH(k^98RMy$Pqqt6n_YE+bpE0KwhwpAu|^
zd53cEaCco2k_h*xy%GtJc?kN3lOQ%k!IiIxuqW<a1wEm9ty1BYud=(n(>DwsaEGQ}
zl=9}bfxnQ=7c=ai$Q0P9?u<-K5BcU8$IJ}Emn*lC$L#vS-=V<JC3OBCvZf&$+f$PL
zXKCWL-4wQWVPSj2@o&tJzrA9ll+TpBpCYUr_w<rz{O_PT@O_&5eK#(jId5QSV63O{
z4@eUK0K3r67Q6KisaHxmK90Yg;Obvncy;%0k8k0cu!Ua$<0s?BoAWJvX}KC3w9ser
zEmS$~jrkT1fyLm4j7oJ4w;X<CDvd|2di1K2^3*}DTM6ie2I{;2AVLU{#0Yu89}Jsh
z)9@-KbROIQoZ6SVU02HhdOsX{X2p%TN5KZNYRlu;oMjsaA#&5*pqr_zhS6$gsS7T}
zLIcaPZytUt1udDB{0kuywKrKJ9KiJZ!QZ0?l9_bl0ET(>O_dEz)m5o=qz&?QL-|NB
z0E0_oUY==fd0_g%O5HYdA-vx|TanX^rfzG#FyXer`T1qzv}D2tEGgM%IA#Z#E76!u
z53-F{m0Z}<`XKF+{nEFlPt>=(#P&#SrSce+ZR}0BUw3O<@PQ{IxG%EmdXK_QbPtpJ
zW5ae;b#+-E2I?iVs;=)(y<D=|{6-G=a{i&PoGWeh4y+n;@1DLfSYd8Fp@(Kq54yhP
zGZ)%I5i*g(FY}q3!*%OiT$63>ZE^L5b^gqcisAi0?m|B|O2WBO+HpFdu?rxYdaE94
z?ZtHb6^5=i-S~jnUt$+ZmklwxkI+>ubZr$`ylu6WaD76vmc3nYp7J`!x&72Se80{Z
zzD`a0KpVW?9x$<=W<AJ?Hr+sH%4foS-AHcGo@G~<Ri+Ee$Fa_7XzgEDG5lH;h6_D^
zPxRs8WBE?4dmz?+Bgn}+M!65p{)_864KtXACYArNMzD3nWbY#pZ(dmA7fCUk<!1`?
zKFMwxY+3vF#?Dkd)Grt|JSANZJU)(4#&ffxmgicm*_Q^*ei(BI*<KmkTiiuq8GJYO
zHarH;kiXk!#Kv!=urLnb!~YH+KpHXqWUqSk^6K)=XE&(bT{oD}Le5m8`T7oEhb4N>
z3&XK958gD%EjW`^WH{C3!Z*A10YcJSl{8}+vRQ@HKel)RL%UVCX0}?E*2;#~>Qy&p
ztQaO<_G`*uai()rB8+1cni`wg!B~vgZh9nRMei=1?Mqj$t(r_$Rc_p>9H_P|EQ%aP
zk$?xoER3elpY66rF$Jx4EV|Rt<4jEnh#R2ZTm}r?t3;$$mG5c&Q;V8L*Olf@$Q6uY
z#qe`1x5FnH>1+H$YOJ)X`<(zsrk>d?&#+E(-_5T;jpY<?^#+crln^=FeGegNOOeSc
zU3RNN>YwU-`3NAaN~M&q+wwJXt#tLO4sI_c#dVqEuS;*elQ$o0H=ik@>Y=PcA-P-_
zBs|8w!^jRHm#+XT+RRqfWH+|x1!FgUx$aB(WWQG&J^T?5Pgv06CN}%lzv|)=!LxN7
z!vJyRR#`S{y?ks@<23O6k>Dv0w{S=4t@{TA!UOyo2!)Lb%4GE$V&h$;?(1%U!Y9gZ
z9U_h$q0(8_Y*r!Q<$dT@g_o8&!b^P_)yobli^Upv6v4HB3KeF)-X>|r3dY3Hmu--@
zs<QgUhC<1)p_mjM;3XTFRz@S6T|;Y|gXUR->mRpE`4ZV~H8%9M84y$JT<Q_)V#kRQ
z5gGmmpfW78&%W-Pg6@a7ue9}B6^i|<9@$M5zS2KE0cgB(Xb#v*A;xpcT}3x!m16zp
zxSvm7R?+PogUZ<WumUoBhFclS++{(FaPS2+`E&54D!lT+a3*(b)L-q}s=Bqx>gJ>N
z`TSONoaFwtLHroJR?KbUmHiR7*0HzbYW9nfaKSXNamihsyL|d(NBl*(ME_h03gd&F
z_3Jv0;UL_ZxszR`6+K5qUtq7iX&aP_V~pN7Uf(#vnGIBPyH2BCRC74*d$0Up>I~hw
zc;>Op-m={dM^?uh#;Wend20MA@_X~Csl}TS$Y7%L-m6o;u1fu?s^Q27KhzQb;D`Qt
zI1M_#)CWP~YCQaV>RS4j<2Rr4;#cv<Ra3b%wmH-HZN;XB%Wp<wQC8NE2c)xSE!8!b
z^AykXK0Y@u<Yy&+J^Y=qcjGZVGd5mQ(sOCa#!E^mx98H*)b6rWpOwBRDjnTol-5#}
zq;{94`byP?{}rX$?9-%nm#Bq(_}_}(+!Mu8#w;2#M!lo_IsS(D8{}_*zkdEQ%Rh4{
zz5KI>csibr=LpXco})ZRc^>9@nCBSJF`nZ*$Ft>HdShjyWn%$2G85|bx%@5U?{fYa
z<qv-7$tO0e$A#~{_dy74EP@E&2-9ZUFBs3>wrD&Ugn9WvnEl5WzdBC656q?(tg?Xg
zwY*YRI3_RqF{#&>JV;wep~Rba@$UGm=40a}WoPW|xwI_xTZ7&U2EA_-6s@)eY4T(B
z+tSnvHVQojDK{6SqX+ab7_;A&rC!j;R^4$m^t&JjWv`?SH}coc-);PL@wbV;E&P3r
zKVUrvSkK{E$Fq)S4bK{$)jV+){+UXil|17-<2=iGmKTqWhfy!(_47B#--yZ%$L5kU
zAW$$C_DydK#(}<(#)lP+UBQ0UoMl$0*CFqT-<26#@JjtF%qKm%C*+N;I<q%*a6M<^
zF>g4b{wX|B|COc=p5{5y*?O465RGMx)%A}fU`1rR4hhoX7ypU4-1#s4GSx@HqY93*
zZ&vUq%oPV`%lhjFTG|k&-VSU{dmPWu0{Jnv_LQqV%2fH-@QmxKUg*umv-i#u-fq6G
zYCR$AFRj+kT>Z?~&l3G4^mDC#Zpwal1F7HDF%Xs;b~%to*1abXGX#{9n-^95d+vT;
zrvIW?Y;G*^_jmtQ{oeLdoBw`6Z`D^2X{G;~!)>tAqo&d#2*p|B*ax6tXOgkJz1p3|
z6TaJfugaA!=q<blsi=PRYq6);kjJjTPy9AjoJj4GmvnO}dI6yPULxB#x^las@K28L
zLT^Enud6!yF+w1Nq2?^NGy@&w=x(}osB_&=MJ(3aegZF?-0ju%7YCGE!nOm-#Eo#K
zk&6mtkwGmsy==qa<#v-~y9jRH@oUhbP(C(yN`Lkrr9VMu^2ciZjiX2r?!|2=8=`ZQ
zquQO8y2L_ZM|kv7a<22;&I=1f2R>!;5XmjG`|X>24#aGT0>lBexQ*xA3Kof#SXd8m
zm!S!GmsEA%=^>JEC#<z}{z4j)T@IS;a?oU#gOg;J0|MuOmt78U<aFTKftSr6Xvb1a
zbMo062Ti;(I7$1oN7?sS_SQY9AA5&ly<<2O?Z>W^0W&dylGv8a&gJ+!XHE$`h_+o2
z0;&G3ML^=hne*Hi7Zd==r}RLwlc`S{KxzVsn8Xzw?`5iGP}V%pQG&{}lr@zo%wxB~
z0#{~AH#Wt4P#(9&L+$Y{QU%&$osT~;U`v|aaZZiFDf2EivItKm3)4^>ed#;{^U;K9
zAwDhnzlTpNLQuutQUof)ryJi~04kp{nK(Pdr!QM$&24UkPj5qq2}krN@#*o^mhS&2
z_|y~v>1Rx^f=Oribm;{JK=LU)kPM&J8bJPE!KX+6Q;m65e0q1if%#SODK&B-VmvKT
zdEsg}pZqC)gsW>9b%@T-m^;P&Ki^$Czo7p<W%3#!iCwt2)>>dlBB8DbTRc{^6{(NE
zhUt{#;9(<d9bp}}6xYEWOy|4jAYGA6)Ti`yD6^~0*I@*!mCJa_A=_A`ptP!7CL$))
zSv=j$%FHSpXCoTi+Q?*P(~h2~m-{~ukD9KO8z*I+l4~-}PI;u+;nQ40AVnC<9M3VW
z1-*fDh&>i!8s0ISL%{2gA+T~MBUiT}+Cy=n)+Ai*0(&(i#&-Xn+JRfsB&!MSFfSLu
zdVKCt#wT)u{aMI)2)>2P*~vq6FGMW_UouLZJP?i258voBvGsVT0nLMt>y4Ir@Cl@G
z;K=$o<`p-bGN!@du4^p18xdY9>Z!F~^bgq`VrPH<;917jSO<gn$@d>tgefNHpR4-^
zf1L-=)clsB`2NJy$ih7Q5L|D4EWD#Ex==F0?>~UclY#fQkhu_e!AwXle`AQ>cby$V
zZaBdxNL$g4u$t=(S*c8tZHt*_E%xNGK1K;F=c~eD>nyI>u>LpDj;Lmz($}oa?$mtE
zKW1P$*HsJUS4-;|puhD0V0(3XMY#p~p;S<1dId9JOzRnT4|5pEI=0WcE3{xBtrs>A
zID9=GyX|V_z$C&U|3#^+GE=v*4kFhb%fvCaUa&7*1N$w=EJ4tZG94PnzyVkJtbhf@
zlJs_>-OA?pCSus?-AgCnNUXqhGj@pS%9XJbE}k<s-gdu1jiFRt$>mW?HsN{uNnKPu
zMnMzu1&SJ(?%G9Mljfh5S4Y<i@i|1+Z(|-ieTi_m0$@>zLHp*i{Hb0MyJ}DDytyH2
zW*he8Fas8j{HHy~;nmD$m3V=B@tpj~=MyIn2<=paJN*q2+KJZ{QT1rInof@h+k|$q
z(*vp_>`)}qz~uN&U;pz3_0K4-pJW%fRfY9OiGBSl!hPk;sQ#7ImT8j7p}z;$Q`C5i
zzfE*4kSG8kX7%yiYH#I4`@1^%)dAWie3q={gr9EJ4UUV>3XY4mI$?38KkLh>-tb_i
ztZ7=@m$-UKx|4O|M>;zEjfBSftMj%iFthtnU2#a~lfLs3O^3jr8SpUPf4`EQ?^Z($
z`(me)3VB+T*mqt<xUbF&JD+Q_nek!k&j-T(FqLF>)6iJC>Qb59$dItIe(xeX0K01D
zHaiE~IFviCAd<}qw{V4Lf>BAtv&(0eB;3O_*24m#nnz!+Pu08?ea%k>*KSx_Q{XAd
zXA1E1+yFm=eVx!$bdfbVM3VqbYZ=-QQbWNa8$im?<Z?(*NT8BY;$+=9A)0>jj1W@8
zcB!~@xhD!)J7ybonZd=T<EW~N@z;g;>lg#@m%U{;gaQ7ZT+pyfiyOueUf{mTA`>+%
zO6(hE_<Qj5sA0F6s?3y(pVD2PZZ(-RT>r`Jo&#BkFq<Le6Ut!M<lghLN(gMVk96E_
zC~!@P0`HMSEgguiT(v?fVY_=eItv{k_aSf~ADialI_@M6&OTRDSN5tBu>4ym7!J6f
zYtk<~y<?{PA#WnWW_tG>fRVe_eOF;qo9*3B`8JP04t<-!ud>$4-ODBbJ#*)D2-QT#
z9QVnnhEEjM@P29#qE}^qWCIen6YA4VVVkLo{2BOJ!5R3bA*L`VPUJ<f5Xogf)9eP1
zx6TDq*zQ5Kjku<;ZOwJRyvzVb3a0R~!toDymjE$IcE0;2<SClMQDQ&-HiZw)Rjp!6
zbL;hU>y+Ue&kvs_GsJ1?@C|DCqF8Q&!mWQed~z4&hwr~wm_3n-X-V3zrNQL8fl6JH
zor3v^`!$=-#mkXf;t6S#Rykf}Jv2sW99zi<N3HVz#(HQa{?k!QJnDL=`z0suS4ZMU
zk$<EXZ+Th9bB%4sxJQ?Qb<tijj5)!veqg6dGKOWlo<$q!S>)X1b3XB>3{nh!v~R<o
z-98FGtEgE{>ij7Uc;}zjfUy31CfC2~=<*@sDf>cO30aj<{eJ%l1YtI9+Ge<QO9}z#
zK7-N^@eYfc%$}3)tA|Q2)KAUJ+)&jxkZ>c|#sl$$`}|3UI3$%_aY52GO4_u)**#Vj
zBuz$1Hy0;ep`^NE{WW2!i+xh}QBK>YxmB`alg65V7+*TfC;7KcFWVpBCwU=Fb8q7$
z1T8{ll3KSb*3OEFOZ?+?hX4E$8nAe?N@#ywTj@5vCEU!5)$n*<g+-`ALt`?`T!Y#l
z3yZ3*oK>fa$&an4qHlQeV%Z)%RQm>k5!xQN?LuB|=)JhCaR83J>Y>@UD&ooZd8x%c
zyv5p22IQ8%R^RotmVV#G2z7GD6_182WZ?7PA)(swTy~c{M1?HZto2^|hEVi)yX2WW
zmr1gF**jt~v^!uNbryPJx%pmE-c0s|)F(@bp}-P?>?c@uOevLS_fqmhZV$kzGf_Yk
zwR8A!enM!Sk(n*%z_8(A<>4bo1Tf6Far)xZexV?3bp+W5-e!>X%X~RwBR`V6nq9m^
z;pNQ5ggXG+$li6kiVtejHpq(2Ed!fuDb6F_4j2Ws!tSy7E(j156g1FPdh?QmD>FW?
z4uh2zXIGtb8oF_R!sUbnyf+<cb`$=6(p;S39$IW^o{+&vRrl9OMMKWxQHa(wME6|p
zYH3?yuy1zvY%p`Fg!{B{VAQ=U^>|sj74aS@h<l^+WF)?aRRXtegaH6a_5_lzt~aE;
zzPI`~&A0)w$^d_?UT(OBzo}Q|--ZViU(TZSoOhsX%Gs5}#>$7jt*ZM|LeMaV@PxbE
z7aU>cpDOK_QEBqS7Sv%SmHLuAg8#{4aI_L@2Pp?$LQXW`lXC;2&UCad1e(_tLvx{r
zCM^b<5+;|oxMr)cI^h<cs9~-XS8w=QLLV8`4-4snQLPQ$r`Wg~y>wpysw}Q)e`YLL
zI_=@(KlLZ#SHF6^&i72A$A^!yUa=mW)L<<K?`Sp?8&kUreFw0(oP>?XxHtOL(@W&6
z{i%_<fH4QM=fj+OJl!EmZRD4|v|EOCBH-futg%mZwr><SJp<(}z{xb%G}MZWf~4r8
zR@5}i7G>qy7ltae*a&Y`*QI<w_SP_6xl-fGs)s5*#cKkB*Chf$)Ezuq2;ZRaHWJUi
zEr_{2h!JTNTTG2DZ6(;e%Y-ep>)hO>f2ueNQz6L7RB){df)c2)3Mz3|_=1R<M^w<j
zH>)~w&R0&N&Q~sKI#=P=z_WvxbAlKV^@0Y*+<yrKK?7g4II2-0VFOiAK?7q>=lCdS
zSZico<EYf;Xv}Ce4~L5r9<~*S*-qVBbHlnhBr5lb$f-n(q7qf`5ES^&+jn!V7`zJ<
zI-Xg^?oMD`;wvjk)-*yA7qzJb5sNH;Xj7*4L591bwwK>^?>4B;X_&3B+c-N&sdE}C
z6nDFD=7&^oBRHqQvfW-6X0YrtO{q8h&!oy-Qka>dH11)pAYHdg(=bw@RRNjw6{`Am
zasrGOck-3ru<v3ejF&xSDdL`Bmi1r%qyv^R%qu9KtEn2t8!C3F3;vSf+$lK~R);gG
zrtyZ^yHt7*Q!Wi-vFxaTU#`3Qy}@jS>*wrt6EI^Nb|#f>SX;3o)jz(3^{|SdyB=Oi
zZ(e#C<U51UiW_IdVs||($CwIhuaa-U@~!h;<cvt;sBTWE$<$;=|2LnloXr@uH9-=%
z)bJ(OKlyiLE0Ywe8fnH|SYDJpu7i+R23Wv%t*VK7GFDgAllHFfT169OquJ#bym;5c
z)J?VW#E!zbb<X<NvOlfY^+P&(aKn=`D7&m5F_-*W&8e5e_PQH-XOuOLl}Q1eT31)m
zv68lQKI{AWuGEv`OF8`h=lAn$>*q+=&%@Tw5oBNujU%_)0ixj<svrNC)tv`@EtjR9
z8eazZ{`^`zG+kJWho-~d8=YX!Th=s}IuIC?bX<tQFl`u{X`E+^;@S3l?)AMwpt8pK
z+l4NYfX)^z9NsC^R372wQS%6qAie*|5O~r%DAH@}Y!k<6FJ-nG>HQeeD^@aWC$HaU
z_0=k8+J4v0-KLL<*fnpc*siyX%>@Q3Z7;d{&czB={B5UZEKle2`ttd=sfD1=c5A6R
zAoBg8@E~fi=mqP=T+TO}hMw7kwYBs((y<`tK4c2aQ<7J`Vmg+$CeJ=sjGH_0b!vK~
zJVwbm->rX5US`tfQzk1(ZkgS`**a6RLw4!I9YD8jUQ$+bRLOa_QWaNOpg<Z5tn-~1
z#aLTISn>aSZBfN&8RxrW3M=+0eZ|V`78X`4SrO7e&LuXDW)kIIt~s%O?rq0*t{YwQ
z-ie7-weBH!MKAmDjqTSmvhMJV+vcuUsvo>z>E~D1y3b8Y^%YVv=o=P1i<Z|@U-x&%
zkhAv^qz_mSq}(NU1qoUb?tic^fkM~!llbJvX^p%TD^WPH`yYFmiEROo+QdGhv?G3E
zKWY>ENOpP23sz=xNsKbzK24bt+pb@C8-B`0W0+?)jdng}O+=u(4+@FZV^FOc*)%fE
z+#V^QVKr(&F%9eBT;pix;~QuKT}cgya;Yym4Tw{>vD^~m$J0#aKUFMS5Kaoh(?ahY
zElaPc5%g3ImUDLI=r|@465aIDIV@tVNClu+uyHDQ#o|c)KQ6i>>Cm|7Q7G+({Dg+R
ztqd1Shs)G#ZfKr^P3<8+5C$SAad>mJZ<LNYE}2s=*T^&j%}Hh0#%1M+%*<vdTV}k=
zhO}2iC{afmG4>equ=?WH<`NQF0jN~yM_m0-0*3U4^wfSZ9WIXY&J6RSO(AbN^y{uX
zUJ<6#Wv*|@T&5b@#_8vO+`Y)!V4BNu@56ttrX{Olv-`;(G~pl%rh#bJf>|c;n9#}S
zM{|Kr*8Ax{C3*RIHf`r6ou?Pi+5Rh{7u0f|yAr8nC}V{fC}nbwew5jD&bEneQ&85D
z@ojq`VCmvz`Ka}8_Vu3^*8h=d>i+?RA*$b}OtzCRsm!iqO8o<WLH(n?{<nnnKWBTu
zN&PRZ-=|FOSN+QDI&E?A^wRgg|0wmRMrtGrmoLKV*e$hs@340v`>4iU$Ue$y#0+I_
zhGTT+`8G!H2;2CMDQ%qZzK-ZIf{{;|yp4QGWp+QGl^>(wi>bi3gK1!@ZNG~22B?Dx
zQo`4`Jgo8iwv~&Zg0GDEZc$;4KBccwncWSAH9kd;q<N6ys)lnSfxb$;4cO*Ladk?v
z&ez=-*4<oOH|mJ<+#^*5z4a-5-OB7<n3?ZwuGzC{?;D1tca5Wxfk=b_!<jCz5zs_A
zS8Qo1hViRs>^NQHz^M^2c$Nz;jTu(SefI6z?N@3>89wh2qI)r|{}$pEehU!_zg3+7
ze(%-qSul}VKCfn0@4A{xGgr;4erfQfpQZ+5X~NQc5;rG|tINmDA+By#FP^3^pNB!^
zyqX33Uiw{Tkhf}{Kg0rV&|<EdhneNP>b<$WKiT{I-oaTv>o`pO=u0c-&B^o=Q}@!Z
z%J$xTTm$KDiQhb<fwZejuHZ_=-B)(Zc<HAv4W@n?`@jc3^muj5Ga&EbYIzkHHmNe-
zq-vUk4X2v5?nHW0laHz+iXL{HOq;Ad*4pLsDrw8(3-(>P_KMtltid&c0A*B8YH&Xd
zuKOH6H9>2uY3*^ewsLj6p5C7fG<a6>tiEz>*zga1AZmBOK85mg_GNkYX{3OCa^?-W
zfPG55$=Ij;Cee=&-wE-TKyad|_SU3QCKu{QyqCK<o=3jnH;dOOV4r?8Cj2X8pF+MZ
zV4vP*#lg3Iptxe=+xnn1QN=!`uh`h9muD1I{4jGoV4n_mt~)G-X<e=RR8)Xxn9MVE
z<Kep=-f-%tX0YMFFtv5``hEI>MUXWs?7?WZCVL5U0(OCt#FN~Hxu@UpjIz9S4l9ha
z+hOct3NeO&{mtR?EV5CNvF?K<x1B_R#&1y7VfbLe;A|u#3NHC%btiwi84gAbgN=CU
zWv%4PIA=Y=R`dEN1J<H`uQ7$wvkFE;Rch2u>ce1VBvZMuVTETEXr&ZYv=WADG`*sl
zYRJH1nrWF+uZyooI3dr>&y<7>DdG@_W&2Dc#R3G4M07?Y<JUiFd_(JDYosN*7!U@D
zkZ6*q9APvtsNbu4s_Ay$(z&Ez?Vq}x4e=L$4~D<)nmKtkpvwIV1kd}ihn67&z~9gE
zSjU<EE}#btliTLGvu$amrt$RB<v=5K>++cH1sKn)ST6pr%3W7j4$MQ|<iY40_7iRu
zqWf@V66MVEA9tDB>L~ojd#?5r!U$KM6o_z%7>IE7XRd)rgmhqd@6U{IJqh7@(Fj+a
z5w4nuaETO%a8(9`>w|@}-r8#-ht5SGS@m~A9akEKPpzpg>sT&f!||QB*37N={A+Re
zC&5JL+M3h!1%t{$(7C4ObbXoBLn&iR?kef1biYEhX(AE{9sc_9@_;x(WURjAPy?3w
z<|SgXfp7r7P~H~^B{~<&0mT)+TJoLtQ_bf2Oisy8w4dl5Q@pe{JzGvGh9#!YV!1X^
z8$-Flu-LpjyudsrOw{%exB$!S#={e}T?OwOqW3JKqlwzvEc4+7+FvuT$&VekCZ-x7
z>HXm=dBL9p6Z4=N!ts;F!;cMB&$7bFkv4}J#J{vJZT>PMObzh^{L}_H=$|yny1#u4
z4ajEIj!u1|b`x))5Zi{%$4&gh%et{^F+N#cnk&sc6)~+L@ebkJj8eu<yKvH)r#tHk
z*b2KAcDA@+AVDYr?v(Gcp}+TcIP2KNkNW}J595rDq4LH^mnH`i9Hp4oX#)IYj}mt&
z@y$Lll2fbd^+`S5&Ze*`HVzWq(G9|*xoZ8F#7+%yN5o<6s`N{}^&*UC%Srq%juMYp
z55ZpVl-K~jBpoFFo}<M#yN_b(ZZ+KRZ>!48z803F+5PbZYd%o7t^5R&9|?S39qsYA
zdD{aBK1l@Olral;YIum@QE;3~!*s}8gTt}%O>?!_#B<LOQmb4oZmkdMtI((ZZM*N!
zE$!`vr70KZjl<IPseh=a?&US%j`uNCJo_F3nq4dksNKMrw74qY+l2eosn*KA3gy(l
zz6xd0Klc=u0c=<LZ4bOau@kj-f|dva&+1&PfSz0<%0E@2uV(k9u&6MSZWF<@+9Jd*
z0A;~=A4v{P(Jvf0ihjYp5ndsjH;emeW=U1ohZyR<ie37k%^Mr5ztYRQ*w(7<3W74T
z)q`gDdVl`{Y6yves=A&bb*A<<gGNahHyD{&9Fjdk(_p%3$gb$n0sXI%Be;Ypux89O
z4yGLX*g;Y@G#$G6IQK==yVyM}D&;=dXNhiTJhZAb_c7viW!zm}`HSA!eM|`{zhnaK
zWH2bVhS3At)UJfPJ`BL3c7H?DKnI)ZA?_8BGdGm6G;qI}$?WmABs66B3KpN_4o%hj
zG*xxF6C_ObDrBcZzU4zwi}z@lJI-jEaLdeSh;w;!+iUtN6fRJ@Sr|^a>(F!pa@iny
zM;F+aVbxjT9w7;8MBYntC-+s@XegJUBqHXn;YCwuisCAuSs^`4j=o7s>44;k9=4yF
z93qT)1kNRl6#5PO45N-nQG`pD-)8bRXq?p~(s?)OjjDKh5_es5tsMoF#y230zxUPR
zo89-|TttfH)9>YX1zkdxaNYtVi%k0#_qjjXp2^ZQdU9#<hU;(3r^%uRQzKPQCwOcP
zrkt&7JbAt8?a<mD4y+QfT_kDpgbDjAOS;zqh}5E3`wUx)CkFH>S`^RyBI>85Zw{sl
za8kZAY`MY8)N<p_jFo%>Op<aTDBwr5Fb`k&nJE$xEUo__32O3(EMv(P^KBRK9~eoe
z@<LQCYVK`l!$W2~pE!9gIjjhGJ$OYXFBe&h`-;Uog_KoWai?J;j-6s$<;RlG6x8)M
z#dX<M`#)j@bw!DNT`I!;@ec)cp`3_kYE@bK_;7(Tc)e<We^=0kUzAPl?`4H;h!Q9F
zMEzY`*aqwGjw$`U-}m?T1$EtAT$lCt7ZXSFu#FP?x>SUlU09dzuPU3=-w0cR^|Nzb
z+;~B@7Qq#bUjH1=nHH%adB|_qxfh{Qp<F~7w68)v#2Bx*MmoC|$1MyXHC(S3)<mKW
zwjS`+NUyy;o3gek>AH~$bHWf9*?Was!pD?&2Ya$&vns9)9AaU+z3f`8$ZN~vRo$Xr
znc9_1BK9tYTb$VnE1R9<R~`nqoO|?!eXww9Y~S+Z&8R;&0Na&Ww$d)i8t+{68IH!G
zv5_J9$`mwhxQ8E_-nnqIV%Ys~FkodTfw@mW4LaY3lRX9NxW&pY1^*Qd>s<7CA8h4x
zEBKvO2#0K=Lhev7f))xvjT#jq+lO4O74kn6%)C`&HWF-2U)kIipTGkFM=edloL;sP
z7PV<Sa$AY})AEF+fE<s(oTi(vo!*|jnQ=FAFrGQSp*1eAW|;I@(CnLl+6_-)pI*7B
zX`EH<r<qy{+E<D7<f7K`RY+&yd>WeKlO(GJ^cMfKsl{C^ZX7Cc{{%RL-P*P!4(CD)
zF+<LeY7CpkF%UtwcrGQIoylTcwB}{$kkT*w+>_p>aoHDg)H3%}TSv0;%_2%|P+M)8
z6YeH20QF3LdbSv*)M8_sJU(g1n5nfkP=XLMa7qz0psMR@25c%k(^p8bk_A|N>XpU*
z0`|7s!<u1YaU}M#mwRekfYtM1_`{A<VbWA_!rh3bhau~$uy#<qOfPSS)CoC~_gw&y
z+@har`Jo;Yud~?@YgzJPtr;AV8#7@YTDQZg$E5%o##z<`HK-@pe}y&ZQ~zj)7y>a&
zYZwE)hSV>Z|Hxk>1}hw<GSG5&#r{_)BUw(K<N)m#dw&m0t$ny5N@CqgE#6hj(6*nn
zO-}|4GcnA2^}&f)lVvKecJqyg<u^oIHoqk}oN!;aLTcFP(1~}flA34YX7d?|hjp-a
zlxrIs8b?=I&`NK&x5NfIicYxeI4_e5PA;(sS=xnRRhlgzN=+v^7dfQkioUn_N`+KN
zI%@B>=8bO`51a>0o?m4h-7Yc;Aq>_FC?z)p>mTyaz7oL{ss|#P{FuWY5Qu6WvBJwd
zLxf>jAYStbeR{{Ktb1s4%x@F=p>a7(dQrOxDU8PL2IAlZWt}eDg5ly6r9>3mJcsH=
z=G5u%yY)p1uz+!HetWUm{hIsY85j)X-o&w%Oet}w$R*aba#|@s6+%&Dp`Etxe13*+
zuC=YZi6P-0xffHf%x#~|C3G*Q#*VG(eyfExy@=vmZk<h5#7)CiIO4JD-Ag9I3GQbK
zQ~5M%w5dGTTtS;H*s)~SZVD0Ec<z^!L@4`=is2ss&H#?OC$kz~AG+ZWmK&(n1Q!t3
zq^sGO3-E!^+}D+Q<r<ce5FC+447S|LPmP`4u>wq7u<v2GvDiz$Lobh)3uI;N?rFfX
z5~V0;*NMRa@Z#Yb*^8)P#3XVf*8dTJHqRg+E&uM=H4MM?4B1)10Oa<B-E5zuS`h#T
zv_x<TKy)l1_$rN);<KuYm4Y|M4N@QoCET%V!_j>swGg_ow1@GH>I-lP49#QEG`N!^
zHwCgm+2NT{&;^UU0Fl6#0MK=k!4-W3V>W!7&Kjv{tdrH~OA64kApP)5I*K9n&IyPN
zJtd0f1t&LxM%JL_3-t$i`!5WH=s#q8P=u&s{zUBq1v`Vvz6ym4339dGiAic~O~*_h
ztO52JF>rZNAA<O6ii$9|df4J>N%iYQ)k9i(?4CTil#)Eig1G5kmvty8$IkC?ebd<9
zmu-kgM9YkxwT?hybj(Y1(mUz$a)MLZKAdb1h!))cL$HiSuDo>pc<2!O<@@Ow+|aSK
z#!53{<rwzKr7}rs*?@Br$i3dA;YdG&b0T3mXiSHDqyCq+&ki71)qS4<0(m`vxX)ne
z8zDvvrUyWP+AMLSehmf?c}cMa2@pY$05Mw6J&!hrlbgsMc2gUq0k~D`ra!vEK>^3s
z?q2I=?o6<czR7fpHS^4G3nEN!$7W6`2%Xk|DKl~Pqbql_n(SVj<gx0+%rW3C+nLnv
z^3Ed)y7@OB3=b1P!Il0dpT2!+dIe2RZyqKf*yHpjwrvgU4~>41CQ;AXsm1LCOthbx
znXQ-ROsx_ycuJr>mEXXelYEfTc2`mYbQqM;Ty8%hc`u=$QMADwM=#1E_qj2~+!hbE
z!SGXv?BqQHnR$HL{UH3Bq<V#$XFEtpVekp*oM0J9v249UHpY1^1s1aM`SmR|@_(nl
zAM%yt`#W%y{*M1;{hg@Y0eDTWZ2eL9GqVMGu*E|@6gpe{HjRz%s(m*X4r9n~o{r@^
z#G~20Y)2*;B_yxoEn(7~hJ?{MUeC=2{8G40%G4gBgckRZFJWTfuOE-+Mc;++jeCT6
zdsLNe$t&G&00a~70FUH_3xph@^ke%0icX%bFeZwZh-_DblXDbCOM@^qAz4$L*AbRl
ztP+sbr4}n2=$Bfov{;a&7Arxl<J`UqrP<uF6oHxGm^P5GN7lP_Zd)&}+m+l8!gfJD
zwOGFs2&6m+qgkMQP$$t6kumo#zvVoGsz|u)rUfatZiSHlY!IgQg|Pf&5T>SXQ@sh7
z41)CKW>w0I3OWb*rlg*2Jd)M#Qx8;8vpdI5{*_M*Y!?;;6Sm`6r)?H`nf4@xHJphs
zYMiWLk-)O_60_jvCIK&TI#mSOkO(wWLz>-w--d|+>OR)^N6I=|#}GI;|7n}&aj#`y
zLW}PYP9RU%Mm9f-4Ie`)a#~o2de-c23hU^rFe;<j6hQi<2*er>7<s{;e{K^-wuO`0
z%9sC`r@@LM|1n3i-}ab!uNlcO39uB3_bs``Ax(gq^ewFcTCALh@CN3|7w1_#<`JFl
z6y-|VG%pU<42L7`TXvK3Q|9gs{k*)BOuIYZP1rjvHYss(+idqEMiugums@34BtiNu
z>TIDLau#WaecC75D&3c(Y*q_`Er|qfq>|Ly8)ITm<J&g>jy<M@WtwknaUWO{*2G*4
zq?@xS>hnRVN0nT93gE|Ygt7J>GROT8x-GyjPyg4mp}QQ^nuKOmcG83clOE0952~<&
zXslbd3C$Aj?_M!7Ei`LC6YL^^d!rGJ5WBG5MAsls<Qo5+F#;s2G3|P&2KD4&7tqt@
zr%(p(>7l!bydfc+*;eg-^eew+Km!X?2lNhnI(rH}9nBvRV~wbrE1_Us?-v#{9Z0R6
z7i-sLR63J0FX8^yH1hawBIewD%()5IR1kAvJ_hf!3kqT`&c|GwaIY<hS(1-gl5i8p
zs8_xoRJvgcmM7eQ7R0Q`$E--Wr=yt8wKfZ)Y}X{*zxYUya2|H+1qiDn9!cc!viWR3
z(;saL^d=|aXvvf&$BAbfYIfKALZ;yL@xDmm^=^Fa`O-aJ1GXCj9Y*_wcGTy=)s}+8
zvJJJu@b=ett~<12loxhChf)h;5>as^Xw%JMNyX@Xudm?=8x-zavkf$mnslc^p(?jv
zJqx&?X4yw|yfIudwSs`RuRR)X6mN@#1kV%I^)Ch3&ODVoov(o29Y<2pIJg|GDR~NK
z`0EL+1qR>!VIq&;0Uen{d({DpXLiOAUj{PnExpt-KmprFn1iXs`t>%1%iTXSPqw!s
zHGyRFTh?)Iats-*``!uzD~rL&nc2z!vD!lseHE4)O2_h0VfE+R9@US$IV|tv+Y*!u
zMF^T4Xc)C8W)e5lUQX<~i;}So+7xIquc)M|L8@Yj$t*L!DPaTl`_R<mH3-sk4_V1<
zMxq8<e61P?1ut%GH0upMAq-AS-V0v=w9W<%lS}ko>V7(6B6aVqVVg=T?4gHmnVWZ`
zZBj|qeo|YRtM#A2>x|UmCFt%;I$oC)hwV=02UIupt3&IekAebydvqSi_;Hicc~J!%
z)Jd@af>XSq=KCAK7SwO0xnC%vD%A}6MXs$}?elq&rFQ#SAnYk7jL1}euZtXZu!Y@L
zi8}+CP^8MB#UHt$r~_B|Pdac_*nxMqVOMYsFc10Ni{SDn+TVmbPM88Xxv&oR>wXhg
zCK%C7`HxhuiJ`nd+~KbQ+@PgZUEJO)fyS|a5RW&~`TQvG-BAO|$>_+eh?_<kkRf`L
ztXs?)KYlSk3H{91kCG;p$?dyb9Y9?8<N?)=xNv0m9g^gEc^*O#aKnr9=+%W3dZ@V2
z9SxLs4?o(KX&36&hefUqiqzI^rtchsk{Y{s^;HN(n%#f(S%)RPTVDD-_LG#38AD-{
z&!*tEvgBMVpG_pjO|E{g-wmF%LQUtS+;P4ha{s0{_dRc;ZFlP@-{F5V9HYa7KeG;#
z>$k<Z#ulkF<C&W8YYbWn@^*xI@Ai3<)pJYWYe?^bc@a7a?N5sr$B>?c`nJi~iOQ`I
zJJAj>{)TrbR`ySlG>STe^yx@4F=f3SJ&JxjaPt8QZ)WWCYf@k15Z^ipivvAL3x`;J
zIFBS5ZT7RopjF;>PX(my;?1%4+lb86>NA5acyw>u>0zQw<>qEr^&J~lP7zBWf5>Eq
zDAtE+Zd*(xm>np4O=s%yxe%BnGlSKoAiTwW%p?MEX+h$?@=h8O8-71zcG7xS;!1pX
zo?tzjvMxnC{D3~d_!xZ%<gDs+U^a))XWlx*abu~Azkl)bB0Nn@!yES1bv_<H0y-e~
zsrlYQA{eVcj&V<wfHTHaRd~X!z^?~v1hWJQ)>vQp_Z6&v(D)g-twpO$(4KHVU5pX)
z)^QC9_Ye63xFHVd>BT>?R<$qi1Vcq*bEa)Y9)z5BywD#~CVN5sxv%8OVkkO>`psLX
z!crGow_@${e4W1Y5_1L}gKS9{9$aMfsK;$jzmFtu`U~)HNJJ%EGv>ILaSPIRid*Jc
zSx?v-hXVdG9yKdCD~Cl=EO`<oByWS9p}whecm76bRvj=r9VfV7AC%e?1|5i-kg9E_
z+paqEI|exZ0IVIC1ebJi?*21e4edwnbfMxQ&i9Y2?6}(!70EoIsF)60A+JA_uCdX{
ziCa^K@AwRpuydySh_4^)WL{0;nj-8B<})mD*lo`6Nk+5P3j#o?nQh0r_x{X7hy6={
za}%|3rVs0&jR*NzON1JXR;7>d<RXeUT7G~i5APrS!b%M7u{A(`QMK~=DsF<U(7%F}
z))#2;6SYgiO6=S0^SO}*EA@Dp9C&yuQrYCI5M*_s;Oq2c-8;lFw6!N6c)PI+Uq2*(
zo1t)p`!e&~q_F3^6Q9kivV+vgO=PhGT%!?w^O<))H6T8oz<V^>l!If_Sjn4aNg}q6
z(~}Pfi(+kS!}{wB>p#WnCtbb!{7^ytKDDo31-S3oGGNY8-lWRmrZqTQuVuTMd%cZE
zx899Svt6f;(<ClhBLetgKT`-l(_2V0Cf`cH4;w`<I6O0eU-HX@hh0eG0zU%b2ZT8i
zWY2d4zsz?bpCOrK1UwWcerg%LFR_o%k5|He+^Bv?jL6MpdN+f%%JGhxw%>c6hVG`z
zw^}lorpiAM6L34=Z@N5dG2Dd~^j)7*`W~%k&D&NQlPiOh^lZIHX$?LWU4WnLH#a{`
zCko{kBk>)H1pH#dyx`UxbAt<wU|GyN!^M^TFT*Pq_W!`Y?d~4<E^o;R$U3}P_g=md
z?juhLHkG@(2bC<0%>IP0W_O8?T(FNz0EQ?qdE``|_aGk$cUG8p;9m>#?&Yi5&GeBr
z;Ak`BWw)7T`<xkK>}-)DkXsD?T_b!AaPwjgZi)PiXc}CL4lvu;Cwm%!!a{!9X4;M=
zyH#C*NrE>z;o||5G`vqesY_OqZlZRGnahC5fLT{0+)bNwg`}P_5^(zfZ>%j!mmFIj
zX2}|m*a%tpg{Ot#E{9;lLv@0G!;6p6Y^-B%{}hew>)xYs`RCq=hMYr**?t1tTlfgn
zqpfpjZe1do1Ny!XSwXGYov=eBswQnkq#m(?)}2H5&nxc!eMjIUPH%gSdls6Iscvyk
z+Kis-_UhZ}!wFQ7U#=MD7w5m0J|-{JkM?{(Q2logE;WV@{qtUfp2no(YV}MPSl>yS
zxnvRK^j^t3C0{hD<aYv3i%*0-V|2KGEiC&=Up6`4TAVXR&Y&eer-#1#ZK&d}Eojwx
zElf38k((6v(5Z_T7Z<l<8NGWzKi0*dux(*s{R7rT@+~gTmsA#wby4%L5A$vI`GieX
zU4u5<y8wm__f-%`Ty1UbCBR+Ehac_$jnGE2W2kINzE3r1;sq_!WJ|b*o>YV8a9KLJ
zQ;%4oHuTGj+ZPS}uOMVHf%p$r?bNQh?#KGJy3^HRe!=C^;{3f!)xT)yZK~r>?j6C<
zKkx&COYUvtlt{8*&Lzp2&1$kW`<8E2%Uj&KFmJoh+t<C5E(juh-8+J}wu!8-DS)a7
zNON|p61KQ=Z668ND>d~dit8O*0-}NJ+*nS0!u_08k`AXHvBGWaTZ(g3lOwrVB;Uq9
zYqhzH=7>9DFSO@BtdFV1H)_Sl=iK6?UaGpzpqRey2ZA>Dbw3!qwN<$lUMvH(A`OCh
zWle8Y(p*)>vT#TvomD{U5i6m61$Wy71!TACttEhgxSfpU%`B@#OSh{M2~k~Nw}`Wq
zo>l5}R%Dya`#q^gjBIy&48t6&R_#)?dRn!5Nj+lCRkio=Dfnl%>Wyjz0Jhhv*76*s
zTBXic8&GC%>^ch=bp4m8Q~47?d#bvHnyJNFyJGF{=<B{Ws#b4>z2$~u68Vn4rl6x+
zm5^IgXkJw43xcmL!Zy3Ps`l+Hsi})?;hku|K+DxVWJ_eT!oOzs_pIeKE0Oj1m|wtQ
z3~z*@=ed;B5L(|Lo2Tl9apmo|1k0i+@E3uJU!j8qGoWzQ@e=_he~Y_28LT?1_84L@
z;nhCuGMMnyx{TJ7fHMYKbTp7UTin7kg^b|5`d-9H<F^U2J1bZQB`|%0D_cl4iKT8j
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
ZjZG+N4<D9DmnW{lYNQ{GdHj36{y$a{V$uKr
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/BiosId.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/BiosId.h
deleted file mode 100644
index e86fc852fc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/BiosId.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*++
-
-Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- BiosId.h
-
-Abstract:
-
- GUIDs used for Bios ID.
-
---*/
-
-#ifndef _BIOS_ID_H_
-#define _BIOS_ID_H_
-
-
-#define EFI_BIOS_ID_GUID \
-{ 0xC3E36D09, 0x8294, 0x4b97, 0xA8, 0x57, 0xD5, 0x28, 0x8F, 0xE3, 0x3E, 0x28 }
-
-
-extern EFI_GUID gEfiBiosIdGuid;
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/BiosIdLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/BiosIdLib.h
index 484b358264..bd08c9a80f 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/BiosIdLib.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Include/Library/BiosIdLib.h
@@ -1,12 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
BiosIdLib.h
@@ -66,21 +63,6 @@ typedef struct {
#pragma pack()
-/**
- This function returns BIOS ID by searching HOB or FV.
-
- @param[in] BiosIdImage The BIOS ID got from HOB or FV
-
- @retval EFI_SUCCESS All parameters were valid and BIOS ID has been got.
- @retval EFI_NOT_FOUND BiosId image is not found, and no parameter will be modified.
- @retval EFI_INVALID_PARAMETER The parameter is NULL.
-
-**/
-EFI_STATUS
-GetBiosId (
- OUT BIOS_ID_IMAGE *BiosIdImage
- );
-
/**
This function returns the Version & Release Date and Time by getting and converting
BIOS ID.
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.c
index 3f0e20c7a8..f6ab37313c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.c
@@ -1,11 +1,9 @@
/*++
-Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved
-
+Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
BiosIdLib.c
@@ -21,237 +19,8 @@ Abstract:
#include <PiDxe.h>
#include <Library/BaseLib.h>
-#include <Library/HobLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
#include <Library/BiosIdLib.h>
-#include <Guid/BiosId.h>
-#include <Protocol/FirmwareVolume2.h>
-#include <Protocol/LoadedImage.h>
-
-
-EFI_STATUS
-GetImageFromFv (
- IN EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv,
- IN EFI_GUID *NameGuid,
- IN EFI_SECTION_TYPE SectionType,
- OUT VOID **Buffer,
- OUT UINTN *Size
- )
-{
- EFI_STATUS Status;
- EFI_FV_FILETYPE FileType;
- EFI_FV_FILE_ATTRIBUTES Attributes;
- UINT32 AuthenticationStatus;
-
- //
- // Read desired section content in NameGuid file
- //
- *Buffer = NULL;
- *Size = 0;
- Status = Fv->ReadSection (
- Fv,
- NameGuid,
- SectionType,
- 0,
- Buffer,
- Size,
- &AuthenticationStatus
- );
-
- if (EFI_ERROR (Status) && (SectionType == EFI_SECTION_TE)) {
- //
- // Try reading PE32 section, since the TE section does not exist
- //
- *Buffer = NULL;
- *Size = 0;
- Status = Fv->ReadSection (
- Fv,
- NameGuid,
- EFI_SECTION_PE32,
- 0,
- Buffer,
- Size,
- &AuthenticationStatus
- );
- }
-
- if (EFI_ERROR (Status) &&
- ((SectionType == EFI_SECTION_TE) || (SectionType == EFI_SECTION_PE32))) {
- //
- // Try reading raw file, since the desired section does not exist
- //
- *Buffer = NULL;
- *Size = 0;
- Status = Fv->ReadFile (
- Fv,
- NameGuid,
- Buffer,
- Size,
- &FileType,
- &Attributes,
- &AuthenticationStatus
- );
- }
-
- return Status;
-}
-
-
-EFI_STATUS
-GetImageEx (
- IN EFI_HANDLE ImageHandle,
- IN EFI_GUID *NameGuid,
- IN EFI_SECTION_TYPE SectionType,
- OUT VOID **Buffer,
- OUT UINTN *Size,
- BOOLEAN WithinImageFv
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE *HandleBuffer;
- UINTN HandleCount;
- UINTN Index;
- EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
-
- EFI_FIRMWARE_VOLUME2_PROTOCOL *ImageFv;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
-
-
- if (ImageHandle == NULL && WithinImageFv) {
- return EFI_INVALID_PARAMETER;
- }
-
- Status = EFI_NOT_FOUND;
- ImageFv = NULL;
- if (ImageHandle != NULL) {
- Status = gBS->HandleProtocol (
- ImageHandle,
- &gEfiLoadedImageProtocolGuid,
- (VOID **) &LoadedImage
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- Status = gBS->HandleProtocol (
- LoadedImage->DeviceHandle,
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &ImageFv
- );
- if (!EFI_ERROR (Status)) {
- Status = GetImageFromFv (ImageFv, NameGuid, SectionType, Buffer, Size);
- }
- }
-
- if (Status == EFI_SUCCESS || WithinImageFv) {
- return Status;
- }
-
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Find desired image in all Fvs
- //
- for (Index = 0; Index < HandleCount; ++Index) {
- Status = gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID**)&Fv
- );
-
- if (EFI_ERROR (Status)) {
- gBS->FreePool(HandleBuffer);
- return Status;
- }
-
- if (ImageFv != NULL && Fv == ImageFv) {
- continue;
- }
-
- Status = GetImageFromFv (Fv, NameGuid, SectionType, Buffer, Size);
-
- if (!EFI_ERROR (Status)) {
- break;
- }
- }
- gBS->FreePool(HandleBuffer);
-
- //
- // Not found image
- //
- if (Index == HandleCount) {
- return EFI_NOT_FOUND;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- This function returns BIOS ID by searching HOB or FV.
-
- @param BiosIdImage The BIOS ID got from HOB or FV.
-
- @retval EFI_SUCCESS All parameters were valid and BIOS ID has been got.
- @retval EFI_NOT_FOUND BiosId image is not found, and no parameter will be modified.
- @retval EFI_INVALID_PARAMETER The parameter is NULL.
-
-**/
-EFI_STATUS
-GetBiosId (
- OUT BIOS_ID_IMAGE *BiosIdImage
- )
-
-{
- EFI_STATUS Status;
- VOID *Address = NULL;
- UINTN Size = 0;
-
- DEBUG ((EFI_D_INFO, "Get BIOS ID from FV\n"));
-
- Status = GetImageEx (
- NULL,
- &gEfiBiosIdGuid,
- EFI_SECTION_RAW,
- &Address,
- &Size,
- FALSE
- );
-
- if (Status == EFI_SUCCESS) {
- //
- // BiosId image is present in FV
- //
- if (Address != NULL) {
- Size = sizeof (BIOS_ID_IMAGE);
- gBS->CopyMem (
- (void *) BiosIdImage,
- Address,
- Size
- );
- //
- // GetImage () allocated buffer for Address, now clear it.
- //
- gBS->FreePool (Address);
-
- DEBUG ((EFI_D_INFO, "Get BIOS ID from FV successfully\n"));
- DEBUG ((EFI_D_INFO, "BIOS ID: %s\n", (CHAR16 *) (&(BiosIdImage->BiosIdString))));
-
- return EFI_SUCCESS;
- }
- }
- return EFI_NOT_FOUND;
-}
/**
This function returns the Version & Release Date and Time by getting and converting
@@ -273,47 +42,39 @@ GetBiosVersionDateTime (
OUT CHAR16 *BiosReleaseTime OPTIONAL
)
{
- EFI_STATUS Status;
- BIOS_ID_IMAGE BiosIdImage;
-
if ((BiosVersion == NULL) && (BiosReleaseDate == NULL) && (BiosReleaseTime == NULL)) {
return EFI_INVALID_PARAMETER;
}
- Status = GetBiosId (&BiosIdImage);
- if (EFI_ERROR (Status)) {
- return EFI_NOT_FOUND;
- }
-
if (BiosVersion != NULL) {
//
// Fill the BiosVersion data from the BIOS ID.
//
- StrCpy (BiosVersion, (CHAR16 *) (&(BiosIdImage.BiosIdString)));
+ StrCpy (BiosVersion, L"MNW2MAX1.X64.0084.D01");
}
if (BiosReleaseDate != NULL) {
//
// Fill the build timestamp date from the BIOS ID in the "MM/DD/YY" format.
//
- BiosReleaseDate[0] = BiosIdImage.BiosIdString.TimeStamp[2];
- BiosReleaseDate[1] = BiosIdImage.BiosIdString.TimeStamp[3];
- BiosReleaseDate[2] = (CHAR16) ((UINT8) ('/'));
+ BiosReleaseDate[0] = L'0';
+ BiosReleaseDate[1] = L'1';
+ BiosReleaseDate[2] = L'/';
- BiosReleaseDate[3] = BiosIdImage.BiosIdString.TimeStamp[4];
- BiosReleaseDate[4] = BiosIdImage.BiosIdString.TimeStamp[5];
- BiosReleaseDate[5] = (CHAR16) ((UINT8) ('/'));
+ BiosReleaseDate[3] = L'0';
+ BiosReleaseDate[4] = L'1';
+ BiosReleaseDate[5] = L'/';
//
// Add 20 for SMBIOS table
// Current Linux kernel will misjudge 09 as year 0, so using 2009 for SMBIOS table
//
- BiosReleaseDate[6] = '2';
- BiosReleaseDate[7] = '0';
- BiosReleaseDate[8] = BiosIdImage.BiosIdString.TimeStamp[0];
- BiosReleaseDate[9] = BiosIdImage.BiosIdString.TimeStamp[1];
+ BiosReleaseDate[6] = L'2';
+ BiosReleaseDate[7] = L'0';
+ BiosReleaseDate[8] = L'1';
+ BiosReleaseDate[9] = L'9';
- BiosReleaseDate[10] = (CHAR16) ((UINT8) ('\0'));
+ BiosReleaseDate[10] = L'\0';
}
if (BiosReleaseTime != NULL) {
@@ -322,14 +83,14 @@ GetBiosVersionDateTime (
// Fill the build timestamp time from the BIOS ID in the "HH:MM" format.
//
- BiosReleaseTime[0] = BiosIdImage.BiosIdString.TimeStamp[6];
- BiosReleaseTime[1] = BiosIdImage.BiosIdString.TimeStamp[7];
- BiosReleaseTime[2] = (CHAR16) ((UINT8) (':'));
+ BiosReleaseTime[0] = L'0';
+ BiosReleaseTime[1] = L'0';
+ BiosReleaseTime[2] = L':';
- BiosReleaseTime[3] = BiosIdImage.BiosIdString.TimeStamp[8];
- BiosReleaseTime[4] = BiosIdImage.BiosIdString.TimeStamp[9];
+ BiosReleaseTime[3] = L'0';
+ BiosReleaseTime[4] = L'0';
- BiosReleaseTime[5] = (CHAR16) ((UINT8) ('\0'));
+ BiosReleaseTime[5] = L'\0';
}
return EFI_SUCCESS;
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
index 3e53680d08..0d38d73ada 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/BiosIdLib/BiosIdLib.inf
@@ -1,11 +1,8 @@
#/*++
#
-# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved
-#
+# Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved
+#
# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-
#
# Module Name:
#
@@ -34,17 +31,3 @@ [Packages]
MdeModulePkg/MdeModulePkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
-
-[LibraryClasses]
- HobLib
-
-[Guids]
- gEfiBiosIdGuid
-
-[Protocols]
- gEfiLoadedImageProtocolGuid
- gEfiFirmwareVolume2ProtocolGuid
-
-[Depex]
- gEfiLoadedImageProtocolGuid AND
- gEfiFirmwareVolume2ProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index a81f102bac..0c432642e4 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -73,9 +73,9 @@ [LibraryClasses]
EfiRegTableLib
BiosIdLib
BaseCryptLib
+ HobLib
[Guids]
- gEfiBiosIdGuid
gEfiPlatformBootModeGuid
gEfiBoardFeaturesGuid
gItkDataVarGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index 786b4f6e91..bfde7be398 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -37,7 +37,6 @@ [Guids]
gProcessorProducerGuid = { 0x1bf06aea, 0x5bec, 0x4a8d, { 0x95, 0x76, 0x74, 0x9b, 0x09, 0x56, 0x2d, 0x30 } }
gEfiPowerOnHobGuid = { 0x0468a601, 0xc535, 0x46fd, { 0xa9, 0x5d, 0xbb, 0xab, 0x99, 0x1b, 0x17, 0x8c } }
gEfiPlatformCpuInfoGuid = { 0xbb9c7ab7, 0xb8d9, 0x4bf3, { 0x9c, 0x29, 0x9b, 0xf3, 0x41, 0xe2, 0x17, 0xbc } }
- gEfiBiosIdGuid = { 0xC3E36D09, 0x8294, 0x4b97, { 0xA8, 0x57, 0xD5, 0x28, 0x8F, 0xE3, 0x3E, 0x28 } }
gEfiPlatformBootModeGuid = { 0xce845704, 0x1683, 0x4d38, { 0xa4, 0xf9, 0x7d, 0x0b, 0x50, 0x77, 0x57, 0x93 } }
gEfiBoardFeaturesGuid = { 0x94b9e8ae, 0x8877, 0x479a, { 0x98, 0x42, 0xf5, 0x97, 0x4b, 0x82, 0xce, 0xd3 } }
gItkDataVarGuid = { 0x3812723d, 0x7e48, 0x4e29, { 0xbc, 0x27, 0xf5, 0xa3, 0x9a, 0xc9, 0x4e, 0xf1 } }
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index 3165be1fca..4c60d0a0f2 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -381,10 +381,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
}
-FILE FREEFORM = C3E36D09-8294-4b97-A857-D5288FE33E28 {
- SECTION RAW = $(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/$(DXE_ARCHITECTURE)/BiosId.bin
- }
-
#
# EDK II Related Platform codes
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index 03941dd23e..61e1adcd14 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -327,10 +327,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
}
-FILE FREEFORM = C3E36D09-8294-4b97-A857-D5288FE33E28 {
- SECTION RAW = $(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/$(DXE_ARCHITECTURE)/BiosId.bin
- }
-
#
# EDK II Related Platform codes
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
index 1afd8a254e..b745574421 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
@@ -80,6 +80,7 @@ [LibraryClasses]
BiosIdLib
CpuIA32Lib
IoLib
+ HobLib
[Guids]
## This GUID C Name is not required for build since it is from UefiLib and not directly used by this module source.
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBiosVendorFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBiosVendorFunction.c
index 1817f456cb..fb4fa820a5 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBiosVendorFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBiosVendorFunction.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscBiosVendorFunction.c
@@ -166,7 +163,6 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBiosVendor)
SMBIOS_TABLE_TYPE0 *SmbiosRecord;
EFI_SMBIOS_HANDLE SmbiosHandle;
EFI_MISC_BIOS_VENDOR *ForType0InputData;
- BIOS_ID_IMAGE BiosIdImage;
UINT16 UVerStr[32];
UINTN LoopIndex;
UINTN CopyIndex;
@@ -183,7 +179,6 @@ MISC_SMBIOS_TABLE_FUNCTION(MiscBiosVendor)
if (RecordData == NULL) {
return EFI_INVALID_PARAMETER;
}
- GetBiosId (&BiosIdImage);
//
// Add VLV2 BIOS Version and Release data
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
index 8cf8938a4e..5cae78bb6d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
+++ b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat
@@ -137,19 +137,15 @@ if /i "%~1"=="/IA32" (
:: Required argument(s)
if "%~1"=="" goto Usage
-::Remove the values for Platform_Type and Build_Target from BiosIdX.env and stage in Conf\
if "%Arch%"=="IA32" (
- findstr /b /v "BOARD_ID BUILD_TYPE" %PLATFORM_PACKAGE%\BiosIdR.env > %WORKSPACE%\Conf\BiosId.env
echo DEFINE X64_CONFIG = FALSE >> %auto_config_inc%
) else if "%Arch%"=="X64" (
- findstr /b /v "BOARD_ID BUILD_TYPE" %PLATFORM_PACKAGE%\BiosIdx64R.env > %WORKSPACE%\Conf\BiosId.env
echo DEFINE X64_CONFIG = TRUE >> %auto_config_inc%
)
:: -- Build flags settings for each Platform --
-echo Setting %1 platform configuration and BIOS ID...
+echo Setting %1 platform configuration...
if /i "%~1" == "MNW2" (
- echo BOARD_ID = MNW2MAX >> %WORKSPACE%\Conf\BiosId.env
echo DEFINE ENBDT_PF_BUILD = TRUE >> %auto_config_inc%
) else (
@@ -160,10 +156,8 @@ set Platform_Type=%~1
if /i "%~2" == "RELEASE" (
set target=RELEASE
- echo BUILD_TYPE = R >> %WORKSPACE%\Conf\BiosId.env
) else (
set target=DEBUG
- echo BUILD_TYPE = D >> %WORKSPACE%\Conf\BiosId.env
)
::**********************************************************************
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh
index ec3a325db7..1eefa5de73 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh
+++ b/Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh
@@ -97,11 +97,6 @@ for (( i=1; i<=$#; ))
rm -r Build
fi
shift
- elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/ECP" ]; then
- ECP_SOURCE=$WORKSPACE/EdkCompatibilityPkgEcp
- EDK_SOURCE=$WORKSPACE/EdkCompatibilityPkgEcp
- echo DEFINE ECP_BUILD_ENABLE = TRUE >> $auto_config_inc
- shift
elif [ "$(echo $1 | tr 'a-z' 'A-Z')" == "/X64" ]; then
Arch=X64
shift
@@ -113,10 +108,6 @@ for (( i=1; i<=$#; ))
fi
done
-
-
-
-
## Required argument(s)
if [ "$2" == "" ]; then
Usage
@@ -203,54 +194,19 @@ fi
##**********************************************************************
## Build BIOS
##**********************************************************************
-echo Skip "Running UniTool..."
-echo "Make GenBiosId Tool..."
-BUILD_PATH=Build/$PLATFORM_PACKAGE/"$TARGET"_"$TOOL_CHAIN_TAG"
-if [ ! -d "$BUILD_PATH/$Arch" ]; then
- mkdir -p $BUILD_PATH/$Arch
-fi
-if [ -e "$BUILD_PATH/$Arch/BiosId.bin" ]; then
- rm -f $BUILD_PATH/$Arch/BiosId.bin
-fi
-
-
-./$PLATFORM_PACKAGE/GenBiosId -i Conf/BiosId.env -o $BUILD_PATH/$Arch/BiosId.bin
-
-
echo "Invoking EDK2 build..."
build
-if [ $SpiLock == "1" ]; then
- IFWI_HEADER_FILE=./$PLATFORM_PACKAGE/Stitch/IFWIHeader/IFWI_HEADER_SPILOCK.bin
-else
- IFWI_HEADER_FILE=./$PLATFORM_PACKAGE/Stitch/IFWIHeader/IFWI_HEADER.bin
-fi
-
-echo $IFWI_HEADER_FILE
-
##**********************************************************************
## Post Build processing and cleanup
##**********************************************************************
-
echo Skip "Running fce..."
-echo Skip "Running KeyEnroll..."
+##**********************************************************************
+## Build Capsules
+##**********************************************************************
+build -p %PLATFORM_PACKAGE%\PlatformCapsule.dsc
-## Set the Board_Id, Build_Type, Version_Major, and Version_Minor environment variables
-VERSION_MAJOR=$(grep '^VERSION_MAJOR' Conf/BiosId.env | cut -d ' ' -f 3 | cut -c 1-4)
-VERSION_MINOR=$(grep '^VERSION_MINOR' Conf/BiosId.env | cut -d ' ' -f 3 | cut -c 1-2)
-BOARD_ID=$(grep '^BOARD_ID' Conf/BiosId.env | cut -d ' ' -f 3 | cut -c 1-7)
-BIOS_Name="$BOARD_ID"_"$Arch"_"$BUILD_TYPE"_"$VERSION_MAJOR"_"$VERSION_MINOR".ROM
-BIOS_ID="$BOARD_ID"_"$Arch"_"$BUILD_TYPE"_"$VERSION_MAJOR"_"$VERSION_MINOR"_GCC.bin
-SEC_VERSION=1.0.2.1060v5
-cat $IFWI_HEADER_FILE ../Vlv2Binaries/Vlv2SocBinPkg/SEC/$SEC_VERSION/VLV_SEC_REGION.bin ../Vlv2Binaries/Vlv2SocBinPkg/SEC/$SEC_VERSION/Vacant.bin $BUILD_PATH/FV/VLV.fd > ./$PLATFORM_PACKAGE/Stitch/$BIOS_ID
-
-
-echo Skip "Running BIOS_Signing ..."
-
-echo
-echo Build location: $BUILD_PATH
-echo BIOS ROM Created: $BIOS_Name
echo
echo -------------------- The EDKII BIOS build has successfully completed. --------------------
echo
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 08/14] Vlv2TbltDevicePkg: Remove use of Data Hub Protocol
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (6 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 07/14] Vlv2TbltDevicePkg: Remove use of BIOS ID tools Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:08 ` [edk2-devel] " Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 09/14] Vlv2TbltDevicePkg: Use PI Spec SMBUS2 PPI Michael D Kinney
` (6 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
Update all platform code to stop using the Data Hub Protocol
from the IntelFrameworkPkg.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Vlv2TbltDevicePkg/Include/Guid/IdccData.h | 104 -
.../Vlv2TbltDevicePkg/Include/Guid/ItkData.h | 18 +-
.../Vlv2TbltDevicePkg/PlatformDxe/BoardId.c | 45 +-
.../PlatformDxe/ClockControl.c | 80 +-
.../Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c | 72 -
.../Vlv2TbltDevicePkg/PlatformDxe/Platform.c | 1 -
.../PlatformDxe/PlatformDxe.h | 2 -
.../PlatformDxe/PlatformDxe.inf | 2 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 1 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 6 -
.../Vlv2TbltDevicePkg/PlatformPkgConfig.dsc | 1 -
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 6 -
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 7 -
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 7 -
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 7 -
.../PlatformSetupDxe/PlatformSetupDxe.h | 2 -
.../PlatformSetupDxe/SetupFunctions.c | 38 +-
.../PlatformSetupDxe/SetupInfoRecords.c | 477 +--
| 10 +-
.../SmBiosMiscDxe/DataHubRecords.h | 2934 +++++++++++++++++
.../SmBiosMiscDxe/MiscMemoryDeviceFunction.c | 318 +-
.../SmBiosMiscDxe/MiscOemType0x94Function.c | 1 -
.../SmBiosMiscDxe/MiscProcessorCacheData.c | 11 +-
.../MiscProcessorCacheFunction.c | 273 +-
.../MiscProcessorInformationFunction.c | 203 +-
.../MiscSubclassDriverDataTable.c | 14 +-
.../MiscSubclassDriverEntryPoint.c | 13 +-
.../SmBiosMiscDxe/SmBiosMiscDxe.inf | 3 +-
.../VlvPlatformInitDxe/IgdOpRegion.c | 3 -
.../VlvPlatformInitDxe/VlvPlatformInitDxe.inf | 6 +-
30 files changed, 3458 insertions(+), 1207 deletions(-)
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords.h
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h
deleted file mode 100644
index 7e3b965666..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- IdccData.h
-
-Abstract:
-
---*/
-
-#ifndef _IDCCDATAHUB_GUID_H_
-#define _IDCCDATAHUB_GUID_H_
-
-//
-// This GUID is for the IDCC related data found in the Data Hub.
-//
-#define IDCC_DATA_HUB_GUID \
- { 0x788e1d9f, 0x1eab, 0x47d2, 0xa2, 0xf3, 0x78, 0xca, 0xe8, 0x7d, 0x60, 0x12 }
-
-extern EFI_GUID gIdccDataHubGuid;
-
-#pragma pack(1)
-
-typedef struct {
- UINT32 Type;
- UINT32 RecordLength;
-} EFI_IDCC_DATA_HEADER;
-
-typedef struct {
- EFI_IDCC_DATA_HEADER IdccHeader;
- UINT32 Tcontrol;
-} EFI_IDCC_TCONTROL;
-
-typedef struct {
- UINT32 EntryCount;
-} EFI_IDCC_CLOCK_COMMON;
-
-typedef struct {
- UINT8 Polarity;
- UINT8 Percent;
- UINT32 FpValue;
-} EFI_IDCC_TYPE_2_DATA;
-
-typedef struct {
- UINT8 SetupVal;
- UINT32 FpValue;
-} EFI_IDCC_TYPE_3_4_DATA;
-
-typedef struct {
- EFI_IDCC_DATA_HEADER IdccHeader;
- UINT32 ProcessorRatio;
-} EFI_IDCC_PROCESSOR_RATIO;
-
-typedef struct {
- EFI_IDCC_DATA_HEADER IdccHeader;
- UINT32 BoardFormFactor;
-} EFI_IDCC_BOARD_FORM_FACTOR;
-
-typedef struct {
- EFI_IDCC_DATA_HEADER IdccHeader;
- UINT32 ProcessorInfo;
-} EFI_IDCC_PROCESSOR_INFO;
-
-#define EFI_IDCC_PROCESSOR_UNCON (1 << 0) // Bit 0: UnCon CPU
-#define EFI_IDCC_PROCESSOR_UNLOCK (1 << 1) // Bit 1: UnLock CPU
-#define EFI_IDCC_PROCESSOR_CNR (1 << 2) // Bit 2: CNR CPU
-#define EFI_IDCC_PROCESSOR_KNF (1 << 3) // Bit 3: KNF CPU
-
-typedef struct {
- EFI_IDCC_DATA_HEADER IdccHeader;
- UINT32 MinFSB;
- UINT32 MaxFSB;
- UINT8 StepFSB;
-} EFI_IDCC_FSB_DATA;
-
-#pragma pack()
-
-#define EFI_IDCC_POSITIVE 0
-#define EFI_IDCC_NEGATIVE 1
-
-//
-// Board Form Factor equates.
-//
-#define ATX_FORM_FACTOR 0x00
-#define BTX_FORM_FACTOR 0x01
-
-
-#define EFI_IDCC_TCONTROL_TYPE 1
-#define EFI_IDCC_FSB_TYPE 2
-#define EFI_IDCC_PCI_TYPE 3
-#define EFI_IDCC_PCIE_TYPE 4
-#define EFI_IDCC_PROC_RATIO_TYPE 5
-#define EFI_IDCC_BOARD_FORM_FACTOR_TYPE 6
-#define EFI_IDCC_PROC_INFO_TYPE 7
-#define EFI_IDCC_FSB_DATA_TYPE 8
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h
index e7bd29e6e4..2dcaac15f3 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
ItkData.h
@@ -14,16 +12,8 @@ Abstract:
--*/
-#ifndef _ITKDATAHUB_GUID_H_
-#define _ITKDATAHUB_GUID_H_
-
-//
-// This GUID is for the ITK related data found in the Data Hub {E7060843-A336-4d5b-9598-13402F5D7375}
-//
-#define ITK_DATA_HUB_GUID \
- { 0xe7060843, 0xa336, 0x4d5b, 0x95, 0x98, 0x13, 0x40, 0x2f, 0x5d, 0x73, 0x75 }
-
-extern EFI_GUID gItkDataHubGuid;
+#ifndef _ITKDATA_GUID_H_
+#define _ITKDATA_GUID_H_
//
// This GUID is for the ITK related data found in a Variable {3812723D-7E48-4e29-BC27-F5A39AC94EF1}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c
index 7d774568e3..66c76453a8 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -23,13 +21,9 @@ Abstract:
#include "PchRegs.h"
#include "PlatformDxe.h"
-#include <Guid/IdccData.h>
#include <Guid/EfiVpdData.h>
-#include <Protocol/DataHub.h>
-extern EFI_GUID mPlatformDriverGuid;
-
//
// Global module data
//
@@ -52,8 +46,6 @@ InitializeBoardId (
{
UINT32 BoardIdBufferSize;
- EFI_IDCC_BOARD_FORM_FACTOR IdccBoardFormFactor;
- EFI_DATA_HUB_PROTOCOL *DataHub;
EFI_STATUS Status;
DMI_DATA DmiDataVariable;
UINTN Size;
@@ -186,38 +178,5 @@ InitializeBoardId (
BoardIdBufferSize,
&mBoardFeatures
);
-
- //
- // Get the Data Hub protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (VOID **) &DataHub
- );
- if (!(EFI_ERROR(Status))) {
- //
- // Fill out data
- //
- IdccBoardFormFactor.IdccHeader.Type = EFI_IDCC_BOARD_FORM_FACTOR_TYPE;
- IdccBoardFormFactor.IdccHeader.RecordLength = sizeof(EFI_IDCC_BOARD_FORM_FACTOR);
- if ((mBoardFeatures & B_BOARD_FEATURES_FORM_FACTOR_ATX) || (mBoardFeatures & B_BOARD_FEATURES_FORM_FACTOR_MICRO_ATX)) {
- IdccBoardFormFactor.BoardFormFactor = ATX_FORM_FACTOR; // ATX
- } else {
- IdccBoardFormFactor.BoardFormFactor = BTX_FORM_FACTOR; // BTX
- }
-
- //
- // Publish the Board Form Factor value for IDCC
- //
- Status = DataHub->LogData (
- DataHub,
- &gIdccDataHubGuid,
- &mPlatformDriverGuid,
- EFI_DATA_RECORD_CLASS_DATA,
- &IdccBoardFormFactor,
- sizeof(EFI_IDCC_BOARD_FORM_FACTOR)
- );
- }
}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c
index 1669f0357f..596f55bcbe 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -75,71 +73,6 @@ EFI_CLOCK_PLATFORM_INFO mAtxClockSettings = {
sizeof(mAtxSxClocks) / sizeof(mAtxSxClocks[0])
};
-#if defined( RVP_SUPPORT ) && RVP_SUPPORT
-//
-// RVP Clock Settings
-//
-// Static clock table.
-// This should be used to define any clock settings that are static
-// (Always On or Always Off). Dynamic clocks should be set to enabled
-// in this table.
-//
-//UPSD_TBD Check with Jan if any porting required.
-//
-EFI_STATIC_SIGNALS mRvpStaticClocks[] = {
- {SrcClk11, Enabled, All}, // Not used/not present but leave coding enabled
- {SrcClk10, Enabled, All}, // Not used/not present but leave coding enabled
- {SrcClk9, Enabled, All}, // Not used/not present but leave coding enabled
- {SrcClk8, Enabled, All}, // ICHSATAII
- {SrcClk7, Enabled, All}, // DPL_REFSSCLKIN
- {SrcClk6, Enabled, All}, // 100M_MCH
- {SrcClk5, Enabled, All}, // Mini-PCIe //TODO PNV: Need to check ICH GPIO38:
- // 0: turn on; 1: turn off
- {SrcClk4, Enabled, All}, // ICHSATA
- {SrcClk3, Enabled, All}, // 100M_ICH
- {SrcClk2, Enabled, All}, // 100M_LAN
- {SrcClk1, Enabled, All}, // 25M_LAN
- {SrcClk0, Enabled, All}, // 96M_DREF
- {Ref0, Enabled, All},
- {Dot96, Enabled, All},
- {Usb48, Enabled, All},
- {PciClkF5, Enabled, All}, // 33M_ICH
- {PciClk0, Enabled, All}, // 33M_RISER
- {PciClk1, Enabled, All}, // 33M_RISER
- {PciClk2, Enabled, All}, // VDD_Clock
- {PciClk3, Enabled, All}, // 33M_S1
- {PciClk4, Enabled, All}, // 33M_PA
-};
-
-//
-// Dynamic clock table
-// This is used to determine if a clock should be left on or turned off based
-// on the presence of a device. The bridge information is used so the bus
-// number for the device to be detected can be found.
-//
-
-//
-// ClockSxInfo Table
-// This is a list of clocks that need to be set to a known state when the
-// system enters S4 or S5.
-//
-EFI_STATIC_SIGNALS mRvpSxClocks[] = {
- {SaveClockConfiguration, Disabled, All}
-};
-
-//
-// RVP settings structure
-//
-EFI_CLOCK_PLATFORM_INFO mRvpClockSettings = {
- mRvpStaticClocks,
- sizeof(mRvpStaticClocks) / sizeof(mRvpStaticClocks[0]),
- 0, // No clocks will be turned off mRvpDynamicClocks,
- 0, // No clocks will be turned off sizeof(mRvpDynamicClocks) / sizeof(mRvpDynamicClocks[0]),
- mRvpSxClocks,
- sizeof(mRvpSxClocks) / sizeof(mRvpSxClocks[0])
-};
-#endif
-
VOID
InitializeClockRouting(
)
@@ -165,12 +98,6 @@ InitializeClockRouting(
);
if (!EFI_ERROR (Status)) {
-#if defined( RVP_SUPPORT ) && RVP_SUPPORT
- if (BoardIdVar & B_BOARD_FEATURES_RVP) {
- ClockPolicy = &mRvpClockSettings;
- }
-#else
-
//
// Isolate board type information
//
@@ -183,9 +110,6 @@ InitializeClockRouting(
BoardIdVar == B_BOARD_FEATURES_FORM_FACTOR_MICRO_ATX) {
ClockPolicy = &mAtxClockSettings;
}
-
-#endif
-
}
Handle = NULL;
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c
deleted file mode 100644
index 3b3e4b4c82..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
-
- IdccInfo.c
-
-Abstract:
-
- Platform information used by IDCC.
-
-Revision History
-
---*/
-
-#include "PlatformDxe.h"
-
-#include <Guid/IdccData.h>
-
-extern EFI_GUID mPlatformDriverGuid;
-
-
-EFI_STATUS
-WriteIdccInfo (
- )
-{
- EFI_STATUS Status;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- UINT8 Ratio;
- EFI_IDCC_PROCESSOR_RATIO ProcRatio;
-
- //
- // Locate the data hub protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (VOID **) &DataHub
- );
-
- //
- // Find processor actual ratio
- //
- Ratio = 15; //Temporary - some dummy value.
-
- //
- // Fill in IDCC Type 5 structure
- //
- ProcRatio.IdccHeader.Type = EFI_IDCC_PROC_RATIO_TYPE;
- ProcRatio.IdccHeader.RecordLength = sizeof(EFI_IDCC_PROCESSOR_RATIO);
- ProcRatio.ProcessorRatio = Ratio;
-
- //
- // Write data to the data hub
- //
- Status = DataHub->LogData (
- DataHub,
- &gIdccDataHubGuid,
- &mPlatformDriverGuid,
- EFI_DATA_RECORD_CLASS_DATA,
- &ProcRatio,
- sizeof(EFI_IDCC_PROCESSOR_RATIO)
- );
-
- return Status;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
index 7e083e3933..0bc3f44c49 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
@@ -55,7 +55,6 @@ GPIO_CONF_PAD_INIT mTB_BL_GpioInitData_SC_TRI_Exit_boot_Service[] =
EFI_GUID mSystemHiiExportDatabase = EFI_HII_EXPORT_DATABASE_GUID;
-EFI_GUID mPlatformDriverGuid = EFI_PLATFORM_DRIVER_GUID;
SYSTEM_CONFIGURATION mSystemConfiguration;
EFI_HANDLE mImageHandle;
BOOLEAN mMfgMode = FALSE;
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
index 5c60f823de..f2f0097efc 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
@@ -43,8 +43,6 @@ Abstract:
#include <Protocol/CpuIo2.h>
#include <Guid/GlobalVariable.h>
#include <Guid/BoardFeatures.h>
-#include <Guid/DataHubRecords.h>
-#include <Protocol/DataHub.h>
#include <Protocol/PciIo.h>
#include <Protocol/Speaker.h>
#include <IndustryStandard/Pci22.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index 0c432642e4..a9ef744ef7 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -35,7 +35,6 @@ [sources.common]
ClockControl.c
Platform.c
IchRegTable.c
- IdccInfo.c
IchPlatformPolicy.c
PciDevice.c
SlotConfig.c
@@ -80,7 +79,6 @@ [Guids]
gEfiBoardFeaturesGuid
gItkDataVarGuid
gDmiDataGuid
- gIdccDataHubGuid
gEfiPciLanInfoGuid
gEfiNormalSetupGuid
gEfiGlobalVariableGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index bfde7be398..5b255f4b05 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -41,7 +41,6 @@ [Guids]
gEfiBoardFeaturesGuid = { 0x94b9e8ae, 0x8877, 0x479a, { 0x98, 0x42, 0xf5, 0x97, 0x4b, 0x82, 0xce, 0xd3 } }
gItkDataVarGuid = { 0x3812723d, 0x7e48, 0x4e29, { 0xbc, 0x27, 0xf5, 0xa3, 0x9a, 0xc9, 0x4e, 0xf1 } }
gDmiDataGuid = { 0x70e56c5e, 0x280c, 0x44b0, { 0xa4, 0x97, 0x09, 0x68, 0x1a, 0xbc, 0x37, 0x5e } }
- gIdccDataHubGuid = { 0x788e1d9f, 0x1eab, 0x47d2, { 0xa2, 0xf3, 0x78, 0xca, 0xe8, 0x7d, 0x60, 0x12 } }
gEfiSetupVariableGuid = { 0xec87d643, 0xeba4, 0x4bb5, { 0xa1, 0xe5, 0x3f, 0x3e, 0x36, 0xb2, 0x0d, 0xa9 } }
gEfiPlatformInfoGuid = { 0x1e2acc41, 0xe26a, 0x483d, { 0xaf, 0xc7, 0xa0, 0x56, 0xc3, 0x4e, 0x08, 0x7b } }
gMfgModeVariableGuid = { 0xEF14FD78, 0x0793, 0x4e2b, { 0xAC, 0x6D, 0x06, 0x28, 0x47, 0xE0, 0x17, 0x91 } }
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index 4c60d0a0f2..15a4251cf8 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -430,9 +430,6 @@ [FV.FVMAIN]
INF Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
-!if $(DATAHUB_ENABLE) == TRUE
-INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf
-!endif
INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
@@ -584,9 +581,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
INF Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
-INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
-
-
#
# FAT file system
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
index d5068b514c..7b48d7b44e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
@@ -48,7 +48,6 @@
DEFINE MICOCODE_CAPSULE_ENABLE = TRUE
DEFINE GOP_DRIVER_ENABLE = TRUE
-DEFINE DATAHUB_ENABLE = TRUE
DEFINE USB_ENABLE = TRUE
DEFINE ISA_SERIAL_STATUS_CODE_ENABLE = TRUE
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index 61e1adcd14..b8ac61d710 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -376,9 +376,6 @@ [FV.FVMAIN]
INF Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
-!if $(DATAHUB_ENABLE) == TRUE
-INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf
-!endif
INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
@@ -530,9 +527,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
INF Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
-INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
-
-
#
# FAT file system
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index 25d1beb400..b16883e98c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -984,12 +984,6 @@ [Components.X64]
Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
-!if $(DATAHUB_ENABLE) == TRUE
- IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
- }
-!endif
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
@@ -1212,7 +1206,6 @@ [Components.X64]
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index 8a5c42577d..c9335a98c8 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -968,12 +968,6 @@ [Components.IA32]
Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
-!if $(DATAHUB_ENABLE) == TRUE
- IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
- }
-!endif
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
@@ -1196,7 +1190,6 @@ [Components.IA32]
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index c0fe0892ac..fd9ddebfd9 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -983,12 +983,6 @@ [Components.X64]
Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
-!if $(DATAHUB_ENABLE) == TRUE
- IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
- }
-!endif
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
@@ -1211,7 +1205,6 @@ [Components.X64]
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
index 1ba75175e1..b4a30511ac 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
@@ -25,10 +25,8 @@
#include <Protocol/DevicePathToText.h>
#include <Protocol/DevicePath.h>
#include <Protocol/PlatformDriverOverride.h>
-#include <Protocol/DataHub.h>
#include <Guid/MdeModuleHii.h>
#include <Guid/VariableFormat.h>
-#include <Guid/DataHubRecords.h>
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFunctions.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFunctions.c
index a84b425826..f3bc823056 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFunctions.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFunctions.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
SetupFunctions.c
@@ -52,34 +49,3 @@ SwapEntries (
return;
}
-
-UINT32
-ConvertBase10ToRaw (
- IN EFI_EXP_BASE10_DATA *Data)
-{
- UINTN Index;
- UINT32 RawData;
-
- RawData = Data->Value;
- for (Index = 0; Index < (UINTN) Data->Exponent; Index++) {
- RawData *= 10;
- }
-
- return RawData;
-}
-
-UINT32
-ConvertBase2ToRaw (
- IN EFI_EXP_BASE2_DATA *Data)
-{
- UINTN Index;
- UINT32 RawData;
-
- RawData = Data->Value;
- for (Index = 0; Index < (UINTN) Data->Exponent; Index++) {
- RawData <<= 1;
- }
-
- return RawData;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
index c767021aed..efd4a723e1 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
@@ -79,9 +79,6 @@ SB_REV SBRevisionTable[] = {
BOOLEAN mSetupInfoDone = FALSE;
UINT8 mUseProductKey = 0;
-EFI_EXP_BASE10_DATA mProcessorFrequency;
-EFI_EXP_BASE10_DATA mProcessorFsbFrequency;
-
EFI_GUID mProcessorProducerGuid;
EFI_HII_HANDLE mHiiHandle;
EFI_PLATFORM_CPU_INFO mPlatformCpuInfo;
@@ -91,50 +88,7 @@ EFI_PLATFORM_INFO_HOB *mPlatformInfo;
#define memset SetMem
-UINT16 mMemorySpeed = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelASlot0 = 0;
-UINT16 mMemorySpeedChannelASlot0 = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelASlot1 = 0;
-UINT16 mMemorySpeedChannelASlot1 = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelBSlot0 = 0;
-UINT16 mMemorySpeedChannelBSlot0 = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelBSlot1 = 0;
-UINT16 mMemorySpeedChannelBSlot1 = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelCSlot0 = 0;
-UINT16 mMemorySpeedChannelCSlot0 = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelCSlot1 = 0;
-UINT16 mMemorySpeedChannelCSlot1 = 0xffff;
-UINTN mMemoryMode = 0xff;
-
#define CHARACTER_NUMBER_FOR_VALUE 30
- typedef struct {
- EFI_STRING_TOKEN MemoryDeviceLocator;
- EFI_STRING_TOKEN MemoryBankLocator;
- EFI_STRING_TOKEN MemoryManufacturer;
- EFI_STRING_TOKEN MemorySerialNumber;
- EFI_STRING_TOKEN MemoryAssetTag;
- EFI_STRING_TOKEN MemoryPartNumber;
- EFI_INTER_LINK_DATA MemoryArrayLink;
- EFI_INTER_LINK_DATA MemorySubArrayLink;
- UINT16 MemoryTotalWidth;
- UINT16 MemoryDataWidth;
- UINT64 MemoryDeviceSize;
- EFI_MEMORY_FORM_FACTOR MemoryFormFactor;
- UINT8 MemoryDeviceSet;
- EFI_MEMORY_ARRAY_TYPE MemoryType;
- EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail;
- UINT16 MemorySpeed;
- EFI_MEMORY_STATE MemoryState;
-} EFI_MEMORY_ARRAY_LINK;
-
-
-typedef struct {
- EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress;
- EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress;
- EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
- UINT16 MemoryArrayPartitionWidth;
-} EFI_MEMORY_ARRAY_START_ADDRESS;
-
typedef enum {
PCH_SATA_MODE_IDE = 0,
@@ -421,73 +375,6 @@ VOID UpdateLatestBootTime() {
HiiSetString(mHiiHandle,STRING_TOKEN(STR_LOG_BOOT_TIME_VALUE), Buffer, NULL);
}
-/**
- Get Cache Type for the specified Cache. This function is invoked when there is data records
- available in the Data Hub.
-
- Get Cache Type function arguments:
-
- @param Instance The instance number of the subclass with the same ProducerName..
- @param SubInstance The instance number of the RecordType for the same Instance.
- @param CacheType Cache type, see definition of EFI_CACHE_TYPE_DATA.
-
- @retval EFI_STATUS
-
-**/
-EFI_STATUS
-GetCacheType(
- IN UINT16 Instance,
- IN UINT16 SubInstance,
- IN EFI_CACHE_TYPE_DATA* CacheType)
-{
- EFI_STATUS Status;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- EFI_DATA_RECORD_HEADER *Record;
- UINT64 MonotonicCount;
- EFI_CACHE_VARIABLE_RECORD* CacheVariableRecord;
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;
-
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (void **)&DataHub
- );
- ASSERT_EFI_ERROR(Status);
-
- //
- // Get all available data records from data hub
- //
- MonotonicCount = 0;
- Record = NULL;
-
- do {
- Status = DataHub->GetNextRecord (
- DataHub,
- &MonotonicCount,
- NULL,
- &Record
- );
- if (!EFI_ERROR(Status)) {
- if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1);
-
- if(CompareGuid(&Record->DataRecordGuid, &gEfiCacheSubClassGuid) &&
- (DataHeader->RecordType == CacheTypeRecordType) &&
- (DataHeader->Instance == Instance) &&
- (DataHeader->SubInstance == SubInstance)) {
- CacheVariableRecord = (EFI_CACHE_VARIABLE_RECORD *)(DataHeader + 1);
- if(CacheType){
- *CacheType = CacheVariableRecord->CacheType;
- return EFI_SUCCESS;
- }
- }
- }
- }
- } while(!EFI_ERROR(Status) && (MonotonicCount != 0));
-
- return EFI_NOT_FOUND;
-}
-
/**
Setup data filter function. This function is invoked when there is data records
available in the Data Hub.
@@ -504,230 +391,23 @@ VOID
PrepareSetupInformation (
)
{
-
EFI_STATUS Status;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- EFI_DATA_RECORD_HEADER *Record;
- UINT8 *SrcData;
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;
CHAR16 *NewString;
- CHAR16 *NewString2;
- CHAR16 *NewStringToken;
STRING_REF TokenToUpdate;
- EFI_PROCESSOR_VERSION_DATA *ProcessorVersion;
- UINTN Index;
- UINTN DataOutput;
-
- EFI_PROCESSOR_MICROCODE_REVISION_DATA *CpuUcodeRevisionData;
- EFI_MEMORY_ARRAY_START_ADDRESS *MemoryArray;
- EFI_MEMORY_ARRAY_LINK *MemoryArrayLink;
- UINT64 MonotonicCount;
-
CHAR16 Version[100]; //Assuming that strings are < 100 UCHAR
CHAR16 ReleaseDate[100]; //Assuming that strings are < 100 UCHAR
CHAR16 ReleaseTime[100]; //Assuming that strings are < 100 UCHAR
NewString = AllocateZeroPool (0x100);
- NewString2 = AllocateZeroPool (0x100);
SetMem(Version, sizeof(Version), 0);
SetMem(ReleaseDate, sizeof(ReleaseDate), 0);
SetMem(ReleaseTime, sizeof(ReleaseTime), 0);
- //
- // Get the Data Hub Protocol. Assume only one instance
- //
- Status = gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (void **)&DataHub);
- ASSERT_EFI_ERROR(Status);
-
- //
- // Get all available data records from data hub
- //
- MonotonicCount = 0;
- Record = NULL;
-
- do {
- Status = DataHub->GetNextRecord (DataHub, &MonotonicCount, NULL, &Record);
- if (!EFI_ERROR(Status)) {
- if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1);
- SrcData = (UINT8 *)(DataHeader + 1);
-
- //
- // Processor
- //
- if (CompareGuid(&Record->DataRecordGuid, &gEfiProcessorSubClassGuid)) {
- CopyMem (&mProcessorProducerGuid, &Record->ProducerName, sizeof(EFI_GUID));
- switch (DataHeader->RecordType) {
- case ProcessorCoreFrequencyRecordType:
- CopyMem(&mProcessorFrequency, SrcData, sizeof(EFI_EXP_BASE10_DATA));
- Index = EfiValueToString (
- NewString,
- ConvertBase10ToRaw ((EFI_EXP_BASE10_DATA *)SrcData)/1000000000,
- PREFIX_ZERO,
- 0
- );
- StrCat (NewString, L".");
- EfiValueToString (
- NewString + Index + 1,
- ((ConvertBase10ToRaw ((EFI_EXP_BASE10_DATA *)SrcData)%1000000000)/10000000),
- PREFIX_ZERO,
- 0
- );
- StrCat (NewString, L" GHz");
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_SPEED_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- break;
-
- case ProcessorVersionRecordType:
- ProcessorVersion = (EFI_PROCESSOR_VERSION_DATA *)SrcData;
- NewStringToken = HiiGetPackageString(&mProcessorProducerGuid, *ProcessorVersion, NULL);
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_VERSION_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, NewStringToken, NULL);
- break;
- case CpuUcodeRevisionDataRecordType:
- CpuUcodeRevisionData = (EFI_PROCESSOR_MICROCODE_REVISION_DATA *) SrcData;
- if (CpuUcodeRevisionData->ProcessorMicrocodeRevisionNumber != 0) {
- EfiValueToHexStr (
- NewString,
- CpuUcodeRevisionData->ProcessorMicrocodeRevisionNumber,
- PREFIX_ZERO,
- 8
- );
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_MICROCODE_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- }
- break;
- default:
- break;
- }
-
- //
- // Cache
- //
- } else if (CompareGuid(&Record->DataRecordGuid, &gEfiCacheSubClassGuid) &&
- (DataHeader->RecordType == CacheSizeRecordType)) {
- if (DataHeader->SubInstance == EFI_CACHE_L1) {
- EFI_CACHE_TYPE_DATA CacheType;
- if (EFI_SUCCESS == GetCacheType(DataHeader->Instance, DataHeader->SubInstance,&CacheType)){
- if (CacheType == EfiCacheTypeData) {
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_L1_DATA_CACHE_VALUE;
- } else if (CacheType == EfiCacheTypeInstruction) {
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_L1_INSTR_CACHE_VALUE;
- } else {
- continue;
- }
- } else {
- continue;
- }
- }
- else if (DataHeader->SubInstance == EFI_CACHE_L2) {
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_L2_CACHE_VALUE;
- } else {
- continue;
- }
- if (ConvertBase2ToRaw((EFI_EXP_BASE2_DATA *)SrcData)) {
- DataOutput = ConvertBase2ToRaw((EFI_EXP_BASE2_DATA *)SrcData) >> 10;
- EfiValueToString (NewString, DataOutput, PREFIX_ZERO, 0);
-
- StrCat (NewString, L" KB");
- if (DataHeader->SubInstance == EFI_CACHE_L3) {
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- } else if(DataHeader->SubInstance == EFI_CACHE_L2 && mPlatformCpuInfo.CpuPackage.CoresPerPhysicalPackage > 1){
- //
- // Show XxL2 string
- //
- EfiValueToString (
- NewString2,
- mPlatformCpuInfo.CpuPackage.CoresPerPhysicalPackage,
- PREFIX_ZERO,
- 0
- );
- StrCat(NewString2, L"x ");
- StrCat(NewString2, NewString);
- HiiSetString(mHiiHandle, TokenToUpdate, NewString2, NULL);
- } else {
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- }
- }
-
- //
- // Memory
- //
- } else if (CompareGuid(&Record->DataRecordGuid, &gEfiMemorySubClassGuid)) {
- switch (DataHeader->RecordType) {
- case EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER:
- MemoryArrayLink = (EFI_MEMORY_ARRAY_LINK *)SrcData;
-
- if (MemoryArrayLink->MemorySpeed > 0) {
- //
- // Save the lowest speed memory module
- //
- if (MemoryArrayLink->MemorySpeed < mMemorySpeed) {
- mMemorySpeed = MemoryArrayLink->MemorySpeed;
- }
- switch (DataHeader->SubInstance) {
- case 1:
- mMemorySpeedChannelASlot0 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelASlot0 = MemoryArrayLink->MemoryDeviceSize;
- break;
- case 2:
- mMemorySpeedChannelASlot1 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelASlot1 = MemoryArrayLink->MemoryDeviceSize;
- break;
- case 3:
- mMemorySpeedChannelBSlot0 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelBSlot0 = MemoryArrayLink->MemoryDeviceSize;
- break;
- case 4:
- mMemorySpeedChannelBSlot1 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelBSlot1 = MemoryArrayLink->MemoryDeviceSize;
- break;
- case 5:
- mMemorySpeedChannelCSlot0 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelCSlot0 = MemoryArrayLink->MemoryDeviceSize;
- break;
- case 6:
- mMemorySpeedChannelCSlot1 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelCSlot1 = MemoryArrayLink->MemoryDeviceSize;
- break;
- default:
- break;
- }
- }
- break;
-
- case EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER:
- MemoryArray = (EFI_MEMORY_ARRAY_START_ADDRESS *)SrcData;
- if (MemoryArray->MemoryArrayEndAddress - MemoryArray->MemoryArrayStartAddress) {
- DataOutput = (UINTN)RShiftU64((MemoryArray->MemoryArrayEndAddress - MemoryArray->MemoryArrayStartAddress + 1), 20);
- EfiValueToString (NewString, DataOutput / 1024, PREFIX_ZERO, 0);
- if(DataOutput % 1024) {
- StrCat (NewString, L".");
- DataOutput = ((DataOutput % 1024) * 1000) / 1024;
- while(!(DataOutput % 10))
- DataOutput = DataOutput / 10;
- EfiValueToString (NewString2, DataOutput, PREFIX_ZERO, 0);
- StrCat (NewString, NewString2);
- }
- StrCat (NewString, L" GB");
- TokenToUpdate = (STRING_REF)STR_TOTAL_MEMORY_SIZE_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- }
- break;
-
- default:
- break;
- }
- }
- }
- }
- } while (!EFI_ERROR(Status) && (MonotonicCount != 0));
-
Status = GetBiosVersionDateTime (
Version,
- ReleaseDate,
- ReleaseTime
- );
+ ReleaseDate,
+ ReleaseTime
+ );
DEBUG ((EFI_D_ERROR, "GetBiosVersionDateTime :%s %s %s \n", Version, ReleaseDate, ReleaseTime));
if (!EFI_ERROR (Status)) {
@@ -750,24 +430,7 @@ PrepareSetupInformation (
HiiSetString(mHiiHandle, TokenToUpdate, BuildDateTime, NULL);
}
- //
- // Calculate and update memory speed display in Main Page
- //
- //
- // Update the overall memory speed
- //
- if (mMemorySpeed != 0xffff) {
- EfiValueToString (NewString, mMemorySpeed, PREFIX_ZERO, 0);
- StrCat (NewString, L" MHz");
-
- TokenToUpdate = (STRING_REF)STR_SYSTEM_MEMORY_SPEED_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- }
-
gBS->FreePool(NewString);
- gBS->FreePool(NewString2);
-
- return;
}
/**
@@ -782,65 +445,23 @@ UpdateAdditionalInformation (
)
{
EFI_STATUS Status;
- UINT64 MonotonicCount;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- EFI_DATA_RECORD_HEADER *Record;
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;
EFI_SMBIOS_PROTOCOL *Smbios;
EFI_SMBIOS_HANDLE SmbiosHandle;
EFI_SMBIOS_TABLE_HEADER *SmbiosRecord;
SMBIOS_TABLE_TYPE0 *Type0Record;
+ SMBIOS_TABLE_TYPE4 *Type4Record;
+ SMBIOS_TABLE_TYPE7 *Type7Record;
+ SMBIOS_TABLE_TYPE17 *Type17Record;
UINT8 StrIndex;
CHAR16 *BiosVersion = NULL;
+ CHAR16 *ProcessorVersion = NULL;
CHAR16 *IfwiVersion = NULL;
UINT16 SearchIndex;
EFI_STRING_ID TokenToUpdate;
-#if defined( RVP_SUPPORT ) && RVP_SUPPORT
- EFI_MISC_SYSTEM_MANUFACTURER *SystemManufacturer;
-#endif
-
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (void **)&DataHub
- );
-
- ASSERT_EFI_ERROR(Status);
-
- MonotonicCount = 0;
- Record = NULL;
- do {
- Status = DataHub->GetNextRecord (
- DataHub,
- &MonotonicCount,
- NULL,
- &Record
- );
- if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1);
-
- if (CompareGuid(&Record->DataRecordGuid, &gEfiMiscSubClassGuid) &&
- (DataHeader->RecordType == EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER)) {
-#if defined( RVP_SUPPORT ) && RVP_SUPPORT
- //
- // System Information
- //
- SystemManufacturer = (EFI_MISC_SYSTEM_MANUFACTURER *)(DataHeader + 1);
-
- //
- // UUID (System Information)
- //
- SMBIOSString = EfiLibAllocateZeroPool (0x100);
- GuidToString ( &SystemManufacturer->SystemUuid, SMBIOSString, 0x00 );
-
- TokenToUpdate = (STRING_REF)STR_SYSTEM_UUID_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, SMBIOSString, NULL);
-
- gBS->FreePool(SMBIOSString);
-#endif
- }
- }
- } while (!EFI_ERROR(Status) && (MonotonicCount != 0));
+ UINT32 MicrocodeRevision;
+ CHAR16 NewString[0x100];
+ UINTN TotalMemorySize;
+ UINT16 MemorySpeed;
Status = gBS->LocateProtocol (
&gEfiSmbiosProtocolGuid,
@@ -850,6 +471,8 @@ UpdateAdditionalInformation (
ASSERT_EFI_ERROR (Status);
SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
+ TotalMemorySize = 0;
+ MemorySpeed = 0xffff;
do {
Status = Smbios->GetNext (
Smbios,
@@ -858,6 +481,70 @@ UpdateAdditionalInformation (
&SmbiosRecord,
NULL
);
+
+
+ if (SmbiosRecord->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) {
+ Type4Record = (SMBIOS_TABLE_TYPE4 *) SmbiosRecord;
+ UnicodeSPrint (NewString, sizeof (NewString), L"%d.%d GHz",
+ Type4Record->CurrentSpeed / 1000,
+ Type4Record->CurrentSpeed % 1000
+ );
+ HiiSetString (mHiiHandle, STR_PROCESSOR_SPEED_VALUE, NewString, NULL);
+
+ StrIndex = Type4Record->ProcessorVersion;
+ GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type4Record + Type4Record->Hdr.Length), StrIndex, &ProcessorVersion);
+ HiiSetString (mHiiHandle, STR_PROCESSOR_VERSION_VALUE, ProcessorVersion, NULL);
+
+ MicrocodeRevision = (UINT32) RShiftU64 (AsmReadMsr64 (EFI_MSR_IA32_BIOS_SIGN_ID), 32);
+ UnicodeSPrint (NewString, sizeof (NewString), L"%8x", MicrocodeRevision);
+ HiiSetString (mHiiHandle, STR_PROCESSOR_MICROCODE_VALUE, NewString, NULL);
+ }
+ if (SmbiosRecord->Type == SMBIOS_TYPE_CACHE_INFORMATION) {
+ Type7Record = (SMBIOS_TABLE_TYPE7 *) SmbiosRecord;
+ UnicodeSPrint (NewString, sizeof (NewString), L"%d KB", Type7Record->InstalledSize);
+ switch (Type7Record->CacheConfiguration & 0x03) {
+ case 0:
+ //
+ // Level 1 Cache
+ //
+ if (Type7Record->SystemCacheType == CacheTypeInstruction) {
+ HiiSetString (mHiiHandle, STR_PROCESSOR_L1_INSTR_CACHE_VALUE, NewString, NULL);
+ }
+ if (Type7Record->SystemCacheType == CacheTypeData) {
+ HiiSetString (mHiiHandle, STR_PROCESSOR_L1_DATA_CACHE_VALUE, NewString, NULL);
+ }
+ break;
+ case 1:
+ //
+ // Level 2 Cache
+ //
+ HiiSetString (mHiiHandle, STR_PROCESSOR_L2_CACHE_VALUE, NewString, NULL);
+ break;
+ default:
+ break;
+ }
+ HiiSetString (mHiiHandle, STR_PROCESSOR_MICROCODE_VALUE, NewString, NULL);
+ }
+ if (SmbiosRecord->Type == EFI_SMBIOS_TYPE_MEMORY_DEVICE) {
+ Type17Record = (SMBIOS_TABLE_TYPE17 *) SmbiosRecord;
+ if (Type17Record->Size > 0) {
+ if ((Type17Record->Size & BIT15) != 0) {
+ //
+ // Size is in KB
+ //
+ TotalMemorySize = TotalMemorySize + Type17Record->Size;
+ } else {
+ //
+ // Size is in MB
+ //
+ TotalMemorySize = TotalMemorySize + (UINTN)LShiftU64 (Type17Record->Size, 10);
+ }
+ if (Type17Record->Speed < MemorySpeed) {
+ MemorySpeed = Type17Record->Speed;
+ }
+ }
+ }
+
if (SmbiosRecord->Type == EFI_SMBIOS_TYPE_BIOS_INFORMATION) {
Type0Record = (SMBIOS_TABLE_TYPE0 *) SmbiosRecord;
StrIndex = Type0Record->BiosVersion;
@@ -884,6 +571,16 @@ UpdateAdditionalInformation (
}
} while (!EFI_ERROR(Status));
+ if ((TotalMemorySize % 1024) != 0) {
+ UnicodeSPrint (NewString, sizeof (NewString), L"%d.%d GB", TotalMemorySize / 1024, ((TotalMemorySize % 1024) * 100) / 1024);
+ } else {
+ UnicodeSPrint (NewString, sizeof (NewString), L"%d GB", TotalMemorySize / 1024);
+ }
+ HiiSetString (mHiiHandle, STR_TOTAL_MEMORY_SIZE_VALUE, NewString, NULL);
+
+ UnicodeSPrint (NewString, sizeof (NewString), L"%d MHz", MemorySpeed);
+ HiiSetString(mHiiHandle, STR_SYSTEM_MEMORY_SPEED_VALUE, NewString, NULL);
+
UpdateLatestBootTime();
return EFI_SUCCESS;
--git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h
index e339b31065..f95e6bbc2d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h
@@ -3,11 +3,10 @@
This file includes package header files, library classes and protocol, PPI & GUID definitions.
- Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
**/
#ifndef __COMMON_HEADER_H_
@@ -15,11 +14,10 @@
-#include <FrameworkDxe.h>
+#include <PiDxe.h>
#include <IndustryStandard/SmBios.h>
#include <Protocol/Smbios.h>
-#include <Guid/DataHubRecords.h>
#include <Guid/MdeModuleHii.h>
#include <Library/DebugLib.h>
@@ -36,4 +34,6 @@
#include <Library/PchPlatformLib.h>
#include <Library/PrintLib.h>
+#include "DataHubRecords.h"
+
#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords.h b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords.h
new file mode 100644
index 0000000000..f57a5a8c0f
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords.h
@@ -0,0 +1,2934 @@
+/** @file
+ DataHubRecord.h includes all data hub subclass GUID definitions.
+
+ This file includes all data hub sub class defitions from
+ Cache subclass specification 0.9, DataHub SubClass specification 0.9, Memory SubClass Spec 0.9,
+ Processor Subclass specification 0.9, and Misc SubClass specification 0.9.
+
+Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+#ifndef _DATAHUB_RECORDS_GUID_H_
+#define _DATAHUB_RECORDS_GUID_H_
+
+//
+// Local defintion of STRING_REF
+//
+typedef UINT16 STRING_REF;
+
+//
+// The include is required to retrieve type EFI_EXP_BASE10_DATA
+//
+#include <Guid/StatusCodeDataTypeId.h>
+
+#define EFI_PROCESSOR_SUBCLASS_GUID \
+ { 0x26fdeb7e, 0xb8af, 0x4ccf, {0xaa, 0x97, 0x02, 0x63, 0x3c, 0xe4, 0x8c, 0xa7 } }
+
+extern EFI_GUID gEfiProcessorSubClassGuid;
+
+
+#define EFI_CACHE_SUBCLASS_GUID \
+ { 0x7f0013a7, 0xdc79, 0x4b22, {0x80, 0x99, 0x11, 0xf7, 0x5f, 0xdc, 0x82, 0x9d } }
+
+extern EFI_GUID gEfiCacheSubClassGuid;
+
+///
+/// The memory subclass belongs to the data class and is identified as the memory
+/// subclass by the GUID.
+///
+#define EFI_MEMORY_SUBCLASS_GUID \
+ {0x4E8F4EBB, 0x64B9, 0x4e05, {0x9B, 0x18, 0x4C, 0xFE, 0x49, 0x23, 0x50, 0x97} }
+
+extern EFI_GUID gEfiMemorySubClassGuid;
+
+#define EFI_MISC_SUBCLASS_GUID \
+ { 0x772484B2, 0x7482, 0x4b91, {0x9F, 0x9A, 0xAD, 0x43, 0xF8, 0x1C, 0x58, 0x81 } }
+
+extern EFI_GUID gEfiMiscSubClassGuid;
+
+
+///
+/// Inconsistent with specification here:
+/// In ProcSubclass specification 0.9, the value is 0x0100.
+/// Keep it unchanged from the perspective of binary consistency.
+///
+#define EFI_PROCESSOR_SUBCLASS_VERSION 0x00010000
+
+#pragma pack(1)
+
+typedef struct _USB_PORT_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH PciBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} USB_PORT_DEVICE_PATH;
+
+//
+// IDE
+//
+typedef struct _IDE_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH PciBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} IDE_DEVICE_PATH;
+
+//
+// RMC Connector
+//
+typedef struct _RMC_CONN_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH PciBridgeDevicePath;
+ PCI_DEVICE_PATH PciBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} RMC_CONN_DEVICE_PATH;
+
+//
+// RIDE
+//
+typedef struct _RIDE_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH PciBridgeDevicePath;
+ PCI_DEVICE_PATH PciBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} RIDE_DEVICE_PATH;
+
+//
+// Gigabit NIC
+//
+typedef struct _GB_NIC_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH PciBridgeDevicePath;
+ PCI_DEVICE_PATH PciXBridgeDevicePath;
+ PCI_DEVICE_PATH PciXBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} GB_NIC_DEVICE_PATH;
+
+//
+// P/S2 Connector
+//
+typedef struct _PS2_CONN_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH LpcBridgeDevicePath;
+ ACPI_HID_DEVICE_PATH LpcBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} PS2_CONN_DEVICE_PATH;
+
+//
+// Serial Port Connector
+//
+typedef struct _SERIAL_CONN_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH LpcBridgeDevicePath;
+ ACPI_HID_DEVICE_PATH LpcBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} SERIAL_CONN_DEVICE_PATH;
+
+//
+// Parallel Port Connector
+//
+typedef struct _PARALLEL_CONN_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH LpcBridgeDevicePath;
+ ACPI_HID_DEVICE_PATH LpcBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} PARALLEL_CONN_DEVICE_PATH;
+
+//
+// Floopy Connector
+//
+typedef struct _FLOOPY_CONN_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH LpcBridgeDevicePath;
+ ACPI_HID_DEVICE_PATH LpcBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} FLOOPY_CONN_DEVICE_PATH;
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+/// It's implementation-specific to simplify the code logic.
+///
+typedef union _EFI_MISC_PORT_DEVICE_PATH {
+ USB_PORT_DEVICE_PATH UsbDevicePath;
+ IDE_DEVICE_PATH IdeDevicePath;
+ RMC_CONN_DEVICE_PATH RmcConnDevicePath;
+ RIDE_DEVICE_PATH RideDevicePath;
+ GB_NIC_DEVICE_PATH GbNicDevicePath;
+ PS2_CONN_DEVICE_PATH Ps2ConnDevicePath;
+ SERIAL_CONN_DEVICE_PATH SerialConnDevicePath;
+ PARALLEL_CONN_DEVICE_PATH ParallelConnDevicePath;
+ FLOOPY_CONN_DEVICE_PATH FloppyConnDevicePath;
+} EFI_MISC_PORT_DEVICE_PATH;
+
+#pragma pack()
+
+///
+/// String Token Definition
+///
+/// Inconsistent with specification here:
+/// The macro isn't defined by any specification.
+/// Keep it unchanged for backward compatibility.
+///
+#define EFI_STRING_TOKEN UINT16
+
+///
+/// Each data record that is a member of some subclass starts with a standard
+/// header of type EFI_SUBCLASS_TYPE1_HEADER.
+/// This header is only a guideline and applicable only to a data
+/// subclass that is producing SMBIOS data records. A subclass can start with a
+/// different header if needed.
+///
+typedef struct {
+ ///
+ /// The version of the specification to which a specific subclass data record adheres.
+ ///
+ UINT32 Version;
+ ///
+ /// The size in bytes of this data class header.
+ ///
+ UINT32 HeaderSize;
+ ///
+ /// The instance number of the subclass with the same ProducerName. This number is
+ /// applicable in cases where multiple subclass instances that were produced by the same
+ /// driver exist in the system. This entry is 1 based; 0 means Reserved and -1 means Not
+ /// Applicable. All data consumer drivers should be able to handle all the possible values
+ /// of Instance, including Not Applicable and Reserved.
+ ///
+ UINT16 Instance;
+ ///
+ /// The instance number of the RecordType for the same Instance. This number is
+ /// applicable in cases where multiple instances of the RecordType exist for a specific
+ /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not Applicable.
+ /// All data consumer drivers should be able to handle all the possible values of
+ /// SubInstance, including Not Applicable and Reserved.
+ ///
+ UINT16 SubInstance;
+ ///
+ /// The record number for the data record being specified. The numbering scheme and
+ /// definition is defined in the specific subclass specification.
+ ///
+ UINT32 RecordType;
+} EFI_SUBCLASS_TYPE1_HEADER;
+
+///
+/// This structure is used to link data records in the same subclasses. A data record is
+/// defined as a link to another data record in the same subclass using this structure.
+///
+typedef struct {
+ ///
+ /// An EFI_GUID that identifies the component that produced this data record. Type
+ /// EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.
+ ///
+ EFI_GUID ProducerName;
+ ///
+ /// The instance number of the subclass with the same ProducerName. This number is
+ /// applicable in cases where multiple subclass instances that were produced by the same
+ /// driver exist in the system. This entry is 1 based; 0 means Reserved and -1 means Not
+ /// Applicable. All data consumer drivers should be able to handle all the possible values
+ /// of Instance, including Not Applicable and Reserved.
+ ///
+ UINT16 Instance;
+ /// The instance number of the RecordType for the same Instance. This number is
+ /// applicable in cases where multiple instances of the RecordType exist for a specific
+ /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not Applicable.
+ /// All data consumer drivers should be able to handle all the possible values of
+ /// SubInstance, including Not Applicable and Reserved.
+ UINT16 SubInstance;
+} EFI_INTER_LINK_DATA;
+
+//
+// EXP data
+//
+///
+/// This macro provides a calculation for base-10 representations. Value and Exponent are each
+/// INT16. It is signed to cover negative values and is 16 bits wide (15 bits for data and 1 bit
+/// for the sign).
+///
+typedef struct {
+ ///
+ /// The INT16 number by which to multiply the base-10 representation.
+ ///
+ UINT16 Value;
+ ///
+ /// The INT16 number by which to raise the base-10 calculation.
+ ///
+ UINT16 Exponent;
+} EFI_EXP_BASE2_DATA;
+
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA;
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA;
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_CORE_FREQUENCY_DATA;
+
+///
+/// This data record refers to the list of frequencies that the processor core supports. The list of
+/// supported frequencies is determined by the firmware based on hardware capabilities--for example,
+/// it could be a common subset of all processors and the chipset. The unit of measurement of this data
+/// record is in Hertz. For asynchronous processors, the content of this data record is zero.
+/// The list is terminated by -1 in the Value field of the last element. A Value field of zero means
+/// that the processor/driver supports automatic frequency selection.
+///
+/// Inconsistent with specification here:
+/// According to MiscSubclass 0.9 specification, it should be a pointer since it refers to a list of frequencies.
+///
+typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA;
+
+///
+/// This data record refers to the list of supported frequencies of the processor external bus. The list of
+/// supported frequencies is determined by the firmware based on hardware capabilities--for example,
+/// it could be a common subset of all processors and the chipset. The unit of measurement of this data
+/// record is in Hertz. For asynchronous processors, the content of this data record is NULL.
+/// The list is terminated by -1 in the Value field of the last element. A Value field of zero means
+/// that the processor/driver supports automatic frequency selection.
+///
+typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA;
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_FSB_FREQUENCY_DATA;
+typedef STRING_REF EFI_PROCESSOR_VERSION_DATA;
+typedef STRING_REF EFI_PROCESSOR_MANUFACTURER_DATA;
+typedef STRING_REF EFI_PROCESSOR_SERIAL_NUMBER_DATA;
+typedef STRING_REF EFI_PROCESSOR_ASSET_TAG_DATA;
+typedef STRING_REF EFI_PROCESSOR_PART_NUMBER_DATA;
+
+typedef struct {
+ UINT32 ProcessorSteppingId:4;
+ UINT32 ProcessorModel: 4;
+ UINT32 ProcessorFamily: 4;
+ UINT32 ProcessorType: 2;
+ UINT32 ProcessorReserved1: 2;
+ UINT32 ProcessorXModel: 4;
+ UINT32 ProcessorXFamily: 8;
+ UINT32 ProcessorReserved2: 4;
+} EFI_PROCESSOR_SIGNATURE;
+
+
+///
+/// Inconsistent with specification here:
+/// The name of third field in ProcSubClass specification 0.9 is LogicalProcessorCount.
+/// Keep it unchanged for backward compatibility.
+///
+typedef struct {
+ UINT32 ProcessorBrandIndex :8;
+ UINT32 ProcessorClflush :8;
+ UINT32 ProcessorReserved :8;
+ UINT32 ProcessorDfltApicId :8;
+} EFI_PROCESSOR_MISC_INFO;
+
+typedef struct {
+ UINT32 ProcessorFpu: 1;
+ UINT32 ProcessorVme: 1;
+ UINT32 ProcessorDe: 1;
+ UINT32 ProcessorPse: 1;
+ UINT32 ProcessorTsc: 1;
+ UINT32 ProcessorMsr: 1;
+ UINT32 ProcessorPae: 1;
+ UINT32 ProcessorMce: 1;
+ UINT32 ProcessorCx8: 1;
+ UINT32 ProcessorApic: 1;
+ UINT32 ProcessorReserved1: 1;
+ UINT32 ProcessorSep: 1;
+ UINT32 ProcessorMtrr: 1;
+ UINT32 ProcessorPge: 1;
+ UINT32 ProcessorMca: 1;
+ UINT32 ProcessorCmov: 1;
+ UINT32 ProcessorPat: 1;
+ UINT32 ProcessorPse36: 1;
+ UINT32 ProcessorPsn: 1;
+ UINT32 ProcessorClfsh: 1;
+ UINT32 ProcessorReserved2: 1;
+ UINT32 ProcessorDs: 1;
+ UINT32 ProcessorAcpi: 1;
+ UINT32 ProcessorMmx: 1;
+ UINT32 ProcessorFxsr: 1;
+ UINT32 ProcessorSse: 1;
+ UINT32 ProcessorSse2: 1;
+ UINT32 ProcessorSs: 1;
+ UINT32 ProcessorReserved3: 1;
+ UINT32 ProcessorTm: 1;
+ UINT32 ProcessorReserved4: 2;
+} EFI_PROCESSOR_FEATURE_FLAGS;
+
+///
+/// This data record refers to the unique ID that identifies a set of processors. This data record is 16
+/// bytes in length. The data in this structure is processor specific and reserved values can be defined
+/// for future use. The consumer of this data should not make any assumption and should use this data
+/// with respect to the processor family defined in the Family record number.
+///
+typedef struct {
+ ///
+ /// Identifies the processor.
+ ///
+ EFI_PROCESSOR_SIGNATURE Signature;
+ ///
+ /// Provides additional processor information.
+ ///
+ EFI_PROCESSOR_MISC_INFO MiscInfo;
+ ///
+ /// Reserved for future use.
+ ///
+ UINT32 Reserved;
+ ///
+ /// Provides additional processor information.
+ ///
+ EFI_PROCESSOR_FEATURE_FLAGS FeatureFlags;
+} EFI_PROCESSOR_ID_DATA;
+
+///
+/// This data record refers to the general classification of the processor. This data record is 4 bytes in
+/// length.
+///
+typedef enum {
+ EfiProcessorOther = 1,
+ EfiProcessorUnknown = 2,
+ EfiCentralProcessor = 3,
+ EfiMathProcessor = 4,
+ EfiDspProcessor = 5,
+ EfiVideoProcessor = 6
+} EFI_PROCESSOR_TYPE_DATA;
+
+///
+/// This data record refers to the family of the processor as defined by the DMTF.
+/// This data record is 4 bytes in length.
+///
+typedef enum {
+ EfiProcessorFamilyOther = 0x01,
+ EfiProcessorFamilyUnknown = 0x02,
+ EfiProcessorFamily8086 = 0x03,
+ EfiProcessorFamily80286 = 0x04,
+ EfiProcessorFamilyIntel386 = 0x05,
+ EfiProcessorFamilyIntel486 = 0x06,
+ EfiProcessorFamily8087 = 0x07,
+ EfiProcessorFamily80287 = 0x08,
+ EfiProcessorFamily80387 = 0x09,
+ EfiProcessorFamily80487 = 0x0A,
+ EfiProcessorFamilyPentium = 0x0B,
+ EfiProcessorFamilyPentiumPro = 0x0C,
+ EfiProcessorFamilyPentiumII = 0x0D,
+ EfiProcessorFamilyPentiumMMX = 0x0E,
+ EfiProcessorFamilyCeleron = 0x0F,
+ EfiProcessorFamilyPentiumIIXeon = 0x10,
+ EfiProcessorFamilyPentiumIII = 0x11,
+ EfiProcessorFamilyM1 = 0x12,
+ EfiProcessorFamilyM2 = 0x13,
+ EfiProcessorFamilyM1Reserved2 = 0x14,
+ EfiProcessorFamilyM1Reserved3 = 0x15,
+ EfiProcessorFamilyM1Reserved4 = 0x16,
+ EfiProcessorFamilyM1Reserved5 = 0x17,
+ EfiProcessorFamilyAmdDuron = 0x18,
+ EfiProcessorFamilyK5 = 0x19,
+ EfiProcessorFamilyK6 = 0x1A,
+ EfiProcessorFamilyK6_2 = 0x1B,
+ EfiProcessorFamilyK6_3 = 0x1C,
+ EfiProcessorFamilyAmdAthlon = 0x1D,
+ EfiProcessorFamilyAmd29000 = 0x1E,
+ EfiProcessorFamilyK6_2Plus = 0x1F,
+ EfiProcessorFamilyPowerPC = 0x20,
+ EfiProcessorFamilyPowerPC601 = 0x21,
+ EfiProcessorFamilyPowerPC603 = 0x22,
+ EfiProcessorFamilyPowerPC603Plus = 0x23,
+ EfiProcessorFamilyPowerPC604 = 0x24,
+ EfiProcessorFamilyPowerPC620 = 0x25,
+ EfiProcessorFamilyPowerPCx704 = 0x26,
+ EfiProcessorFamilyPowerPC750 = 0x27,
+ EfiProcessorFamilyAlpha3 = 0x30,
+ EfiProcessorFamilyAlpha21064 = 0x31,
+ EfiProcessorFamilyAlpha21066 = 0x32,
+ EfiProcessorFamilyAlpha21164 = 0x33,
+ EfiProcessorFamilyAlpha21164PC = 0x34,
+ EfiProcessorFamilyAlpha21164a = 0x35,
+ EfiProcessorFamilyAlpha21264 = 0x36,
+ EfiProcessorFamilyAlpha21364 = 0x37,
+ EfiProcessorFamilyMips = 0x40,
+ EfiProcessorFamilyMIPSR4000 = 0x41,
+ EfiProcessorFamilyMIPSR4200 = 0x42,
+ EfiProcessorFamilyMIPSR4400 = 0x43,
+ EfiProcessorFamilyMIPSR4600 = 0x44,
+ EfiProcessorFamilyMIPSR10000 = 0x45,
+ EfiProcessorFamilySparc = 0x50,
+ EfiProcessorFamilySuperSparc = 0x51,
+ EfiProcessorFamilymicroSparcII = 0x52,
+ EfiProcessorFamilymicroSparcIIep = 0x53,
+ EfiProcessorFamilyUltraSparc = 0x54,
+ EfiProcessorFamilyUltraSparcII = 0x55,
+ EfiProcessorFamilyUltraSparcIIi = 0x56,
+ EfiProcessorFamilyUltraSparcIII = 0x57,
+ ///
+ /// Inconsistent with specification here:
+ /// This field in ProcSubClass specification 0.9 is defined as EfiProcessorFamilyUltraSparcIIi.
+ /// Change it to EfiProcessorFamilyUltraSparcIIIi to avoid build break.
+ ///
+ EfiProcessorFamilyUltraSparcIIIi = 0x58,
+ EfiProcessorFamily68040 = 0x60,
+ EfiProcessorFamily68xxx = 0x61,
+ EfiProcessorFamily68000 = 0x62,
+ EfiProcessorFamily68010 = 0x63,
+ EfiProcessorFamily68020 = 0x64,
+ EfiProcessorFamily68030 = 0x65,
+ EfiProcessorFamilyHobbit = 0x70,
+ EfiProcessorFamilyCrusoeTM5000 = 0x78,
+ EfiProcessorFamilyCrusoeTM3000 = 0x79,
+ EfiProcessorFamilyEfficeonTM8000 = 0x7A,
+ EfiProcessorFamilyWeitek = 0x80,
+ EfiProcessorFamilyItanium = 0x82,
+ EfiProcessorFamilyAmdAthlon64 = 0x83,
+ EfiProcessorFamilyAmdOpteron = 0x84,
+ EfiProcessorFamilyAmdSempron = 0x85,
+ EfiProcessorFamilyAmdTurion64Mobile = 0x86,
+ EfiProcessorFamilyDualCoreAmdOpteron = 0x87,
+ EfiProcessorFamilyAmdAthlon64X2DualCore = 0x88,
+ EfiProcessorFamilyAmdTurion64X2Mobile = 0x89,
+ EfiProcessorFamilyPARISC = 0x90,
+ EfiProcessorFamilyPaRisc8500 = 0x91,
+ EfiProcessorFamilyPaRisc8000 = 0x92,
+ EfiProcessorFamilyPaRisc7300LC = 0x93,
+ EfiProcessorFamilyPaRisc7200 = 0x94,
+ EfiProcessorFamilyPaRisc7100LC = 0x95,
+ EfiProcessorFamilyPaRisc7100 = 0x96,
+ EfiProcessorFamilyV30 = 0xA0,
+ EfiProcessorFamilyPentiumIIIXeon = 0xB0,
+ EfiProcessorFamilyPentiumIIISpeedStep = 0xB1,
+ EfiProcessorFamilyPentium4 = 0xB2,
+ EfiProcessorFamilyIntelXeon = 0xB3,
+ EfiProcessorFamilyAS400 = 0xB4,
+ EfiProcessorFamilyIntelXeonMP = 0xB5,
+ EfiProcessorFamilyAMDAthlonXP = 0xB6,
+ EfiProcessorFamilyAMDAthlonMP = 0xB7,
+ EfiProcessorFamilyIntelItanium2 = 0xB8,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelPentiumM = 0xB9,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelCeleronD = 0xBA,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelPentiumD = 0xBB,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelPentiumEx = 0xBC,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelCoreSolo = 0xBD,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyReserved = 0xBE,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelCore2 = 0xBF,
+ EfiProcessorFamilyIBM390 = 0xC8,
+ EfiProcessorFamilyG4 = 0xC9,
+ EfiProcessorFamilyG5 = 0xCA,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyG6 = 0xCB,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyzArchitectur = 0xCC,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyViaC7M = 0xD2,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyViaC7D = 0xD3,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyViaC7 = 0xD4,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyViaEden = 0xD5,
+ EfiProcessorFamilyi860 = 0xFA,
+ EfiProcessorFamilyi960 = 0xFB,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIndicatorFamily2 = 0xFE,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyReserved1 = 0xFF
+} EFI_PROCESSOR_FAMILY_DATA;
+
+typedef enum {
+ EfiProcessorFamilySh3 = 0x104,
+ EfiProcessorFamilySh4 = 0x105,
+ EfiProcessorFamilyArm = 0x118,
+ EfiProcessorFamilyStrongArm = 0x119,
+ EfiProcessorFamily6x86 = 0x12C,
+ EfiProcessorFamilyMediaGx = 0x12D,
+ EfiProcessorFamilyMii = 0x12E,
+ EfiProcessorFamilyWinChip = 0x140,
+ EfiProcessorFamilyDsp = 0x15E,
+ EfiProcessorFamilyVideo = 0x1F4
+} EFI_PROCESSOR_FAMILY2_DATA;
+
+///
+/// This data record refers to the core voltage of the processor being defined. The unit of measurement
+/// of this data record is in volts.
+///
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_VOLTAGE_DATA;
+
+///
+/// This data record refers to the base address of the APIC of the processor being defined. This data
+/// record is a physical address location.
+///
+typedef EFI_PHYSICAL_ADDRESS EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA;
+
+///
+/// This data record refers to the ID of the APIC of the processor being defined. This data record is a
+/// 4-byte entry.
+///
+typedef UINT32 EFI_PROCESSOR_APIC_ID_DATA;
+
+///
+/// This data record refers to the version number of the APIC of the processor being defined. This data
+/// record is a 4-byte entry.
+///
+typedef UINT32 EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA;
+
+typedef enum {
+ EfiProcessorIa32Microcode = 1,
+ EfiProcessorIpfPalAMicrocode = 2,
+ EfiProcessorIpfPalBMicrocode = 3
+} EFI_PROCESSOR_MICROCODE_TYPE;
+
+///
+/// This data record refers to the revision of the processor microcode that is loaded in the processor.
+/// This data record is a 4-byte entry.
+///
+typedef struct {
+ ///
+ /// Identifies what type of microcode the data is.
+ ///
+ EFI_PROCESSOR_MICROCODE_TYPE ProcessorMicrocodeType;
+ ///
+ /// Indicates the revision number of this microcode.
+ ///
+ UINT32 ProcessorMicrocodeRevisionNumber;
+} EFI_PROCESSOR_MICROCODE_REVISION_DATA;
+
+///
+/// This data record refers to the status of the processor.
+///
+typedef struct {
+ UINT32 CpuStatus :3; ///< Indicates the status of the processor.
+ UINT32 Reserved1 :3; ///< Reserved for future use. Should be set to zero.
+ UINT32 SocketPopulated :1; ///< Indicates if the processor is socketed or not.
+ UINT32 Reserved2 :1; ///< Reserved for future use. Should be set to zero.
+ UINT32 ApicEnable :1; ///< Indicates if the APIC is enabled or not.
+ UINT32 BootApplicationProcessor :1; ///< Indicates if this processor is the boot processor.
+ UINT32 Reserved3 :22;///< Reserved for future use. Should be set to zero.
+} EFI_PROCESSOR_STATUS_DATA;
+
+typedef enum {
+ EfiCpuStatusUnknown = 0,
+ EfiCpuStatusEnabled = 1,
+ EfiCpuStatusDisabledByUser = 2,
+ EfiCpuStatusDisabledbyBios = 3,
+ EfiCpuStatusIdle = 4,
+ EfiCpuStatusOther = 7
+} EFI_CPU_STATUS;
+
+typedef enum {
+ EfiProcessorSocketOther = 1,
+ EfiProcessorSocketUnknown = 2,
+ EfiProcessorSocketDaughterBoard = 3,
+ EfiProcessorSocketZIF = 4,
+ EfiProcessorSocketReplacePiggyBack = 5,
+ EfiProcessorSocketNone = 6,
+ EfiProcessorSocketLIF = 7,
+ EfiProcessorSocketSlot1 = 8,
+ EfiProcessorSocketSlot2 = 9,
+ EfiProcessorSocket370Pin = 0xA,
+ EfiProcessorSocketSlotA = 0xB,
+ EfiProcessorSocketSlotM = 0xC,
+ EfiProcessorSocket423 = 0xD,
+ EfiProcessorSocketA462 = 0xE,
+ EfiProcessorSocket478 = 0xF,
+ EfiProcessorSocket754 = 0x10,
+ EfiProcessorSocket940 = 0x11,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorSocket939 = 0x12,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorSocketmPGA604 = 0x13,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorSocketLGA771 = 0x14,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorSocketLGA775 = 0x15
+
+} EFI_PROCESSOR_SOCKET_TYPE_DATA;
+
+typedef STRING_REF EFI_PROCESSOR_SOCKET_NAME_DATA;
+
+///
+/// Inconsistent with specification here:
+/// In ProcSubclass specification 0.9, the naming is EFI_PROCESSOR_CACHE_ASSOCIATION_DATA.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef EFI_INTER_LINK_DATA EFI_CACHE_ASSOCIATION_DATA;
+
+///
+/// This data record refers to the health status of the processor.
+///
+/// Inconsistent with specification here:
+/// In ProcSubclass specification 0.9, the naming is EFI_PROCESSOR_HEALTH_STATUS_DATA.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef enum {
+ EfiProcessorHealthy = 1,
+ EfiProcessorPerfRestricted = 2,
+ EfiProcessorFuncRestricted = 3
+} EFI_PROCESSOR_HEALTH_STATUS;
+
+///
+/// This data record refers to the package number of this processor. Multiple logical processors can
+/// exist in a system and each logical processor can be correlated to the physical processor using this
+/// record type.
+///
+typedef UINTN EFI_PROCESSOR_PACKAGE_NUMBER_DATA;
+
+typedef UINT8 EFI_PROCESSOR_CORE_COUNT_DATA;
+typedef UINT8 EFI_PROCESSOR_ENABLED_CORE_COUNT_DATA;
+typedef UINT8 EFI_PROCESSOR_THREAD_COUNT_DATA;
+
+typedef struct {
+ UINT16 Reserved :1;
+ UINT16 Unknown :1;
+ UINT16 Capable64Bit :1;
+ UINT16 Reserved2 :13;
+} EFI_PROCESSOR_CHARACTERISTICS_DATA;
+
+///
+/// Inconsistent with specification here:
+/// In ProcSubclass specification 0.9, the enumeration type data structure is NOT defined.
+/// The equivalent in specification is
+/// #define EFI_PROCESSOR_FREQUENCY_RECORD_NUMBER 0x00000001
+/// #define EFI_PROCESSOR_BUS_FREQUENCY_RECORD_NUMBER 0x00000002
+/// #define EFI_PROCESSOR_VERSION_RECORD_NUMBER 0x00000003
+/// #define EFI_PROCESSOR_MANUFACTURER_RECORD_NUMBER 0x00000004
+/// #define EFI_PROCESSOR_SERIAL_NUMBER_RECORD_NUMBER 0x00000005
+/// #define EFI_PROCESSOR_ID_RECORD_NUMBER 0x00000006
+/// #define EFI_PROCESSOR_TYPE_RECORD_NUMBER 0x00000007
+/// #define EFI_PROCESSOR_FAMILY_RECORD_NUMBER 0x00000008
+/// #define EFI_PROCESSOR_VOLTAGE_RECORD_NUMBER 0x00000009
+/// #define EFI_PROCESSOR_APIC_BASE_ADDRESS_RECORD_NUMBER 0x0000000A
+/// #define EFI_PROCESSOR_APIC_ID_RECORD_NUMBER 0x0000000B
+/// #define EFI_PROCESSOR_APIC_VER_NUMBER_RECORD_NUMBER 0x0000000C
+/// #define EFI_PROCESSOR_MICROCODE_REVISION_RECORD_NUMBER 0x0000000D
+/// #define EFI_PROCESSOR_STATUS_RECORD_NUMBER 0x0000000E
+/// #define EFI_PROCESSOR_SOCKET_TYPE_RECORD_NUMBER 0x0000000F
+/// #define EFI_PROCESSOR_SOCKET_NAME_RECORD_NUMBER 0x00000010
+/// #define EFI_PROCESSOR_CACHE_ASSOCIATION_RECORD_NUMBER 0x00000011
+/// #define EFI_PROCESSOR_MAX_FREQUENCY_RECORD_NUMBER 0x00000012
+/// #define EFI_PROCESSOR_ASSET_TAG_RECORD_NUMBER 0x00000013
+/// #define EFI_PROCESSOR_MAX_FSB_FREQUENCY_RECORD_NUMBER 0x00000014
+/// #define EFI_PROCESSOR_PACKAGE_NUMBER_RECORD_NUMBER 0x00000015
+/// #define EFI_PROCESSOR_FREQUENCY_LIST_RECORD_NUMBER 0x00000016
+/// #define EFI_PROCESSOR_FSB_FREQUENCY_LIST_RECORD_NUMBER 0x00000017
+/// #define EFI_PROCESSOR_HEALTH_STATUS_RECORD_NUMBER 0x00000018
+///
+/// Keep the definition unchanged for backward compatibility.
+typedef enum {
+ ProcessorCoreFrequencyRecordType = 1,
+ ProcessorFsbFrequencyRecordType = 2,
+ ProcessorVersionRecordType = 3,
+ ProcessorManufacturerRecordType = 4,
+ ProcessorSerialNumberRecordType = 5,
+ ProcessorIdRecordType = 6,
+ ProcessorTypeRecordType = 7,
+ ProcessorFamilyRecordType = 8,
+ ProcessorVoltageRecordType = 9,
+ ProcessorApicBaseAddressRecordType = 10,
+ ProcessorApicIdRecordType = 11,
+ ProcessorApicVersionNumberRecordType = 12,
+ CpuUcodeRevisionDataRecordType = 13,
+ ProcessorStatusRecordType = 14,
+ ProcessorSocketTypeRecordType = 15,
+ ProcessorSocketNameRecordType = 16,
+ CacheAssociationRecordType = 17,
+ ProcessorMaxCoreFrequencyRecordType = 18,
+ ProcessorAssetTagRecordType = 19,
+ ProcessorMaxFsbFrequencyRecordType = 20,
+ ProcessorPackageNumberRecordType = 21,
+ ProcessorCoreFrequencyListRecordType = 22,
+ ProcessorFsbFrequencyListRecordType = 23,
+ ProcessorHealthStatusRecordType = 24,
+ ProcessorCoreCountRecordType = 25,
+ ProcessorEnabledCoreCountRecordType = 26,
+ ProcessorThreadCountRecordType = 27,
+ ProcessorCharacteristicsRecordType = 28,
+ ProcessorFamily2RecordType = 29,
+ ProcessorPartNumberRecordType = 30,
+} EFI_CPU_VARIABLE_RECORD_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In ProcSubclass specification 0.9, the union type data structure is NOT defined.
+/// It's implementation-specific to simplify the code logic.
+///
+typedef union {
+ EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA ProcessorCoreFrequencyList;
+ EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA ProcessorFsbFrequencyList;
+ EFI_PROCESSOR_SERIAL_NUMBER_DATA ProcessorSerialNumber;
+ EFI_PROCESSOR_CORE_FREQUENCY_DATA ProcessorCoreFrequency;
+ EFI_PROCESSOR_FSB_FREQUENCY_DATA ProcessorFsbFrequency;
+ EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA ProcessorMaxCoreFrequency;
+ EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA ProcessorMaxFsbFrequency;
+ EFI_PROCESSOR_VERSION_DATA ProcessorVersion;
+ EFI_PROCESSOR_MANUFACTURER_DATA ProcessorManufacturer;
+ EFI_PROCESSOR_ID_DATA ProcessorId;
+ EFI_PROCESSOR_TYPE_DATA ProcessorType;
+ EFI_PROCESSOR_FAMILY_DATA ProcessorFamily;
+ EFI_PROCESSOR_VOLTAGE_DATA ProcessorVoltage;
+ EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA ProcessorApicBase;
+ EFI_PROCESSOR_APIC_ID_DATA ProcessorApicId;
+ EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA ProcessorApicVersionNumber;
+ EFI_PROCESSOR_MICROCODE_REVISION_DATA CpuUcodeRevisionData;
+ EFI_PROCESSOR_STATUS_DATA ProcessorStatus;
+ EFI_PROCESSOR_SOCKET_TYPE_DATA ProcessorSocketType;
+ EFI_PROCESSOR_SOCKET_NAME_DATA ProcessorSocketName;
+ EFI_PROCESSOR_ASSET_TAG_DATA ProcessorAssetTag;
+ EFI_PROCESSOR_PART_NUMBER_DATA ProcessorPartNumber;
+ EFI_PROCESSOR_HEALTH_STATUS ProcessorHealthStatus;
+ EFI_PROCESSOR_PACKAGE_NUMBER_DATA ProcessorPackageNumber;
+ EFI_PROCESSOR_CORE_COUNT_DATA ProcessorCoreCount;
+ EFI_PROCESSOR_ENABLED_CORE_COUNT_DATA ProcessorEnabledCoreCount;
+ EFI_PROCESSOR_THREAD_COUNT_DATA ProcessorThreadCount;
+ EFI_PROCESSOR_CHARACTERISTICS_DATA ProcessorCharacteristics;
+ EFI_PROCESSOR_FAMILY2_DATA ProcessorFamily2;
+} EFI_CPU_VARIABLE_RECORD;
+
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader;
+ EFI_CPU_VARIABLE_RECORD VariableRecord;
+} EFI_CPU_DATA_RECORD;
+
+#define EFI_CACHE_SUBCLASS_VERSION 0x00010000
+
+typedef EFI_EXP_BASE2_DATA EFI_CACHE_SIZE_DATA;
+///
+/// Inconsistent with specification here:
+/// In CacheSubclass specification 0.9, the naming is EFI_CACHE_MAXIMUM_SIZE_DATA.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef EFI_EXP_BASE2_DATA EFI_MAXIMUM_CACHE_SIZE_DATA;
+typedef EFI_EXP_BASE10_DATA EFI_CACHE_SPEED_DATA;
+typedef STRING_REF EFI_CACHE_SOCKET_DATA;
+
+typedef struct {
+ UINT32 Other :1;
+ UINT32 Unknown :1;
+ UINT32 NonBurst :1;
+ UINT32 Burst :1;
+ UINT32 PipelineBurst :1;
+ ///
+ /// Inconsistent between CacheSubclass 0.9 and SMBIOS specifications here:
+ /// In CacheSubclass specification 0.9, the sequence of Asynchronous and Synchronous fileds
+ /// are opposite to SMBIOS specification.
+ ///
+ UINT32 Asynchronous :1;
+ UINT32 Synchronous :1;
+ UINT32 Reserved :25;
+} EFI_CACHE_SRAM_TYPE_DATA;
+
+typedef EFI_CACHE_SRAM_TYPE_DATA EFI_CACHE_SRAM_INSTALL_DATA;
+
+typedef enum {
+ EfiCacheErrorOther = 1,
+ EfiCacheErrorUnknown = 2,
+ EfiCacheErrorNone = 3,
+ EfiCacheErrorParity = 4,
+ EfiCacheErrorSingleBit = 5,
+ EfiCacheErrorMultiBit = 6
+} EFI_CACHE_ERROR_TYPE_DATA;
+
+typedef enum {
+ EfiCacheTypeOther = 1,
+ EfiCacheTypeUnknown = 2,
+ EfiCacheTypeInstruction = 3,
+ EfiCacheTypeData = 4,
+ EfiCacheTypeUnified = 5
+} EFI_CACHE_TYPE_DATA;
+
+typedef enum {
+ EfiCacheAssociativityOther = 1,
+ EfiCacheAssociativityUnknown = 2,
+ EfiCacheAssociativityDirectMapped = 3,
+ EfiCacheAssociativity2Way = 4,
+ EfiCacheAssociativity4Way = 5,
+ EfiCacheAssociativityFully = 6,
+ EfiCacheAssociativity8Way = 7,
+ EfiCacheAssociativity16Way = 8
+} EFI_CACHE_ASSOCIATIVITY_DATA;
+
+///
+/// Inconsistent with specification here:
+/// In CacheSubclass 0.9 specification. It defines the field type as UINT16.
+/// In fact, it should be UINT32 type because it refers to a 32bit width data.
+///
+typedef struct {
+ UINT32 Level :3;
+ UINT32 Socketed :1;
+ UINT32 Reserved2 :1;
+ UINT32 Location :2;
+ UINT32 Enable :1;
+ UINT32 OperationalMode :2;
+ UINT32 Reserved1 :22;
+} EFI_CACHE_CONFIGURATION_DATA;
+
+#define EFI_CACHE_L1 1
+#define EFI_CACHE_L2 2
+#define EFI_CACHE_L3 3
+#define EFI_CACHE_L4 4
+#define EFI_CACHE_LMAX EFI_CACHE_L4
+
+#define EFI_CACHE_SOCKETED 1
+#define EFI_CACHE_NOT_SOCKETED 0
+
+typedef enum {
+ EfiCacheInternal = 0,
+ EfiCacheExternal = 1,
+ EfiCacheReserved = 2,
+ EfiCacheUnknown = 3
+} EFI_CACHE_LOCATION;
+
+#define EFI_CACHE_ENABLED 1
+#define EFI_CACHE_DISABLED 0
+
+typedef enum {
+ EfiCacheWriteThrough = 0,
+ EfiCacheWriteBack = 1,
+ EfiCacheDynamicMode = 2,
+ EfiCacheUnknownMode = 3
+} EFI_CACHE_OPERATIONAL_MODE;
+
+
+///
+/// Inconsistent with specification here:
+/// In CacheSubclass specification 0.9, the enumeration type data structure is NOT defined.
+/// The equivalent in specification is
+/// #define EFI_CACHE_SIZE_RECORD_NUMBER 0x00000001
+/// #define EFI_CACHE_MAXIMUM_SIZE_RECORD_NUMBER 0x00000002
+/// #define EFI_CACHE_SPEED_RECORD_NUMBER 0x00000003
+/// #define EFI_CACHE_SOCKET_RECORD_NUMBER 0x00000004
+/// #define EFI_CACHE_SRAM_SUPPORT_RECORD_NUMBER 0x00000005
+/// #define EFI_CACHE_SRAM_INSTALL_RECORD_NUMBER 0x00000006
+/// #define EFI_CACHE_ERROR_SUPPORT_RECORD_NUMBER 0x00000007
+/// #define EFI_CACHE_TYPE_RECORD_NUMBER 0x00000008
+/// #define EFI_CACHE_ASSOCIATIVITY_RECORD_NUMBER 0x00000009
+/// #define EFI_CACHE_CONFIGURATION_RECORD_NUMBER 0x0000000A
+/// Keep the definition unchanged for backward compatibility.
+///
+typedef enum {
+ CacheSizeRecordType = 1,
+ MaximumSizeCacheRecordType = 2,
+ CacheSpeedRecordType = 3,
+ CacheSocketRecordType = 4,
+ CacheSramTypeRecordType = 5,
+ CacheInstalledSramTypeRecordType = 6,
+ CacheErrorTypeRecordType = 7,
+ CacheTypeRecordType = 8,
+ CacheAssociativityRecordType = 9,
+ CacheConfigRecordType = 10
+} EFI_CACHE_VARIABLE_RECORD_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In CacheSubclass specification 0.9, the union type data structure is NOT defined.
+/// It's implementation-specific to simplify the code logic.
+///
+typedef union {
+ EFI_CACHE_SIZE_DATA CacheSize;
+ EFI_MAXIMUM_CACHE_SIZE_DATA MaximumCacheSize;
+ EFI_CACHE_SPEED_DATA CacheSpeed;
+ EFI_CACHE_SOCKET_DATA CacheSocket;
+ EFI_CACHE_SRAM_TYPE_DATA CacheSramType;
+ EFI_CACHE_SRAM_TYPE_DATA CacheInstalledSramType;
+ EFI_CACHE_ERROR_TYPE_DATA CacheErrorType;
+ EFI_CACHE_TYPE_DATA CacheType;
+ EFI_CACHE_ASSOCIATIVITY_DATA CacheAssociativity;
+ EFI_CACHE_CONFIGURATION_DATA CacheConfig;
+ EFI_CACHE_ASSOCIATION_DATA CacheAssociation;
+} EFI_CACHE_VARIABLE_RECORD;
+
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader;
+ EFI_CACHE_VARIABLE_RECORD VariableRecord;
+} EFI_CACHE_DATA_RECORD;
+
+#define EFI_MEMORY_SUBCLASS_VERSION 0x0100
+#define EFI_MEMORY_SIZE_RECORD_NUMBER 0x00000001
+
+typedef enum _EFI_MEMORY_REGION_TYPE {
+ EfiMemoryRegionMemory = 0x01,
+ EfiMemoryRegionReserved = 0x02,
+ EfiMemoryRegionAcpi = 0x03,
+ EfiMemoryRegionNvs = 0x04
+} EFI_MEMORY_REGION_TYPE;
+
+///
+/// This data record refers to the size of a memory region. The regions that are
+/// described can refer to physical memory, memory-mapped I/O, or reserved BIOS memory regions.
+/// The unit of measurement of this data record is in bytes.
+///
+typedef struct {
+ ///
+ /// A zero-based value that indicates which processor(s) can access the memory region.
+ /// A value of 0xFFFF indicates the region is accessible by all processors.
+ ///
+ UINT32 ProcessorNumber;
+ ///
+ /// A zero-based value that indicates the starting bus that can access the memory region.
+ ///
+ UINT16 StartBusNumber;
+ ///
+ /// A zero-based value that indicates the ending bus that can access the memory region.
+ /// A value of 0xFF for a PCI system indicates the region is accessible by all buses and
+ /// is global in scope. An example of the EndBusNumber not being 0xFF is a system
+ /// with two or more peer-to-host PCI bridges.
+ ///
+ UINT16 EndBusNumber;
+ ///
+ /// The type of memory region from the operating system's point of view.
+ /// MemoryRegionType values are equivalent to the legacy INT 15 AX = E820 BIOS
+ /// command values.
+ ///
+ EFI_MEMORY_REGION_TYPE MemoryRegionType;
+ ///
+ /// The size of the memory region in bytes.
+ ///
+ EFI_EXP_BASE2_DATA MemorySize;
+ ///
+ /// The starting physical address of the memory region.
+ ///
+ EFI_PHYSICAL_ADDRESS MemoryStartAddress;
+} EFI_MEMORY_SIZE_DATA;
+
+
+#define EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER 0x00000002
+
+typedef enum _EFI_MEMORY_ARRAY_LOCATION {
+ EfiMemoryArrayLocationOther = 0x01,
+ EfiMemoryArrayLocationUnknown = 0x02,
+ EfiMemoryArrayLocationSystemBoard = 0x03,
+ EfiMemoryArrayLocationIsaAddonCard = 0x04,
+ EfiMemoryArrayLocationEisaAddonCard = 0x05,
+ EfiMemoryArrayLocationPciAddonCard = 0x06,
+ EfiMemoryArrayLocationMcaAddonCard = 0x07,
+ EfiMemoryArrayLocationPcmciaAddonCard = 0x08,
+ EfiMemoryArrayLocationProprietaryAddonCard = 0x09,
+ EfiMemoryArrayLocationNuBus = 0x0A,
+ EfiMemoryArrayLocationPc98C20AddonCard = 0xA0,
+ EfiMemoryArrayLocationPc98C24AddonCard = 0xA1,
+ EfiMemoryArrayLocationPc98EAddonCard = 0xA2,
+ EfiMemoryArrayLocationPc98LocalBusAddonCard = 0xA3
+} EFI_MEMORY_ARRAY_LOCATION;
+
+typedef enum _EFI_MEMORY_ARRAY_USE {
+ EfiMemoryArrayUseOther = 0x01,
+ EfiMemoryArrayUseUnknown = 0x02,
+ EfiMemoryArrayUseSystemMemory = 0x03,
+ EfiMemoryArrayUseVideoMemory = 0x04,
+ EfiMemoryArrayUseFlashMemory = 0x05,
+ EfiMemoryArrayUseNonVolatileRam = 0x06,
+ EfiMemoryArrayUseCacheMemory = 0x07
+} EFI_MEMORY_ARRAY_USE;
+
+typedef enum _EFI_MEMORY_ERROR_CORRECTION {
+ EfiMemoryErrorCorrectionOther = 0x01,
+ EfiMemoryErrorCorrectionUnknown = 0x02,
+ EfiMemoryErrorCorrectionNone = 0x03,
+ EfiMemoryErrorCorrectionParity = 0x04,
+ EfiMemoryErrorCorrectionSingleBitEcc = 0x05,
+ EfiMemoryErrorCorrectionMultiBitEcc = 0x06,
+ EfiMemoryErrorCorrectionCrc = 0x07
+} EFI_MEMORY_ERROR_CORRECTION;
+
+///
+/// This data record refers to the physical memory array. This data record is a structure.
+/// The type definition structure for EFI_MEMORY_ARRAY_LOCATION_DATA is in SMBIOS 2.3.4:
+/// - Table 3.3.17.1, Type 16, Offset 0x4
+/// - Table 3.3.17.2, Type 16, Offset 0x5
+/// - Table 3.3.17.3, Type 16, with the following offsets:
+/// -- Offset 0x6
+/// -- Offset 0x7
+/// -- Offset 0xB
+/// -- Offset 0xD
+///
+typedef struct {
+ ///
+ /// The physical location of the memory array.
+ ///
+ EFI_MEMORY_ARRAY_LOCATION MemoryArrayLocation;
+ ///
+ /// The memory array usage.
+ ///
+ EFI_MEMORY_ARRAY_USE MemoryArrayUse;
+ ///
+ /// The primary error correction or detection supported by this memory array.
+ ///
+ EFI_MEMORY_ERROR_CORRECTION MemoryErrorCorrection;
+ ///
+ /// The maximum memory capacity size in kilobytes. If capacity is unknown, then
+ /// values of MaximumMemoryCapacity.Value = 0x00 and
+ /// MaximumMemoryCapacity.Exponent = 0x8000 are used.
+ ///
+ EFI_EXP_BASE2_DATA MaximumMemoryCapacity;
+ ///
+ /// The number of memory slots or sockets that are available for memory devices
+ /// in this array.
+ ///
+ UINT16 NumberMemoryDevices;
+} EFI_MEMORY_ARRAY_LOCATION_DATA;
+
+
+#define EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER 0x00000003
+
+typedef enum _EFI_MEMORY_FORM_FACTOR {
+ EfiMemoryFormFactorOther = 0x01,
+ EfiMemoryFormFactorUnknown = 0x02,
+ EfiMemoryFormFactorSimm = 0x03,
+ EfiMemoryFormFactorSip = 0x04,
+ EfiMemoryFormFactorChip = 0x05,
+ EfiMemoryFormFactorDip = 0x06,
+ EfiMemoryFormFactorZip = 0x07,
+ EfiMemoryFormFactorProprietaryCard = 0x08,
+ EfiMemoryFormFactorDimm = 0x09,
+ EfiMemoryFormFactorTsop = 0x0A,
+ EfiMemoryFormFactorRowOfChips = 0x0B,
+ EfiMemoryFormFactorRimm = 0x0C,
+ EfiMemoryFormFactorSodimm = 0x0D,
+ EfiMemoryFormFactorSrimm = 0x0E,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in MemSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiMemoryFormFactorFbDimm = 0x0F
+} EFI_MEMORY_FORM_FACTOR;
+
+typedef enum _EFI_MEMORY_ARRAY_TYPE {
+ EfiMemoryTypeOther = 0x01,
+ EfiMemoryTypeUnknown = 0x02,
+ EfiMemoryTypeDram = 0x03,
+ EfiMemoryTypeEdram = 0x04,
+ EfiMemoryTypeVram = 0x05,
+ EfiMemoryTypeSram = 0x06,
+ EfiMemoryTypeRam = 0x07,
+ EfiMemoryTypeRom = 0x08,
+ EfiMemoryTypeFlash = 0x09,
+ EfiMemoryTypeEeprom = 0x0A,
+ EfiMemoryTypeFeprom = 0x0B,
+ EfiMemoryTypeEprom = 0x0C,
+ EfiMemoryTypeCdram = 0x0D,
+ EfiMemoryType3Dram = 0x0E,
+ EfiMemoryTypeSdram = 0x0F,
+ EfiMemoryTypeSgram = 0x10,
+ EfiMemoryTypeRdram = 0x11,
+ EfiMemoryTypeDdr = 0x12,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in MemSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiMemoryTypeDdr2 = 0x13,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in MemSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiMemoryTypeDdr2FbDimm = 0x14
+} EFI_MEMORY_ARRAY_TYPE;
+
+typedef struct {
+ UINT32 Reserved :1;
+ UINT32 Other :1;
+ UINT32 Unknown :1;
+ UINT32 FastPaged :1;
+ UINT32 StaticColumn :1;
+ UINT32 PseudoStatic :1;
+ UINT32 Rambus :1;
+ UINT32 Synchronous :1;
+ UINT32 Cmos :1;
+ UINT32 Edo :1;
+ UINT32 WindowDram :1;
+ UINT32 CacheDram :1;
+ UINT32 Nonvolatile :1;
+ UINT32 Reserved1 :19;
+} EFI_MEMORY_TYPE_DETAIL;
+
+typedef enum {
+ EfiMemoryStateEnabled = 0,
+ EfiMemoryStateUnknown = 1,
+ EfiMemoryStateUnsupported = 2,
+ EfiMemoryStateError = 3,
+ EfiMemoryStateAbsent = 4,
+ EfiMemoryStateDisabled = 5,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in MemSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiMemoryStatePartial = 6
+} EFI_MEMORY_STATE;
+
+///
+/// This data record describes a memory device. This data record is a structure.
+/// The type definition structure for EFI_MEMORY_ARRAY_LINK_DATA is in SMBIOS 2.3.4.
+///
+typedef struct {
+ ///
+ /// A string that identifies the physically labeled socket or board position where the
+ /// memory device is located.
+ ///
+ STRING_REF MemoryDeviceLocator;
+ ///
+ /// A string denoting the physically labeled bank where the memory device is located.
+ ///
+ STRING_REF MemoryBankLocator;
+ ///
+ /// A string denoting the memory manufacturer.
+ ///
+ STRING_REF MemoryManufacturer;
+ ///
+ /// A string denoting the serial number of the memory device.
+ ///
+ STRING_REF MemorySerialNumber;
+ ///
+ /// The asset tag of the memory device.
+ ///
+ STRING_REF MemoryAssetTag;
+ ///
+ /// A string denoting the part number of the memory device.
+ ///
+ STRING_REF MemoryPartNumber;
+ ///
+ /// A link to a memory array structure set.
+ ///
+ EFI_INTER_LINK_DATA MemoryArrayLink;
+ ///
+ /// A link to a memory array structure set.
+ ///
+ EFI_INTER_LINK_DATA MemorySubArrayLink;
+ ///
+ /// The total width in bits of this memory device. If there are no error correcting bits,
+ /// then the total width equals the data width. If the width is unknown, then set the field
+ /// to 0xFFFF.
+ ///
+ UINT16 MemoryTotalWidth;
+ ///
+ /// The data width in bits of the memory device. A data width of 0x00 and a total width
+ /// of 0x08 indicate that the device is used solely for error correction.
+ ///
+ UINT16 MemoryDataWidth;
+ ///
+ /// The size in bytes of the memory device. A value of 0x00 denotes that no device is
+ /// installed, while a value of all Fs denotes that the size is not known.
+ ///
+ EFI_EXP_BASE2_DATA MemoryDeviceSize;
+ ///
+ /// The form factor of the memory device.
+ ///
+ EFI_MEMORY_FORM_FACTOR MemoryFormFactor;
+ ///
+ /// A memory device set that must be populated with all devices of the same type and
+ /// size. A value of 0x00 indicates that the device is not part of any set. A value of 0xFF
+ /// indicates that the attribute is unknown. Any other value denotes the set number.
+ ///
+ UINT8 MemoryDeviceSet;
+ ///
+ /// The memory type in the socket.
+ ///
+ EFI_MEMORY_ARRAY_TYPE MemoryType;
+ ///
+ /// The memory type details.
+ ///
+ EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail;
+ ///
+ /// The memory speed in megahertz (MHz). A value of 0x00 denotes that
+ /// the speed is unknown.
+ /// Inconsistent with specification here:
+ /// In MemSubclass specification 0.9, the naming is MemoryTypeSpeed.
+ /// Keep it unchanged for backward compatibilty.
+ ///
+ EFI_EXP_BASE10_DATA MemorySpeed;
+ ///
+ /// The memory state.
+ ///
+ EFI_MEMORY_STATE MemoryState;
+} EFI_MEMORY_ARRAY_LINK_DATA;
+
+
+#define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004
+
+///
+/// This data record refers to a specified physical memory array associated with
+/// a given memory range.
+///
+typedef struct {
+ ///
+ /// The starting physical address in bytes of memory mapped to a specified physical
+ /// memory array.
+ ///
+ EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress;
+ ///
+ /// The last physical address in bytes of memory mapped to a specified physical memory
+ /// array.
+ ///
+ EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress;
+ ///
+ /// See Physical Memory Array (Type 16) for physical memory array structures.
+ ///
+ EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
+ ///
+ /// The number of memory devices that form a single row of memory for the address
+ /// partition.
+ ///
+ UINT16 MemoryArrayPartitionWidth;
+} EFI_MEMORY_ARRAY_START_ADDRESS_DATA;
+
+
+#define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005
+
+///
+/// This data record refers to a physical memory device that is associated with
+/// a given memory range.
+///
+typedef struct {
+ ///
+ /// The starting physical address that is associated with the device.
+ ///
+ EFI_PHYSICAL_ADDRESS MemoryDeviceStartAddress;
+ ///
+ /// The ending physical address that is associated with the device.
+ ///
+ EFI_PHYSICAL_ADDRESS MemoryDeviceEndAddress;
+ ///
+ /// A link to the memory device data structure.
+ ///
+ EFI_INTER_LINK_DATA PhysicalMemoryDeviceLink;
+ ///
+ /// A link to the memory array data structure.
+ ///
+ EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
+ ///
+ /// The position of the memory device in a row. A value of 0x00 is reserved and a value
+ /// of 0xFF indicates that the position is unknown.
+ ///
+ UINT8 MemoryDevicePartitionRowPosition;
+ ///
+ /// The position of the device in an interleave.
+ ///
+ UINT8 MemoryDeviceInterleavePosition;
+ ///
+ /// The maximum number of consecutive rows from the device that are accessed in a
+ /// single interleave transfer. A value of 0x00 indicates that the device is not interleaved
+ /// and a value of 0xFF indicates that the interleave configuration is unknown.
+ ///
+ UINT8 MemoryDeviceInterleaveDataDepth;
+} EFI_MEMORY_DEVICE_START_ADDRESS_DATA;
+
+
+//
+// Memory. Channel Device Type - SMBIOS Type 37
+//
+
+#define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER 0x00000006
+
+typedef enum _EFI_MEMORY_CHANNEL_TYPE {
+ EfiMemoryChannelTypeOther = 1,
+ EfiMemoryChannelTypeUnknown = 2,
+ EfiMemoryChannelTypeRambus = 3,
+ EfiMemoryChannelTypeSyncLink = 4
+} EFI_MEMORY_CHANNEL_TYPE;
+
+///
+/// This data record refers the type of memory that is associated with the channel. This data record is a
+/// structure.
+/// The type definition structure for EFI_MEMORY_CHANNEL_TYPE_DATA is in SMBIOS 2.3.4,
+/// Table 3.3.38, Type 37, with the following offsets:
+/// - Offset 0x4
+/// - Offset 0x5
+/// - Offset 0x6
+///
+typedef struct {
+ ///
+ /// The type of memory that is associated with the channel.
+ ///
+ EFI_MEMORY_CHANNEL_TYPE MemoryChannelType;
+ ///
+ /// The maximum load that is supported by the channel.
+ ///
+ UINT8 MemoryChannelMaximumLoad;
+ ///
+ /// The number of memory devices on this channel.
+ ///
+ UINT8 MemoryChannelDeviceCount;
+} EFI_MEMORY_CHANNEL_TYPE_DATA;
+
+#define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007
+
+///
+/// This data record refers to the memory device that is associated with the memory channel. This data
+/// record is a structure.
+/// The type definition structure for EFI_MEMORY_CHANNEL_DEVICE_DATA is in SMBIOS 2.3.4,
+/// Table 3.3.38, Type 37, with the following offsets:
+/// - Offset 0x7
+/// - Offset 0x8
+///
+typedef struct {
+ ///
+ /// A number between one and MemoryChannelDeviceCount plus an arbitrary base.
+ ///
+ UINT8 DeviceId;
+ ///
+ /// The Link of the associated memory device. See Memory Device (Type 17) for
+ /// memory devices.
+ ///
+ EFI_INTER_LINK_DATA DeviceLink;
+ ///
+ /// The number of load units that this device consumes.
+ ///
+ UINT8 MemoryChannelDeviceLoad;
+} EFI_MEMORY_CHANNEL_DEVICE_DATA;
+
+//
+// Memory. Controller Information - SMBIOS Type 5
+//
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+#define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef enum {
+ EfiErrorDetectingMethodOther = 1,
+ EfiErrorDetectingMethodUnknown = 2,
+ EfiErrorDetectingMethodNone = 3,
+ EfiErrorDetectingMethodParity = 4,
+ EfiErrorDetectingMethod32Ecc = 5,
+ EfiErrorDetectingMethod64Ecc = 6,
+ EfiErrorDetectingMethod128Ecc = 7,
+ EfiErrorDetectingMethodCrc = 8
+} EFI_MEMORY_ERROR_DETECT_METHOD_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ UINT8 Other :1;
+ UINT8 Unknown :1;
+ UINT8 None :1;
+ UINT8 SingleBitErrorCorrect :1;
+ UINT8 DoubleBitErrorCorrect :1;
+ UINT8 ErrorScrubbing :1;
+ UINT8 Reserved :2;
+} EFI_MEMORY_ERROR_CORRECT_CAPABILITY;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef enum {
+ EfiMemoryInterleaveOther = 1,
+ EfiMemoryInterleaveUnknown = 2,
+ EfiMemoryInterleaveOneWay = 3,
+ EfiMemoryInterleaveTwoWay = 4,
+ EfiMemoryInterleaveFourWay = 5,
+ EfiMemoryInterleaveEightWay = 6,
+ EfiMemoryInterleaveSixteenWay = 7
+} EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ UINT16 Other :1;
+ UINT16 Unknown :1;
+ UINT16 SeventyNs:1;
+ UINT16 SixtyNs :1;
+ UINT16 FiftyNs :1;
+ UINT16 Reserved :11;
+} EFI_MEMORY_SPEED_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ UINT16 Other :1;
+ UINT16 Unknown :1;
+ UINT16 Standard :1;
+ UINT16 FastPageMode:1;
+ UINT16 EDO :1;
+ UINT16 Parity :1;
+ UINT16 ECC :1;
+ UINT16 SIMM :1;
+ UINT16 DIMM :1;
+ UINT16 BurstEdo :1;
+ UINT16 SDRAM :1;
+ UINT16 Reserved :5;
+} EFI_MEMORY_SUPPORTED_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ UINT8 Five :1;
+ UINT8 Three :1;
+ UINT8 Two :1;
+ UINT8 Reserved:5;
+} EFI_MEMORY_MODULE_VOLTAGE_TYPE;
+
+///
+/// EFI_MEMORY_CONTROLLER_INFORMATION is obsolete
+/// Use EFI_MEMORY_CONTROLLER_INFORMATION_DATA instead
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;
+ UINT8 MaxMemoryModuleSize;
+ EFI_MEMORY_SPEED_TYPE MemorySpeedType;
+ EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;
+ EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;
+ UINT8 NumberofMemorySlot;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;
+ UINT16 *MemoryModuleConfigHandles;
+} EFI_MEMORY_CONTROLLER_INFORMATION;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;
+ UINT8 MaxMemoryModuleSize;
+ EFI_MEMORY_SPEED_TYPE MemorySpeedType;
+ EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;
+ EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;
+ UINT8 NumberofMemorySlot;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;
+ EFI_INTER_LINK_DATA MemoryModuleConfig[1];
+} EFI_MEMORY_CONTROLLER_INFORMATION_DATA;
+
+///
+/// Memory. Error Information - SMBIOS Type 18
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 18.
+///
+#define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 18.
+///
+typedef enum {
+ EfiMemoryErrorOther = 1,
+ EfiMemoryErrorUnknown = 2,
+ EfiMemoryErrorOk = 3,
+ EfiMemoryErrorBadRead = 4,
+ EfiMemoryErrorParity = 5,
+ EfiMemoryErrorSigleBit = 6,
+ EfiMemoryErrorDoubleBit = 7,
+ EfiMemoryErrorMultiBit = 8,
+ EfiMemoryErrorNibble = 9,
+ EfiMemoryErrorChecksum = 10,
+ EfiMemoryErrorCrc = 11,
+ EfiMemoryErrorCorrectSingleBit = 12,
+ EfiMemoryErrorCorrected = 13,
+ EfiMemoryErrorUnCorrectable = 14
+} EFI_MEMORY_ERROR_TYPE;
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 18.
+///
+typedef enum {
+ EfiMemoryGranularityOther = 1,
+ EfiMemoryGranularityOtherUnknown = 2,
+ EfiMemoryGranularityDeviceLevel = 3,
+ EfiMemoryGranularityMemPartitionLevel = 4
+} EFI_MEMORY_ERROR_GRANULARITY_TYPE;
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 18.
+///
+typedef enum {
+ EfiMemoryErrorOperationOther = 1,
+ EfiMemoryErrorOperationUnknown = 2,
+ EfiMemoryErrorOperationRead = 3,
+ EfiMemoryErrorOperationWrite = 4,
+ EfiMemoryErrorOperationPartialWrite = 5
+} EFI_MEMORY_ERROR_OPERATION_TYPE;
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 18.
+///
+typedef struct {
+ EFI_MEMORY_ERROR_TYPE MemoryErrorType;
+ EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
+ EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
+ UINT32 VendorSyndrome;
+ UINT32 MemoryArrayErrorAddress;
+ UINT32 DeviceErrorAddress;
+ UINT32 DeviceErrorResolution;
+} EFI_MEMORY_32BIT_ERROR_INFORMATION;
+
+///
+/// Memory. Error Information - SMBIOS Type 33.
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 33.
+///
+#define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 33.
+///
+typedef struct {
+ EFI_MEMORY_ERROR_TYPE MemoryErrorType;
+ EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
+ EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
+ UINT32 VendorSyndrome;
+ UINT64 MemoryArrayErrorAddress;
+ UINT64 DeviceErrorAddress;
+ UINT32 DeviceErrorResolution;
+} EFI_MEMORY_64BIT_ERROR_INFORMATION;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It is implementation-specific to simplify the code logic.
+///
+typedef union _EFI_MEMORY_SUBCLASS_RECORDS {
+ EFI_MEMORY_SIZE_DATA SizeData;
+ EFI_MEMORY_ARRAY_LOCATION_DATA ArrayLocationData;
+ EFI_MEMORY_ARRAY_LINK_DATA ArrayLink;
+ EFI_MEMORY_ARRAY_START_ADDRESS_DATA ArrayStartAddress;
+ EFI_MEMORY_DEVICE_START_ADDRESS_DATA DeviceStartAddress;
+ EFI_MEMORY_CHANNEL_TYPE_DATA ChannelTypeData;
+ EFI_MEMORY_CHANNEL_DEVICE_DATA ChannelDeviceData;
+ EFI_MEMORY_CONTROLLER_INFORMATION MemoryControllerInfo;
+ EFI_MEMORY_32BIT_ERROR_INFORMATION Memory32bitErrorInfo;
+ EFI_MEMORY_64BIT_ERROR_INFORMATION Memory64bitErrorInfo;
+} EFI_MEMORY_SUBCLASS_RECORDS;
+
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER Header;
+ EFI_MEMORY_SUBCLASS_RECORDS Record;
+} EFI_MEMORY_SUBCLASS_DRIVER_DATA;
+
+#define EFI_MISC_SUBCLASS_VERSION 0x0100
+
+#pragma pack(1)
+
+//
+// Last PCI Bus Number
+//
+#define EFI_MISC_LAST_PCI_BUS_RECORD_NUMBER 0x00000001
+
+typedef struct {
+ UINT8 LastPciBus;
+} EFI_MISC_LAST_PCI_BUS_DATA;
+
+//
+// Misc. BIOS Vendor - SMBIOS Type 0
+//
+#define EFI_MISC_BIOS_VENDOR_RECORD_NUMBER 0x00000002
+
+typedef struct {
+ UINT64 Reserved1 :2;
+ UINT64 Unknown :1;
+ UINT64 BiosCharacteristicsNotSupported :1;
+ UINT64 IsaIsSupported :1;
+ UINT64 McaIsSupported :1;
+ UINT64 EisaIsSupported :1;
+ UINT64 PciIsSupported :1;
+ UINT64 PcmciaIsSupported :1;
+ UINT64 PlugAndPlayIsSupported :1;
+ UINT64 ApmIsSupported :1;
+ UINT64 BiosIsUpgradable :1;
+ UINT64 BiosShadowingAllowed :1;
+ UINT64 VlVesaIsSupported :1;
+ UINT64 EscdSupportIsAvailable :1;
+ UINT64 BootFromCdIsSupported :1;
+ UINT64 SelectableBootIsSupported :1;
+ UINT64 RomBiosIsSocketed :1;
+ UINT64 BootFromPcmciaIsSupported :1;
+ UINT64 EDDSpecificationIsSupported :1;
+ UINT64 JapaneseNecFloppyIsSupported :1;
+ UINT64 JapaneseToshibaFloppyIsSupported :1;
+ UINT64 Floppy525_360IsSupported :1;
+ UINT64 Floppy525_12IsSupported :1;
+ UINT64 Floppy35_720IsSupported :1;
+ UINT64 Floppy35_288IsSupported :1;
+ UINT64 PrintScreenIsSupported :1;
+ UINT64 Keyboard8042IsSupported :1;
+ UINT64 SerialIsSupported :1;
+ UINT64 PrinterIsSupported :1;
+ UINT64 CgaMonoIsSupported :1;
+ UINT64 NecPc98 :1;
+ UINT64 AcpiIsSupported :1;
+ UINT64 UsbLegacyIsSupported :1;
+ UINT64 AgpIsSupported :1;
+ UINT64 I20BootIsSupported :1;
+ UINT64 Ls120BootIsSupported :1;
+ UINT64 AtapiZipDriveBootIsSupported :1;
+ UINT64 Boot1394IsSupported :1;
+ UINT64 SmartBatteryIsSupported :1;
+ UINT64 BiosBootSpecIsSupported :1;
+ UINT64 FunctionKeyNetworkBootIsSupported :1;
+ UINT64 Reserved :22;
+} EFI_MISC_BIOS_CHARACTERISTICS;
+
+typedef struct {
+ UINT64 BiosReserved :16;
+ UINT64 SystemReserved:16;
+ UINT64 Reserved :32;
+} EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION;
+
+typedef struct {
+ STRING_REF BiosVendor;
+ STRING_REF BiosVersion;
+ STRING_REF BiosReleaseDate;
+ EFI_PHYSICAL_ADDRESS BiosStartingAddress;
+ EFI_EXP_BASE2_DATA BiosPhysicalDeviceSize;
+ EFI_MISC_BIOS_CHARACTERISTICS BiosCharacteristics1;
+ EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION
+ BiosCharacteristics2;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 0.
+ ///
+ UINT8 BiosMajorRelease;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 0.
+ ///
+ UINT8 BiosMinorRelease;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 0.
+ ///
+ UINT8 BiosEmbeddedFirmwareMajorRelease;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 0.
+ ///
+ UINT8 BiosEmbeddedFirmwareMinorRelease;
+} EFI_MISC_BIOS_VENDOR_DATA;
+
+//
+// Misc. System Manufacturer - SMBIOS Type 1
+//
+#define EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER 0x00000003
+
+typedef enum {
+ EfiSystemWakeupTypeReserved = 0,
+ EfiSystemWakeupTypeOther = 1,
+ EfiSystemWakeupTypeUnknown = 2,
+ EfiSystemWakeupTypeApmTimer = 3,
+ EfiSystemWakeupTypeModemRing = 4,
+ EfiSystemWakeupTypeLanRemote = 5,
+ EfiSystemWakeupTypePowerSwitch = 6,
+ EfiSystemWakeupTypePciPme = 7,
+ EfiSystemWakeupTypeAcPowerRestored = 8
+} EFI_MISC_SYSTEM_WAKEUP_TYPE;
+
+typedef struct {
+ STRING_REF SystemManufacturer;
+ STRING_REF SystemProductName;
+ STRING_REF SystemVersion;
+ STRING_REF SystemSerialNumber;
+ EFI_GUID SystemUuid;
+ EFI_MISC_SYSTEM_WAKEUP_TYPE SystemWakeupType;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 1.
+ ///
+ STRING_REF SystemSKUNumber;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 1.
+ ///
+ STRING_REF SystemFamily;
+} EFI_MISC_SYSTEM_MANUFACTURER_DATA;
+
+//
+// Misc. Base Board Manufacturer - SMBIOS Type 2
+//
+#define EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER 0x00000004
+
+typedef struct {
+ UINT32 Motherboard :1;
+ UINT32 RequiresDaughterCard :1;
+ UINT32 Removable :1;
+ UINT32 Replaceable :1;
+ UINT32 HotSwappable :1;
+ UINT32 Reserved :27;
+} EFI_BASE_BOARD_FEATURE_FLAGS;
+
+typedef enum {
+ EfiBaseBoardTypeUnknown = 1,
+ EfiBaseBoardTypeOther = 2,
+ EfiBaseBoardTypeServerBlade = 3,
+ EfiBaseBoardTypeConnectivitySwitch = 4,
+ EfiBaseBoardTypeSystemManagementModule = 5,
+ EfiBaseBoardTypeProcessorModule = 6,
+ EfiBaseBoardTypeIOModule = 7,
+ EfiBaseBoardTypeMemoryModule = 8,
+ EfiBaseBoardTypeDaughterBoard = 9,
+ EfiBaseBoardTypeMotherBoard = 0xA,
+ EfiBaseBoardTypeProcessorMemoryModule = 0xB,
+ EfiBaseBoardTypeProcessorIOModule = 0xC,
+ EfiBaseBoardTypeInterconnectBoard = 0xD
+} EFI_BASE_BOARD_TYPE;
+
+typedef struct {
+ STRING_REF BaseBoardManufacturer;
+ STRING_REF BaseBoardProductName;
+ STRING_REF BaseBoardVersion;
+ STRING_REF BaseBoardSerialNumber;
+ STRING_REF BaseBoardAssetTag;
+ STRING_REF BaseBoardChassisLocation;
+ EFI_BASE_BOARD_FEATURE_FLAGS BaseBoardFeatureFlags;
+ EFI_BASE_BOARD_TYPE BaseBoardType;
+ EFI_INTER_LINK_DATA BaseBoardChassisLink;
+ UINT32 BaseBoardNumberLinks;
+ EFI_INTER_LINK_DATA LinkN;
+} EFI_MISC_BASE_BOARD_MANUFACTURER_DATA;
+
+//
+// Misc. System/Chassis Enclosure - SMBIOS Type 3
+//
+#define EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER 0x00000005
+
+typedef enum {
+ EfiMiscChassisTypeOther = 0x1,
+ EfiMiscChassisTypeUnknown = 0x2,
+ EfiMiscChassisTypeDeskTop = 0x3,
+ EfiMiscChassisTypeLowProfileDesktop = 0x4,
+ EfiMiscChassisTypePizzaBox = 0x5,
+ EfiMiscChassisTypeMiniTower = 0x6,
+ EfiMiscChassisTypeTower = 0x7,
+ EfiMiscChassisTypePortable = 0x8,
+ EfiMiscChassisTypeLapTop = 0x9,
+ EfiMiscChassisTypeNotebook = 0xA,
+ EfiMiscChassisTypeHandHeld = 0xB,
+ EfiMiscChassisTypeDockingStation = 0xC,
+ EfiMiscChassisTypeAllInOne = 0xD,
+ EfiMiscChassisTypeSubNotebook = 0xE,
+ EfiMiscChassisTypeSpaceSaving = 0xF,
+ EfiMiscChassisTypeLunchBox = 0x10,
+ EfiMiscChassisTypeMainServerChassis = 0x11,
+ EfiMiscChassisTypeExpansionChassis = 0x12,
+ EfiMiscChassisTypeSubChassis = 0x13,
+ EfiMiscChassisTypeBusExpansionChassis = 0x14,
+ EfiMiscChassisTypePeripheralChassis = 0x15,
+ EfiMiscChassisTypeRaidChassis = 0x16,
+ EfiMiscChassisTypeRackMountChassis = 0x17,
+ EfiMiscChassisTypeSealedCasePc = 0x18,
+ EfiMiscChassisMultiSystemChassis = 0x19
+} EFI_MISC_CHASSIS_TYPE;
+
+typedef struct {
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass 0.9 specification, it has the incorrect field name "EFI_MISC_CHASSIS_TYPE".
+ /// Change it to "ChassisType" to pass build.
+ ///
+ UINT32 ChassisType :16;
+ UINT32 ChassisLockPresent:1;
+ UINT32 Reserved :15;
+} EFI_MISC_CHASSIS_STATUS;
+
+typedef enum {
+ EfiChassisStateOther = 0x01,
+ EfiChassisStateUnknown = 0x02,
+ EfiChassisStateSafe = 0x03,
+ EfiChassisStateWarning = 0x04,
+ EfiChassisStateCritical = 0x05,
+ EfiChassisStateNonRecoverable = 0x06
+} EFI_MISC_CHASSIS_STATE;
+
+typedef enum {
+ EfiChassisSecurityStatusOther = 0x01,
+ EfiChassisSecurityStatusUnknown = 0x02,
+ EfiChassisSecurityStatusNone = 0x03,
+ EfiChassisSecurityStatusExternalInterfaceLockedOut = 0x04,
+ EfiChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05
+} EFI_MISC_CHASSIS_SECURITY_STATE;
+
+typedef struct {
+ UINT32 RecordType :1;
+ UINT32 Type :7;
+ UINT32 Reserved :24;
+} EFI_MISC_ELEMENT_TYPE;
+
+typedef struct {
+ EFI_MISC_ELEMENT_TYPE ChassisElementType;
+ EFI_INTER_LINK_DATA ChassisElementStructure;
+ EFI_BASE_BOARD_TYPE ChassisBaseBoard;
+ UINT32 ChassisElementMinimum;
+ UINT32 ChassisElementMaximum;
+} EFI_MISC_ELEMENTS;
+
+typedef struct {
+ STRING_REF ChassisManufacturer;
+ STRING_REF ChassisVersion;
+ STRING_REF ChassisSerialNumber;
+ STRING_REF ChassisAssetTag;
+ EFI_MISC_CHASSIS_STATUS ChassisType;
+ EFI_MISC_CHASSIS_STATE ChassisBootupState;
+ EFI_MISC_CHASSIS_STATE ChassisPowerSupplyState;
+ EFI_MISC_CHASSIS_STATE ChassisThermalState;
+ EFI_MISC_CHASSIS_SECURITY_STATE ChassisSecurityState;
+ UINT32 ChassisOemDefined;
+ UINT32 ChassisHeight;
+ UINT32 ChassisNumberPowerCords;
+ UINT32 ChassisElementCount;
+ UINT32 ChassisElementRecordLength;
+ EFI_MISC_ELEMENTS ChassisElements;
+} EFI_MISC_CHASSIS_MANUFACTURER_DATA;
+
+//
+// Misc. Port Connector Information - SMBIOS Type 8
+//
+#define EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER 0x00000006
+
+typedef enum {
+ EfiPortConnectorTypeNone = 0x00,
+ EfiPortConnectorTypeCentronics = 0x01,
+ EfiPortConnectorTypeMiniCentronics = 0x02,
+ EfiPortConnectorTypeProprietary = 0x03,
+ EfiPortConnectorTypeDB25Male = 0x04,
+ EfiPortConnectorTypeDB25Female = 0x05,
+ EfiPortConnectorTypeDB15Male = 0x06,
+ EfiPortConnectorTypeDB15Female = 0x07,
+ EfiPortConnectorTypeDB9Male = 0x08,
+ EfiPortConnectorTypeDB9Female = 0x09,
+ EfiPortConnectorTypeRJ11 = 0x0A,
+ EfiPortConnectorTypeRJ45 = 0x0B,
+ EfiPortConnectorType50PinMiniScsi = 0x0C,
+ EfiPortConnectorTypeMiniDin = 0x0D,
+ EfiPortConnectorTypeMicriDin = 0x0E,
+ EfiPortConnectorTypePS2 = 0x0F,
+ EfiPortConnectorTypeInfrared = 0x10,
+ EfiPortConnectorTypeHpHil = 0x11,
+ EfiPortConnectorTypeUsb = 0x12,
+ EfiPortConnectorTypeSsaScsi = 0x13,
+ EfiPortConnectorTypeCircularDin8Male = 0x14,
+ EfiPortConnectorTypeCircularDin8Female = 0x15,
+ EfiPortConnectorTypeOnboardIde = 0x16,
+ EfiPortConnectorTypeOnboardFloppy = 0x17,
+ EfiPortConnectorType9PinDualInline = 0x18,
+ EfiPortConnectorType25PinDualInline = 0x19,
+ EfiPortConnectorType50PinDualInline = 0x1A,
+ EfiPortConnectorType68PinDualInline = 0x1B,
+ EfiPortConnectorTypeOnboardSoundInput = 0x1C,
+ EfiPortConnectorTypeMiniCentronicsType14 = 0x1D,
+ EfiPortConnectorTypeMiniCentronicsType26 = 0x1E,
+ EfiPortConnectorTypeHeadPhoneMiniJack = 0x1F,
+ EfiPortConnectorTypeBNC = 0x20,
+ EfiPortConnectorType1394 = 0x21,
+ EfiPortConnectorTypePC98 = 0xA0,
+ EfiPortConnectorTypePC98Hireso = 0xA1,
+ EfiPortConnectorTypePCH98 = 0xA2,
+ EfiPortConnectorTypePC98Note = 0xA3,
+ EfiPortConnectorTypePC98Full = 0xA4,
+ EfiPortConnectorTypeOther = 0xFF
+} EFI_MISC_PORT_CONNECTOR_TYPE;
+
+typedef enum {
+ EfiPortTypeNone = 0x00,
+ EfiPortTypeParallelXtAtCompatible = 0x01,
+ EfiPortTypeParallelPortPs2 = 0x02,
+ EfiPortTypeParallelPortEcp = 0x03,
+ EfiPortTypeParallelPortEpp = 0x04,
+ EfiPortTypeParallelPortEcpEpp = 0x05,
+ EfiPortTypeSerialXtAtCompatible = 0x06,
+ EfiPortTypeSerial16450Compatible = 0x07,
+ EfiPortTypeSerial16550Compatible = 0x08,
+ EfiPortTypeSerial16550ACompatible = 0x09,
+ EfiPortTypeScsi = 0x0A,
+ EfiPortTypeMidi = 0x0B,
+ EfiPortTypeJoyStick = 0x0C,
+ EfiPortTypeKeyboard = 0x0D,
+ EfiPortTypeMouse = 0x0E,
+ EfiPortTypeSsaScsi = 0x0F,
+ EfiPortTypeUsb = 0x10,
+ EfiPortTypeFireWire = 0x11,
+ EfiPortTypePcmciaTypeI = 0x12,
+ EfiPortTypePcmciaTypeII = 0x13,
+ EfiPortTypePcmciaTypeIII = 0x14,
+ EfiPortTypeCardBus = 0x15,
+ EfiPortTypeAccessBusPort = 0x16,
+ EfiPortTypeScsiII = 0x17,
+ EfiPortTypeScsiWide = 0x18,
+ EfiPortTypePC98 = 0x19,
+ EfiPortTypePC98Hireso = 0x1A,
+ EfiPortTypePCH98 = 0x1B,
+ EfiPortTypeVideoPort = 0x1C,
+ EfiPortTypeAudioPort = 0x1D,
+ EfiPortTypeModemPort = 0x1E,
+ EfiPortTypeNetworkPort = 0x1F,
+ EfiPortType8251Compatible = 0xA0,
+ EfiPortType8251FifoCompatible = 0xA1,
+ EfiPortTypeOther = 0xFF
+} EFI_MISC_PORT_TYPE;
+
+typedef struct {
+ STRING_REF PortInternalConnectorDesignator;
+ STRING_REF PortExternalConnectorDesignator;
+ EFI_MISC_PORT_CONNECTOR_TYPE PortInternalConnectorType;
+ EFI_MISC_PORT_CONNECTOR_TYPE PortExternalConnectorType;
+ EFI_MISC_PORT_TYPE PortType;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this type of field is defined as EFI_DEVICE_PATH_PROTOCOL,
+ /// which causes the implementation some complexity. Keep it unchanged for backward
+ /// compatibility.
+ ///
+ EFI_MISC_PORT_DEVICE_PATH PortPath;
+} EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA;
+
+//
+// Misc. System Slots - SMBIOS Type 9
+//
+#define EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER 0x00000007
+
+typedef enum {
+ EfiSlotTypeOther = 0x01,
+ EfiSlotTypeUnknown = 0x02,
+ EfiSlotTypeIsa = 0x03,
+ EfiSlotTypeMca = 0x04,
+ EfiSlotTypeEisa = 0x05,
+ EfiSlotTypePci = 0x06,
+ EfiSlotTypePcmcia = 0x07,
+ EfiSlotTypeVlVesa = 0x08,
+ EfiSlotTypeProprietary = 0x09,
+ EfiSlotTypeProcessorCardSlot = 0x0A,
+ EfiSlotTypeProprietaryMemoryCardSlot = 0x0B,
+ EfiSlotTypeIORiserCardSlot = 0x0C,
+ EfiSlotTypeNuBus = 0x0D,
+ EfiSlotTypePci66MhzCapable = 0x0E,
+ EfiSlotTypeAgp = 0x0F,
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, its naming should be EfiSlotTypeAgp2X
+ /// rather than EfiSlotTypeApg2X.
+ ///
+ EfiSlotTypeAgp2X = 0x10,
+ EfiSlotTypeAgp4X = 0x11,
+ EfiSlotTypePciX = 0x12,
+ EfiSlotTypeAgp8x = 0x13,
+ EfiSlotTypePC98C20 = 0xA0,
+ EfiSlotTypePC98C24 = 0xA1,
+ EfiSlotTypePC98E = 0xA2,
+ EfiSlotTypePC98LocalBus = 0xA3,
+ EfiSlotTypePC98Card = 0xA4,
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, these fields aren't defined.
+ /// They're introduced for SmBios 2.6 specification type 9.
+ ///
+ EfiSlotTypePciExpress = 0xA5,
+ EfiSlotTypePciExpressX1 = 0xA6,
+ EfiSlotTypePciExpressX2 = 0xA7,
+ EfiSlotTypePciExpressX4 = 0xA8,
+ EfiSlotTypePciExpressX8 = 0xA9,
+ EfiSlotTypePciExpressX16 = 0xAA
+} EFI_MISC_SLOT_TYPE;
+
+typedef enum {
+ EfiSlotDataBusWidthOther = 0x01,
+ EfiSlotDataBusWidthUnknown = 0x02,
+ EfiSlotDataBusWidth8Bit = 0x03,
+ EfiSlotDataBusWidth16Bit = 0x04,
+ EfiSlotDataBusWidth32Bit = 0x05,
+ EfiSlotDataBusWidth64Bit = 0x06,
+ EfiSlotDataBusWidth128Bit = 0x07,
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, these fields aren't defined.
+ /// They're introduced for SmBios 2.6 specification type 9.
+ ///
+ EfiSlotDataBusWidth1xOrx1 = 0x8,
+ EfiSlotDataBusWidth2xOrx2 = 0x9,
+ EfiSlotDataBusWidth4xOrx4 = 0xA,
+ EfiSlotDataBusWidth8xOrx8 = 0xB,
+ EfiSlotDataBusWidth12xOrx12 = 0xC,
+ EfiSlotDataBusWidth16xOrx16 = 0xD,
+ EfiSlotDataBusWidth32xOrx32 = 0xE
+} EFI_MISC_SLOT_DATA_BUS_WIDTH;
+
+typedef enum {
+ EfiSlotUsageOther = 1,
+ EfiSlotUsageUnknown = 2,
+ EfiSlotUsageAvailable = 3,
+ EfiSlotUsageInUse = 4
+} EFI_MISC_SLOT_USAGE;
+
+typedef enum {
+ EfiSlotLengthOther = 1,
+ EfiSlotLengthUnknown = 2,
+ EfiSlotLengthShort = 3,
+ EfiSlotLengthLong = 4
+} EFI_MISC_SLOT_LENGTH;
+
+typedef struct {
+ UINT32 CharacteristicsUnknown :1;
+ UINT32 Provides50Volts :1;
+ UINT32 Provides33Volts :1;
+ UINT32 SharedSlot :1;
+ UINT32 PcCard16Supported :1;
+ UINT32 CardBusSupported :1;
+ UINT32 ZoomVideoSupported :1;
+ UINT32 ModemRingResumeSupported:1;
+ UINT32 PmeSignalSupported :1;
+ UINT32 HotPlugDevicesSupported :1;
+ UINT32 SmbusSignalSupported :1;
+ UINT32 Reserved :21;
+} EFI_MISC_SLOT_CHARACTERISTICS;
+
+typedef struct {
+ STRING_REF SlotDesignation;
+ EFI_MISC_SLOT_TYPE SlotType;
+ EFI_MISC_SLOT_DATA_BUS_WIDTH SlotDataBusWidth;
+ EFI_MISC_SLOT_USAGE SlotUsage;
+ EFI_MISC_SLOT_LENGTH SlotLength;
+ UINT16 SlotId;
+ EFI_MISC_SLOT_CHARACTERISTICS SlotCharacteristics;
+ EFI_DEVICE_PATH_PROTOCOL SlotDevicePath;
+} EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA;
+
+//
+// Misc. Onboard Device - SMBIOS Type 10
+//
+#define EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER 0x00000008
+
+typedef enum {
+ EfiOnBoardDeviceTypeOther = 1,
+ EfiOnBoardDeviceTypeUnknown = 2,
+ EfiOnBoardDeviceTypeVideo = 3,
+ EfiOnBoardDeviceTypeScsiController = 4,
+ EfiOnBoardDeviceTypeEthernet = 5,
+ EfiOnBoardDeviceTypeTokenRing = 6,
+ EfiOnBoardDeviceTypeSound = 7
+} EFI_MISC_ONBOARD_DEVICE_TYPE;
+
+typedef struct {
+ UINT32 DeviceType :16;
+ UINT32 DeviceEnabled :1;
+ UINT32 Reserved :15;
+} EFI_MISC_ONBOARD_DEVICE_STATUS;
+
+typedef struct {
+ STRING_REF OnBoardDeviceDescription;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, the name is OnBoardDeviceType.
+ /// Keep it unchanged for backward compatibilty.
+ ///
+ EFI_MISC_ONBOARD_DEVICE_STATUS OnBoardDeviceStatus;
+ EFI_DEVICE_PATH_PROTOCOL OnBoardDevicePath;
+} EFI_MISC_ONBOARD_DEVICE_DATA;
+
+//
+// Misc. BIOS Language Information - SMBIOS Type 11
+//
+#define EFI_MISC_OEM_STRING_RECORD_NUMBER 0x00000009
+
+typedef struct {
+ STRING_REF OemStringRef[1];
+} EFI_MISC_OEM_STRING_DATA;
+
+//
+// Misc. System Options - SMBIOS Type 12
+//
+typedef struct {
+ STRING_REF SystemOptionStringRef[1];
+} EFI_MISC_SYSTEM_OPTION_STRING_DATA;
+
+#define EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER 0x0000000A
+
+//
+// Misc. Number of Installable Languages - SMBIOS Type 13
+//
+#define EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER 0x0000000B
+
+typedef struct {
+ UINT32 AbbreviatedLanguageFormat :1;
+ UINT32 Reserved :31;
+} EFI_MISC_LANGUAGE_FLAGS;
+
+typedef struct {
+ UINT16 NumberOfInstallableLanguages;
+ EFI_MISC_LANGUAGE_FLAGS LanguageFlags;
+ UINT16 CurrentLanguageNumber;
+} EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA;
+
+//
+// Misc. System Language String
+//
+#define EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER 0x0000000C
+
+typedef struct {
+ UINT16 LanguageId;
+ STRING_REF SystemLanguageString;
+} EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA;
+
+//
+// Group Associations - SMBIOS Type 14
+//
+#define EFI_MISC_GROUP_NAME_RECORD_NUMBER 0x0000000D
+
+typedef struct {
+ STRING_REF GroupName;
+ UINT16 NumberGroupItems;
+ UINT16 GroupId;
+} EFI_MISC_GROUP_NAME_DATA;
+
+//
+// Group Item Set Element
+//
+#define EFI_MISC_GROUP_ITEM_SET_RECORD_NUMBER 0x0000000E
+
+typedef struct {
+ EFI_GUID SubClass;
+ EFI_INTER_LINK_DATA GroupLink;
+ UINT16 GroupId;
+ UINT16 GroupElementId;
+} EFI_MISC_GROUP_ITEM_SET_DATA;
+
+//
+// Misc. Pointing Device Type - SMBIOS Type 21
+//
+#define EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER 0x0000000F
+
+typedef enum {
+ EfiPointingDeviceTypeOther = 0x01,
+ EfiPointingDeviceTypeUnknown = 0x02,
+ EfiPointingDeviceTypeMouse = 0x03,
+ EfiPointingDeviceTypeTrackBall = 0x04,
+ EfiPointingDeviceTypeTrackPoint = 0x05,
+ EfiPointingDeviceTypeGlidePoint = 0x06,
+ EfiPointingDeviceTouchPad = 0x07,
+ EfiPointingDeviceTouchScreen = 0x08,
+ EfiPointingDeviceOpticalSensor = 0x09
+} EFI_MISC_POINTING_DEVICE_TYPE;
+
+typedef enum {
+ EfiPointingDeviceInterfaceOther = 0x01,
+ EfiPointingDeviceInterfaceUnknown = 0x02,
+ EfiPointingDeviceInterfaceSerial = 0x03,
+ EfiPointingDeviceInterfacePs2 = 0x04,
+ EfiPointingDeviceInterfaceInfrared = 0x05,
+ EfiPointingDeviceInterfaceHpHil = 0x06,
+ EfiPointingDeviceInterfaceBusMouse = 0x07,
+ EfiPointingDeviceInterfaceADB = 0x08,
+ EfiPointingDeviceInterfaceBusMouseDB9 = 0xA0,
+ EfiPointingDeviceInterfaceBusMouseMicroDin = 0xA1,
+ EfiPointingDeviceInterfaceUsb = 0xA2
+} EFI_MISC_POINTING_DEVICE_INTERFACE;
+
+typedef struct {
+ EFI_MISC_POINTING_DEVICE_TYPE PointingDeviceType;
+ EFI_MISC_POINTING_DEVICE_INTERFACE PointingDeviceInterface;
+ UINT16 NumberPointingDeviceButtons;
+ EFI_DEVICE_PATH_PROTOCOL PointingDevicePath;
+} EFI_MISC_POINTING_DEVICE_TYPE_DATA;
+
+//
+// Portable Battery - SMBIOS Type 22
+//
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the name is EFI_MISC_BATTERY_LOCATION_RECORD_NUMBER.
+/// Keep it unchanged for backward compatibilty.
+///
+#define EFI_MISC_PORTABLE_BATTERY_RECORD_NUMBER 0x00000010
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BATTERY_DEVICE_CHEMISTRY.
+/// And all field namings are also different with specification.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef enum {
+ EfiPortableBatteryDeviceChemistryOther = 1,
+ EfiPortableBatteryDeviceChemistryUnknown = 2,
+ EfiPortableBatteryDeviceChemistryLeadAcid = 3,
+ EfiPortableBatteryDeviceChemistryNickelCadmium = 4,
+ EfiPortableBatteryDeviceChemistryNickelMetalHydride = 5,
+ EfiPortableBatteryDeviceChemistryLithiumIon = 6,
+ EfiPortableBatteryDeviceChemistryZincAir = 7,
+ EfiPortableBatteryDeviceChemistryLithiumPolymer = 8
+} EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY;
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BATTERY_LOCATION_DATA.
+/// Also, the name and the order of the fields vary with specifications.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef struct {
+ STRING_REF Location;
+ STRING_REF Manufacturer;
+ STRING_REF ManufactureDate;
+ STRING_REF SerialNumber;
+ STRING_REF DeviceName;
+ EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY
+ DeviceChemistry;
+ UINT16 DesignCapacity;
+ UINT16 DesignVoltage;
+ STRING_REF SBDSVersionNumber;
+ UINT8 MaximumError;
+ UINT16 SBDSSerialNumber;
+ UINT16 SBDSManufactureDate;
+ STRING_REF SBDSDeviceChemistry;
+ UINT8 DesignCapacityMultiplier;
+ UINT32 OEMSpecific;
+ UINT8 BatteryNumber; // Temporary
+ BOOLEAN Valid; // Is entry valid - Temporary
+} EFI_MISC_PORTABLE_BATTERY;
+
+
+//
+// Misc. Reset Capabilities - SMBIOS Type 23
+//
+#define EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER 0x00000011
+
+typedef struct {
+ UINT32 Status :1;
+ UINT32 BootOption :2;
+ UINT32 BootOptionOnLimit :2;
+ UINT32 WatchdogTimerPresent:1;
+ UINT32 Reserved :26;
+} EFI_MISC_RESET_CAPABILITIES_TYPE;
+
+typedef struct {
+ EFI_MISC_RESET_CAPABILITIES_TYPE ResetCapabilities;
+ UINT16 ResetCount;
+ UINT16 ResetLimit;
+ UINT16 ResetTimerInterval;
+ UINT16 ResetTimeout;
+} EFI_MISC_RESET_CAPABILITIES;
+
+typedef struct {
+ EFI_MISC_RESET_CAPABILITIES ResetCapabilities;
+ UINT16 ResetCount;
+ UINT16 ResetLimit;
+ UINT16 ResetTimerInterval;
+ UINT16 ResetTimeout;
+} EFI_MISC_RESET_CAPABILITIES_DATA;
+
+//
+// Misc. Hardware Security - SMBIOS Type 24
+//
+#define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER 0x00000012
+
+///
+/// Inconsistent with specification here:
+/// The MiscSubclass specification 0.9 only mentions the possible value of each field in
+/// EFI_MISC_HARDWARE_SECURITY_SETTINGS.
+/// It's implementation-specific in order to to simplify the code logic.
+///
+typedef enum {
+ EfiHardwareSecurityStatusDisabled = 0,
+ EfiHardwareSecurityStatusEnabled = 1,
+ EfiHardwareSecurityStatusNotImplemented = 2,
+ EfiHardwareSecurityStatusUnknown = 3
+} EFI_MISC_HARDWARE_SECURITY_STATUS;
+
+typedef struct {
+ UINT32 FrontPanelResetStatus :2;
+ UINT32 AdministratorPasswordStatus :2;
+ UINT32 KeyboardPasswordStatus :2;
+ UINT32 PowerOnPasswordStatus :2;
+ UINT32 Reserved :24;
+} EFI_MISC_HARDWARE_SECURITY_SETTINGS;
+
+typedef struct {
+ EFI_MISC_HARDWARE_SECURITY_SETTINGS HardwareSecuritySettings;
+} EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA;
+
+//
+// System Power Controls - SMBIOS Type 25
+//
+#define EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER 0x00000013
+
+typedef struct {
+ UINT16 ScheduledPoweronMonth;
+ UINT16 ScheduledPoweronDayOfMonth;
+ UINT16 ScheduledPoweronHour;
+ UINT16 ScheduledPoweronMinute;
+ UINT16 ScheduledPoweronSecond;
+} EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA;
+
+//
+// Voltage Probe - SMBIOS Type 26
+//
+#define EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000014
+
+typedef struct {
+ UINT32 VoltageProbeSite :5;
+ UINT32 VoltageProbeStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_VOLTAGE_PROBE_LOCATION;
+
+typedef struct {
+ STRING_REF VoltageProbeDescription;
+ EFI_MISC_VOLTAGE_PROBE_LOCATION VoltageProbeLocation;
+ EFI_EXP_BASE10_DATA VoltageProbeMaximumValue;
+ EFI_EXP_BASE10_DATA VoltageProbeMinimumValue;
+ EFI_EXP_BASE10_DATA VoltageProbeResolution;
+ EFI_EXP_BASE10_DATA VoltageProbeTolerance;
+ EFI_EXP_BASE10_DATA VoltageProbeAccuracy;
+ EFI_EXP_BASE10_DATA VoltageProbeNominalValue;
+ EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;
+ EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;
+ EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;
+ EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;
+ EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;
+ EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;
+ UINT32 VoltageProbeOemDefined;
+} EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA;
+
+//
+// Cooling Device - SMBIOS Type 27
+//
+#define EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER 0x00000015
+
+typedef struct {
+ UINT32 CoolingDevice :5;
+ UINT32 CoolingDeviceStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_COOLING_DEVICE_TYPE;
+
+typedef struct {
+ EFI_MISC_COOLING_DEVICE_TYPE CoolingDeviceType;
+ EFI_INTER_LINK_DATA CoolingDeviceTemperatureLink;
+ UINT8 CoolingDeviceUnitGroup;
+ UINT16 CoolingDeviceNominalSpeed;
+ UINT32 CoolingDeviceOemDefined;
+} EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA;
+
+//
+// Temperature Probe - SMBIOS Type 28
+//
+#define EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000016
+
+typedef struct {
+ UINT32 TemperatureProbeSite :5;
+ UINT32 TemperatureProbeStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_TEMPERATURE_PROBE_LOCATION;
+
+typedef struct {
+ STRING_REF TemperatureProbeDescription;
+ EFI_MISC_TEMPERATURE_PROBE_LOCATION
+ TemperatureProbeLocation;
+ ///
+ /// Inconsistent with specification here:
+ /// MiscSubclass 0.9 specification defines the fields type as EFI_EXP_BASE10_DATA.
+ /// In fact, they should be UINT16 type because they refer to 16bit width data.
+ /// Keeping this inconsistency for backward compatibility.
+ ///
+ UINT16 TemperatureProbeMaximumValue;
+ UINT16 TemperatureProbeMinimumValue;
+ UINT16 TemperatureProbeResolution;
+ UINT16 TemperatureProbeTolerance;
+ UINT16 TemperatureProbeAccuracy;
+ UINT16 TemperatureProbeNominalValue;
+ UINT16 MDLowerNoncriticalThreshold;
+ UINT16 MDUpperNoncriticalThreshold;
+ UINT16 MDLowerCriticalThreshold;
+ UINT16 MDUpperCriticalThreshold;
+ UINT16 MDLowerNonrecoverableThreshold;
+ UINT16 MDUpperNonrecoverableThreshold;
+ UINT32 TemperatureProbeOemDefined;
+} EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA;
+
+//
+// Electrical Current Probe - SMBIOS Type 29
+//
+
+#define EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000017
+
+typedef struct {
+ UINT32 ElectricalCurrentProbeSite :5;
+ UINT32 ElectricalCurrentProbeStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;
+
+typedef struct {
+ STRING_REF ElectricalCurrentProbeDescription;
+ EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION
+ ElectricalCurrentProbeLocation;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeMaximumValue;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeMinimumValue;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeResolution;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeTolerance;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeAccuracy;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeNominalValue;
+ EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;
+ EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;
+ EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;
+ EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;
+ EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;
+ EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;
+ UINT32 ElectricalCurrentProbeOemDefined;
+} EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA;
+
+//
+// Out-of-Band Remote Access - SMBIOS Type 30
+//
+
+#define EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER 0x00000018
+
+typedef struct {
+ UINT32 InboundConnectionEnabled :1;
+ UINT32 OutboundConnectionEnabled :1;
+ UINT32 Reserved :30;
+} EFI_MISC_REMOTE_ACCESS_CONNECTIONS;
+
+typedef struct {
+ STRING_REF RemoteAccessManufacturerNameDescription;
+ EFI_MISC_REMOTE_ACCESS_CONNECTIONS RemoteAccessConnections;
+} EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA;
+
+//
+// Misc. BIS Entry Point - SMBIOS Type 31
+//
+#define EFI_MISC_BIS_ENTRY_POINT_RECORD_NUMBER 0x00000019
+
+typedef struct {
+ EFI_PHYSICAL_ADDRESS BisEntryPoint;
+} EFI_MISC_BIS_ENTRY_POINT_DATA;
+
+//
+// Misc. Boot Information - SMBIOS Type 32
+//
+#define EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER 0x0000001A
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BOOT_INFORMATION_STATUS_TYPE.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef enum {
+ EfiBootInformationStatusNoError = 0x00,
+ EfiBootInformationStatusNoBootableMedia = 0x01,
+ EfiBootInformationStatusNormalOSFailedLoading = 0x02,
+ EfiBootInformationStatusFirmwareDetectedFailure = 0x03,
+ EfiBootInformationStatusOSDetectedFailure = 0x04,
+ EfiBootInformationStatusUserRequestedBoot = 0x05,
+ EfiBootInformationStatusSystemSecurityViolation = 0x06,
+ EfiBootInformationStatusPreviousRequestedImage = 0x07,
+ EfiBootInformationStatusWatchdogTimerExpired = 0x08,
+ EfiBootInformationStatusStartReserved = 0x09,
+ EfiBootInformationStatusStartOemSpecific = 0x80,
+ EfiBootInformationStatusStartProductSpecific = 0xC0
+} EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE;
+
+typedef struct {
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, the field name is EFI_MISC_BOOT_INFORMATION_STATUS_TYPE.
+ /// Keep it unchanged for backward compatibilty.
+ ///
+ EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE BootInformationStatus;
+ UINT8 BootInformationData[9];
+} EFI_MISC_BOOT_INFORMATION_STATUS_DATA;
+
+//
+// Management Device - SMBIOS Type 34
+//
+#define EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER 0x0000001B
+
+typedef enum {
+ EfiManagementDeviceTypeOther = 0x01,
+ EfiManagementDeviceTypeUnknown = 0x02,
+ EfiManagementDeviceTypeLm75 = 0x03,
+ EfiManagementDeviceTypeLm78 = 0x04,
+ EfiManagementDeviceTypeLm79 = 0x05,
+ EfiManagementDeviceTypeLm80 = 0x06,
+ EfiManagementDeviceTypeLm81 = 0x07,
+ EfiManagementDeviceTypeAdm9240 = 0x08,
+ EfiManagementDeviceTypeDs1780 = 0x09,
+ EfiManagementDeviceTypeMaxim1617 = 0x0A,
+ EfiManagementDeviceTypeGl518Sm = 0x0B,
+ EfiManagementDeviceTypeW83781D = 0x0C,
+ EfiManagementDeviceTypeHt82H791 = 0x0D
+} EFI_MISC_MANAGEMENT_DEVICE_TYPE;
+
+typedef enum {
+ EfiManagementDeviceAddressTypeOther = 1,
+ EfiManagementDeviceAddressTypeUnknown = 2,
+ EfiManagementDeviceAddressTypeIOPort = 3,
+ EfiManagementDeviceAddressTypeMemory = 4,
+ EfiManagementDeviceAddressTypeSmbus = 5
+} EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;
+
+typedef struct {
+ STRING_REF ManagementDeviceDescription;
+ EFI_MISC_MANAGEMENT_DEVICE_TYPE ManagementDeviceType;
+ UINTN ManagementDeviceAddress;
+ EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE
+ ManagementDeviceAddressType;
+} EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA;
+
+//
+// Management Device Component - SMBIOS Type 35
+//
+
+#define EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_RECORD_NUMBER 0x0000001C
+
+typedef struct {
+ STRING_REF ManagementDeviceComponentDescription;
+ EFI_INTER_LINK_DATA ManagementDeviceLink;
+ EFI_INTER_LINK_DATA ManagementDeviceComponentLink;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this field is NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 35.
+ ///
+ EFI_INTER_LINK_DATA ManagementDeviceThresholdLink;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this field is NOT defined.
+ /// It's implementation-specific to simplify the code logic.
+ ///
+ UINT8 ComponentType;
+} EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA;
+
+//
+// IPMI Data Record - SMBIOS Type 38
+//
+typedef enum {
+ EfiIpmiOther = 0,
+ EfiIpmiKcs = 1,
+ EfiIpmiSmic = 2,
+ EfiIpmiBt = 3
+} EFI_MISC_IPMI_INTERFACE_TYPE;
+
+typedef struct {
+ UINT16 IpmiSpecLeastSignificantDigit:4;
+ UINT16 IpmiSpecMostSignificantDigit: 4;
+ UINT16 Reserved: 8;
+} EFI_MISC_IPMI_SPECIFICATION_REVISION;
+
+typedef struct {
+ EFI_MISC_IPMI_INTERFACE_TYPE IpmiInterfaceType;
+ EFI_MISC_IPMI_SPECIFICATION_REVISION
+ IpmiSpecificationRevision;
+ UINT16 IpmiI2CSlaveAddress;
+ UINT16 IpmiNvDeviceAddress;
+ UINT64 IpmiBaseAddress;
+ EFI_DEVICE_PATH_PROTOCOL IpmiDevicePath;
+} EFI_MISC_IPMI_INTERFACE_TYPE_DATA;
+
+#define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER 0x0000001D
+///
+/// The definition above is *NOT* defined in MiscSubclass specifications 0.9.
+/// It's defined for backward compatibility.
+///
+#define EFI_MISC_IPMI_INTERFACE_TYPE_DATA_RECORD_NUMBER EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER
+
+///
+/// System Power supply Record - SMBIOS Type 39
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the type of all fields are UINT32.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef struct {
+ UINT16 PowerSupplyHotReplaceable:1;
+ UINT16 PowerSupplyPresent :1;
+ UINT16 PowerSupplyUnplugged :1;
+ UINT16 InputVoltageRangeSwitch :4;
+ UINT16 PowerSupplyStatus :3;
+ UINT16 PowerSupplyType :4;
+ UINT16 Reserved :2;
+} EFI_MISC_POWER_SUPPLY_CHARACTERISTICS;
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef struct {
+ UINT16 PowerUnitGroup;
+ STRING_REF PowerSupplyLocation;
+ STRING_REF PowerSupplyDeviceName;
+ STRING_REF PowerSupplyManufacturer;
+ STRING_REF PowerSupplySerialNumber;
+ STRING_REF PowerSupplyAssetTagNumber;
+ STRING_REF PowerSupplyModelPartNumber;
+ STRING_REF PowerSupplyRevisionLevel;
+ UINT16 PowerSupplyMaxPowerCapacity;
+ EFI_MISC_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics;
+ EFI_INTER_LINK_DATA PowerSupplyInputVoltageProbeLink;
+ EFI_INTER_LINK_DATA PowerSupplyCoolingDeviceLink;
+ EFI_INTER_LINK_DATA PowerSupplyInputCurrentProbeLink;
+} EFI_MISC_SYSTEM_POWER_SUPPLY_DATA;
+
+#define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER 0x0000001E
+
+///
+/// OEM Data Record - SMBIOS Type 0x80-0xFF
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the structure name is EFI_SMBIOS_STRUCTURE_HDR.
+/// Due to this, the structure is commonly used by vendors to construct SmBios type 0x80~0xFF table,
+/// Keep it unchanged for backward compatibilty.
+///
+typedef struct {
+ UINT8 Type;
+ UINT8 Length;
+ UINT16 Handle;
+} SMBIOS_STRUCTURE_HDR;
+
+typedef struct {
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, the field name is EFI_SMBIOS_STRUCTURE_HDR.
+ /// Keep it unchanged for backward compatibilty.
+ ///
+ SMBIOS_STRUCTURE_HDR Header;
+ UINT8 RawData[1];
+} EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA;
+
+#define EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER 0x0000001F
+
+///
+/// Misc. System Event Log - SMBIOS Type 15
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 specification type 15.
+///
+#define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 specification type 15.
+///
+typedef struct {
+ UINT16 LogAreaLength;
+ UINT16 LogHeaderStartOffset;
+ UINT16 LogDataStartOffset;
+ UINT8 AccessMethod;
+ UINT8 LogStatus;
+ UINT32 LogChangeToken;
+ UINT32 AccessMethodAddress;
+ UINT8 LogHeaderFormat;
+ UINT8 NumberOfSupportedLogType;
+ UINT8 LengthOfLogDescriptor;
+} EFI_MISC_SYSTEM_EVENT_LOG_DATA;
+
+//
+// Access Method.
+// 0x00~0x04: as following definition
+// 0x05~0x7f: Available for future assignment.
+// 0x80~0xff: BIOS Vendor/OEM-specific.
+//
+#define ACCESS_INDEXIO_1INDEX8BIT_DATA8BIT 0x00
+#define ACCESS_INDEXIO_2INDEX8BIT_DATA8BIT 0X01
+#define ACCESS_INDEXIO_1INDEX16BIT_DATA8BIT 0X02
+#define ACCESS_MEMORY_MAPPED 0x03
+#define ACCESS_GPNV 0x04
+
+///
+/// Management Device Threshold Data Record - SMBIOS Type 36
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 specification type 36.
+///
+#define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER 0x00000021
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 specification type 36.
+///
+typedef struct {
+ UINT16 LowerThresNonCritical;
+ UINT16 UpperThresNonCritical;
+ UINT16 LowerThresCritical;
+ UINT16 UpperThresCritical;
+ UINT16 LowerThresNonRecover;
+ UINT16 UpperThresNonRecover;
+} EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD;
+
+//
+// Declare the following strutures alias to use them more conviniently.
+//
+typedef EFI_MISC_LAST_PCI_BUS_DATA EFI_MISC_LAST_PCI_BUS;
+typedef EFI_MISC_BIOS_VENDOR_DATA EFI_MISC_BIOS_VENDOR;
+typedef EFI_MISC_SYSTEM_MANUFACTURER_DATA EFI_MISC_SYSTEM_MANUFACTURER;
+typedef EFI_MISC_BASE_BOARD_MANUFACTURER_DATA EFI_MISC_BASE_BOARD_MANUFACTURER;
+typedef EFI_MISC_CHASSIS_MANUFACTURER_DATA EFI_MISC_CHASSIS_MANUFACTURER;
+typedef EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR;
+typedef EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA EFI_MISC_SYSTEM_SLOT_DESIGNATION;
+typedef EFI_MISC_ONBOARD_DEVICE_DATA EFI_MISC_ONBOARD_DEVICE;
+typedef EFI_MISC_POINTING_DEVICE_TYPE_DATA EFI_MISC_ONBOARD_DEVICE_TYPE_DATA;
+typedef EFI_MISC_OEM_STRING_DATA EFI_MISC_OEM_STRING;
+typedef EFI_MISC_SYSTEM_OPTION_STRING_DATA EFI_MISC_SYSTEM_OPTION_STRING;
+typedef EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES;
+typedef EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA EFI_MISC_SYSTEM_LANGUAGE_STRING;
+typedef EFI_MISC_SYSTEM_EVENT_LOG_DATA EFI_MISC_SYSTEM_EVENT_LOG;
+typedef EFI_MISC_BIS_ENTRY_POINT_DATA EFI_MISC_BIS_ENTRY_POINT;
+typedef EFI_MISC_BOOT_INFORMATION_STATUS_DATA EFI_MISC_BOOT_INFORMATION_STATUS;
+typedef EFI_MISC_SYSTEM_POWER_SUPPLY_DATA EFI_MISC_SYSTEM_POWER_SUPPLY;
+typedef EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION;
+typedef EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA EFI_MISC_SCHEDULED_POWER_ON_MONTH;
+typedef EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA EFI_MISC_VOLTAGE_PROBE_DESCRIPTION;
+typedef EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA EFI_MISC_COOLING_DEVICE_TEMP_LINK;
+typedef EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION;
+typedef EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA
+ EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION;
+typedef EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION;
+typedef EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION;
+typedef EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA
+ EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It is implementation-specific to simplify the code logic.
+///
+typedef union {
+ EFI_MISC_LAST_PCI_BUS_DATA LastPciBus;
+ EFI_MISC_BIOS_VENDOR_DATA MiscBiosVendor;
+ EFI_MISC_SYSTEM_MANUFACTURER_DATA MiscSystemManufacturer;
+ EFI_MISC_BASE_BOARD_MANUFACTURER_DATA MiscBaseBoardManufacturer;
+ EFI_MISC_CHASSIS_MANUFACTURER_DATA MiscChassisManufacturer;
+ EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA MiscPortInternalConnectorDesignator;
+ EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA MiscSystemSlotDesignation;
+ EFI_MISC_ONBOARD_DEVICE_DATA MiscOnboardDevice;
+ EFI_MISC_OEM_STRING_DATA MiscOemString;
+ EFI_MISC_SYSTEM_OPTION_STRING_DATA MiscOptionString;
+ EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA NumberOfInstallableLanguages;
+ EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA MiscSystemLanguageString;
+ EFI_MISC_SYSTEM_EVENT_LOG_DATA MiscSystemEventLog;
+ EFI_MISC_GROUP_NAME_DATA MiscGroupNameData;
+ EFI_MISC_GROUP_ITEM_SET_DATA MiscGroupItemSetData;
+ EFI_MISC_POINTING_DEVICE_TYPE_DATA MiscPointingDeviceTypeData;
+ EFI_MISC_RESET_CAPABILITIES_DATA MiscResetCapablilitiesData;
+ EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA MiscHardwareSecuritySettingsData;
+ EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA MiscScheduledPowerOnMonthData;
+ EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA MiscVoltagePorbeDescriptionData;
+ EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA MiscCoolingDeviceTempLinkData;
+ EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA MiscTemperatureProbeDescriptionData;
+ EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA MiscElectricalCurrentProbeDescriptionData;
+ EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA
+ MiscRemoteAccessManufacturerDescriptionData;
+ EFI_MISC_BIS_ENTRY_POINT_DATA MiscBisEntryPoint;
+ EFI_MISC_BOOT_INFORMATION_STATUS_DATA MiscBootInformationStatus;
+ EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA MiscMangementDeviceDescriptionData;
+ EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA
+ MiscmangementDeviceComponentDescriptionData;
+ EFI_MISC_IPMI_INTERFACE_TYPE_DATA MiscIpmiInterfaceTypeData;
+ EFI_MISC_SYSTEM_POWER_SUPPLY_DATA MiscPowerSupplyInfo;
+ EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA MiscSmbiosStructEncapsulation;
+ EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD MiscManagementDeviceThreshold;
+} EFI_MISC_SUBCLASS_RECORDS;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It is implementation-specific to simplify the code logic.
+///
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER Header;
+ EFI_MISC_SUBCLASS_RECORDS Record;
+} EFI_MISC_SUBCLASS_DRIVER_DATA;
+#pragma pack()
+
+///
+/// Inconsistent with specification here:
+/// In DataHubSubclass specification 0.9 page 16, the following symbol is NOT defined.
+/// But value is meaningful, 0 means Reserved.
+///
+#define EFI_SUBCLASS_INSTANCE_RESERVED 0
+///
+/// Inconsistent with specification here:
+/// In DataHubSubclass specification 0.9 page 16, the following symbol is NOT defined.
+/// But value is meaningful, -1 means Not Applicable.
+///
+#define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF
+
+#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDeviceFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDeviceFunction.c
index 3872312c30..3e74ec31db 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDeviceFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDeviceFunction.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscMemoryDeviceFunction.c
@@ -22,8 +19,6 @@ Abstract:
#include "CommonHeader.h"
#include "MiscSubclassDriver.h"
-#include <Protocol/DataHub.h>
-#include <Guid/DataHubRecords.h>
#include <Protocol/MemInfo.h>
@@ -46,13 +41,6 @@ enum {
};
-typedef struct {
- EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress;
- EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress;
- EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
- UINT16 MemoryArrayPartitionWidth;
-} EFI_MEMORY_ARRAY_START_ADDRESS;
-
/**
This function makes boot time changes to the contents of the
MiscBiosVendor (Type 0).
@@ -108,6 +96,7 @@ MISC_SMBIOS_TABLE_FUNCTION( MiscMemoryDevice )
EFI_STATUS Status;
STRING_REF TokenToGet;
SMBIOS_TABLE_TYPE17 *SmbiosRecord;
+ SMBIOS_TABLE_TYPE19 *SmbiosRecord19;
EFI_SMBIOS_HANDLE SmbiosHandle;
EFI_MEMORY_ARRAY_LINK_DATA *ForType17InputData;
UINT16 DdrFreq=0;
@@ -117,6 +106,7 @@ MISC_SMBIOS_TABLE_FUNCTION( MiscMemoryDevice )
UINT8 Dimm;
UINT8 NumSlots;
+ UINT64 TotalMemorySize;
STRING_REF DevLocator[] = {
STRING_TOKEN(STR_MISC_MEM_DEV_LOCATOR0), STRING_TOKEN(STR_MISC_MEM_DEV_LOCATOR1)
};
@@ -183,137 +173,193 @@ MISC_SMBIOS_TABLE_FUNCTION( MiscMemoryDevice )
break;
}
- for (Dimm = 0; Dimm < NumSlots; Dimm++) {
- //
- // Memory Device Locator
- //
- TokenToGet = DevLocator[Dimm];
- MemDevice = SmbiosMiscGetString (TokenToGet);
- MemDeviceStrLen = StrLen(MemDevice);
- if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- TokenToGet = DevLocator[Dimm];
- MemDevice = SmbiosMiscGetString (TokenToGet);
- MemDeviceStrLen = StrLen(MemDevice);
- if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Memory Bank Locator
- //
- TokenToGet = BankLocator[Dimm];
- MemBankLocator = SmbiosMiscGetString (TokenToGet);
- MemBankLocatorStrLen = StrLen(MemBankLocator);
- if (MemBankLocatorStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Memory Manufacturer
- //
- TokenToGet = STRING_TOKEN (STR_MISC_MEM_MANUFACTURER);
- MemManufacturer = SmbiosMiscGetString (TokenToGet);
- MemManufacturerStrLen = StrLen(MemManufacturer);
- if (MemManufacturerStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Memory Serial Number
- //
- TokenToGet = STRING_TOKEN (STR_MISC_MEM_SERIAL_NO);
- MemSerialNumber = SmbiosMiscGetString (TokenToGet);
- MemSerialNumberStrLen = StrLen(MemSerialNumber);
- if (MemSerialNumberStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Memory Asset Tag Number
- //
- TokenToGet = STRING_TOKEN (STR_MISC_MEM_ASSET_TAG);
- MemAssetTag = SmbiosMiscGetString (TokenToGet);
- MemAssetTagStrLen = StrLen(MemAssetTag);
- if (MemAssetTagStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Memory Part Number
- //
- TokenToGet = STRING_TOKEN (STR_MISC_MEM_PART_NUMBER);
- MemPartNumber = SmbiosMiscGetString (TokenToGet);
- MemPartNumberStrLen = StrLen(MemPartNumber);
- if (MemPartNumberStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Two zeros following the last string.
- //
- SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE17) + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1);
- ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE17) + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1);
-
- SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_MEMORY_DEVICE;
- SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE17);
-
- //
- // Make handle chosen by smbios protocol.add automatically.
- //
- SmbiosRecord->Hdr.Handle = 0;
-
- //
- // Memory Array Handle will be the 3rd optional string following the formatted structure.
- //
GetType16Hndl( Smbios, &Type16Handle);
- SmbiosRecord->MemoryArrayHandle = Type16Handle;
+ TotalMemorySize = 0;
+ for (Dimm = 0; Dimm < NumSlots; Dimm++) {
+ //
+ // Memory Device Locator
+ //
+ TokenToGet = DevLocator[Dimm];
+ MemDevice = SmbiosMiscGetString (TokenToGet);
+ MemDeviceStrLen = StrLen(MemDevice);
+ if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
- //
- // Memory Size
- //
- if ((MemInfoHob->MemInfoData.dimmSize[Dimm])!=0){
- SmbiosRecord->TotalWidth = 32;
- SmbiosRecord->DataWidth = 32;
- SmbiosRecord->Size = MemInfoHob->MemInfoData.dimmSize[Dimm];
- SmbiosRecord->Speed = DdrFreq;
- SmbiosRecord->ConfiguredMemoryClockSpeed = DdrFreq;
- SmbiosRecord->FormFactor = EfiMemoryFormFactorDimm;
- }
+ TokenToGet = DevLocator[Dimm];
+ MemDevice = SmbiosMiscGetString (TokenToGet);
+ MemDeviceStrLen = StrLen(MemDevice);
+ if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Memory Bank Locator
+ //
+ TokenToGet = BankLocator[Dimm];
+ MemBankLocator = SmbiosMiscGetString (TokenToGet);
+ MemBankLocatorStrLen = StrLen(MemBankLocator);
+ if (MemBankLocatorStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Memory Manufacturer
+ //
+ TokenToGet = STRING_TOKEN (STR_MISC_MEM_MANUFACTURER);
+ MemManufacturer = SmbiosMiscGetString (TokenToGet);
+ MemManufacturerStrLen = StrLen(MemManufacturer);
+ if (MemManufacturerStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Memory Serial Number
+ //
+ TokenToGet = STRING_TOKEN (STR_MISC_MEM_SERIAL_NO);
+ MemSerialNumber = SmbiosMiscGetString (TokenToGet);
+ MemSerialNumberStrLen = StrLen(MemSerialNumber);
+ if (MemSerialNumberStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Memory Asset Tag Number
+ //
+ TokenToGet = STRING_TOKEN (STR_MISC_MEM_ASSET_TAG);
+ MemAssetTag = SmbiosMiscGetString (TokenToGet);
+ MemAssetTagStrLen = StrLen(MemAssetTag);
+ if (MemAssetTagStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Memory Part Number
+ //
+ TokenToGet = STRING_TOKEN (STR_MISC_MEM_PART_NUMBER);
+ MemPartNumber = SmbiosMiscGetString (TokenToGet);
+ MemPartNumberStrLen = StrLen(MemPartNumber);
+ if (MemPartNumberStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Two zeros following the last string.
+ //
+ SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE17) + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1);
+ ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE17) + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1);
+
+ SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_MEMORY_DEVICE;
+ SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE17);
+
+ //
+ // Make handle chosen by smbios protocol.add automatically.
+ //
+ SmbiosRecord->Hdr.Handle = 0;
+
+ //
+ // Memory Array Handle will be the 3rd optional string following the formatted structure.
+ //
+ SmbiosRecord->MemoryArrayHandle = Type16Handle;
+
+ //
+ // Memory Size
+ //
+ if ((MemInfoHob->MemInfoData.dimmSize[Dimm])!=0){
+ SmbiosRecord->TotalWidth = 32;
+ SmbiosRecord->DataWidth = 32;
+ SmbiosRecord->Size = MemInfoHob->MemInfoData.dimmSize[Dimm];
+ SmbiosRecord->Speed = DdrFreq;
+ SmbiosRecord->ConfiguredMemoryClockSpeed = DdrFreq;
+ SmbiosRecord->FormFactor = EfiMemoryFormFactorDimm;
+ }
- SmbiosRecord->DeviceSet =(UINT8) ForType17InputData->MemoryDeviceSet;
- SmbiosRecord->DeviceLocator= 1;
- SmbiosRecord->BankLocator = 2;
+ SmbiosRecord->DeviceSet =(UINT8) ForType17InputData->MemoryDeviceSet;
+ SmbiosRecord->DeviceLocator= 1;
+ SmbiosRecord->BankLocator = 2;
- SmbiosRecord->Manufacturer = 3;
- SmbiosRecord->SerialNumber= 4;
- SmbiosRecord->AssetTag= 5;
- SmbiosRecord->PartNumber= 6;
- SmbiosRecord->Attributes = (UINT8) ForType17InputData->MemoryState;
- SmbiosRecord->MemoryType = MemoryType;
+ SmbiosRecord->Manufacturer = 3;
+ SmbiosRecord->SerialNumber= 4;
+ SmbiosRecord->AssetTag= 5;
+ SmbiosRecord->PartNumber= 6;
+ SmbiosRecord->Attributes = (UINT8) ForType17InputData->MemoryState;
+ SmbiosRecord->MemoryType = MemoryType;
- OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
- UnicodeStrToAsciiStr(MemDevice, OptionalStrStart);
- UnicodeStrToAsciiStr(MemBankLocator, OptionalStrStart + MemDeviceStrLen + 1);
- UnicodeStrToAsciiStr(MemManufacturer, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1);
- UnicodeStrToAsciiStr(MemSerialNumber, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1);
- UnicodeStrToAsciiStr(MemAssetTag, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1);
- UnicodeStrToAsciiStr(MemPartNumber, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1+ MemAssetTagStrLen+1 );
+ OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
+ UnicodeStrToAsciiStr(MemDevice, OptionalStrStart);
+ UnicodeStrToAsciiStr(MemBankLocator, OptionalStrStart + MemDeviceStrLen + 1);
+ UnicodeStrToAsciiStr(MemManufacturer, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1);
+ UnicodeStrToAsciiStr(MemSerialNumber, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1);
+ UnicodeStrToAsciiStr(MemAssetTag, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1);
+ UnicodeStrToAsciiStr(MemPartNumber, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1+ MemAssetTagStrLen+1 );
+
+ //
+ // Now we have got the full smbios record, call smbios protocol to add this record.
+ //
+ SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
+ Status = Smbios-> Add(
+ Smbios,
+ NULL,
+ &SmbiosHandle,
+ (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
+ );
+
+ if ((SmbiosRecord->Size & BIT15) != 0) {
+ //
+ // Size is in KB
+ //
+ TotalMemorySize = TotalMemorySize + LShiftU64 (SmbiosRecord->Size, 10);
+ } else {
+ //
+ // Size is in MB
+ //
+ TotalMemorySize = TotalMemorySize + LShiftU64 (SmbiosRecord->Size, 20);
+ }
+
+ FreePool(SmbiosRecord);
+ }
+
+ //
+ // Allocate and zero SMBIOS TYPE 19 Record
+ //
+ SmbiosRecord19 = AllocateZeroPool (sizeof (SMBIOS_TABLE_TYPE19));
+ ASSERT (SmbiosRecord19 != NULL);
+
+ //
+ // Fill in SMBIOS type 19 information
+ //
+ SmbiosRecord19->Hdr.Type = SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS;
+ SmbiosRecord19->Hdr.Length = (UINT8) sizeof (SMBIOS_TABLE_TYPE19);
+ SmbiosRecord19->Hdr.Handle = 0;
+
+ SmbiosRecord19->MemoryArrayHandle = Type16Handle;
+ SmbiosRecord19->PartitionWidth = NumSlots;
+ if (TotalMemorySize <= SIZE_4TB) {
+ SmbiosRecord19->StartingAddress = 0x0;
+ //
+ // Convert bytes to KB
+ //
+ SmbiosRecord19->EndingAddress = (UINT32)RShiftU64 (TotalMemorySize, 10) - 1;
+ SmbiosRecord19->ExtendedStartingAddress = 0;
+ SmbiosRecord19->ExtendedEndingAddress = 0;
+ } else {
+ SmbiosRecord19->StartingAddress = 0xffffffff;
+ SmbiosRecord19->EndingAddress = 0xffffffff;
+ SmbiosRecord19->ExtendedStartingAddress = 0;
+ SmbiosRecord19->ExtendedEndingAddress = TotalMemorySize - 1;
+ }
//
- // Now we have got the full smbios record, call smbios protocol to add this record.
+ // Add SMBIOS type 19 record to SMBIOS table.
//
SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
- Status = Smbios-> Add(
- Smbios,
- NULL,
- &SmbiosHandle,
- (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
- );
- FreePool(SmbiosRecord);
- }
+ Smbios->Add(
+ Smbios,
+ NULL,
+ &SmbiosHandle,
+ (EFI_SMBIOS_TABLE_HEADER *)SmbiosRecord19
+ );
+
return Status;
}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
index 2f25ab802b..97a782e362 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
@@ -17,7 +17,6 @@ Abstract:
#include "CommonHeader.h"
#include "MiscSubclassDriver.h"
-#include <Protocol/DataHub.h>
#include <Library/HiiLib.h>
#include <Library/PrintLib.h>
#include <Protocol/PciRootBridgeIo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheData.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheData.c
index 6af7f56107..44f2530ac3 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheData.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheData.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2012 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscBiosProcessorCache.c
@@ -28,6 +25,4 @@ Abstract:
//
// Static (possibly build generated) Processor cache data.
//
-MISC_SMBIOS_TABLE_DATA(EFI_CACHE_VARIABLE_RECORD, MiscProcessorCache) = {
-0
-};
+MISC_SMBIOS_TABLE_DATA(UINTN, MiscProcessorCache) = 0;
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheFunction.c
index ca121525a0..c64e87e20b 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheFunction.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscProcessorCacheFunction.c
@@ -20,170 +17,144 @@ Abstract:
--*/
#include "CommonHeader.h"
#include "MiscSubclassDriver.h"
-#include <Protocol/DataHub.h>
-#include <Guid/DataHubRecords.h>
-
-UINT32
-ConvertBase2ToRaw (
- IN EFI_EXP_BASE2_DATA *Data)
-{
- UINTN Index;
- UINT32 RawData;
-
- RawData = Data->Value;
- for (Index = 0; Index < (UINTN) Data->Exponent; Index++) {
- RawData <<= 1;
- }
-
- return RawData;
-}
-
+#include <Register/Cpuid.h>
MISC_SMBIOS_TABLE_FUNCTION(MiscProcessorCache)
{
EFI_SMBIOS_HANDLE SmbiosHandle;
- SMBIOS_TABLE_TYPE7 *SmbiosRecordL1;
- SMBIOS_TABLE_TYPE7 *SmbiosRecordL2;
+ SMBIOS_TABLE_TYPE7 *SmbiosRecord;
EFI_CACHE_SRAM_TYPE_DATA CacheSramType;
CHAR16 *SocketDesignation;
CHAR8 *OptionalStrStart;
UINTN SocketStrLen;
STRING_REF TokenToGet;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- UINT64 MonotonicCount;
- EFI_DATA_RECORD_HEADER *Record;
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;
- UINT8 *SrcData;
- EFI_STATUS Status;
+ UINT32 SubIndex;
+ CPUID_CACHE_PARAMS_EAX CacheParamsEax;
+ CPUID_CACHE_PARAMS_EBX CacheParamsEbx;
+ UINT32 RegisterEcx;
+ CPUID_CACHE_PARAMS_EDX CacheParamsEdx;
+ UINT8 SystemCacheType;
+ UINTN Size;
//
- // Memory Device LOcator
+ // Memory Device Locator
//
- DEBUG ((EFI_D_ERROR, "type 7\n"));
-
TokenToGet = STRING_TOKEN (STR_SOCKET_DESIGNATION);
SocketDesignation = SmbiosMiscGetString (TokenToGet);
SocketStrLen = StrLen(SocketDesignation);
if (SocketStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
+ return EFI_UNSUPPORTED;
}
- SmbiosRecordL1 = AllocatePool(sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1);
- ASSERT (SmbiosRecordL1 != NULL);
- ZeroMem(SmbiosRecordL1, sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1);
-
- SmbiosRecordL2 = AllocatePool(sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1);
- ASSERT (SmbiosRecordL2 != NULL);
- ZeroMem(SmbiosRecordL2, sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1);
-
- //
- // Get the Data Hub Protocol. Assume only one instance
- //
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (VOID **)&DataHub
- );
- ASSERT_EFI_ERROR(Status);
-
- MonotonicCount = 0;
- Record = NULL;
-
- do {
- Status = DataHub->GetNextRecord (
- DataHub,
- &MonotonicCount,
- NULL,
- &Record
- );
- if (!EFI_ERROR(Status)) {
- if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1);
- SrcData = (UINT8 *)(DataHeader + 1);
- if (CompareGuid(&Record->DataRecordGuid, &gEfiCacheSubClassGuid) && (DataHeader->RecordType == CacheSizeRecordType)) {
- if (DataHeader->SubInstance == EFI_CACHE_L1) {
- SmbiosRecordL1->InstalledSize += (UINT16) (ConvertBase2ToRaw((EFI_EXP_BASE2_DATA *)SrcData) >> 10);
- SmbiosRecordL1->MaximumCacheSize = SmbiosRecordL1->InstalledSize;
- }
- else if (DataHeader->SubInstance == EFI_CACHE_L2) {
- SmbiosRecordL2->InstalledSize += (UINT16) (ConvertBase2ToRaw((EFI_EXP_BASE2_DATA *)SrcData) >> 10);
- SmbiosRecordL2->MaximumCacheSize = SmbiosRecordL2->InstalledSize;
- } else {
- continue;
- }
- }
- }
- }
- } while (!EFI_ERROR(Status) && (MonotonicCount != 0));
-
- //
- //Filling SMBIOS type 7 information for different cache levels.
- //
-
- SmbiosRecordL1->Hdr.Type = EFI_SMBIOS_TYPE_CACHE_INFORMATION;
- SmbiosRecordL1->Hdr.Length = (UINT8) sizeof (SMBIOS_TABLE_TYPE7);
- SmbiosRecordL1->Hdr.Handle = 0;
-
- SmbiosRecordL1->Associativity = CacheAssociativity8Way;
- SmbiosRecordL1->SystemCacheType = CacheTypeUnknown;
- SmbiosRecordL1->SocketDesignation = 0x01;
- SmbiosRecordL1->CacheSpeed = 0;
- SmbiosRecordL1->CacheConfiguration = 0x0180;
- ZeroMem (&CacheSramType, sizeof (EFI_CACHE_SRAM_TYPE_DATA));
- CacheSramType.Synchronous = 1;
- CopyMem(&SmbiosRecordL1->SupportedSRAMType, &CacheSramType, 2);
- CopyMem(&SmbiosRecordL1->CurrentSRAMType, &CacheSramType, 2);
- SmbiosRecordL1->ErrorCorrectionType = EfiCacheErrorSingleBit;
-
-
- SmbiosRecordL2->Hdr.Type = EFI_SMBIOS_TYPE_CACHE_INFORMATION;
- SmbiosRecordL2->Hdr.Length = (UINT8) sizeof (SMBIOS_TABLE_TYPE7);
- SmbiosRecordL2->Hdr.Handle = 0;
-
- SmbiosRecordL2->Associativity = CacheAssociativity16Way;
- SmbiosRecordL2->SystemCacheType = CacheTypeInstruction;
- SmbiosRecordL2->SocketDesignation = 0x01;
- SmbiosRecordL2->CacheSpeed = 0;
- SmbiosRecordL2->CacheConfiguration = 0x0281;
- ZeroMem (&CacheSramType, sizeof (EFI_CACHE_SRAM_TYPE_DATA));
- CacheSramType.Synchronous = 1;
- CopyMem(&SmbiosRecordL2->SupportedSRAMType, &CacheSramType, 2);
- CopyMem(&SmbiosRecordL2->CurrentSRAMType, &CacheSramType, 2);
- SmbiosRecordL2->ErrorCorrectionType = EfiCacheErrorSingleBit;
-
-
-
- //
- //Adding SMBIOS type 7 records to SMBIOS table.
- //
- SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
- OptionalStrStart = (CHAR8 *)(SmbiosRecordL1 + 1);
- UnicodeStrToAsciiStr(SocketDesignation, OptionalStrStart);
-
- Smbios-> Add(
- Smbios,
- NULL,
- &SmbiosHandle,
- (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecordL1
- );
-
- //
- //VLV2 incorporates two SLM modules (quad cores) in the SoC. 2 cores share BIU/L2 cache
- //
- SmbiosRecordL2->InstalledSize = (SmbiosRecordL2->InstalledSize)/2;
- SmbiosRecordL2->MaximumCacheSize = SmbiosRecordL2->InstalledSize;
- SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
-
- OptionalStrStart = (CHAR8 *)(SmbiosRecordL2 + 1);
- UnicodeStrToAsciiStr(SocketDesignation, OptionalStrStart);
-
- Smbios-> Add(
- Smbios,
- NULL,
- &SmbiosHandle,
- (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecordL2
- );
-
+ //
+ // Retrieve cache level information using CPUID
+ //
+ for (SubIndex = 0; ; SubIndex++) {
+ AsmCpuidEx (
+ CPUID_CACHE_PARAMS,
+ SubIndex,
+ &CacheParamsEax.Uint32,
+ &CacheParamsEbx.Uint32,
+ &RegisterEcx,
+ &CacheParamsEdx.Uint32
+ );
+ //
+ // Terminate loop when CacheType is CPUID_CACHE_PARAMS_CACHE_TYPE_NULL
+ //
+ if (CacheParamsEax.Bits.CacheType == CPUID_CACHE_PARAMS_CACHE_TYPE_NULL) {
+ break;
+ }
+
+ //
+ // Allocate and zero SMBIOS TYPE 7 Record
+ //
+ SmbiosRecord = AllocateZeroPool (sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1);
+ ASSERT (SmbiosRecord != NULL);
+
+ //
+ // Compute cache size in bytes
+ //
+ Size = (CacheParamsEbx.Bits.Ways + 1) *
+ (CacheParamsEbx.Bits.LinePartitions + 1) *
+ (CacheParamsEbx.Bits.LineSize + 1) *
+ (RegisterEcx + 1);
+ DEBUG ((DEBUG_INFO, "MiscProcessorCache(): Cache Type = %d Cache Level = %d Size = %x\n", CacheParamsEax.Bits.CacheType, CacheParamsEax.Bits.CacheLevel, Size));
+
+ //
+ // Determine SMBIOS SystemCacheType
+ //
+ switch (CacheParamsEax.Bits.CacheType) {
+ case 1:
+ SystemCacheType = CacheTypeData;
+ break;
+ case 2:
+ SystemCacheType = CacheTypeInstruction;
+ break;
+ case 3:
+ SystemCacheType = CacheTypeUnified;
+ break;
+ default:
+ SystemCacheType = CacheTypeUnknown;
+ }
+
+ //
+ // Update cache sizes in KB
+ //
+ switch (CacheParamsEax.Bits.CacheLevel) {
+ case 1:
+ SmbiosRecord->InstalledSize = (UINT16)(Size >> 10);
+ SmbiosRecord->MaximumCacheSize = SmbiosRecord->InstalledSize;
+ SmbiosRecord->SystemCacheType = SystemCacheType;
+ SmbiosRecord->Associativity = CacheAssociativity8Way;
+ SmbiosRecord->CacheConfiguration = 0x0180;
+ break;
+ case 2:
+ SmbiosRecord->InstalledSize = (UINT16)(Size >> 10);
+ SmbiosRecord->MaximumCacheSize = SmbiosRecord->InstalledSize;
+ SmbiosRecord->SystemCacheType = SystemCacheType;
+ SmbiosRecord->Associativity = CacheAssociativity16Way;
+ SmbiosRecord->CacheConfiguration = 0x0281;
+ //
+ //VLV2 incorporates two SLM modules (quad cores) in the SoC.
+ // 2 cores share BIU/L2 cache
+ //
+ SmbiosRecord->InstalledSize = SmbiosRecord->InstalledSize / 2;
+ SmbiosRecord->MaximumCacheSize = SmbiosRecord->InstalledSize;
+ break;
+ default:
+ DEBUG ((DEBUG_ERROR, "MiscProcessorCache(): Unexpected cache level %d\n", CacheParamsEax.Bits.CacheLevel));
+ break;
+ }
+
+ //
+ //Filling SMBIOS type 7 information for different cache levels.
+ //
+ SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_CACHE_INFORMATION;
+ SmbiosRecord->Hdr.Length = (UINT8) sizeof (SMBIOS_TABLE_TYPE7);
+ SmbiosRecord->Hdr.Handle = 0;
+
+ SmbiosRecord->SocketDesignation = 0x01;
+ SmbiosRecord->CacheSpeed = 0;
+ ZeroMem (&CacheSramType, sizeof (EFI_CACHE_SRAM_TYPE_DATA));
+ CacheSramType.Synchronous = 1;
+ CopyMem(&SmbiosRecord->SupportedSRAMType, &CacheSramType, 2);
+ CopyMem(&SmbiosRecord->CurrentSRAMType, &CacheSramType, 2);
+ SmbiosRecord->ErrorCorrectionType = EfiCacheErrorSingleBit;
+
+ //
+ // Adding SMBIOS type 7 records to SMBIOS table.
+ //
+ SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
+ OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
+ UnicodeStrToAsciiStr(SocketDesignation, OptionalStrStart);
+
+ Smbios->Add(
+ Smbios,
+ NULL,
+ &SmbiosHandle,
+ (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
+ );
+ }
return EFI_SUCCESS;
}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorInformationFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorInformationFunction.c
index e01693ede7..e71a03ceac 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorInformationFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorInformationFunction.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscProcessorInformationFunction.c
@@ -23,9 +20,9 @@ Abstract:
#include "MiscSubclassDriver.h"
#include <Protocol/MpService.h>
-#include <Protocol/DataHub.h>
-#include <Guid/DataHubRecords.h>
#include <Library/CpuIA32.h>
+#include <Library/TimerLib.h>
+#include <Register/Cpuid.h>
#define EfiProcessorFamilyIntelAtomProcessor 0x2B
@@ -75,33 +72,6 @@ GetCacheHandle (
*Handle = 0xFFFF;
}
-
-/**
- This function makes boot time changes to the contents of the
- MiscProcessorInformation (Type 4).
-
- @param RecordData Pointer to copy of RecordData from the Data Table.
-
- @retval EFI_SUCCESS All parameters were valid.
- @retval EFI_UNSUPPORTED Unexpected RecordType value.
- @retval EFI_INVALID_PARAMETER Invalid parameter was found.
-
-**/
-UINT32
-ConvertBase10ToRaw (
- IN EFI_EXP_BASE10_DATA *Data)
-{
- UINTN Index;
- UINT32 RawData;
-
- RawData = Data->Value;
- for (Index = 0; Index < (UINTN) Data->Exponent; Index++) {
- RawData *= 10;
- }
-
- return RawData;
-}
-
#define BSEL_CR_OVERCLOCK_CONTROL 0xCD
#define FUSE_BSEL_MASK 0x03
@@ -137,6 +107,96 @@ DetermineiFsbFromMsr (
}
+CHAR16 *
+CpuidSocVendorBrandString (
+ VOID
+ )
+{
+ UINT32 MaximumExtendedFunction;
+ //
+ // Array to store brand string from 3 brand string leafs with
+ // 4 32-bit brand string values per leaf and an extra value to
+ // null terminate the string.
+ //
+ UINT32 BrandString[3 * 4 + 1];
+ CHAR8 *AsciiBrandString;
+ CHAR16 *UnicodeBrandString;
+ UINTN Length;
+
+ AsmCpuid (CPUID_EXTENDED_FUNCTION, &MaximumExtendedFunction, NULL, NULL, NULL);
+
+ ZeroMem (&BrandString, sizeof (BrandString));
+ if (CPUID_BRAND_STRING1 <= MaximumExtendedFunction) {
+ AsmCpuid (
+ CPUID_BRAND_STRING1,
+ &BrandString[0],
+ &BrandString[1],
+ &BrandString[2],
+ &BrandString[3]
+ );
+ }
+ if (CPUID_BRAND_STRING2 <= MaximumExtendedFunction) {
+ AsmCpuid (
+ CPUID_BRAND_STRING2,
+ &BrandString[4],
+ &BrandString[5],
+ &BrandString[6],
+ &BrandString[7]
+ );
+ }
+ if (CPUID_BRAND_STRING3 <= MaximumExtendedFunction) {
+ AsmCpuid (
+ CPUID_BRAND_STRING3,
+ &BrandString[8],
+ &BrandString[9],
+ &BrandString[10],
+ &BrandString[11]
+ );
+ }
+
+ //
+ // Skip spaces at the beginning of the brand string
+ //
+ for (AsciiBrandString = (CHAR8 *)BrandString; *AsciiBrandString == ' '; AsciiBrandString++);
+
+ DEBUG ((DEBUG_INFO, "Processor Brand String = %a\n", AsciiBrandString));
+
+ //
+ // Convert ASCII brand string to an allocated Unicode brand string
+ //
+ Length = AsciiStrLen (AsciiBrandString) + 1;
+ UnicodeBrandString = AllocatePool (Length * sizeof (CHAR16));
+ AsciiStrToUnicodeStrS (AsciiBrandString, UnicodeBrandString, Length);
+
+ DEBUG ((DEBUG_INFO, "Processor Unicode Brand String = %s\n", UnicodeBrandString));
+
+ return UnicodeBrandString;
+}
+
+UINT64
+MeasureTscFrequency (
+ VOID
+ )
+{
+ EFI_TPL CurrentTpl;
+ UINT64 BeginValue;
+ UINT64 EndValue;
+ UINT64 Frequency;
+
+ //
+ // Wait for 10000us = 10ms for the calculation
+ // It needs a precise timer to calculate the ticks
+ //
+ CurrentTpl = gBS->RaiseTPL (TPL_HIGH_LEVEL);
+ BeginValue = AsmReadTsc ();
+ MicroSecondDelay (10000);
+ EndValue = AsmReadTsc ();
+ gBS->RestoreTPL (CurrentTpl);
+ Frequency = MultU64x32 (EndValue - BeginValue, 1000);
+ Frequency = DivU64x32 (Frequency, 10);
+ return Frequency;
+}
+
MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
{
CHAR8 *OptionalStrStart;
@@ -152,7 +212,7 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
UINTN SocketStrLen=0;
UINTN AssetTagStrLen=0;
UINTN PartNumberStrLen=0;
- UINTN ProcessorVoltage=0xAE;
+ UINTN ProcessorVoltage=(BIT7 | 9);
UINT32 Eax01;
UINT32 Ebx01;
UINT32 Ecx01;
@@ -169,17 +229,8 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
UINTN NumberOfProcessors=0;
UINT64 Frequency = 0;
EFI_MP_SERVICES_PROTOCOL *MpService;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- UINT64 MonotonicCount;
- EFI_DATA_RECORD_HEADER *Record;
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;
- UINT8 *SrcData;
- EFI_PROCESSOR_VERSION_DATA *ProcessorVersion;
- CHAR16 *NewStringToken;
- STRING_REF TokenToUpdate;
PROCESSOR_ID_DATA *ProcessorId = NULL;
-
//
// First check for invalid parameters.
//
@@ -194,59 +245,6 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
return EFI_INVALID_PARAMETER;
}
- //
- // Get the Data Hub Protocol. Assume only one instance
- //
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (VOID **)&DataHub
- );
- ASSERT_EFI_ERROR(Status);
-
- MonotonicCount = 0;
- Record = NULL;
-
- do {
- Status = DataHub->GetNextRecord (
- DataHub,
- &MonotonicCount,
- NULL,
- &Record
- );
- if (!EFI_ERROR(Status)) {
- if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {
-
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1);
- SrcData = (UINT8 *)(DataHeader + 1);
-
- //
- // Processor
- //
- if (CompareGuid(&Record->DataRecordGuid, &gEfiProcessorSubClassGuid)) {
- CopyMem (&mProcessorProducerGuid, &Record->ProducerName, sizeof(EFI_GUID));
- switch (DataHeader->RecordType) {
- case ProcessorVoltageRecordType:
- ProcessorVoltage = (((EFI_EXP_BASE10_DATA *)SrcData)->Value)/100 + 0x80;
- break;
- case ProcessorCoreFrequencyRecordType:
- DEBUG ((EFI_D_ERROR, "ProcessorCoreFrequencyRecordType SrcData1 =%d\n", ConvertBase10ToRaw((EFI_EXP_BASE10_DATA *)SrcData)/1000000));
- Frequency = (ConvertBase10ToRaw((EFI_EXP_BASE10_DATA *)SrcData)/1000000);
- break;
- case ProcessorVersionRecordType:
- ProcessorVersion = (EFI_PROCESSOR_VERSION_DATA *)SrcData;
- NewStringToken = HiiGetPackageString(&mProcessorProducerGuid, *ProcessorVersion, NULL);
- TokenToUpdate = (STRING_REF)STR_MISC_PROCESSOR_VERSION;
- HiiSetString(mHiiHandle, TokenToUpdate, NewStringToken, NULL);
- break;
- default:
- break;
- }
- }
- }
- }
- } while (!EFI_ERROR(Status) && (MonotonicCount != 0));
-
//
// Token to get for Socket Name
//
@@ -270,8 +268,7 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
//
// Token to get for Processor Version
//
- TokenToGet = STRING_TOKEN (STR_MISC_PROCESSOR_VERSION);
- Version = SmbiosMiscGetString (TokenToGet);
+ Version = CpuidSocVendorBrandString ();
VersionStrLen = StrLen(Version);
if (VersionStrLen > SMBIOS_STRING_MAX_LENGTH) {
return EFI_UNSUPPORTED;
@@ -372,10 +369,12 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
SmbiosRecord -> ProcessorFamily2 = ForType4InputData-> VariableRecord.ProcessorFamily;
//
- // Processor speed
+ // Processor speed in MHz
//
- SmbiosRecord-> CurrentSpeed = *(UINT16*) & Frequency;
- SmbiosRecord-> MaxSpeed = *(UINT16*) & Frequency;
+ Frequency = MeasureTscFrequency ();
+ Frequency = DivU64x32 (Frequency, 1000000);
+ SmbiosRecord-> CurrentSpeed = (UINT16)Frequency;
+ SmbiosRecord-> MaxSpeed = (UINT16)Frequency;
//
// Processor Characteristics
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c
index 93347a1a04..4c8e00801f 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c
@@ -1,21 +1,17 @@
/** @file
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscSubclassDriverDataTable.c
Abstract:
- Create the mMiscSubclassDataTable structure, and it is used to report
- any generate data to the DataHub.
-
+ Create the mMiscSubclassDataTable structure used to produce
+ SMBIOS records.
**/
@@ -31,7 +27,7 @@ MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_BIOS_VENDOR_DATA, MiscBiosVendor, MiscBiosVen
MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_SYSTEM_MANUFACTURER_DATA, MiscSystemManufacturer, MiscSystemManufacturer);
MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_BASE_BOARD_MANUFACTURER_DATA, MiscBaseBoardManufacturer, MiscBaseBoardManufacturer);
MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_CHASSIS_MANUFACTURER_DATA, MiscChassisManufacturer, MiscChassisManufacturer);
-MISC_SMBIOS_TABLE_EXTERNS(EFI_CACHE_VARIABLE_RECORD, MiscProcessorCache, MiscProcessorCache); //type 7
+MISC_SMBIOS_TABLE_EXTERNS(UINTN, MiscProcessorCache, MiscProcessorCache); //type 7
MISC_SMBIOS_TABLE_EXTERNS(EFI_CPU_DATA_RECORD, MiscProcessorInformation, MiscProcessorInformation); //type 4
MISC_SMBIOS_TABLE_EXTERNS(EFI_MEMORY_ARRAY_LOCATION_DATA, MiscPhysicalMemoryArray,MiscPhysicalMemoryArray);
MISC_SMBIOS_TABLE_EXTERNS(EFI_MEMORY_ARRAY_LINK_DATA, MiscMemoryDevice, MiscMemoryDevice);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverEntryPoint.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverEntryPoint.c
index e70732f5c2..cb677a0aa6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverEntryPoint.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverEntryPoint.c
@@ -1,20 +1,17 @@
/** @file
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscSubclassDriverEntryPoint.c
Abstract:
- This driver parses the mMiscSubclassDataTable structure and reports
- any generated data to the DataHub.
+ This driver parses the mMiscSubclassDataTable structure to
+ produce SMBIOS records.
**/
@@ -99,7 +96,7 @@ Error:
/**
Standard EFI driver point. This driver parses the mMiscSubclassDataTable
- structure and reports any generated data to the DataHub.
+ structure to produce SMBIOS records.
@param ImageHandle - Handle for the image of this driver
@param SystemTable - Pointer to the EFI System Table
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
index 99b1a18185..92b51b1743 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
@@ -86,6 +86,7 @@ [Packages]
MdePkg/MdePkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
NetworkPkg/NetworkPkg.dec
+ UefiCpuPkg/UefiCpuPkg.dec
[LibraryClasses]
HiiLib
@@ -105,6 +106,7 @@ [LibraryClasses]
PchPlatformLib
NetLib
HobLib
+ TimerLib
[Guids]
gEfiNormalSetupGuid
@@ -114,7 +116,6 @@ [Guids]
[Protocols]
gEfiSmbiosProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiDxeSmmReadyToLockProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiDataHubProtocolGuid
gEfiMpServiceProtocolGuid
gMemInfoProtocolGuid
gEfiTdtOperationProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
index 99db5490b6..dad27f130d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
@@ -35,8 +35,6 @@ Abstract:
#include <PiDxe.h>
#include <PchRegs.h>
-#include <Guid/DataHubRecords.h>
-
#include <Protocol/IgdOpRegion.h>
#include <Protocol/FirmwareVolume2.h>
#include <Protocol/PlatformGopPolicy.h>
@@ -66,7 +64,6 @@ extern DXE_VLV_PLATFORM_POLICY_PROTOCOL *DxePlatformSaPolicy;
//
IGD_OPREGION_PROTOCOL mIgdOpRegion;
-EFI_GUID mMiscSubClass = EFI_MISC_SUBCLASS_GUID;
EFI_EVENT mConOutEvent;
EFI_EVENT mSetGOPverEvent;
VOID *mConOutReg;
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
index fe81a6e3bd..2aec0d1a9a 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
@@ -3,9 +3,8 @@
#/*++
#
# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
-#
-
-# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
#
# Module Name:
#
@@ -65,7 +64,6 @@ [Depex]
gDxeVlvPlatformPolicyGuid AND
gEfiPciRootBridgeIoProtocolGuid AND
gEfiCpuIo2ProtocolGuid AND
- gEfiDataHubProtocolGuid AND
gEfiGlobalNvsAreaProtocolGuid AND
gEfiFirmwareVolume2ProtocolGuid AND
gEfiHiiDatabaseProtocolGuid
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 08/14] Vlv2TbltDevicePkg: Remove use of Data Hub Protocol
2019-07-01 2:55 ` [edk2-platforms Patch 08/14] Vlv2TbltDevicePkg: Remove use of Data Hub Protocol Michael D Kinney
@ 2019-07-01 4:08 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:08 UTC (permalink / raw)
To: devel@edk2.groups.io, Kinney, Michael D; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Michael D Kinney
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-devel] [edk2-platforms Patch 08/14] Vlv2TbltDevicePkg: Remove use of Data Hub Protocol
Update all platform code to stop using the Data Hub Protocol
from the IntelFrameworkPkg.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Vlv2TbltDevicePkg/Include/Guid/IdccData.h | 104 -
.../Vlv2TbltDevicePkg/Include/Guid/ItkData.h | 18 +-
.../Vlv2TbltDevicePkg/PlatformDxe/BoardId.c | 45 +-
.../PlatformDxe/ClockControl.c | 80 +-
.../Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c | 72 -
.../Vlv2TbltDevicePkg/PlatformDxe/Platform.c | 1 -
.../PlatformDxe/PlatformDxe.h | 2 -
.../PlatformDxe/PlatformDxe.inf | 2 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 1 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 6 -
.../Vlv2TbltDevicePkg/PlatformPkgConfig.dsc | 1 -
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 6 -
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 7 -
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 7 -
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 7 -
.../PlatformSetupDxe/PlatformSetupDxe.h | 2 -
.../PlatformSetupDxe/SetupFunctions.c | 38 +-
.../PlatformSetupDxe/SetupInfoRecords.c | 477 +--
| 10 +-
.../SmBiosMiscDxe/DataHubRecords.h | 2934 +++++++++++++++++
.../SmBiosMiscDxe/MiscMemoryDeviceFunction.c | 318 +-
.../SmBiosMiscDxe/MiscOemType0x94Function.c | 1 -
.../SmBiosMiscDxe/MiscProcessorCacheData.c | 11 +-
.../MiscProcessorCacheFunction.c | 273 +-
.../MiscProcessorInformationFunction.c | 203 +-
.../MiscSubclassDriverDataTable.c | 14 +-
.../MiscSubclassDriverEntryPoint.c | 13 +-
.../SmBiosMiscDxe/SmBiosMiscDxe.inf | 3 +-
.../VlvPlatformInitDxe/IgdOpRegion.c | 3 -
.../VlvPlatformInitDxe/VlvPlatformInitDxe.inf | 6 +-
30 files changed, 3458 insertions(+), 1207 deletions(-)
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords.h
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h
deleted file mode 100644
index 7e3b965666..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- IdccData.h
-
-Abstract:
-
---*/
-
-#ifndef _IDCCDATAHUB_GUID_H_
-#define _IDCCDATAHUB_GUID_H_
-
-//
-// This GUID is for the IDCC related data found in the Data Hub.
-//
-#define IDCC_DATA_HUB_GUID \
- { 0x788e1d9f, 0x1eab, 0x47d2, 0xa2, 0xf3, 0x78, 0xca, 0xe8, 0x7d, 0x60, 0x12 }
-
-extern EFI_GUID gIdccDataHubGuid;
-
-#pragma pack(1)
-
-typedef struct {
- UINT32 Type;
- UINT32 RecordLength;
-} EFI_IDCC_DATA_HEADER;
-
-typedef struct {
- EFI_IDCC_DATA_HEADER IdccHeader;
- UINT32 Tcontrol;
-} EFI_IDCC_TCONTROL;
-
-typedef struct {
- UINT32 EntryCount;
-} EFI_IDCC_CLOCK_COMMON;
-
-typedef struct {
- UINT8 Polarity;
- UINT8 Percent;
- UINT32 FpValue;
-} EFI_IDCC_TYPE_2_DATA;
-
-typedef struct {
- UINT8 SetupVal;
- UINT32 FpValue;
-} EFI_IDCC_TYPE_3_4_DATA;
-
-typedef struct {
- EFI_IDCC_DATA_HEADER IdccHeader;
- UINT32 ProcessorRatio;
-} EFI_IDCC_PROCESSOR_RATIO;
-
-typedef struct {
- EFI_IDCC_DATA_HEADER IdccHeader;
- UINT32 BoardFormFactor;
-} EFI_IDCC_BOARD_FORM_FACTOR;
-
-typedef struct {
- EFI_IDCC_DATA_HEADER IdccHeader;
- UINT32 ProcessorInfo;
-} EFI_IDCC_PROCESSOR_INFO;
-
-#define EFI_IDCC_PROCESSOR_UNCON (1 << 0) // Bit 0: UnCon CPU
-#define EFI_IDCC_PROCESSOR_UNLOCK (1 << 1) // Bit 1: UnLock CPU
-#define EFI_IDCC_PROCESSOR_CNR (1 << 2) // Bit 2: CNR CPU
-#define EFI_IDCC_PROCESSOR_KNF (1 << 3) // Bit 3: KNF CPU
-
-typedef struct {
- EFI_IDCC_DATA_HEADER IdccHeader;
- UINT32 MinFSB;
- UINT32 MaxFSB;
- UINT8 StepFSB;
-} EFI_IDCC_FSB_DATA;
-
-#pragma pack()
-
-#define EFI_IDCC_POSITIVE 0
-#define EFI_IDCC_NEGATIVE 1
-
-//
-// Board Form Factor equates.
-//
-#define ATX_FORM_FACTOR 0x00
-#define BTX_FORM_FACTOR 0x01
-
-
-#define EFI_IDCC_TCONTROL_TYPE 1
-#define EFI_IDCC_FSB_TYPE 2
-#define EFI_IDCC_PCI_TYPE 3
-#define EFI_IDCC_PCIE_TYPE 4
-#define EFI_IDCC_PROC_RATIO_TYPE 5
-#define EFI_IDCC_BOARD_FORM_FACTOR_TYPE 6
-#define EFI_IDCC_PROC_INFO_TYPE 7
-#define EFI_IDCC_FSB_DATA_TYPE 8
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h
index e7bd29e6e4..2dcaac15f3 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/ItkData.h
@@ -1,11 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
ItkData.h
@@ -14,16 +12,8 @@ Abstract:
--*/
-#ifndef _ITKDATAHUB_GUID_H_
-#define _ITKDATAHUB_GUID_H_
-
-//
-// This GUID is for the ITK related data found in the Data Hub {E7060843-A336-4d5b-9598-13402F5D7375}
-//
-#define ITK_DATA_HUB_GUID \
- { 0xe7060843, 0xa336, 0x4d5b, 0x95, 0x98, 0x13, 0x40, 0x2f, 0x5d, 0x73, 0x75 }
-
-extern EFI_GUID gItkDataHubGuid;
+#ifndef _ITKDATA_GUID_H_
+#define _ITKDATA_GUID_H_
//
// This GUID is for the ITK related data found in a Variable {3812723D-7E48-4e29-BC27-F5A39AC94EF1}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c
index 7d774568e3..66c76453a8 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/BoardId.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -23,13 +21,9 @@ Abstract:
#include "PchRegs.h"
#include "PlatformDxe.h"
-#include <Guid/IdccData.h>
#include <Guid/EfiVpdData.h>
-#include <Protocol/DataHub.h>
-extern EFI_GUID mPlatformDriverGuid;
-
//
// Global module data
//
@@ -52,8 +46,6 @@ InitializeBoardId (
{
UINT32 BoardIdBufferSize;
- EFI_IDCC_BOARD_FORM_FACTOR IdccBoardFormFactor;
- EFI_DATA_HUB_PROTOCOL *DataHub;
EFI_STATUS Status;
DMI_DATA DmiDataVariable;
UINTN Size;
@@ -186,38 +178,5 @@ InitializeBoardId (
BoardIdBufferSize,
&mBoardFeatures
);
-
- //
- // Get the Data Hub protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (VOID **) &DataHub
- );
- if (!(EFI_ERROR(Status))) {
- //
- // Fill out data
- //
- IdccBoardFormFactor.IdccHeader.Type = EFI_IDCC_BOARD_FORM_FACTOR_TYPE;
- IdccBoardFormFactor.IdccHeader.RecordLength = sizeof(EFI_IDCC_BOARD_FORM_FACTOR);
- if ((mBoardFeatures & B_BOARD_FEATURES_FORM_FACTOR_ATX) || (mBoardFeatures & B_BOARD_FEATURES_FORM_FACTOR_MICRO_ATX)) {
- IdccBoardFormFactor.BoardFormFactor = ATX_FORM_FACTOR; // ATX
- } else {
- IdccBoardFormFactor.BoardFormFactor = BTX_FORM_FACTOR; // BTX
- }
-
- //
- // Publish the Board Form Factor value for IDCC
- //
- Status = DataHub->LogData (
- DataHub,
- &gIdccDataHubGuid,
- &mPlatformDriverGuid,
- EFI_DATA_RECORD_CLASS_DATA,
- &IdccBoardFormFactor,
- sizeof(EFI_IDCC_BOARD_FORM_FACTOR)
- );
- }
}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c
index 1669f0357f..596f55bcbe 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/ClockControl.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -75,71 +73,6 @@ EFI_CLOCK_PLATFORM_INFO mAtxClockSettings = {
sizeof(mAtxSxClocks) / sizeof(mAtxSxClocks[0])
};
-#if defined( RVP_SUPPORT ) && RVP_SUPPORT
-//
-// RVP Clock Settings
-//
-// Static clock table.
-// This should be used to define any clock settings that are static
-// (Always On or Always Off). Dynamic clocks should be set to enabled
-// in this table.
-//
-//UPSD_TBD Check with Jan if any porting required.
-//
-EFI_STATIC_SIGNALS mRvpStaticClocks[] = {
- {SrcClk11, Enabled, All}, // Not used/not present but leave coding enabled
- {SrcClk10, Enabled, All}, // Not used/not present but leave coding enabled
- {SrcClk9, Enabled, All}, // Not used/not present but leave coding enabled
- {SrcClk8, Enabled, All}, // ICHSATAII
- {SrcClk7, Enabled, All}, // DPL_REFSSCLKIN
- {SrcClk6, Enabled, All}, // 100M_MCH
- {SrcClk5, Enabled, All}, // Mini-PCIe //TODO PNV: Need to check ICH GPIO38:
- // 0: turn on; 1: turn off
- {SrcClk4, Enabled, All}, // ICHSATA
- {SrcClk3, Enabled, All}, // 100M_ICH
- {SrcClk2, Enabled, All}, // 100M_LAN
- {SrcClk1, Enabled, All}, // 25M_LAN
- {SrcClk0, Enabled, All}, // 96M_DREF
- {Ref0, Enabled, All},
- {Dot96, Enabled, All},
- {Usb48, Enabled, All},
- {PciClkF5, Enabled, All}, // 33M_ICH
- {PciClk0, Enabled, All}, // 33M_RISER
- {PciClk1, Enabled, All}, // 33M_RISER
- {PciClk2, Enabled, All}, // VDD_Clock
- {PciClk3, Enabled, All}, // 33M_S1
- {PciClk4, Enabled, All}, // 33M_PA
-};
-
-//
-// Dynamic clock table
-// This is used to determine if a clock should be left on or turned off based
-// on the presence of a device. The bridge information is used so the bus
-// number for the device to be detected can be found.
-//
-
-//
-// ClockSxInfo Table
-// This is a list of clocks that need to be set to a known state when the
-// system enters S4 or S5.
-//
-EFI_STATIC_SIGNALS mRvpSxClocks[] = {
- {SaveClockConfiguration, Disabled, All}
-};
-
-//
-// RVP settings structure
-//
-EFI_CLOCK_PLATFORM_INFO mRvpClockSettings = {
- mRvpStaticClocks,
- sizeof(mRvpStaticClocks) / sizeof(mRvpStaticClocks[0]),
- 0, // No clocks will be turned off mRvpDynamicClocks,
- 0, // No clocks will be turned off sizeof(mRvpDynamicClocks) / sizeof(mRvpDynamicClocks[0]),
- mRvpSxClocks,
- sizeof(mRvpSxClocks) / sizeof(mRvpSxClocks[0])
-};
-#endif
-
VOID
InitializeClockRouting(
)
@@ -165,12 +98,6 @@ InitializeClockRouting(
);
if (!EFI_ERROR (Status)) {
-#if defined( RVP_SUPPORT ) && RVP_SUPPORT
- if (BoardIdVar & B_BOARD_FEATURES_RVP) {
- ClockPolicy = &mRvpClockSettings;
- }
-#else
-
//
// Isolate board type information
//
@@ -183,9 +110,6 @@ InitializeClockRouting(
BoardIdVar == B_BOARD_FEATURES_FORM_FACTOR_MICRO_ATX) {
ClockPolicy = &mAtxClockSettings;
}
-
-#endif
-
}
Handle = NULL;
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c
deleted file mode 100644
index 3b3e4b4c82..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
-
- IdccInfo.c
-
-Abstract:
-
- Platform information used by IDCC.
-
-Revision History
-
---*/
-
-#include "PlatformDxe.h"
-
-#include <Guid/IdccData.h>
-
-extern EFI_GUID mPlatformDriverGuid;
-
-
-EFI_STATUS
-WriteIdccInfo (
- )
-{
- EFI_STATUS Status;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- UINT8 Ratio;
- EFI_IDCC_PROCESSOR_RATIO ProcRatio;
-
- //
- // Locate the data hub protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (VOID **) &DataHub
- );
-
- //
- // Find processor actual ratio
- //
- Ratio = 15; //Temporary - some dummy value.
-
- //
- // Fill in IDCC Type 5 structure
- //
- ProcRatio.IdccHeader.Type = EFI_IDCC_PROC_RATIO_TYPE;
- ProcRatio.IdccHeader.RecordLength = sizeof(EFI_IDCC_PROCESSOR_RATIO);
- ProcRatio.ProcessorRatio = Ratio;
-
- //
- // Write data to the data hub
- //
- Status = DataHub->LogData (
- DataHub,
- &gIdccDataHubGuid,
- &mPlatformDriverGuid,
- EFI_DATA_RECORD_CLASS_DATA,
- &ProcRatio,
- sizeof(EFI_IDCC_PROCESSOR_RATIO)
- );
-
- return Status;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
index 7e083e3933..0bc3f44c49 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
@@ -55,7 +55,6 @@ GPIO_CONF_PAD_INIT mTB_BL_GpioInitData_SC_TRI_Exit_boot_Service[] =
EFI_GUID mSystemHiiExportDatabase = EFI_HII_EXPORT_DATABASE_GUID;
-EFI_GUID mPlatformDriverGuid = EFI_PLATFORM_DRIVER_GUID;
SYSTEM_CONFIGURATION mSystemConfiguration;
EFI_HANDLE mImageHandle;
BOOLEAN mMfgMode = FALSE;
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
index 5c60f823de..f2f0097efc 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
@@ -43,8 +43,6 @@ Abstract:
#include <Protocol/CpuIo2.h>
#include <Guid/GlobalVariable.h>
#include <Guid/BoardFeatures.h>
-#include <Guid/DataHubRecords.h>
-#include <Protocol/DataHub.h>
#include <Protocol/PciIo.h>
#include <Protocol/Speaker.h>
#include <IndustryStandard/Pci22.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index 0c432642e4..a9ef744ef7 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -35,7 +35,6 @@ [sources.common]
ClockControl.c
Platform.c
IchRegTable.c
- IdccInfo.c
IchPlatformPolicy.c
PciDevice.c
SlotConfig.c
@@ -80,7 +79,6 @@ [Guids]
gEfiBoardFeaturesGuid
gItkDataVarGuid
gDmiDataGuid
- gIdccDataHubGuid
gEfiPciLanInfoGuid
gEfiNormalSetupGuid
gEfiGlobalVariableGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index bfde7be398..5b255f4b05 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -41,7 +41,6 @@ [Guids]
gEfiBoardFeaturesGuid = { 0x94b9e8ae, 0x8877, 0x479a, { 0x98, 0x42, 0xf5, 0x97, 0x4b, 0x82, 0xce, 0xd3 } }
gItkDataVarGuid = { 0x3812723d, 0x7e48, 0x4e29, { 0xbc, 0x27, 0xf5, 0xa3, 0x9a, 0xc9, 0x4e, 0xf1 } }
gDmiDataGuid = { 0x70e56c5e, 0x280c, 0x44b0, { 0xa4, 0x97, 0x09, 0x68, 0x1a, 0xbc, 0x37, 0x5e } }
- gIdccDataHubGuid = { 0x788e1d9f, 0x1eab, 0x47d2, { 0xa2, 0xf3, 0x78, 0xca, 0xe8, 0x7d, 0x60, 0x12 } }
gEfiSetupVariableGuid = { 0xec87d643, 0xeba4, 0x4bb5, { 0xa1, 0xe5, 0x3f, 0x3e, 0x36, 0xb2, 0x0d, 0xa9 } }
gEfiPlatformInfoGuid = { 0x1e2acc41, 0xe26a, 0x483d, { 0xaf, 0xc7, 0xa0, 0x56, 0xc3, 0x4e, 0x08, 0x7b } }
gMfgModeVariableGuid = { 0xEF14FD78, 0x0793, 0x4e2b, { 0xAC, 0x6D, 0x06, 0x28, 0x47, 0xE0, 0x17, 0x91 } }
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index 4c60d0a0f2..15a4251cf8 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -430,9 +430,6 @@ [FV.FVMAIN]
INF Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
-!if $(DATAHUB_ENABLE) == TRUE
-INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf
-!endif
INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
@@ -584,9 +581,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
INF Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
-INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
-
-
#
# FAT file system
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
index d5068b514c..7b48d7b44e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgConfig.dsc
@@ -48,7 +48,6 @@
DEFINE MICOCODE_CAPSULE_ENABLE = TRUE
DEFINE GOP_DRIVER_ENABLE = TRUE
-DEFINE DATAHUB_ENABLE = TRUE
DEFINE USB_ENABLE = TRUE
DEFINE ISA_SERIAL_STATUS_CODE_ENABLE = TRUE
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index 61e1adcd14..b8ac61d710 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -376,9 +376,6 @@ [FV.FVMAIN]
INF Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
-!if $(DATAHUB_ENABLE) == TRUE
-INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf
-!endif
INF MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/Dptf.inf
@@ -530,9 +527,6 @@ [FV.FVMAIN]
INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
INF Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
-INF RuleOverride = BINARY Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
-
-
#
# FAT file system
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index 25d1beb400..b16883e98c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -984,12 +984,6 @@ [Components.X64]
Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
-!if $(DATAHUB_ENABLE) == TRUE
- IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
- }
-!endif
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
@@ -1212,7 +1206,6 @@ [Components.X64]
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index 8a5c42577d..c9335a98c8 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -968,12 +968,6 @@ [Components.IA32]
Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
-!if $(DATAHUB_ENABLE) == TRUE
- IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
- }
-!endif
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
@@ -1196,7 +1190,6 @@ [Components.IA32]
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index c0fe0892ac..fd9ddebfd9 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -983,12 +983,6 @@ [Components.X64]
Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
-!if $(DATAHUB_ENABLE) == TRUE
- IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf {
- <PcdsFixedAtBuild>
- gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|0
- }
-!endif
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/PchS3SupportDxe.inf
PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
@@ -1211,7 +1205,6 @@ [Components.X64]
MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
- Vlv2SocBinPkg/$(DXE_ARCHITECTURE)$(TARGET)/$(DXE_ARCHITECTURE)/SmbiosMemory.inf
#
# CPU/FW Microde
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
index 1ba75175e1..b4a30511ac 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.h
@@ -25,10 +25,8 @@
#include <Protocol/DevicePathToText.h>
#include <Protocol/DevicePath.h>
#include <Protocol/PlatformDriverOverride.h>
-#include <Protocol/DataHub.h>
#include <Guid/MdeModuleHii.h>
#include <Guid/VariableFormat.h>
-#include <Guid/DataHubRecords.h>
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFunctions.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFunctions.c
index a84b425826..f3bc823056 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFunctions.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupFunctions.c
@@ -1,12 +1,9 @@
/** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
SetupFunctions.c
@@ -52,34 +49,3 @@ SwapEntries (
return;
}
-
-UINT32
-ConvertBase10ToRaw (
- IN EFI_EXP_BASE10_DATA *Data)
-{
- UINTN Index;
- UINT32 RawData;
-
- RawData = Data->Value;
- for (Index = 0; Index < (UINTN) Data->Exponent; Index++) {
- RawData *= 10;
- }
-
- return RawData;
-}
-
-UINT32
-ConvertBase2ToRaw (
- IN EFI_EXP_BASE2_DATA *Data)
-{
- UINTN Index;
- UINT32 RawData;
-
- RawData = Data->Value;
- for (Index = 0; Index < (UINTN) Data->Exponent; Index++) {
- RawData <<= 1;
- }
-
- return RawData;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
index c767021aed..efd4a723e1 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
@@ -79,9 +79,6 @@ SB_REV SBRevisionTable[] = {
BOOLEAN mSetupInfoDone = FALSE;
UINT8 mUseProductKey = 0;
-EFI_EXP_BASE10_DATA mProcessorFrequency;
-EFI_EXP_BASE10_DATA mProcessorFsbFrequency;
-
EFI_GUID mProcessorProducerGuid;
EFI_HII_HANDLE mHiiHandle;
EFI_PLATFORM_CPU_INFO mPlatformCpuInfo;
@@ -91,50 +88,7 @@ EFI_PLATFORM_INFO_HOB *mPlatformInfo;
#define memset SetMem
-UINT16 mMemorySpeed = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelASlot0 = 0;
-UINT16 mMemorySpeedChannelASlot0 = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelASlot1 = 0;
-UINT16 mMemorySpeedChannelASlot1 = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelBSlot0 = 0;
-UINT16 mMemorySpeedChannelBSlot0 = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelBSlot1 = 0;
-UINT16 mMemorySpeedChannelBSlot1 = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelCSlot0 = 0;
-UINT16 mMemorySpeedChannelCSlot0 = 0xffff;
-EFI_PHYSICAL_ADDRESS mMemorySizeChannelCSlot1 = 0;
-UINT16 mMemorySpeedChannelCSlot1 = 0xffff;
-UINTN mMemoryMode = 0xff;
-
#define CHARACTER_NUMBER_FOR_VALUE 30
- typedef struct {
- EFI_STRING_TOKEN MemoryDeviceLocator;
- EFI_STRING_TOKEN MemoryBankLocator;
- EFI_STRING_TOKEN MemoryManufacturer;
- EFI_STRING_TOKEN MemorySerialNumber;
- EFI_STRING_TOKEN MemoryAssetTag;
- EFI_STRING_TOKEN MemoryPartNumber;
- EFI_INTER_LINK_DATA MemoryArrayLink;
- EFI_INTER_LINK_DATA MemorySubArrayLink;
- UINT16 MemoryTotalWidth;
- UINT16 MemoryDataWidth;
- UINT64 MemoryDeviceSize;
- EFI_MEMORY_FORM_FACTOR MemoryFormFactor;
- UINT8 MemoryDeviceSet;
- EFI_MEMORY_ARRAY_TYPE MemoryType;
- EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail;
- UINT16 MemorySpeed;
- EFI_MEMORY_STATE MemoryState;
-} EFI_MEMORY_ARRAY_LINK;
-
-
-typedef struct {
- EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress;
- EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress;
- EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
- UINT16 MemoryArrayPartitionWidth;
-} EFI_MEMORY_ARRAY_START_ADDRESS;
-
typedef enum {
PCH_SATA_MODE_IDE = 0,
@@ -421,73 +375,6 @@ VOID UpdateLatestBootTime() {
HiiSetString(mHiiHandle,STRING_TOKEN(STR_LOG_BOOT_TIME_VALUE), Buffer, NULL);
}
-/**
- Get Cache Type for the specified Cache. This function is invoked when there is data records
- available in the Data Hub.
-
- Get Cache Type function arguments:
-
- @param Instance The instance number of the subclass with the same ProducerName..
- @param SubInstance The instance number of the RecordType for the same Instance.
- @param CacheType Cache type, see definition of EFI_CACHE_TYPE_DATA.
-
- @retval EFI_STATUS
-
-**/
-EFI_STATUS
-GetCacheType(
- IN UINT16 Instance,
- IN UINT16 SubInstance,
- IN EFI_CACHE_TYPE_DATA* CacheType)
-{
- EFI_STATUS Status;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- EFI_DATA_RECORD_HEADER *Record;
- UINT64 MonotonicCount;
- EFI_CACHE_VARIABLE_RECORD* CacheVariableRecord;
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;
-
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (void **)&DataHub
- );
- ASSERT_EFI_ERROR(Status);
-
- //
- // Get all available data records from data hub
- //
- MonotonicCount = 0;
- Record = NULL;
-
- do {
- Status = DataHub->GetNextRecord (
- DataHub,
- &MonotonicCount,
- NULL,
- &Record
- );
- if (!EFI_ERROR(Status)) {
- if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1);
-
- if(CompareGuid(&Record->DataRecordGuid, &gEfiCacheSubClassGuid) &&
- (DataHeader->RecordType == CacheTypeRecordType) &&
- (DataHeader->Instance == Instance) &&
- (DataHeader->SubInstance == SubInstance)) {
- CacheVariableRecord = (EFI_CACHE_VARIABLE_RECORD *)(DataHeader + 1);
- if(CacheType){
- *CacheType = CacheVariableRecord->CacheType;
- return EFI_SUCCESS;
- }
- }
- }
- }
- } while(!EFI_ERROR(Status) && (MonotonicCount != 0));
-
- return EFI_NOT_FOUND;
-}
-
/**
Setup data filter function. This function is invoked when there is data records
available in the Data Hub.
@@ -504,230 +391,23 @@ VOID
PrepareSetupInformation (
)
{
-
EFI_STATUS Status;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- EFI_DATA_RECORD_HEADER *Record;
- UINT8 *SrcData;
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;
CHAR16 *NewString;
- CHAR16 *NewString2;
- CHAR16 *NewStringToken;
STRING_REF TokenToUpdate;
- EFI_PROCESSOR_VERSION_DATA *ProcessorVersion;
- UINTN Index;
- UINTN DataOutput;
-
- EFI_PROCESSOR_MICROCODE_REVISION_DATA *CpuUcodeRevisionData;
- EFI_MEMORY_ARRAY_START_ADDRESS *MemoryArray;
- EFI_MEMORY_ARRAY_LINK *MemoryArrayLink;
- UINT64 MonotonicCount;
-
CHAR16 Version[100]; //Assuming that strings are < 100 UCHAR
CHAR16 ReleaseDate[100]; //Assuming that strings are < 100 UCHAR
CHAR16 ReleaseTime[100]; //Assuming that strings are < 100 UCHAR
NewString = AllocateZeroPool (0x100);
- NewString2 = AllocateZeroPool (0x100);
SetMem(Version, sizeof(Version), 0);
SetMem(ReleaseDate, sizeof(ReleaseDate), 0);
SetMem(ReleaseTime, sizeof(ReleaseTime), 0);
- //
- // Get the Data Hub Protocol. Assume only one instance
- //
- Status = gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (void **)&DataHub);
- ASSERT_EFI_ERROR(Status);
-
- //
- // Get all available data records from data hub
- //
- MonotonicCount = 0;
- Record = NULL;
-
- do {
- Status = DataHub->GetNextRecord (DataHub, &MonotonicCount, NULL, &Record);
- if (!EFI_ERROR(Status)) {
- if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1);
- SrcData = (UINT8 *)(DataHeader + 1);
-
- //
- // Processor
- //
- if (CompareGuid(&Record->DataRecordGuid, &gEfiProcessorSubClassGuid)) {
- CopyMem (&mProcessorProducerGuid, &Record->ProducerName, sizeof(EFI_GUID));
- switch (DataHeader->RecordType) {
- case ProcessorCoreFrequencyRecordType:
- CopyMem(&mProcessorFrequency, SrcData, sizeof(EFI_EXP_BASE10_DATA));
- Index = EfiValueToString (
- NewString,
- ConvertBase10ToRaw ((EFI_EXP_BASE10_DATA *)SrcData)/1000000000,
- PREFIX_ZERO,
- 0
- );
- StrCat (NewString, L".");
- EfiValueToString (
- NewString + Index + 1,
- ((ConvertBase10ToRaw ((EFI_EXP_BASE10_DATA *)SrcData)%1000000000)/10000000),
- PREFIX_ZERO,
- 0
- );
- StrCat (NewString, L" GHz");
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_SPEED_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- break;
-
- case ProcessorVersionRecordType:
- ProcessorVersion = (EFI_PROCESSOR_VERSION_DATA *)SrcData;
- NewStringToken = HiiGetPackageString(&mProcessorProducerGuid, *ProcessorVersion, NULL);
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_VERSION_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, NewStringToken, NULL);
- break;
- case CpuUcodeRevisionDataRecordType:
- CpuUcodeRevisionData = (EFI_PROCESSOR_MICROCODE_REVISION_DATA *) SrcData;
- if (CpuUcodeRevisionData->ProcessorMicrocodeRevisionNumber != 0) {
- EfiValueToHexStr (
- NewString,
- CpuUcodeRevisionData->ProcessorMicrocodeRevisionNumber,
- PREFIX_ZERO,
- 8
- );
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_MICROCODE_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- }
- break;
- default:
- break;
- }
-
- //
- // Cache
- //
- } else if (CompareGuid(&Record->DataRecordGuid, &gEfiCacheSubClassGuid) &&
- (DataHeader->RecordType == CacheSizeRecordType)) {
- if (DataHeader->SubInstance == EFI_CACHE_L1) {
- EFI_CACHE_TYPE_DATA CacheType;
- if (EFI_SUCCESS == GetCacheType(DataHeader->Instance, DataHeader->SubInstance,&CacheType)){
- if (CacheType == EfiCacheTypeData) {
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_L1_DATA_CACHE_VALUE;
- } else if (CacheType == EfiCacheTypeInstruction) {
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_L1_INSTR_CACHE_VALUE;
- } else {
- continue;
- }
- } else {
- continue;
- }
- }
- else if (DataHeader->SubInstance == EFI_CACHE_L2) {
- TokenToUpdate = (STRING_REF)STR_PROCESSOR_L2_CACHE_VALUE;
- } else {
- continue;
- }
- if (ConvertBase2ToRaw((EFI_EXP_BASE2_DATA *)SrcData)) {
- DataOutput = ConvertBase2ToRaw((EFI_EXP_BASE2_DATA *)SrcData) >> 10;
- EfiValueToString (NewString, DataOutput, PREFIX_ZERO, 0);
-
- StrCat (NewString, L" KB");
- if (DataHeader->SubInstance == EFI_CACHE_L3) {
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- } else if(DataHeader->SubInstance == EFI_CACHE_L2 && mPlatformCpuInfo.CpuPackage.CoresPerPhysicalPackage > 1){
- //
- // Show XxL2 string
- //
- EfiValueToString (
- NewString2,
- mPlatformCpuInfo.CpuPackage.CoresPerPhysicalPackage,
- PREFIX_ZERO,
- 0
- );
- StrCat(NewString2, L"x ");
- StrCat(NewString2, NewString);
- HiiSetString(mHiiHandle, TokenToUpdate, NewString2, NULL);
- } else {
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- }
- }
-
- //
- // Memory
- //
- } else if (CompareGuid(&Record->DataRecordGuid, &gEfiMemorySubClassGuid)) {
- switch (DataHeader->RecordType) {
- case EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER:
- MemoryArrayLink = (EFI_MEMORY_ARRAY_LINK *)SrcData;
-
- if (MemoryArrayLink->MemorySpeed > 0) {
- //
- // Save the lowest speed memory module
- //
- if (MemoryArrayLink->MemorySpeed < mMemorySpeed) {
- mMemorySpeed = MemoryArrayLink->MemorySpeed;
- }
- switch (DataHeader->SubInstance) {
- case 1:
- mMemorySpeedChannelASlot0 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelASlot0 = MemoryArrayLink->MemoryDeviceSize;
- break;
- case 2:
- mMemorySpeedChannelASlot1 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelASlot1 = MemoryArrayLink->MemoryDeviceSize;
- break;
- case 3:
- mMemorySpeedChannelBSlot0 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelBSlot0 = MemoryArrayLink->MemoryDeviceSize;
- break;
- case 4:
- mMemorySpeedChannelBSlot1 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelBSlot1 = MemoryArrayLink->MemoryDeviceSize;
- break;
- case 5:
- mMemorySpeedChannelCSlot0 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelCSlot0 = MemoryArrayLink->MemoryDeviceSize;
- break;
- case 6:
- mMemorySpeedChannelCSlot1 = MemoryArrayLink->MemorySpeed;
- mMemorySizeChannelCSlot1 = MemoryArrayLink->MemoryDeviceSize;
- break;
- default:
- break;
- }
- }
- break;
-
- case EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER:
- MemoryArray = (EFI_MEMORY_ARRAY_START_ADDRESS *)SrcData;
- if (MemoryArray->MemoryArrayEndAddress - MemoryArray->MemoryArrayStartAddress) {
- DataOutput = (UINTN)RShiftU64((MemoryArray->MemoryArrayEndAddress - MemoryArray->MemoryArrayStartAddress + 1), 20);
- EfiValueToString (NewString, DataOutput / 1024, PREFIX_ZERO, 0);
- if(DataOutput % 1024) {
- StrCat (NewString, L".");
- DataOutput = ((DataOutput % 1024) * 1000) / 1024;
- while(!(DataOutput % 10))
- DataOutput = DataOutput / 10;
- EfiValueToString (NewString2, DataOutput, PREFIX_ZERO, 0);
- StrCat (NewString, NewString2);
- }
- StrCat (NewString, L" GB");
- TokenToUpdate = (STRING_REF)STR_TOTAL_MEMORY_SIZE_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- }
- break;
-
- default:
- break;
- }
- }
- }
- }
- } while (!EFI_ERROR(Status) && (MonotonicCount != 0));
-
Status = GetBiosVersionDateTime (
Version,
- ReleaseDate,
- ReleaseTime
- );
+ ReleaseDate,
+ ReleaseTime
+ );
DEBUG ((EFI_D_ERROR, "GetBiosVersionDateTime :%s %s %s \n", Version, ReleaseDate, ReleaseTime));
if (!EFI_ERROR (Status)) {
@@ -750,24 +430,7 @@ PrepareSetupInformation (
HiiSetString(mHiiHandle, TokenToUpdate, BuildDateTime, NULL);
}
- //
- // Calculate and update memory speed display in Main Page
- //
- //
- // Update the overall memory speed
- //
- if (mMemorySpeed != 0xffff) {
- EfiValueToString (NewString, mMemorySpeed, PREFIX_ZERO, 0);
- StrCat (NewString, L" MHz");
-
- TokenToUpdate = (STRING_REF)STR_SYSTEM_MEMORY_SPEED_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, NewString, NULL);
- }
-
gBS->FreePool(NewString);
- gBS->FreePool(NewString2);
-
- return;
}
/**
@@ -782,65 +445,23 @@ UpdateAdditionalInformation (
)
{
EFI_STATUS Status;
- UINT64 MonotonicCount;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- EFI_DATA_RECORD_HEADER *Record;
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;
EFI_SMBIOS_PROTOCOL *Smbios;
EFI_SMBIOS_HANDLE SmbiosHandle;
EFI_SMBIOS_TABLE_HEADER *SmbiosRecord;
SMBIOS_TABLE_TYPE0 *Type0Record;
+ SMBIOS_TABLE_TYPE4 *Type4Record;
+ SMBIOS_TABLE_TYPE7 *Type7Record;
+ SMBIOS_TABLE_TYPE17 *Type17Record;
UINT8 StrIndex;
CHAR16 *BiosVersion = NULL;
+ CHAR16 *ProcessorVersion = NULL;
CHAR16 *IfwiVersion = NULL;
UINT16 SearchIndex;
EFI_STRING_ID TokenToUpdate;
-#if defined( RVP_SUPPORT ) && RVP_SUPPORT
- EFI_MISC_SYSTEM_MANUFACTURER *SystemManufacturer;
-#endif
-
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (void **)&DataHub
- );
-
- ASSERT_EFI_ERROR(Status);
-
- MonotonicCount = 0;
- Record = NULL;
- do {
- Status = DataHub->GetNextRecord (
- DataHub,
- &MonotonicCount,
- NULL,
- &Record
- );
- if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1);
-
- if (CompareGuid(&Record->DataRecordGuid, &gEfiMiscSubClassGuid) &&
- (DataHeader->RecordType == EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER)) {
-#if defined( RVP_SUPPORT ) && RVP_SUPPORT
- //
- // System Information
- //
- SystemManufacturer = (EFI_MISC_SYSTEM_MANUFACTURER *)(DataHeader + 1);
-
- //
- // UUID (System Information)
- //
- SMBIOSString = EfiLibAllocateZeroPool (0x100);
- GuidToString ( &SystemManufacturer->SystemUuid, SMBIOSString, 0x00 );
-
- TokenToUpdate = (STRING_REF)STR_SYSTEM_UUID_VALUE;
- HiiSetString(mHiiHandle, TokenToUpdate, SMBIOSString, NULL);
-
- gBS->FreePool(SMBIOSString);
-#endif
- }
- }
- } while (!EFI_ERROR(Status) && (MonotonicCount != 0));
+ UINT32 MicrocodeRevision;
+ CHAR16 NewString[0x100];
+ UINTN TotalMemorySize;
+ UINT16 MemorySpeed;
Status = gBS->LocateProtocol (
&gEfiSmbiosProtocolGuid,
@@ -850,6 +471,8 @@ UpdateAdditionalInformation (
ASSERT_EFI_ERROR (Status);
SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
+ TotalMemorySize = 0;
+ MemorySpeed = 0xffff;
do {
Status = Smbios->GetNext (
Smbios,
@@ -858,6 +481,70 @@ UpdateAdditionalInformation (
&SmbiosRecord,
NULL
);
+
+
+ if (SmbiosRecord->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) {
+ Type4Record = (SMBIOS_TABLE_TYPE4 *) SmbiosRecord;
+ UnicodeSPrint (NewString, sizeof (NewString), L"%d.%d GHz",
+ Type4Record->CurrentSpeed / 1000,
+ Type4Record->CurrentSpeed % 1000
+ );
+ HiiSetString (mHiiHandle, STR_PROCESSOR_SPEED_VALUE, NewString, NULL);
+
+ StrIndex = Type4Record->ProcessorVersion;
+ GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type4Record + Type4Record->Hdr.Length), StrIndex, &ProcessorVersion);
+ HiiSetString (mHiiHandle, STR_PROCESSOR_VERSION_VALUE, ProcessorVersion, NULL);
+
+ MicrocodeRevision = (UINT32) RShiftU64 (AsmReadMsr64 (EFI_MSR_IA32_BIOS_SIGN_ID), 32);
+ UnicodeSPrint (NewString, sizeof (NewString), L"%8x", MicrocodeRevision);
+ HiiSetString (mHiiHandle, STR_PROCESSOR_MICROCODE_VALUE, NewString, NULL);
+ }
+ if (SmbiosRecord->Type == SMBIOS_TYPE_CACHE_INFORMATION) {
+ Type7Record = (SMBIOS_TABLE_TYPE7 *) SmbiosRecord;
+ UnicodeSPrint (NewString, sizeof (NewString), L"%d KB", Type7Record->InstalledSize);
+ switch (Type7Record->CacheConfiguration & 0x03) {
+ case 0:
+ //
+ // Level 1 Cache
+ //
+ if (Type7Record->SystemCacheType == CacheTypeInstruction) {
+ HiiSetString (mHiiHandle, STR_PROCESSOR_L1_INSTR_CACHE_VALUE, NewString, NULL);
+ }
+ if (Type7Record->SystemCacheType == CacheTypeData) {
+ HiiSetString (mHiiHandle, STR_PROCESSOR_L1_DATA_CACHE_VALUE, NewString, NULL);
+ }
+ break;
+ case 1:
+ //
+ // Level 2 Cache
+ //
+ HiiSetString (mHiiHandle, STR_PROCESSOR_L2_CACHE_VALUE, NewString, NULL);
+ break;
+ default:
+ break;
+ }
+ HiiSetString (mHiiHandle, STR_PROCESSOR_MICROCODE_VALUE, NewString, NULL);
+ }
+ if (SmbiosRecord->Type == EFI_SMBIOS_TYPE_MEMORY_DEVICE) {
+ Type17Record = (SMBIOS_TABLE_TYPE17 *) SmbiosRecord;
+ if (Type17Record->Size > 0) {
+ if ((Type17Record->Size & BIT15) != 0) {
+ //
+ // Size is in KB
+ //
+ TotalMemorySize = TotalMemorySize + Type17Record->Size;
+ } else {
+ //
+ // Size is in MB
+ //
+ TotalMemorySize = TotalMemorySize + (UINTN)LShiftU64 (Type17Record->Size, 10);
+ }
+ if (Type17Record->Speed < MemorySpeed) {
+ MemorySpeed = Type17Record->Speed;
+ }
+ }
+ }
+
if (SmbiosRecord->Type == EFI_SMBIOS_TYPE_BIOS_INFORMATION) {
Type0Record = (SMBIOS_TABLE_TYPE0 *) SmbiosRecord;
StrIndex = Type0Record->BiosVersion;
@@ -884,6 +571,16 @@ UpdateAdditionalInformation (
}
} while (!EFI_ERROR(Status));
+ if ((TotalMemorySize % 1024) != 0) {
+ UnicodeSPrint (NewString, sizeof (NewString), L"%d.%d GB", TotalMemorySize / 1024, ((TotalMemorySize % 1024) * 100) / 1024);
+ } else {
+ UnicodeSPrint (NewString, sizeof (NewString), L"%d GB", TotalMemorySize / 1024);
+ }
+ HiiSetString (mHiiHandle, STR_TOTAL_MEMORY_SIZE_VALUE, NewString, NULL);
+
+ UnicodeSPrint (NewString, sizeof (NewString), L"%d MHz", MemorySpeed);
+ HiiSetString(mHiiHandle, STR_SYSTEM_MEMORY_SPEED_VALUE, NewString, NULL);
+
UpdateLatestBootTime();
return EFI_SUCCESS;
--git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h
index e339b31065..f95e6bbc2d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/CommonHeader.h
@@ -3,11 +3,10 @@
This file includes package header files, library classes and protocol, PPI & GUID definitions.
- Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
**/
#ifndef __COMMON_HEADER_H_
@@ -15,11 +14,10 @@
-#include <FrameworkDxe.h>
+#include <PiDxe.h>
#include <IndustryStandard/SmBios.h>
#include <Protocol/Smbios.h>
-#include <Guid/DataHubRecords.h>
#include <Guid/MdeModuleHii.h>
#include <Library/DebugLib.h>
@@ -36,4 +34,6 @@
#include <Library/PchPlatformLib.h>
#include <Library/PrintLib.h>
+#include "DataHubRecords.h"
+
#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords.h b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords.h
new file mode 100644
index 0000000000..f57a5a8c0f
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords.h
@@ -0,0 +1,2934 @@
+/** @file
+ DataHubRecord.h includes all data hub subclass GUID definitions.
+
+ This file includes all data hub sub class defitions from
+ Cache subclass specification 0.9, DataHub SubClass specification 0.9, Memory SubClass Spec 0.9,
+ Processor Subclass specification 0.9, and Misc SubClass specification 0.9.
+
+Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+#ifndef _DATAHUB_RECORDS_GUID_H_
+#define _DATAHUB_RECORDS_GUID_H_
+
+//
+// Local defintion of STRING_REF
+//
+typedef UINT16 STRING_REF;
+
+//
+// The include is required to retrieve type EFI_EXP_BASE10_DATA
+//
+#include <Guid/StatusCodeDataTypeId.h>
+
+#define EFI_PROCESSOR_SUBCLASS_GUID \
+ { 0x26fdeb7e, 0xb8af, 0x4ccf, {0xaa, 0x97, 0x02, 0x63, 0x3c, 0xe4, 0x8c, 0xa7 } }
+
+extern EFI_GUID gEfiProcessorSubClassGuid;
+
+
+#define EFI_CACHE_SUBCLASS_GUID \
+ { 0x7f0013a7, 0xdc79, 0x4b22, {0x80, 0x99, 0x11, 0xf7, 0x5f, 0xdc, 0x82, 0x9d } }
+
+extern EFI_GUID gEfiCacheSubClassGuid;
+
+///
+/// The memory subclass belongs to the data class and is identified as the memory
+/// subclass by the GUID.
+///
+#define EFI_MEMORY_SUBCLASS_GUID \
+ {0x4E8F4EBB, 0x64B9, 0x4e05, {0x9B, 0x18, 0x4C, 0xFE, 0x49, 0x23, 0x50, 0x97} }
+
+extern EFI_GUID gEfiMemorySubClassGuid;
+
+#define EFI_MISC_SUBCLASS_GUID \
+ { 0x772484B2, 0x7482, 0x4b91, {0x9F, 0x9A, 0xAD, 0x43, 0xF8, 0x1C, 0x58, 0x81 } }
+
+extern EFI_GUID gEfiMiscSubClassGuid;
+
+
+///
+/// Inconsistent with specification here:
+/// In ProcSubclass specification 0.9, the value is 0x0100.
+/// Keep it unchanged from the perspective of binary consistency.
+///
+#define EFI_PROCESSOR_SUBCLASS_VERSION 0x00010000
+
+#pragma pack(1)
+
+typedef struct _USB_PORT_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH PciBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} USB_PORT_DEVICE_PATH;
+
+//
+// IDE
+//
+typedef struct _IDE_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH PciBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} IDE_DEVICE_PATH;
+
+//
+// RMC Connector
+//
+typedef struct _RMC_CONN_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH PciBridgeDevicePath;
+ PCI_DEVICE_PATH PciBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} RMC_CONN_DEVICE_PATH;
+
+//
+// RIDE
+//
+typedef struct _RIDE_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH PciBridgeDevicePath;
+ PCI_DEVICE_PATH PciBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} RIDE_DEVICE_PATH;
+
+//
+// Gigabit NIC
+//
+typedef struct _GB_NIC_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH PciBridgeDevicePath;
+ PCI_DEVICE_PATH PciXBridgeDevicePath;
+ PCI_DEVICE_PATH PciXBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} GB_NIC_DEVICE_PATH;
+
+//
+// P/S2 Connector
+//
+typedef struct _PS2_CONN_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH LpcBridgeDevicePath;
+ ACPI_HID_DEVICE_PATH LpcBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} PS2_CONN_DEVICE_PATH;
+
+//
+// Serial Port Connector
+//
+typedef struct _SERIAL_CONN_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH LpcBridgeDevicePath;
+ ACPI_HID_DEVICE_PATH LpcBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} SERIAL_CONN_DEVICE_PATH;
+
+//
+// Parallel Port Connector
+//
+typedef struct _PARALLEL_CONN_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH LpcBridgeDevicePath;
+ ACPI_HID_DEVICE_PATH LpcBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} PARALLEL_CONN_DEVICE_PATH;
+
+//
+// Floopy Connector
+//
+typedef struct _FLOOPY_CONN_DEVICE_PATH {
+ ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;
+ PCI_DEVICE_PATH LpcBridgeDevicePath;
+ ACPI_HID_DEVICE_PATH LpcBusDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
+} FLOOPY_CONN_DEVICE_PATH;
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+/// It's implementation-specific to simplify the code logic.
+///
+typedef union _EFI_MISC_PORT_DEVICE_PATH {
+ USB_PORT_DEVICE_PATH UsbDevicePath;
+ IDE_DEVICE_PATH IdeDevicePath;
+ RMC_CONN_DEVICE_PATH RmcConnDevicePath;
+ RIDE_DEVICE_PATH RideDevicePath;
+ GB_NIC_DEVICE_PATH GbNicDevicePath;
+ PS2_CONN_DEVICE_PATH Ps2ConnDevicePath;
+ SERIAL_CONN_DEVICE_PATH SerialConnDevicePath;
+ PARALLEL_CONN_DEVICE_PATH ParallelConnDevicePath;
+ FLOOPY_CONN_DEVICE_PATH FloppyConnDevicePath;
+} EFI_MISC_PORT_DEVICE_PATH;
+
+#pragma pack()
+
+///
+/// String Token Definition
+///
+/// Inconsistent with specification here:
+/// The macro isn't defined by any specification.
+/// Keep it unchanged for backward compatibility.
+///
+#define EFI_STRING_TOKEN UINT16
+
+///
+/// Each data record that is a member of some subclass starts with a standard
+/// header of type EFI_SUBCLASS_TYPE1_HEADER.
+/// This header is only a guideline and applicable only to a data
+/// subclass that is producing SMBIOS data records. A subclass can start with a
+/// different header if needed.
+///
+typedef struct {
+ ///
+ /// The version of the specification to which a specific subclass data record adheres.
+ ///
+ UINT32 Version;
+ ///
+ /// The size in bytes of this data class header.
+ ///
+ UINT32 HeaderSize;
+ ///
+ /// The instance number of the subclass with the same ProducerName. This number is
+ /// applicable in cases where multiple subclass instances that were produced by the same
+ /// driver exist in the system. This entry is 1 based; 0 means Reserved and -1 means Not
+ /// Applicable. All data consumer drivers should be able to handle all the possible values
+ /// of Instance, including Not Applicable and Reserved.
+ ///
+ UINT16 Instance;
+ ///
+ /// The instance number of the RecordType for the same Instance. This number is
+ /// applicable in cases where multiple instances of the RecordType exist for a specific
+ /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not Applicable.
+ /// All data consumer drivers should be able to handle all the possible values of
+ /// SubInstance, including Not Applicable and Reserved.
+ ///
+ UINT16 SubInstance;
+ ///
+ /// The record number for the data record being specified. The numbering scheme and
+ /// definition is defined in the specific subclass specification.
+ ///
+ UINT32 RecordType;
+} EFI_SUBCLASS_TYPE1_HEADER;
+
+///
+/// This structure is used to link data records in the same subclasses. A data record is
+/// defined as a link to another data record in the same subclass using this structure.
+///
+typedef struct {
+ ///
+ /// An EFI_GUID that identifies the component that produced this data record. Type
+ /// EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.
+ ///
+ EFI_GUID ProducerName;
+ ///
+ /// The instance number of the subclass with the same ProducerName. This number is
+ /// applicable in cases where multiple subclass instances that were produced by the same
+ /// driver exist in the system. This entry is 1 based; 0 means Reserved and -1 means Not
+ /// Applicable. All data consumer drivers should be able to handle all the possible values
+ /// of Instance, including Not Applicable and Reserved.
+ ///
+ UINT16 Instance;
+ /// The instance number of the RecordType for the same Instance. This number is
+ /// applicable in cases where multiple instances of the RecordType exist for a specific
+ /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not Applicable.
+ /// All data consumer drivers should be able to handle all the possible values of
+ /// SubInstance, including Not Applicable and Reserved.
+ UINT16 SubInstance;
+} EFI_INTER_LINK_DATA;
+
+//
+// EXP data
+//
+///
+/// This macro provides a calculation for base-10 representations. Value and Exponent are each
+/// INT16. It is signed to cover negative values and is 16 bits wide (15 bits for data and 1 bit
+/// for the sign).
+///
+typedef struct {
+ ///
+ /// The INT16 number by which to multiply the base-10 representation.
+ ///
+ UINT16 Value;
+ ///
+ /// The INT16 number by which to raise the base-10 calculation.
+ ///
+ UINT16 Exponent;
+} EFI_EXP_BASE2_DATA;
+
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA;
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA;
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_CORE_FREQUENCY_DATA;
+
+///
+/// This data record refers to the list of frequencies that the processor core supports. The list of
+/// supported frequencies is determined by the firmware based on hardware capabilities--for example,
+/// it could be a common subset of all processors and the chipset. The unit of measurement of this data
+/// record is in Hertz. For asynchronous processors, the content of this data record is zero.
+/// The list is terminated by -1 in the Value field of the last element. A Value field of zero means
+/// that the processor/driver supports automatic frequency selection.
+///
+/// Inconsistent with specification here:
+/// According to MiscSubclass 0.9 specification, it should be a pointer since it refers to a list of frequencies.
+///
+typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA;
+
+///
+/// This data record refers to the list of supported frequencies of the processor external bus. The list of
+/// supported frequencies is determined by the firmware based on hardware capabilities--for example,
+/// it could be a common subset of all processors and the chipset. The unit of measurement of this data
+/// record is in Hertz. For asynchronous processors, the content of this data record is NULL.
+/// The list is terminated by -1 in the Value field of the last element. A Value field of zero means
+/// that the processor/driver supports automatic frequency selection.
+///
+typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA;
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_FSB_FREQUENCY_DATA;
+typedef STRING_REF EFI_PROCESSOR_VERSION_DATA;
+typedef STRING_REF EFI_PROCESSOR_MANUFACTURER_DATA;
+typedef STRING_REF EFI_PROCESSOR_SERIAL_NUMBER_DATA;
+typedef STRING_REF EFI_PROCESSOR_ASSET_TAG_DATA;
+typedef STRING_REF EFI_PROCESSOR_PART_NUMBER_DATA;
+
+typedef struct {
+ UINT32 ProcessorSteppingId:4;
+ UINT32 ProcessorModel: 4;
+ UINT32 ProcessorFamily: 4;
+ UINT32 ProcessorType: 2;
+ UINT32 ProcessorReserved1: 2;
+ UINT32 ProcessorXModel: 4;
+ UINT32 ProcessorXFamily: 8;
+ UINT32 ProcessorReserved2: 4;
+} EFI_PROCESSOR_SIGNATURE;
+
+
+///
+/// Inconsistent with specification here:
+/// The name of third field in ProcSubClass specification 0.9 is LogicalProcessorCount.
+/// Keep it unchanged for backward compatibility.
+///
+typedef struct {
+ UINT32 ProcessorBrandIndex :8;
+ UINT32 ProcessorClflush :8;
+ UINT32 ProcessorReserved :8;
+ UINT32 ProcessorDfltApicId :8;
+} EFI_PROCESSOR_MISC_INFO;
+
+typedef struct {
+ UINT32 ProcessorFpu: 1;
+ UINT32 ProcessorVme: 1;
+ UINT32 ProcessorDe: 1;
+ UINT32 ProcessorPse: 1;
+ UINT32 ProcessorTsc: 1;
+ UINT32 ProcessorMsr: 1;
+ UINT32 ProcessorPae: 1;
+ UINT32 ProcessorMce: 1;
+ UINT32 ProcessorCx8: 1;
+ UINT32 ProcessorApic: 1;
+ UINT32 ProcessorReserved1: 1;
+ UINT32 ProcessorSep: 1;
+ UINT32 ProcessorMtrr: 1;
+ UINT32 ProcessorPge: 1;
+ UINT32 ProcessorMca: 1;
+ UINT32 ProcessorCmov: 1;
+ UINT32 ProcessorPat: 1;
+ UINT32 ProcessorPse36: 1;
+ UINT32 ProcessorPsn: 1;
+ UINT32 ProcessorClfsh: 1;
+ UINT32 ProcessorReserved2: 1;
+ UINT32 ProcessorDs: 1;
+ UINT32 ProcessorAcpi: 1;
+ UINT32 ProcessorMmx: 1;
+ UINT32 ProcessorFxsr: 1;
+ UINT32 ProcessorSse: 1;
+ UINT32 ProcessorSse2: 1;
+ UINT32 ProcessorSs: 1;
+ UINT32 ProcessorReserved3: 1;
+ UINT32 ProcessorTm: 1;
+ UINT32 ProcessorReserved4: 2;
+} EFI_PROCESSOR_FEATURE_FLAGS;
+
+///
+/// This data record refers to the unique ID that identifies a set of processors. This data record is 16
+/// bytes in length. The data in this structure is processor specific and reserved values can be defined
+/// for future use. The consumer of this data should not make any assumption and should use this data
+/// with respect to the processor family defined in the Family record number.
+///
+typedef struct {
+ ///
+ /// Identifies the processor.
+ ///
+ EFI_PROCESSOR_SIGNATURE Signature;
+ ///
+ /// Provides additional processor information.
+ ///
+ EFI_PROCESSOR_MISC_INFO MiscInfo;
+ ///
+ /// Reserved for future use.
+ ///
+ UINT32 Reserved;
+ ///
+ /// Provides additional processor information.
+ ///
+ EFI_PROCESSOR_FEATURE_FLAGS FeatureFlags;
+} EFI_PROCESSOR_ID_DATA;
+
+///
+/// This data record refers to the general classification of the processor. This data record is 4 bytes in
+/// length.
+///
+typedef enum {
+ EfiProcessorOther = 1,
+ EfiProcessorUnknown = 2,
+ EfiCentralProcessor = 3,
+ EfiMathProcessor = 4,
+ EfiDspProcessor = 5,
+ EfiVideoProcessor = 6
+} EFI_PROCESSOR_TYPE_DATA;
+
+///
+/// This data record refers to the family of the processor as defined by the DMTF.
+/// This data record is 4 bytes in length.
+///
+typedef enum {
+ EfiProcessorFamilyOther = 0x01,
+ EfiProcessorFamilyUnknown = 0x02,
+ EfiProcessorFamily8086 = 0x03,
+ EfiProcessorFamily80286 = 0x04,
+ EfiProcessorFamilyIntel386 = 0x05,
+ EfiProcessorFamilyIntel486 = 0x06,
+ EfiProcessorFamily8087 = 0x07,
+ EfiProcessorFamily80287 = 0x08,
+ EfiProcessorFamily80387 = 0x09,
+ EfiProcessorFamily80487 = 0x0A,
+ EfiProcessorFamilyPentium = 0x0B,
+ EfiProcessorFamilyPentiumPro = 0x0C,
+ EfiProcessorFamilyPentiumII = 0x0D,
+ EfiProcessorFamilyPentiumMMX = 0x0E,
+ EfiProcessorFamilyCeleron = 0x0F,
+ EfiProcessorFamilyPentiumIIXeon = 0x10,
+ EfiProcessorFamilyPentiumIII = 0x11,
+ EfiProcessorFamilyM1 = 0x12,
+ EfiProcessorFamilyM2 = 0x13,
+ EfiProcessorFamilyM1Reserved2 = 0x14,
+ EfiProcessorFamilyM1Reserved3 = 0x15,
+ EfiProcessorFamilyM1Reserved4 = 0x16,
+ EfiProcessorFamilyM1Reserved5 = 0x17,
+ EfiProcessorFamilyAmdDuron = 0x18,
+ EfiProcessorFamilyK5 = 0x19,
+ EfiProcessorFamilyK6 = 0x1A,
+ EfiProcessorFamilyK6_2 = 0x1B,
+ EfiProcessorFamilyK6_3 = 0x1C,
+ EfiProcessorFamilyAmdAthlon = 0x1D,
+ EfiProcessorFamilyAmd29000 = 0x1E,
+ EfiProcessorFamilyK6_2Plus = 0x1F,
+ EfiProcessorFamilyPowerPC = 0x20,
+ EfiProcessorFamilyPowerPC601 = 0x21,
+ EfiProcessorFamilyPowerPC603 = 0x22,
+ EfiProcessorFamilyPowerPC603Plus = 0x23,
+ EfiProcessorFamilyPowerPC604 = 0x24,
+ EfiProcessorFamilyPowerPC620 = 0x25,
+ EfiProcessorFamilyPowerPCx704 = 0x26,
+ EfiProcessorFamilyPowerPC750 = 0x27,
+ EfiProcessorFamilyAlpha3 = 0x30,
+ EfiProcessorFamilyAlpha21064 = 0x31,
+ EfiProcessorFamilyAlpha21066 = 0x32,
+ EfiProcessorFamilyAlpha21164 = 0x33,
+ EfiProcessorFamilyAlpha21164PC = 0x34,
+ EfiProcessorFamilyAlpha21164a = 0x35,
+ EfiProcessorFamilyAlpha21264 = 0x36,
+ EfiProcessorFamilyAlpha21364 = 0x37,
+ EfiProcessorFamilyMips = 0x40,
+ EfiProcessorFamilyMIPSR4000 = 0x41,
+ EfiProcessorFamilyMIPSR4200 = 0x42,
+ EfiProcessorFamilyMIPSR4400 = 0x43,
+ EfiProcessorFamilyMIPSR4600 = 0x44,
+ EfiProcessorFamilyMIPSR10000 = 0x45,
+ EfiProcessorFamilySparc = 0x50,
+ EfiProcessorFamilySuperSparc = 0x51,
+ EfiProcessorFamilymicroSparcII = 0x52,
+ EfiProcessorFamilymicroSparcIIep = 0x53,
+ EfiProcessorFamilyUltraSparc = 0x54,
+ EfiProcessorFamilyUltraSparcII = 0x55,
+ EfiProcessorFamilyUltraSparcIIi = 0x56,
+ EfiProcessorFamilyUltraSparcIII = 0x57,
+ ///
+ /// Inconsistent with specification here:
+ /// This field in ProcSubClass specification 0.9 is defined as EfiProcessorFamilyUltraSparcIIi.
+ /// Change it to EfiProcessorFamilyUltraSparcIIIi to avoid build break.
+ ///
+ EfiProcessorFamilyUltraSparcIIIi = 0x58,
+ EfiProcessorFamily68040 = 0x60,
+ EfiProcessorFamily68xxx = 0x61,
+ EfiProcessorFamily68000 = 0x62,
+ EfiProcessorFamily68010 = 0x63,
+ EfiProcessorFamily68020 = 0x64,
+ EfiProcessorFamily68030 = 0x65,
+ EfiProcessorFamilyHobbit = 0x70,
+ EfiProcessorFamilyCrusoeTM5000 = 0x78,
+ EfiProcessorFamilyCrusoeTM3000 = 0x79,
+ EfiProcessorFamilyEfficeonTM8000 = 0x7A,
+ EfiProcessorFamilyWeitek = 0x80,
+ EfiProcessorFamilyItanium = 0x82,
+ EfiProcessorFamilyAmdAthlon64 = 0x83,
+ EfiProcessorFamilyAmdOpteron = 0x84,
+ EfiProcessorFamilyAmdSempron = 0x85,
+ EfiProcessorFamilyAmdTurion64Mobile = 0x86,
+ EfiProcessorFamilyDualCoreAmdOpteron = 0x87,
+ EfiProcessorFamilyAmdAthlon64X2DualCore = 0x88,
+ EfiProcessorFamilyAmdTurion64X2Mobile = 0x89,
+ EfiProcessorFamilyPARISC = 0x90,
+ EfiProcessorFamilyPaRisc8500 = 0x91,
+ EfiProcessorFamilyPaRisc8000 = 0x92,
+ EfiProcessorFamilyPaRisc7300LC = 0x93,
+ EfiProcessorFamilyPaRisc7200 = 0x94,
+ EfiProcessorFamilyPaRisc7100LC = 0x95,
+ EfiProcessorFamilyPaRisc7100 = 0x96,
+ EfiProcessorFamilyV30 = 0xA0,
+ EfiProcessorFamilyPentiumIIIXeon = 0xB0,
+ EfiProcessorFamilyPentiumIIISpeedStep = 0xB1,
+ EfiProcessorFamilyPentium4 = 0xB2,
+ EfiProcessorFamilyIntelXeon = 0xB3,
+ EfiProcessorFamilyAS400 = 0xB4,
+ EfiProcessorFamilyIntelXeonMP = 0xB5,
+ EfiProcessorFamilyAMDAthlonXP = 0xB6,
+ EfiProcessorFamilyAMDAthlonMP = 0xB7,
+ EfiProcessorFamilyIntelItanium2 = 0xB8,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelPentiumM = 0xB9,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelCeleronD = 0xBA,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelPentiumD = 0xBB,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelPentiumEx = 0xBC,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelCoreSolo = 0xBD,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyReserved = 0xBE,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIntelCore2 = 0xBF,
+ EfiProcessorFamilyIBM390 = 0xC8,
+ EfiProcessorFamilyG4 = 0xC9,
+ EfiProcessorFamilyG5 = 0xCA,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyG6 = 0xCB,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyzArchitectur = 0xCC,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyViaC7M = 0xD2,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyViaC7D = 0xD3,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyViaC7 = 0xD4,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyViaEden = 0xD5,
+ EfiProcessorFamilyi860 = 0xFA,
+ EfiProcessorFamilyi960 = 0xFB,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyIndicatorFamily2 = 0xFE,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorFamilyReserved1 = 0xFF
+} EFI_PROCESSOR_FAMILY_DATA;
+
+typedef enum {
+ EfiProcessorFamilySh3 = 0x104,
+ EfiProcessorFamilySh4 = 0x105,
+ EfiProcessorFamilyArm = 0x118,
+ EfiProcessorFamilyStrongArm = 0x119,
+ EfiProcessorFamily6x86 = 0x12C,
+ EfiProcessorFamilyMediaGx = 0x12D,
+ EfiProcessorFamilyMii = 0x12E,
+ EfiProcessorFamilyWinChip = 0x140,
+ EfiProcessorFamilyDsp = 0x15E,
+ EfiProcessorFamilyVideo = 0x1F4
+} EFI_PROCESSOR_FAMILY2_DATA;
+
+///
+/// This data record refers to the core voltage of the processor being defined. The unit of measurement
+/// of this data record is in volts.
+///
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_VOLTAGE_DATA;
+
+///
+/// This data record refers to the base address of the APIC of the processor being defined. This data
+/// record is a physical address location.
+///
+typedef EFI_PHYSICAL_ADDRESS EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA;
+
+///
+/// This data record refers to the ID of the APIC of the processor being defined. This data record is a
+/// 4-byte entry.
+///
+typedef UINT32 EFI_PROCESSOR_APIC_ID_DATA;
+
+///
+/// This data record refers to the version number of the APIC of the processor being defined. This data
+/// record is a 4-byte entry.
+///
+typedef UINT32 EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA;
+
+typedef enum {
+ EfiProcessorIa32Microcode = 1,
+ EfiProcessorIpfPalAMicrocode = 2,
+ EfiProcessorIpfPalBMicrocode = 3
+} EFI_PROCESSOR_MICROCODE_TYPE;
+
+///
+/// This data record refers to the revision of the processor microcode that is loaded in the processor.
+/// This data record is a 4-byte entry.
+///
+typedef struct {
+ ///
+ /// Identifies what type of microcode the data is.
+ ///
+ EFI_PROCESSOR_MICROCODE_TYPE ProcessorMicrocodeType;
+ ///
+ /// Indicates the revision number of this microcode.
+ ///
+ UINT32 ProcessorMicrocodeRevisionNumber;
+} EFI_PROCESSOR_MICROCODE_REVISION_DATA;
+
+///
+/// This data record refers to the status of the processor.
+///
+typedef struct {
+ UINT32 CpuStatus :3; ///< Indicates the status of the processor.
+ UINT32 Reserved1 :3; ///< Reserved for future use. Should be set to zero.
+ UINT32 SocketPopulated :1; ///< Indicates if the processor is socketed or not.
+ UINT32 Reserved2 :1; ///< Reserved for future use. Should be set to zero.
+ UINT32 ApicEnable :1; ///< Indicates if the APIC is enabled or not.
+ UINT32 BootApplicationProcessor :1; ///< Indicates if this processor is the boot processor.
+ UINT32 Reserved3 :22;///< Reserved for future use. Should be set to zero.
+} EFI_PROCESSOR_STATUS_DATA;
+
+typedef enum {
+ EfiCpuStatusUnknown = 0,
+ EfiCpuStatusEnabled = 1,
+ EfiCpuStatusDisabledByUser = 2,
+ EfiCpuStatusDisabledbyBios = 3,
+ EfiCpuStatusIdle = 4,
+ EfiCpuStatusOther = 7
+} EFI_CPU_STATUS;
+
+typedef enum {
+ EfiProcessorSocketOther = 1,
+ EfiProcessorSocketUnknown = 2,
+ EfiProcessorSocketDaughterBoard = 3,
+ EfiProcessorSocketZIF = 4,
+ EfiProcessorSocketReplacePiggyBack = 5,
+ EfiProcessorSocketNone = 6,
+ EfiProcessorSocketLIF = 7,
+ EfiProcessorSocketSlot1 = 8,
+ EfiProcessorSocketSlot2 = 9,
+ EfiProcessorSocket370Pin = 0xA,
+ EfiProcessorSocketSlotA = 0xB,
+ EfiProcessorSocketSlotM = 0xC,
+ EfiProcessorSocket423 = 0xD,
+ EfiProcessorSocketA462 = 0xE,
+ EfiProcessorSocket478 = 0xF,
+ EfiProcessorSocket754 = 0x10,
+ EfiProcessorSocket940 = 0x11,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorSocket939 = 0x12,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorSocketmPGA604 = 0x13,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorSocketLGA771 = 0x14,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in ProcSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiProcessorSocketLGA775 = 0x15
+
+} EFI_PROCESSOR_SOCKET_TYPE_DATA;
+
+typedef STRING_REF EFI_PROCESSOR_SOCKET_NAME_DATA;
+
+///
+/// Inconsistent with specification here:
+/// In ProcSubclass specification 0.9, the naming is EFI_PROCESSOR_CACHE_ASSOCIATION_DATA.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef EFI_INTER_LINK_DATA EFI_CACHE_ASSOCIATION_DATA;
+
+///
+/// This data record refers to the health status of the processor.
+///
+/// Inconsistent with specification here:
+/// In ProcSubclass specification 0.9, the naming is EFI_PROCESSOR_HEALTH_STATUS_DATA.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef enum {
+ EfiProcessorHealthy = 1,
+ EfiProcessorPerfRestricted = 2,
+ EfiProcessorFuncRestricted = 3
+} EFI_PROCESSOR_HEALTH_STATUS;
+
+///
+/// This data record refers to the package number of this processor. Multiple logical processors can
+/// exist in a system and each logical processor can be correlated to the physical processor using this
+/// record type.
+///
+typedef UINTN EFI_PROCESSOR_PACKAGE_NUMBER_DATA;
+
+typedef UINT8 EFI_PROCESSOR_CORE_COUNT_DATA;
+typedef UINT8 EFI_PROCESSOR_ENABLED_CORE_COUNT_DATA;
+typedef UINT8 EFI_PROCESSOR_THREAD_COUNT_DATA;
+
+typedef struct {
+ UINT16 Reserved :1;
+ UINT16 Unknown :1;
+ UINT16 Capable64Bit :1;
+ UINT16 Reserved2 :13;
+} EFI_PROCESSOR_CHARACTERISTICS_DATA;
+
+///
+/// Inconsistent with specification here:
+/// In ProcSubclass specification 0.9, the enumeration type data structure is NOT defined.
+/// The equivalent in specification is
+/// #define EFI_PROCESSOR_FREQUENCY_RECORD_NUMBER 0x00000001
+/// #define EFI_PROCESSOR_BUS_FREQUENCY_RECORD_NUMBER 0x00000002
+/// #define EFI_PROCESSOR_VERSION_RECORD_NUMBER 0x00000003
+/// #define EFI_PROCESSOR_MANUFACTURER_RECORD_NUMBER 0x00000004
+/// #define EFI_PROCESSOR_SERIAL_NUMBER_RECORD_NUMBER 0x00000005
+/// #define EFI_PROCESSOR_ID_RECORD_NUMBER 0x00000006
+/// #define EFI_PROCESSOR_TYPE_RECORD_NUMBER 0x00000007
+/// #define EFI_PROCESSOR_FAMILY_RECORD_NUMBER 0x00000008
+/// #define EFI_PROCESSOR_VOLTAGE_RECORD_NUMBER 0x00000009
+/// #define EFI_PROCESSOR_APIC_BASE_ADDRESS_RECORD_NUMBER 0x0000000A
+/// #define EFI_PROCESSOR_APIC_ID_RECORD_NUMBER 0x0000000B
+/// #define EFI_PROCESSOR_APIC_VER_NUMBER_RECORD_NUMBER 0x0000000C
+/// #define EFI_PROCESSOR_MICROCODE_REVISION_RECORD_NUMBER 0x0000000D
+/// #define EFI_PROCESSOR_STATUS_RECORD_NUMBER 0x0000000E
+/// #define EFI_PROCESSOR_SOCKET_TYPE_RECORD_NUMBER 0x0000000F
+/// #define EFI_PROCESSOR_SOCKET_NAME_RECORD_NUMBER 0x00000010
+/// #define EFI_PROCESSOR_CACHE_ASSOCIATION_RECORD_NUMBER 0x00000011
+/// #define EFI_PROCESSOR_MAX_FREQUENCY_RECORD_NUMBER 0x00000012
+/// #define EFI_PROCESSOR_ASSET_TAG_RECORD_NUMBER 0x00000013
+/// #define EFI_PROCESSOR_MAX_FSB_FREQUENCY_RECORD_NUMBER 0x00000014
+/// #define EFI_PROCESSOR_PACKAGE_NUMBER_RECORD_NUMBER 0x00000015
+/// #define EFI_PROCESSOR_FREQUENCY_LIST_RECORD_NUMBER 0x00000016
+/// #define EFI_PROCESSOR_FSB_FREQUENCY_LIST_RECORD_NUMBER 0x00000017
+/// #define EFI_PROCESSOR_HEALTH_STATUS_RECORD_NUMBER 0x00000018
+///
+/// Keep the definition unchanged for backward compatibility.
+typedef enum {
+ ProcessorCoreFrequencyRecordType = 1,
+ ProcessorFsbFrequencyRecordType = 2,
+ ProcessorVersionRecordType = 3,
+ ProcessorManufacturerRecordType = 4,
+ ProcessorSerialNumberRecordType = 5,
+ ProcessorIdRecordType = 6,
+ ProcessorTypeRecordType = 7,
+ ProcessorFamilyRecordType = 8,
+ ProcessorVoltageRecordType = 9,
+ ProcessorApicBaseAddressRecordType = 10,
+ ProcessorApicIdRecordType = 11,
+ ProcessorApicVersionNumberRecordType = 12,
+ CpuUcodeRevisionDataRecordType = 13,
+ ProcessorStatusRecordType = 14,
+ ProcessorSocketTypeRecordType = 15,
+ ProcessorSocketNameRecordType = 16,
+ CacheAssociationRecordType = 17,
+ ProcessorMaxCoreFrequencyRecordType = 18,
+ ProcessorAssetTagRecordType = 19,
+ ProcessorMaxFsbFrequencyRecordType = 20,
+ ProcessorPackageNumberRecordType = 21,
+ ProcessorCoreFrequencyListRecordType = 22,
+ ProcessorFsbFrequencyListRecordType = 23,
+ ProcessorHealthStatusRecordType = 24,
+ ProcessorCoreCountRecordType = 25,
+ ProcessorEnabledCoreCountRecordType = 26,
+ ProcessorThreadCountRecordType = 27,
+ ProcessorCharacteristicsRecordType = 28,
+ ProcessorFamily2RecordType = 29,
+ ProcessorPartNumberRecordType = 30,
+} EFI_CPU_VARIABLE_RECORD_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In ProcSubclass specification 0.9, the union type data structure is NOT defined.
+/// It's implementation-specific to simplify the code logic.
+///
+typedef union {
+ EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA ProcessorCoreFrequencyList;
+ EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA ProcessorFsbFrequencyList;
+ EFI_PROCESSOR_SERIAL_NUMBER_DATA ProcessorSerialNumber;
+ EFI_PROCESSOR_CORE_FREQUENCY_DATA ProcessorCoreFrequency;
+ EFI_PROCESSOR_FSB_FREQUENCY_DATA ProcessorFsbFrequency;
+ EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA ProcessorMaxCoreFrequency;
+ EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA ProcessorMaxFsbFrequency;
+ EFI_PROCESSOR_VERSION_DATA ProcessorVersion;
+ EFI_PROCESSOR_MANUFACTURER_DATA ProcessorManufacturer;
+ EFI_PROCESSOR_ID_DATA ProcessorId;
+ EFI_PROCESSOR_TYPE_DATA ProcessorType;
+ EFI_PROCESSOR_FAMILY_DATA ProcessorFamily;
+ EFI_PROCESSOR_VOLTAGE_DATA ProcessorVoltage;
+ EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA ProcessorApicBase;
+ EFI_PROCESSOR_APIC_ID_DATA ProcessorApicId;
+ EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA ProcessorApicVersionNumber;
+ EFI_PROCESSOR_MICROCODE_REVISION_DATA CpuUcodeRevisionData;
+ EFI_PROCESSOR_STATUS_DATA ProcessorStatus;
+ EFI_PROCESSOR_SOCKET_TYPE_DATA ProcessorSocketType;
+ EFI_PROCESSOR_SOCKET_NAME_DATA ProcessorSocketName;
+ EFI_PROCESSOR_ASSET_TAG_DATA ProcessorAssetTag;
+ EFI_PROCESSOR_PART_NUMBER_DATA ProcessorPartNumber;
+ EFI_PROCESSOR_HEALTH_STATUS ProcessorHealthStatus;
+ EFI_PROCESSOR_PACKAGE_NUMBER_DATA ProcessorPackageNumber;
+ EFI_PROCESSOR_CORE_COUNT_DATA ProcessorCoreCount;
+ EFI_PROCESSOR_ENABLED_CORE_COUNT_DATA ProcessorEnabledCoreCount;
+ EFI_PROCESSOR_THREAD_COUNT_DATA ProcessorThreadCount;
+ EFI_PROCESSOR_CHARACTERISTICS_DATA ProcessorCharacteristics;
+ EFI_PROCESSOR_FAMILY2_DATA ProcessorFamily2;
+} EFI_CPU_VARIABLE_RECORD;
+
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader;
+ EFI_CPU_VARIABLE_RECORD VariableRecord;
+} EFI_CPU_DATA_RECORD;
+
+#define EFI_CACHE_SUBCLASS_VERSION 0x00010000
+
+typedef EFI_EXP_BASE2_DATA EFI_CACHE_SIZE_DATA;
+///
+/// Inconsistent with specification here:
+/// In CacheSubclass specification 0.9, the naming is EFI_CACHE_MAXIMUM_SIZE_DATA.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef EFI_EXP_BASE2_DATA EFI_MAXIMUM_CACHE_SIZE_DATA;
+typedef EFI_EXP_BASE10_DATA EFI_CACHE_SPEED_DATA;
+typedef STRING_REF EFI_CACHE_SOCKET_DATA;
+
+typedef struct {
+ UINT32 Other :1;
+ UINT32 Unknown :1;
+ UINT32 NonBurst :1;
+ UINT32 Burst :1;
+ UINT32 PipelineBurst :1;
+ ///
+ /// Inconsistent between CacheSubclass 0.9 and SMBIOS specifications here:
+ /// In CacheSubclass specification 0.9, the sequence of Asynchronous and Synchronous fileds
+ /// are opposite to SMBIOS specification.
+ ///
+ UINT32 Asynchronous :1;
+ UINT32 Synchronous :1;
+ UINT32 Reserved :25;
+} EFI_CACHE_SRAM_TYPE_DATA;
+
+typedef EFI_CACHE_SRAM_TYPE_DATA EFI_CACHE_SRAM_INSTALL_DATA;
+
+typedef enum {
+ EfiCacheErrorOther = 1,
+ EfiCacheErrorUnknown = 2,
+ EfiCacheErrorNone = 3,
+ EfiCacheErrorParity = 4,
+ EfiCacheErrorSingleBit = 5,
+ EfiCacheErrorMultiBit = 6
+} EFI_CACHE_ERROR_TYPE_DATA;
+
+typedef enum {
+ EfiCacheTypeOther = 1,
+ EfiCacheTypeUnknown = 2,
+ EfiCacheTypeInstruction = 3,
+ EfiCacheTypeData = 4,
+ EfiCacheTypeUnified = 5
+} EFI_CACHE_TYPE_DATA;
+
+typedef enum {
+ EfiCacheAssociativityOther = 1,
+ EfiCacheAssociativityUnknown = 2,
+ EfiCacheAssociativityDirectMapped = 3,
+ EfiCacheAssociativity2Way = 4,
+ EfiCacheAssociativity4Way = 5,
+ EfiCacheAssociativityFully = 6,
+ EfiCacheAssociativity8Way = 7,
+ EfiCacheAssociativity16Way = 8
+} EFI_CACHE_ASSOCIATIVITY_DATA;
+
+///
+/// Inconsistent with specification here:
+/// In CacheSubclass 0.9 specification. It defines the field type as UINT16.
+/// In fact, it should be UINT32 type because it refers to a 32bit width data.
+///
+typedef struct {
+ UINT32 Level :3;
+ UINT32 Socketed :1;
+ UINT32 Reserved2 :1;
+ UINT32 Location :2;
+ UINT32 Enable :1;
+ UINT32 OperationalMode :2;
+ UINT32 Reserved1 :22;
+} EFI_CACHE_CONFIGURATION_DATA;
+
+#define EFI_CACHE_L1 1
+#define EFI_CACHE_L2 2
+#define EFI_CACHE_L3 3
+#define EFI_CACHE_L4 4
+#define EFI_CACHE_LMAX EFI_CACHE_L4
+
+#define EFI_CACHE_SOCKETED 1
+#define EFI_CACHE_NOT_SOCKETED 0
+
+typedef enum {
+ EfiCacheInternal = 0,
+ EfiCacheExternal = 1,
+ EfiCacheReserved = 2,
+ EfiCacheUnknown = 3
+} EFI_CACHE_LOCATION;
+
+#define EFI_CACHE_ENABLED 1
+#define EFI_CACHE_DISABLED 0
+
+typedef enum {
+ EfiCacheWriteThrough = 0,
+ EfiCacheWriteBack = 1,
+ EfiCacheDynamicMode = 2,
+ EfiCacheUnknownMode = 3
+} EFI_CACHE_OPERATIONAL_MODE;
+
+
+///
+/// Inconsistent with specification here:
+/// In CacheSubclass specification 0.9, the enumeration type data structure is NOT defined.
+/// The equivalent in specification is
+/// #define EFI_CACHE_SIZE_RECORD_NUMBER 0x00000001
+/// #define EFI_CACHE_MAXIMUM_SIZE_RECORD_NUMBER 0x00000002
+/// #define EFI_CACHE_SPEED_RECORD_NUMBER 0x00000003
+/// #define EFI_CACHE_SOCKET_RECORD_NUMBER 0x00000004
+/// #define EFI_CACHE_SRAM_SUPPORT_RECORD_NUMBER 0x00000005
+/// #define EFI_CACHE_SRAM_INSTALL_RECORD_NUMBER 0x00000006
+/// #define EFI_CACHE_ERROR_SUPPORT_RECORD_NUMBER 0x00000007
+/// #define EFI_CACHE_TYPE_RECORD_NUMBER 0x00000008
+/// #define EFI_CACHE_ASSOCIATIVITY_RECORD_NUMBER 0x00000009
+/// #define EFI_CACHE_CONFIGURATION_RECORD_NUMBER 0x0000000A
+/// Keep the definition unchanged for backward compatibility.
+///
+typedef enum {
+ CacheSizeRecordType = 1,
+ MaximumSizeCacheRecordType = 2,
+ CacheSpeedRecordType = 3,
+ CacheSocketRecordType = 4,
+ CacheSramTypeRecordType = 5,
+ CacheInstalledSramTypeRecordType = 6,
+ CacheErrorTypeRecordType = 7,
+ CacheTypeRecordType = 8,
+ CacheAssociativityRecordType = 9,
+ CacheConfigRecordType = 10
+} EFI_CACHE_VARIABLE_RECORD_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In CacheSubclass specification 0.9, the union type data structure is NOT defined.
+/// It's implementation-specific to simplify the code logic.
+///
+typedef union {
+ EFI_CACHE_SIZE_DATA CacheSize;
+ EFI_MAXIMUM_CACHE_SIZE_DATA MaximumCacheSize;
+ EFI_CACHE_SPEED_DATA CacheSpeed;
+ EFI_CACHE_SOCKET_DATA CacheSocket;
+ EFI_CACHE_SRAM_TYPE_DATA CacheSramType;
+ EFI_CACHE_SRAM_TYPE_DATA CacheInstalledSramType;
+ EFI_CACHE_ERROR_TYPE_DATA CacheErrorType;
+ EFI_CACHE_TYPE_DATA CacheType;
+ EFI_CACHE_ASSOCIATIVITY_DATA CacheAssociativity;
+ EFI_CACHE_CONFIGURATION_DATA CacheConfig;
+ EFI_CACHE_ASSOCIATION_DATA CacheAssociation;
+} EFI_CACHE_VARIABLE_RECORD;
+
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader;
+ EFI_CACHE_VARIABLE_RECORD VariableRecord;
+} EFI_CACHE_DATA_RECORD;
+
+#define EFI_MEMORY_SUBCLASS_VERSION 0x0100
+#define EFI_MEMORY_SIZE_RECORD_NUMBER 0x00000001
+
+typedef enum _EFI_MEMORY_REGION_TYPE {
+ EfiMemoryRegionMemory = 0x01,
+ EfiMemoryRegionReserved = 0x02,
+ EfiMemoryRegionAcpi = 0x03,
+ EfiMemoryRegionNvs = 0x04
+} EFI_MEMORY_REGION_TYPE;
+
+///
+/// This data record refers to the size of a memory region. The regions that are
+/// described can refer to physical memory, memory-mapped I/O, or reserved BIOS memory regions.
+/// The unit of measurement of this data record is in bytes.
+///
+typedef struct {
+ ///
+ /// A zero-based value that indicates which processor(s) can access the memory region.
+ /// A value of 0xFFFF indicates the region is accessible by all processors.
+ ///
+ UINT32 ProcessorNumber;
+ ///
+ /// A zero-based value that indicates the starting bus that can access the memory region.
+ ///
+ UINT16 StartBusNumber;
+ ///
+ /// A zero-based value that indicates the ending bus that can access the memory region.
+ /// A value of 0xFF for a PCI system indicates the region is accessible by all buses and
+ /// is global in scope. An example of the EndBusNumber not being 0xFF is a system
+ /// with two or more peer-to-host PCI bridges.
+ ///
+ UINT16 EndBusNumber;
+ ///
+ /// The type of memory region from the operating system's point of view.
+ /// MemoryRegionType values are equivalent to the legacy INT 15 AX = E820 BIOS
+ /// command values.
+ ///
+ EFI_MEMORY_REGION_TYPE MemoryRegionType;
+ ///
+ /// The size of the memory region in bytes.
+ ///
+ EFI_EXP_BASE2_DATA MemorySize;
+ ///
+ /// The starting physical address of the memory region.
+ ///
+ EFI_PHYSICAL_ADDRESS MemoryStartAddress;
+} EFI_MEMORY_SIZE_DATA;
+
+
+#define EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER 0x00000002
+
+typedef enum _EFI_MEMORY_ARRAY_LOCATION {
+ EfiMemoryArrayLocationOther = 0x01,
+ EfiMemoryArrayLocationUnknown = 0x02,
+ EfiMemoryArrayLocationSystemBoard = 0x03,
+ EfiMemoryArrayLocationIsaAddonCard = 0x04,
+ EfiMemoryArrayLocationEisaAddonCard = 0x05,
+ EfiMemoryArrayLocationPciAddonCard = 0x06,
+ EfiMemoryArrayLocationMcaAddonCard = 0x07,
+ EfiMemoryArrayLocationPcmciaAddonCard = 0x08,
+ EfiMemoryArrayLocationProprietaryAddonCard = 0x09,
+ EfiMemoryArrayLocationNuBus = 0x0A,
+ EfiMemoryArrayLocationPc98C20AddonCard = 0xA0,
+ EfiMemoryArrayLocationPc98C24AddonCard = 0xA1,
+ EfiMemoryArrayLocationPc98EAddonCard = 0xA2,
+ EfiMemoryArrayLocationPc98LocalBusAddonCard = 0xA3
+} EFI_MEMORY_ARRAY_LOCATION;
+
+typedef enum _EFI_MEMORY_ARRAY_USE {
+ EfiMemoryArrayUseOther = 0x01,
+ EfiMemoryArrayUseUnknown = 0x02,
+ EfiMemoryArrayUseSystemMemory = 0x03,
+ EfiMemoryArrayUseVideoMemory = 0x04,
+ EfiMemoryArrayUseFlashMemory = 0x05,
+ EfiMemoryArrayUseNonVolatileRam = 0x06,
+ EfiMemoryArrayUseCacheMemory = 0x07
+} EFI_MEMORY_ARRAY_USE;
+
+typedef enum _EFI_MEMORY_ERROR_CORRECTION {
+ EfiMemoryErrorCorrectionOther = 0x01,
+ EfiMemoryErrorCorrectionUnknown = 0x02,
+ EfiMemoryErrorCorrectionNone = 0x03,
+ EfiMemoryErrorCorrectionParity = 0x04,
+ EfiMemoryErrorCorrectionSingleBitEcc = 0x05,
+ EfiMemoryErrorCorrectionMultiBitEcc = 0x06,
+ EfiMemoryErrorCorrectionCrc = 0x07
+} EFI_MEMORY_ERROR_CORRECTION;
+
+///
+/// This data record refers to the physical memory array. This data record is a structure.
+/// The type definition structure for EFI_MEMORY_ARRAY_LOCATION_DATA is in SMBIOS 2.3.4:
+/// - Table 3.3.17.1, Type 16, Offset 0x4
+/// - Table 3.3.17.2, Type 16, Offset 0x5
+/// - Table 3.3.17.3, Type 16, with the following offsets:
+/// -- Offset 0x6
+/// -- Offset 0x7
+/// -- Offset 0xB
+/// -- Offset 0xD
+///
+typedef struct {
+ ///
+ /// The physical location of the memory array.
+ ///
+ EFI_MEMORY_ARRAY_LOCATION MemoryArrayLocation;
+ ///
+ /// The memory array usage.
+ ///
+ EFI_MEMORY_ARRAY_USE MemoryArrayUse;
+ ///
+ /// The primary error correction or detection supported by this memory array.
+ ///
+ EFI_MEMORY_ERROR_CORRECTION MemoryErrorCorrection;
+ ///
+ /// The maximum memory capacity size in kilobytes. If capacity is unknown, then
+ /// values of MaximumMemoryCapacity.Value = 0x00 and
+ /// MaximumMemoryCapacity.Exponent = 0x8000 are used.
+ ///
+ EFI_EXP_BASE2_DATA MaximumMemoryCapacity;
+ ///
+ /// The number of memory slots or sockets that are available for memory devices
+ /// in this array.
+ ///
+ UINT16 NumberMemoryDevices;
+} EFI_MEMORY_ARRAY_LOCATION_DATA;
+
+
+#define EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER 0x00000003
+
+typedef enum _EFI_MEMORY_FORM_FACTOR {
+ EfiMemoryFormFactorOther = 0x01,
+ EfiMemoryFormFactorUnknown = 0x02,
+ EfiMemoryFormFactorSimm = 0x03,
+ EfiMemoryFormFactorSip = 0x04,
+ EfiMemoryFormFactorChip = 0x05,
+ EfiMemoryFormFactorDip = 0x06,
+ EfiMemoryFormFactorZip = 0x07,
+ EfiMemoryFormFactorProprietaryCard = 0x08,
+ EfiMemoryFormFactorDimm = 0x09,
+ EfiMemoryFormFactorTsop = 0x0A,
+ EfiMemoryFormFactorRowOfChips = 0x0B,
+ EfiMemoryFormFactorRimm = 0x0C,
+ EfiMemoryFormFactorSodimm = 0x0D,
+ EfiMemoryFormFactorSrimm = 0x0E,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in MemSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiMemoryFormFactorFbDimm = 0x0F
+} EFI_MEMORY_FORM_FACTOR;
+
+typedef enum _EFI_MEMORY_ARRAY_TYPE {
+ EfiMemoryTypeOther = 0x01,
+ EfiMemoryTypeUnknown = 0x02,
+ EfiMemoryTypeDram = 0x03,
+ EfiMemoryTypeEdram = 0x04,
+ EfiMemoryTypeVram = 0x05,
+ EfiMemoryTypeSram = 0x06,
+ EfiMemoryTypeRam = 0x07,
+ EfiMemoryTypeRom = 0x08,
+ EfiMemoryTypeFlash = 0x09,
+ EfiMemoryTypeEeprom = 0x0A,
+ EfiMemoryTypeFeprom = 0x0B,
+ EfiMemoryTypeEprom = 0x0C,
+ EfiMemoryTypeCdram = 0x0D,
+ EfiMemoryType3Dram = 0x0E,
+ EfiMemoryTypeSdram = 0x0F,
+ EfiMemoryTypeSgram = 0x10,
+ EfiMemoryTypeRdram = 0x11,
+ EfiMemoryTypeDdr = 0x12,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in MemSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiMemoryTypeDdr2 = 0x13,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in MemSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiMemoryTypeDdr2FbDimm = 0x14
+} EFI_MEMORY_ARRAY_TYPE;
+
+typedef struct {
+ UINT32 Reserved :1;
+ UINT32 Other :1;
+ UINT32 Unknown :1;
+ UINT32 FastPaged :1;
+ UINT32 StaticColumn :1;
+ UINT32 PseudoStatic :1;
+ UINT32 Rambus :1;
+ UINT32 Synchronous :1;
+ UINT32 Cmos :1;
+ UINT32 Edo :1;
+ UINT32 WindowDram :1;
+ UINT32 CacheDram :1;
+ UINT32 Nonvolatile :1;
+ UINT32 Reserved1 :19;
+} EFI_MEMORY_TYPE_DETAIL;
+
+typedef enum {
+ EfiMemoryStateEnabled = 0,
+ EfiMemoryStateUnknown = 1,
+ EfiMemoryStateUnsupported = 2,
+ EfiMemoryStateError = 3,
+ EfiMemoryStateAbsent = 4,
+ EfiMemoryStateDisabled = 5,
+ ///
+ /// Inconsistent with specification here:
+ /// This field is NOT defined in MemSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.
+ ///
+ EfiMemoryStatePartial = 6
+} EFI_MEMORY_STATE;
+
+///
+/// This data record describes a memory device. This data record is a structure.
+/// The type definition structure for EFI_MEMORY_ARRAY_LINK_DATA is in SMBIOS 2.3.4.
+///
+typedef struct {
+ ///
+ /// A string that identifies the physically labeled socket or board position where the
+ /// memory device is located.
+ ///
+ STRING_REF MemoryDeviceLocator;
+ ///
+ /// A string denoting the physically labeled bank where the memory device is located.
+ ///
+ STRING_REF MemoryBankLocator;
+ ///
+ /// A string denoting the memory manufacturer.
+ ///
+ STRING_REF MemoryManufacturer;
+ ///
+ /// A string denoting the serial number of the memory device.
+ ///
+ STRING_REF MemorySerialNumber;
+ ///
+ /// The asset tag of the memory device.
+ ///
+ STRING_REF MemoryAssetTag;
+ ///
+ /// A string denoting the part number of the memory device.
+ ///
+ STRING_REF MemoryPartNumber;
+ ///
+ /// A link to a memory array structure set.
+ ///
+ EFI_INTER_LINK_DATA MemoryArrayLink;
+ ///
+ /// A link to a memory array structure set.
+ ///
+ EFI_INTER_LINK_DATA MemorySubArrayLink;
+ ///
+ /// The total width in bits of this memory device. If there are no error correcting bits,
+ /// then the total width equals the data width. If the width is unknown, then set the field
+ /// to 0xFFFF.
+ ///
+ UINT16 MemoryTotalWidth;
+ ///
+ /// The data width in bits of the memory device. A data width of 0x00 and a total width
+ /// of 0x08 indicate that the device is used solely for error correction.
+ ///
+ UINT16 MemoryDataWidth;
+ ///
+ /// The size in bytes of the memory device. A value of 0x00 denotes that no device is
+ /// installed, while a value of all Fs denotes that the size is not known.
+ ///
+ EFI_EXP_BASE2_DATA MemoryDeviceSize;
+ ///
+ /// The form factor of the memory device.
+ ///
+ EFI_MEMORY_FORM_FACTOR MemoryFormFactor;
+ ///
+ /// A memory device set that must be populated with all devices of the same type and
+ /// size. A value of 0x00 indicates that the device is not part of any set. A value of 0xFF
+ /// indicates that the attribute is unknown. Any other value denotes the set number.
+ ///
+ UINT8 MemoryDeviceSet;
+ ///
+ /// The memory type in the socket.
+ ///
+ EFI_MEMORY_ARRAY_TYPE MemoryType;
+ ///
+ /// The memory type details.
+ ///
+ EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail;
+ ///
+ /// The memory speed in megahertz (MHz). A value of 0x00 denotes that
+ /// the speed is unknown.
+ /// Inconsistent with specification here:
+ /// In MemSubclass specification 0.9, the naming is MemoryTypeSpeed.
+ /// Keep it unchanged for backward compatibilty.
+ ///
+ EFI_EXP_BASE10_DATA MemorySpeed;
+ ///
+ /// The memory state.
+ ///
+ EFI_MEMORY_STATE MemoryState;
+} EFI_MEMORY_ARRAY_LINK_DATA;
+
+
+#define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004
+
+///
+/// This data record refers to a specified physical memory array associated with
+/// a given memory range.
+///
+typedef struct {
+ ///
+ /// The starting physical address in bytes of memory mapped to a specified physical
+ /// memory array.
+ ///
+ EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress;
+ ///
+ /// The last physical address in bytes of memory mapped to a specified physical memory
+ /// array.
+ ///
+ EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress;
+ ///
+ /// See Physical Memory Array (Type 16) for physical memory array structures.
+ ///
+ EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
+ ///
+ /// The number of memory devices that form a single row of memory for the address
+ /// partition.
+ ///
+ UINT16 MemoryArrayPartitionWidth;
+} EFI_MEMORY_ARRAY_START_ADDRESS_DATA;
+
+
+#define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005
+
+///
+/// This data record refers to a physical memory device that is associated with
+/// a given memory range.
+///
+typedef struct {
+ ///
+ /// The starting physical address that is associated with the device.
+ ///
+ EFI_PHYSICAL_ADDRESS MemoryDeviceStartAddress;
+ ///
+ /// The ending physical address that is associated with the device.
+ ///
+ EFI_PHYSICAL_ADDRESS MemoryDeviceEndAddress;
+ ///
+ /// A link to the memory device data structure.
+ ///
+ EFI_INTER_LINK_DATA PhysicalMemoryDeviceLink;
+ ///
+ /// A link to the memory array data structure.
+ ///
+ EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
+ ///
+ /// The position of the memory device in a row. A value of 0x00 is reserved and a value
+ /// of 0xFF indicates that the position is unknown.
+ ///
+ UINT8 MemoryDevicePartitionRowPosition;
+ ///
+ /// The position of the device in an interleave.
+ ///
+ UINT8 MemoryDeviceInterleavePosition;
+ ///
+ /// The maximum number of consecutive rows from the device that are accessed in a
+ /// single interleave transfer. A value of 0x00 indicates that the device is not interleaved
+ /// and a value of 0xFF indicates that the interleave configuration is unknown.
+ ///
+ UINT8 MemoryDeviceInterleaveDataDepth;
+} EFI_MEMORY_DEVICE_START_ADDRESS_DATA;
+
+
+//
+// Memory. Channel Device Type - SMBIOS Type 37
+//
+
+#define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER 0x00000006
+
+typedef enum _EFI_MEMORY_CHANNEL_TYPE {
+ EfiMemoryChannelTypeOther = 1,
+ EfiMemoryChannelTypeUnknown = 2,
+ EfiMemoryChannelTypeRambus = 3,
+ EfiMemoryChannelTypeSyncLink = 4
+} EFI_MEMORY_CHANNEL_TYPE;
+
+///
+/// This data record refers the type of memory that is associated with the channel. This data record is a
+/// structure.
+/// The type definition structure for EFI_MEMORY_CHANNEL_TYPE_DATA is in SMBIOS 2.3.4,
+/// Table 3.3.38, Type 37, with the following offsets:
+/// - Offset 0x4
+/// - Offset 0x5
+/// - Offset 0x6
+///
+typedef struct {
+ ///
+ /// The type of memory that is associated with the channel.
+ ///
+ EFI_MEMORY_CHANNEL_TYPE MemoryChannelType;
+ ///
+ /// The maximum load that is supported by the channel.
+ ///
+ UINT8 MemoryChannelMaximumLoad;
+ ///
+ /// The number of memory devices on this channel.
+ ///
+ UINT8 MemoryChannelDeviceCount;
+} EFI_MEMORY_CHANNEL_TYPE_DATA;
+
+#define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007
+
+///
+/// This data record refers to the memory device that is associated with the memory channel. This data
+/// record is a structure.
+/// The type definition structure for EFI_MEMORY_CHANNEL_DEVICE_DATA is in SMBIOS 2.3.4,
+/// Table 3.3.38, Type 37, with the following offsets:
+/// - Offset 0x7
+/// - Offset 0x8
+///
+typedef struct {
+ ///
+ /// A number between one and MemoryChannelDeviceCount plus an arbitrary base.
+ ///
+ UINT8 DeviceId;
+ ///
+ /// The Link of the associated memory device. See Memory Device (Type 17) for
+ /// memory devices.
+ ///
+ EFI_INTER_LINK_DATA DeviceLink;
+ ///
+ /// The number of load units that this device consumes.
+ ///
+ UINT8 MemoryChannelDeviceLoad;
+} EFI_MEMORY_CHANNEL_DEVICE_DATA;
+
+//
+// Memory. Controller Information - SMBIOS Type 5
+//
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+#define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef enum {
+ EfiErrorDetectingMethodOther = 1,
+ EfiErrorDetectingMethodUnknown = 2,
+ EfiErrorDetectingMethodNone = 3,
+ EfiErrorDetectingMethodParity = 4,
+ EfiErrorDetectingMethod32Ecc = 5,
+ EfiErrorDetectingMethod64Ecc = 6,
+ EfiErrorDetectingMethod128Ecc = 7,
+ EfiErrorDetectingMethodCrc = 8
+} EFI_MEMORY_ERROR_DETECT_METHOD_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ UINT8 Other :1;
+ UINT8 Unknown :1;
+ UINT8 None :1;
+ UINT8 SingleBitErrorCorrect :1;
+ UINT8 DoubleBitErrorCorrect :1;
+ UINT8 ErrorScrubbing :1;
+ UINT8 Reserved :2;
+} EFI_MEMORY_ERROR_CORRECT_CAPABILITY;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef enum {
+ EfiMemoryInterleaveOther = 1,
+ EfiMemoryInterleaveUnknown = 2,
+ EfiMemoryInterleaveOneWay = 3,
+ EfiMemoryInterleaveTwoWay = 4,
+ EfiMemoryInterleaveFourWay = 5,
+ EfiMemoryInterleaveEightWay = 6,
+ EfiMemoryInterleaveSixteenWay = 7
+} EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ UINT16 Other :1;
+ UINT16 Unknown :1;
+ UINT16 SeventyNs:1;
+ UINT16 SixtyNs :1;
+ UINT16 FiftyNs :1;
+ UINT16 Reserved :11;
+} EFI_MEMORY_SPEED_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ UINT16 Other :1;
+ UINT16 Unknown :1;
+ UINT16 Standard :1;
+ UINT16 FastPageMode:1;
+ UINT16 EDO :1;
+ UINT16 Parity :1;
+ UINT16 ECC :1;
+ UINT16 SIMM :1;
+ UINT16 DIMM :1;
+ UINT16 BurstEdo :1;
+ UINT16 SDRAM :1;
+ UINT16 Reserved :5;
+} EFI_MEMORY_SUPPORTED_TYPE;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ UINT8 Five :1;
+ UINT8 Three :1;
+ UINT8 Two :1;
+ UINT8 Reserved:5;
+} EFI_MEMORY_MODULE_VOLTAGE_TYPE;
+
+///
+/// EFI_MEMORY_CONTROLLER_INFORMATION is obsolete
+/// Use EFI_MEMORY_CONTROLLER_INFORMATION_DATA instead
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;
+ UINT8 MaxMemoryModuleSize;
+ EFI_MEMORY_SPEED_TYPE MemorySpeedType;
+ EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;
+ EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;
+ UINT8 NumberofMemorySlot;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;
+ UINT16 *MemoryModuleConfigHandles;
+} EFI_MEMORY_CONTROLLER_INFORMATION;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 5.
+///
+typedef struct {
+ EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;
+ UINT8 MaxMemoryModuleSize;
+ EFI_MEMORY_SPEED_TYPE MemorySpeedType;
+ EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;
+ EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;
+ UINT8 NumberofMemorySlot;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;
+ EFI_INTER_LINK_DATA MemoryModuleConfig[1];
+} EFI_MEMORY_CONTROLLER_INFORMATION_DATA;
+
+///
+/// Memory. Error Information - SMBIOS Type 18
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 18.
+///
+#define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 18.
+///
+typedef enum {
+ EfiMemoryErrorOther = 1,
+ EfiMemoryErrorUnknown = 2,
+ EfiMemoryErrorOk = 3,
+ EfiMemoryErrorBadRead = 4,
+ EfiMemoryErrorParity = 5,
+ EfiMemoryErrorSigleBit = 6,
+ EfiMemoryErrorDoubleBit = 7,
+ EfiMemoryErrorMultiBit = 8,
+ EfiMemoryErrorNibble = 9,
+ EfiMemoryErrorChecksum = 10,
+ EfiMemoryErrorCrc = 11,
+ EfiMemoryErrorCorrectSingleBit = 12,
+ EfiMemoryErrorCorrected = 13,
+ EfiMemoryErrorUnCorrectable = 14
+} EFI_MEMORY_ERROR_TYPE;
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 18.
+///
+typedef enum {
+ EfiMemoryGranularityOther = 1,
+ EfiMemoryGranularityOtherUnknown = 2,
+ EfiMemoryGranularityDeviceLevel = 3,
+ EfiMemoryGranularityMemPartitionLevel = 4
+} EFI_MEMORY_ERROR_GRANULARITY_TYPE;
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 18.
+///
+typedef enum {
+ EfiMemoryErrorOperationOther = 1,
+ EfiMemoryErrorOperationUnknown = 2,
+ EfiMemoryErrorOperationRead = 3,
+ EfiMemoryErrorOperationWrite = 4,
+ EfiMemoryErrorOperationPartialWrite = 5
+} EFI_MEMORY_ERROR_OPERATION_TYPE;
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 18.
+///
+typedef struct {
+ EFI_MEMORY_ERROR_TYPE MemoryErrorType;
+ EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
+ EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
+ UINT32 VendorSyndrome;
+ UINT32 MemoryArrayErrorAddress;
+ UINT32 DeviceErrorAddress;
+ UINT32 DeviceErrorResolution;
+} EFI_MEMORY_32BIT_ERROR_INFORMATION;
+
+///
+/// Memory. Error Information - SMBIOS Type 33.
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 33.
+///
+#define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 type 33.
+///
+typedef struct {
+ EFI_MEMORY_ERROR_TYPE MemoryErrorType;
+ EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
+ EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
+ UINT32 VendorSyndrome;
+ UINT64 MemoryArrayErrorAddress;
+ UINT64 DeviceErrorAddress;
+ UINT32 DeviceErrorResolution;
+} EFI_MEMORY_64BIT_ERROR_INFORMATION;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It is implementation-specific to simplify the code logic.
+///
+typedef union _EFI_MEMORY_SUBCLASS_RECORDS {
+ EFI_MEMORY_SIZE_DATA SizeData;
+ EFI_MEMORY_ARRAY_LOCATION_DATA ArrayLocationData;
+ EFI_MEMORY_ARRAY_LINK_DATA ArrayLink;
+ EFI_MEMORY_ARRAY_START_ADDRESS_DATA ArrayStartAddress;
+ EFI_MEMORY_DEVICE_START_ADDRESS_DATA DeviceStartAddress;
+ EFI_MEMORY_CHANNEL_TYPE_DATA ChannelTypeData;
+ EFI_MEMORY_CHANNEL_DEVICE_DATA ChannelDeviceData;
+ EFI_MEMORY_CONTROLLER_INFORMATION MemoryControllerInfo;
+ EFI_MEMORY_32BIT_ERROR_INFORMATION Memory32bitErrorInfo;
+ EFI_MEMORY_64BIT_ERROR_INFORMATION Memory64bitErrorInfo;
+} EFI_MEMORY_SUBCLASS_RECORDS;
+
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER Header;
+ EFI_MEMORY_SUBCLASS_RECORDS Record;
+} EFI_MEMORY_SUBCLASS_DRIVER_DATA;
+
+#define EFI_MISC_SUBCLASS_VERSION 0x0100
+
+#pragma pack(1)
+
+//
+// Last PCI Bus Number
+//
+#define EFI_MISC_LAST_PCI_BUS_RECORD_NUMBER 0x00000001
+
+typedef struct {
+ UINT8 LastPciBus;
+} EFI_MISC_LAST_PCI_BUS_DATA;
+
+//
+// Misc. BIOS Vendor - SMBIOS Type 0
+//
+#define EFI_MISC_BIOS_VENDOR_RECORD_NUMBER 0x00000002
+
+typedef struct {
+ UINT64 Reserved1 :2;
+ UINT64 Unknown :1;
+ UINT64 BiosCharacteristicsNotSupported :1;
+ UINT64 IsaIsSupported :1;
+ UINT64 McaIsSupported :1;
+ UINT64 EisaIsSupported :1;
+ UINT64 PciIsSupported :1;
+ UINT64 PcmciaIsSupported :1;
+ UINT64 PlugAndPlayIsSupported :1;
+ UINT64 ApmIsSupported :1;
+ UINT64 BiosIsUpgradable :1;
+ UINT64 BiosShadowingAllowed :1;
+ UINT64 VlVesaIsSupported :1;
+ UINT64 EscdSupportIsAvailable :1;
+ UINT64 BootFromCdIsSupported :1;
+ UINT64 SelectableBootIsSupported :1;
+ UINT64 RomBiosIsSocketed :1;
+ UINT64 BootFromPcmciaIsSupported :1;
+ UINT64 EDDSpecificationIsSupported :1;
+ UINT64 JapaneseNecFloppyIsSupported :1;
+ UINT64 JapaneseToshibaFloppyIsSupported :1;
+ UINT64 Floppy525_360IsSupported :1;
+ UINT64 Floppy525_12IsSupported :1;
+ UINT64 Floppy35_720IsSupported :1;
+ UINT64 Floppy35_288IsSupported :1;
+ UINT64 PrintScreenIsSupported :1;
+ UINT64 Keyboard8042IsSupported :1;
+ UINT64 SerialIsSupported :1;
+ UINT64 PrinterIsSupported :1;
+ UINT64 CgaMonoIsSupported :1;
+ UINT64 NecPc98 :1;
+ UINT64 AcpiIsSupported :1;
+ UINT64 UsbLegacyIsSupported :1;
+ UINT64 AgpIsSupported :1;
+ UINT64 I20BootIsSupported :1;
+ UINT64 Ls120BootIsSupported :1;
+ UINT64 AtapiZipDriveBootIsSupported :1;
+ UINT64 Boot1394IsSupported :1;
+ UINT64 SmartBatteryIsSupported :1;
+ UINT64 BiosBootSpecIsSupported :1;
+ UINT64 FunctionKeyNetworkBootIsSupported :1;
+ UINT64 Reserved :22;
+} EFI_MISC_BIOS_CHARACTERISTICS;
+
+typedef struct {
+ UINT64 BiosReserved :16;
+ UINT64 SystemReserved:16;
+ UINT64 Reserved :32;
+} EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION;
+
+typedef struct {
+ STRING_REF BiosVendor;
+ STRING_REF BiosVersion;
+ STRING_REF BiosReleaseDate;
+ EFI_PHYSICAL_ADDRESS BiosStartingAddress;
+ EFI_EXP_BASE2_DATA BiosPhysicalDeviceSize;
+ EFI_MISC_BIOS_CHARACTERISTICS BiosCharacteristics1;
+ EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION
+ BiosCharacteristics2;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 0.
+ ///
+ UINT8 BiosMajorRelease;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 0.
+ ///
+ UINT8 BiosMinorRelease;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 0.
+ ///
+ UINT8 BiosEmbeddedFirmwareMajorRelease;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 0.
+ ///
+ UINT8 BiosEmbeddedFirmwareMinorRelease;
+} EFI_MISC_BIOS_VENDOR_DATA;
+
+//
+// Misc. System Manufacturer - SMBIOS Type 1
+//
+#define EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER 0x00000003
+
+typedef enum {
+ EfiSystemWakeupTypeReserved = 0,
+ EfiSystemWakeupTypeOther = 1,
+ EfiSystemWakeupTypeUnknown = 2,
+ EfiSystemWakeupTypeApmTimer = 3,
+ EfiSystemWakeupTypeModemRing = 4,
+ EfiSystemWakeupTypeLanRemote = 5,
+ EfiSystemWakeupTypePowerSwitch = 6,
+ EfiSystemWakeupTypePciPme = 7,
+ EfiSystemWakeupTypeAcPowerRestored = 8
+} EFI_MISC_SYSTEM_WAKEUP_TYPE;
+
+typedef struct {
+ STRING_REF SystemManufacturer;
+ STRING_REF SystemProductName;
+ STRING_REF SystemVersion;
+ STRING_REF SystemSerialNumber;
+ EFI_GUID SystemUuid;
+ EFI_MISC_SYSTEM_WAKEUP_TYPE SystemWakeupType;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 1.
+ ///
+ STRING_REF SystemSKUNumber;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 1.
+ ///
+ STRING_REF SystemFamily;
+} EFI_MISC_SYSTEM_MANUFACTURER_DATA;
+
+//
+// Misc. Base Board Manufacturer - SMBIOS Type 2
+//
+#define EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER 0x00000004
+
+typedef struct {
+ UINT32 Motherboard :1;
+ UINT32 RequiresDaughterCard :1;
+ UINT32 Removable :1;
+ UINT32 Replaceable :1;
+ UINT32 HotSwappable :1;
+ UINT32 Reserved :27;
+} EFI_BASE_BOARD_FEATURE_FLAGS;
+
+typedef enum {
+ EfiBaseBoardTypeUnknown = 1,
+ EfiBaseBoardTypeOther = 2,
+ EfiBaseBoardTypeServerBlade = 3,
+ EfiBaseBoardTypeConnectivitySwitch = 4,
+ EfiBaseBoardTypeSystemManagementModule = 5,
+ EfiBaseBoardTypeProcessorModule = 6,
+ EfiBaseBoardTypeIOModule = 7,
+ EfiBaseBoardTypeMemoryModule = 8,
+ EfiBaseBoardTypeDaughterBoard = 9,
+ EfiBaseBoardTypeMotherBoard = 0xA,
+ EfiBaseBoardTypeProcessorMemoryModule = 0xB,
+ EfiBaseBoardTypeProcessorIOModule = 0xC,
+ EfiBaseBoardTypeInterconnectBoard = 0xD
+} EFI_BASE_BOARD_TYPE;
+
+typedef struct {
+ STRING_REF BaseBoardManufacturer;
+ STRING_REF BaseBoardProductName;
+ STRING_REF BaseBoardVersion;
+ STRING_REF BaseBoardSerialNumber;
+ STRING_REF BaseBoardAssetTag;
+ STRING_REF BaseBoardChassisLocation;
+ EFI_BASE_BOARD_FEATURE_FLAGS BaseBoardFeatureFlags;
+ EFI_BASE_BOARD_TYPE BaseBoardType;
+ EFI_INTER_LINK_DATA BaseBoardChassisLink;
+ UINT32 BaseBoardNumberLinks;
+ EFI_INTER_LINK_DATA LinkN;
+} EFI_MISC_BASE_BOARD_MANUFACTURER_DATA;
+
+//
+// Misc. System/Chassis Enclosure - SMBIOS Type 3
+//
+#define EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER 0x00000005
+
+typedef enum {
+ EfiMiscChassisTypeOther = 0x1,
+ EfiMiscChassisTypeUnknown = 0x2,
+ EfiMiscChassisTypeDeskTop = 0x3,
+ EfiMiscChassisTypeLowProfileDesktop = 0x4,
+ EfiMiscChassisTypePizzaBox = 0x5,
+ EfiMiscChassisTypeMiniTower = 0x6,
+ EfiMiscChassisTypeTower = 0x7,
+ EfiMiscChassisTypePortable = 0x8,
+ EfiMiscChassisTypeLapTop = 0x9,
+ EfiMiscChassisTypeNotebook = 0xA,
+ EfiMiscChassisTypeHandHeld = 0xB,
+ EfiMiscChassisTypeDockingStation = 0xC,
+ EfiMiscChassisTypeAllInOne = 0xD,
+ EfiMiscChassisTypeSubNotebook = 0xE,
+ EfiMiscChassisTypeSpaceSaving = 0xF,
+ EfiMiscChassisTypeLunchBox = 0x10,
+ EfiMiscChassisTypeMainServerChassis = 0x11,
+ EfiMiscChassisTypeExpansionChassis = 0x12,
+ EfiMiscChassisTypeSubChassis = 0x13,
+ EfiMiscChassisTypeBusExpansionChassis = 0x14,
+ EfiMiscChassisTypePeripheralChassis = 0x15,
+ EfiMiscChassisTypeRaidChassis = 0x16,
+ EfiMiscChassisTypeRackMountChassis = 0x17,
+ EfiMiscChassisTypeSealedCasePc = 0x18,
+ EfiMiscChassisMultiSystemChassis = 0x19
+} EFI_MISC_CHASSIS_TYPE;
+
+typedef struct {
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass 0.9 specification, it has the incorrect field name "EFI_MISC_CHASSIS_TYPE".
+ /// Change it to "ChassisType" to pass build.
+ ///
+ UINT32 ChassisType :16;
+ UINT32 ChassisLockPresent:1;
+ UINT32 Reserved :15;
+} EFI_MISC_CHASSIS_STATUS;
+
+typedef enum {
+ EfiChassisStateOther = 0x01,
+ EfiChassisStateUnknown = 0x02,
+ EfiChassisStateSafe = 0x03,
+ EfiChassisStateWarning = 0x04,
+ EfiChassisStateCritical = 0x05,
+ EfiChassisStateNonRecoverable = 0x06
+} EFI_MISC_CHASSIS_STATE;
+
+typedef enum {
+ EfiChassisSecurityStatusOther = 0x01,
+ EfiChassisSecurityStatusUnknown = 0x02,
+ EfiChassisSecurityStatusNone = 0x03,
+ EfiChassisSecurityStatusExternalInterfaceLockedOut = 0x04,
+ EfiChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05
+} EFI_MISC_CHASSIS_SECURITY_STATE;
+
+typedef struct {
+ UINT32 RecordType :1;
+ UINT32 Type :7;
+ UINT32 Reserved :24;
+} EFI_MISC_ELEMENT_TYPE;
+
+typedef struct {
+ EFI_MISC_ELEMENT_TYPE ChassisElementType;
+ EFI_INTER_LINK_DATA ChassisElementStructure;
+ EFI_BASE_BOARD_TYPE ChassisBaseBoard;
+ UINT32 ChassisElementMinimum;
+ UINT32 ChassisElementMaximum;
+} EFI_MISC_ELEMENTS;
+
+typedef struct {
+ STRING_REF ChassisManufacturer;
+ STRING_REF ChassisVersion;
+ STRING_REF ChassisSerialNumber;
+ STRING_REF ChassisAssetTag;
+ EFI_MISC_CHASSIS_STATUS ChassisType;
+ EFI_MISC_CHASSIS_STATE ChassisBootupState;
+ EFI_MISC_CHASSIS_STATE ChassisPowerSupplyState;
+ EFI_MISC_CHASSIS_STATE ChassisThermalState;
+ EFI_MISC_CHASSIS_SECURITY_STATE ChassisSecurityState;
+ UINT32 ChassisOemDefined;
+ UINT32 ChassisHeight;
+ UINT32 ChassisNumberPowerCords;
+ UINT32 ChassisElementCount;
+ UINT32 ChassisElementRecordLength;
+ EFI_MISC_ELEMENTS ChassisElements;
+} EFI_MISC_CHASSIS_MANUFACTURER_DATA;
+
+//
+// Misc. Port Connector Information - SMBIOS Type 8
+//
+#define EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER 0x00000006
+
+typedef enum {
+ EfiPortConnectorTypeNone = 0x00,
+ EfiPortConnectorTypeCentronics = 0x01,
+ EfiPortConnectorTypeMiniCentronics = 0x02,
+ EfiPortConnectorTypeProprietary = 0x03,
+ EfiPortConnectorTypeDB25Male = 0x04,
+ EfiPortConnectorTypeDB25Female = 0x05,
+ EfiPortConnectorTypeDB15Male = 0x06,
+ EfiPortConnectorTypeDB15Female = 0x07,
+ EfiPortConnectorTypeDB9Male = 0x08,
+ EfiPortConnectorTypeDB9Female = 0x09,
+ EfiPortConnectorTypeRJ11 = 0x0A,
+ EfiPortConnectorTypeRJ45 = 0x0B,
+ EfiPortConnectorType50PinMiniScsi = 0x0C,
+ EfiPortConnectorTypeMiniDin = 0x0D,
+ EfiPortConnectorTypeMicriDin = 0x0E,
+ EfiPortConnectorTypePS2 = 0x0F,
+ EfiPortConnectorTypeInfrared = 0x10,
+ EfiPortConnectorTypeHpHil = 0x11,
+ EfiPortConnectorTypeUsb = 0x12,
+ EfiPortConnectorTypeSsaScsi = 0x13,
+ EfiPortConnectorTypeCircularDin8Male = 0x14,
+ EfiPortConnectorTypeCircularDin8Female = 0x15,
+ EfiPortConnectorTypeOnboardIde = 0x16,
+ EfiPortConnectorTypeOnboardFloppy = 0x17,
+ EfiPortConnectorType9PinDualInline = 0x18,
+ EfiPortConnectorType25PinDualInline = 0x19,
+ EfiPortConnectorType50PinDualInline = 0x1A,
+ EfiPortConnectorType68PinDualInline = 0x1B,
+ EfiPortConnectorTypeOnboardSoundInput = 0x1C,
+ EfiPortConnectorTypeMiniCentronicsType14 = 0x1D,
+ EfiPortConnectorTypeMiniCentronicsType26 = 0x1E,
+ EfiPortConnectorTypeHeadPhoneMiniJack = 0x1F,
+ EfiPortConnectorTypeBNC = 0x20,
+ EfiPortConnectorType1394 = 0x21,
+ EfiPortConnectorTypePC98 = 0xA0,
+ EfiPortConnectorTypePC98Hireso = 0xA1,
+ EfiPortConnectorTypePCH98 = 0xA2,
+ EfiPortConnectorTypePC98Note = 0xA3,
+ EfiPortConnectorTypePC98Full = 0xA4,
+ EfiPortConnectorTypeOther = 0xFF
+} EFI_MISC_PORT_CONNECTOR_TYPE;
+
+typedef enum {
+ EfiPortTypeNone = 0x00,
+ EfiPortTypeParallelXtAtCompatible = 0x01,
+ EfiPortTypeParallelPortPs2 = 0x02,
+ EfiPortTypeParallelPortEcp = 0x03,
+ EfiPortTypeParallelPortEpp = 0x04,
+ EfiPortTypeParallelPortEcpEpp = 0x05,
+ EfiPortTypeSerialXtAtCompatible = 0x06,
+ EfiPortTypeSerial16450Compatible = 0x07,
+ EfiPortTypeSerial16550Compatible = 0x08,
+ EfiPortTypeSerial16550ACompatible = 0x09,
+ EfiPortTypeScsi = 0x0A,
+ EfiPortTypeMidi = 0x0B,
+ EfiPortTypeJoyStick = 0x0C,
+ EfiPortTypeKeyboard = 0x0D,
+ EfiPortTypeMouse = 0x0E,
+ EfiPortTypeSsaScsi = 0x0F,
+ EfiPortTypeUsb = 0x10,
+ EfiPortTypeFireWire = 0x11,
+ EfiPortTypePcmciaTypeI = 0x12,
+ EfiPortTypePcmciaTypeII = 0x13,
+ EfiPortTypePcmciaTypeIII = 0x14,
+ EfiPortTypeCardBus = 0x15,
+ EfiPortTypeAccessBusPort = 0x16,
+ EfiPortTypeScsiII = 0x17,
+ EfiPortTypeScsiWide = 0x18,
+ EfiPortTypePC98 = 0x19,
+ EfiPortTypePC98Hireso = 0x1A,
+ EfiPortTypePCH98 = 0x1B,
+ EfiPortTypeVideoPort = 0x1C,
+ EfiPortTypeAudioPort = 0x1D,
+ EfiPortTypeModemPort = 0x1E,
+ EfiPortTypeNetworkPort = 0x1F,
+ EfiPortType8251Compatible = 0xA0,
+ EfiPortType8251FifoCompatible = 0xA1,
+ EfiPortTypeOther = 0xFF
+} EFI_MISC_PORT_TYPE;
+
+typedef struct {
+ STRING_REF PortInternalConnectorDesignator;
+ STRING_REF PortExternalConnectorDesignator;
+ EFI_MISC_PORT_CONNECTOR_TYPE PortInternalConnectorType;
+ EFI_MISC_PORT_CONNECTOR_TYPE PortExternalConnectorType;
+ EFI_MISC_PORT_TYPE PortType;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this type of field is defined as EFI_DEVICE_PATH_PROTOCOL,
+ /// which causes the implementation some complexity. Keep it unchanged for backward
+ /// compatibility.
+ ///
+ EFI_MISC_PORT_DEVICE_PATH PortPath;
+} EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA;
+
+//
+// Misc. System Slots - SMBIOS Type 9
+//
+#define EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER 0x00000007
+
+typedef enum {
+ EfiSlotTypeOther = 0x01,
+ EfiSlotTypeUnknown = 0x02,
+ EfiSlotTypeIsa = 0x03,
+ EfiSlotTypeMca = 0x04,
+ EfiSlotTypeEisa = 0x05,
+ EfiSlotTypePci = 0x06,
+ EfiSlotTypePcmcia = 0x07,
+ EfiSlotTypeVlVesa = 0x08,
+ EfiSlotTypeProprietary = 0x09,
+ EfiSlotTypeProcessorCardSlot = 0x0A,
+ EfiSlotTypeProprietaryMemoryCardSlot = 0x0B,
+ EfiSlotTypeIORiserCardSlot = 0x0C,
+ EfiSlotTypeNuBus = 0x0D,
+ EfiSlotTypePci66MhzCapable = 0x0E,
+ EfiSlotTypeAgp = 0x0F,
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, its naming should be EfiSlotTypeAgp2X
+ /// rather than EfiSlotTypeApg2X.
+ ///
+ EfiSlotTypeAgp2X = 0x10,
+ EfiSlotTypeAgp4X = 0x11,
+ EfiSlotTypePciX = 0x12,
+ EfiSlotTypeAgp8x = 0x13,
+ EfiSlotTypePC98C20 = 0xA0,
+ EfiSlotTypePC98C24 = 0xA1,
+ EfiSlotTypePC98E = 0xA2,
+ EfiSlotTypePC98LocalBus = 0xA3,
+ EfiSlotTypePC98Card = 0xA4,
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, these fields aren't defined.
+ /// They're introduced for SmBios 2.6 specification type 9.
+ ///
+ EfiSlotTypePciExpress = 0xA5,
+ EfiSlotTypePciExpressX1 = 0xA6,
+ EfiSlotTypePciExpressX2 = 0xA7,
+ EfiSlotTypePciExpressX4 = 0xA8,
+ EfiSlotTypePciExpressX8 = 0xA9,
+ EfiSlotTypePciExpressX16 = 0xAA
+} EFI_MISC_SLOT_TYPE;
+
+typedef enum {
+ EfiSlotDataBusWidthOther = 0x01,
+ EfiSlotDataBusWidthUnknown = 0x02,
+ EfiSlotDataBusWidth8Bit = 0x03,
+ EfiSlotDataBusWidth16Bit = 0x04,
+ EfiSlotDataBusWidth32Bit = 0x05,
+ EfiSlotDataBusWidth64Bit = 0x06,
+ EfiSlotDataBusWidth128Bit = 0x07,
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, these fields aren't defined.
+ /// They're introduced for SmBios 2.6 specification type 9.
+ ///
+ EfiSlotDataBusWidth1xOrx1 = 0x8,
+ EfiSlotDataBusWidth2xOrx2 = 0x9,
+ EfiSlotDataBusWidth4xOrx4 = 0xA,
+ EfiSlotDataBusWidth8xOrx8 = 0xB,
+ EfiSlotDataBusWidth12xOrx12 = 0xC,
+ EfiSlotDataBusWidth16xOrx16 = 0xD,
+ EfiSlotDataBusWidth32xOrx32 = 0xE
+} EFI_MISC_SLOT_DATA_BUS_WIDTH;
+
+typedef enum {
+ EfiSlotUsageOther = 1,
+ EfiSlotUsageUnknown = 2,
+ EfiSlotUsageAvailable = 3,
+ EfiSlotUsageInUse = 4
+} EFI_MISC_SLOT_USAGE;
+
+typedef enum {
+ EfiSlotLengthOther = 1,
+ EfiSlotLengthUnknown = 2,
+ EfiSlotLengthShort = 3,
+ EfiSlotLengthLong = 4
+} EFI_MISC_SLOT_LENGTH;
+
+typedef struct {
+ UINT32 CharacteristicsUnknown :1;
+ UINT32 Provides50Volts :1;
+ UINT32 Provides33Volts :1;
+ UINT32 SharedSlot :1;
+ UINT32 PcCard16Supported :1;
+ UINT32 CardBusSupported :1;
+ UINT32 ZoomVideoSupported :1;
+ UINT32 ModemRingResumeSupported:1;
+ UINT32 PmeSignalSupported :1;
+ UINT32 HotPlugDevicesSupported :1;
+ UINT32 SmbusSignalSupported :1;
+ UINT32 Reserved :21;
+} EFI_MISC_SLOT_CHARACTERISTICS;
+
+typedef struct {
+ STRING_REF SlotDesignation;
+ EFI_MISC_SLOT_TYPE SlotType;
+ EFI_MISC_SLOT_DATA_BUS_WIDTH SlotDataBusWidth;
+ EFI_MISC_SLOT_USAGE SlotUsage;
+ EFI_MISC_SLOT_LENGTH SlotLength;
+ UINT16 SlotId;
+ EFI_MISC_SLOT_CHARACTERISTICS SlotCharacteristics;
+ EFI_DEVICE_PATH_PROTOCOL SlotDevicePath;
+} EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA;
+
+//
+// Misc. Onboard Device - SMBIOS Type 10
+//
+#define EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER 0x00000008
+
+typedef enum {
+ EfiOnBoardDeviceTypeOther = 1,
+ EfiOnBoardDeviceTypeUnknown = 2,
+ EfiOnBoardDeviceTypeVideo = 3,
+ EfiOnBoardDeviceTypeScsiController = 4,
+ EfiOnBoardDeviceTypeEthernet = 5,
+ EfiOnBoardDeviceTypeTokenRing = 6,
+ EfiOnBoardDeviceTypeSound = 7
+} EFI_MISC_ONBOARD_DEVICE_TYPE;
+
+typedef struct {
+ UINT32 DeviceType :16;
+ UINT32 DeviceEnabled :1;
+ UINT32 Reserved :15;
+} EFI_MISC_ONBOARD_DEVICE_STATUS;
+
+typedef struct {
+ STRING_REF OnBoardDeviceDescription;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, the name is OnBoardDeviceType.
+ /// Keep it unchanged for backward compatibilty.
+ ///
+ EFI_MISC_ONBOARD_DEVICE_STATUS OnBoardDeviceStatus;
+ EFI_DEVICE_PATH_PROTOCOL OnBoardDevicePath;
+} EFI_MISC_ONBOARD_DEVICE_DATA;
+
+//
+// Misc. BIOS Language Information - SMBIOS Type 11
+//
+#define EFI_MISC_OEM_STRING_RECORD_NUMBER 0x00000009
+
+typedef struct {
+ STRING_REF OemStringRef[1];
+} EFI_MISC_OEM_STRING_DATA;
+
+//
+// Misc. System Options - SMBIOS Type 12
+//
+typedef struct {
+ STRING_REF SystemOptionStringRef[1];
+} EFI_MISC_SYSTEM_OPTION_STRING_DATA;
+
+#define EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER 0x0000000A
+
+//
+// Misc. Number of Installable Languages - SMBIOS Type 13
+//
+#define EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER 0x0000000B
+
+typedef struct {
+ UINT32 AbbreviatedLanguageFormat :1;
+ UINT32 Reserved :31;
+} EFI_MISC_LANGUAGE_FLAGS;
+
+typedef struct {
+ UINT16 NumberOfInstallableLanguages;
+ EFI_MISC_LANGUAGE_FLAGS LanguageFlags;
+ UINT16 CurrentLanguageNumber;
+} EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA;
+
+//
+// Misc. System Language String
+//
+#define EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER 0x0000000C
+
+typedef struct {
+ UINT16 LanguageId;
+ STRING_REF SystemLanguageString;
+} EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA;
+
+//
+// Group Associations - SMBIOS Type 14
+//
+#define EFI_MISC_GROUP_NAME_RECORD_NUMBER 0x0000000D
+
+typedef struct {
+ STRING_REF GroupName;
+ UINT16 NumberGroupItems;
+ UINT16 GroupId;
+} EFI_MISC_GROUP_NAME_DATA;
+
+//
+// Group Item Set Element
+//
+#define EFI_MISC_GROUP_ITEM_SET_RECORD_NUMBER 0x0000000E
+
+typedef struct {
+ EFI_GUID SubClass;
+ EFI_INTER_LINK_DATA GroupLink;
+ UINT16 GroupId;
+ UINT16 GroupElementId;
+} EFI_MISC_GROUP_ITEM_SET_DATA;
+
+//
+// Misc. Pointing Device Type - SMBIOS Type 21
+//
+#define EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER 0x0000000F
+
+typedef enum {
+ EfiPointingDeviceTypeOther = 0x01,
+ EfiPointingDeviceTypeUnknown = 0x02,
+ EfiPointingDeviceTypeMouse = 0x03,
+ EfiPointingDeviceTypeTrackBall = 0x04,
+ EfiPointingDeviceTypeTrackPoint = 0x05,
+ EfiPointingDeviceTypeGlidePoint = 0x06,
+ EfiPointingDeviceTouchPad = 0x07,
+ EfiPointingDeviceTouchScreen = 0x08,
+ EfiPointingDeviceOpticalSensor = 0x09
+} EFI_MISC_POINTING_DEVICE_TYPE;
+
+typedef enum {
+ EfiPointingDeviceInterfaceOther = 0x01,
+ EfiPointingDeviceInterfaceUnknown = 0x02,
+ EfiPointingDeviceInterfaceSerial = 0x03,
+ EfiPointingDeviceInterfacePs2 = 0x04,
+ EfiPointingDeviceInterfaceInfrared = 0x05,
+ EfiPointingDeviceInterfaceHpHil = 0x06,
+ EfiPointingDeviceInterfaceBusMouse = 0x07,
+ EfiPointingDeviceInterfaceADB = 0x08,
+ EfiPointingDeviceInterfaceBusMouseDB9 = 0xA0,
+ EfiPointingDeviceInterfaceBusMouseMicroDin = 0xA1,
+ EfiPointingDeviceInterfaceUsb = 0xA2
+} EFI_MISC_POINTING_DEVICE_INTERFACE;
+
+typedef struct {
+ EFI_MISC_POINTING_DEVICE_TYPE PointingDeviceType;
+ EFI_MISC_POINTING_DEVICE_INTERFACE PointingDeviceInterface;
+ UINT16 NumberPointingDeviceButtons;
+ EFI_DEVICE_PATH_PROTOCOL PointingDevicePath;
+} EFI_MISC_POINTING_DEVICE_TYPE_DATA;
+
+//
+// Portable Battery - SMBIOS Type 22
+//
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the name is EFI_MISC_BATTERY_LOCATION_RECORD_NUMBER.
+/// Keep it unchanged for backward compatibilty.
+///
+#define EFI_MISC_PORTABLE_BATTERY_RECORD_NUMBER 0x00000010
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BATTERY_DEVICE_CHEMISTRY.
+/// And all field namings are also different with specification.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef enum {
+ EfiPortableBatteryDeviceChemistryOther = 1,
+ EfiPortableBatteryDeviceChemistryUnknown = 2,
+ EfiPortableBatteryDeviceChemistryLeadAcid = 3,
+ EfiPortableBatteryDeviceChemistryNickelCadmium = 4,
+ EfiPortableBatteryDeviceChemistryNickelMetalHydride = 5,
+ EfiPortableBatteryDeviceChemistryLithiumIon = 6,
+ EfiPortableBatteryDeviceChemistryZincAir = 7,
+ EfiPortableBatteryDeviceChemistryLithiumPolymer = 8
+} EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY;
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BATTERY_LOCATION_DATA.
+/// Also, the name and the order of the fields vary with specifications.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef struct {
+ STRING_REF Location;
+ STRING_REF Manufacturer;
+ STRING_REF ManufactureDate;
+ STRING_REF SerialNumber;
+ STRING_REF DeviceName;
+ EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY
+ DeviceChemistry;
+ UINT16 DesignCapacity;
+ UINT16 DesignVoltage;
+ STRING_REF SBDSVersionNumber;
+ UINT8 MaximumError;
+ UINT16 SBDSSerialNumber;
+ UINT16 SBDSManufactureDate;
+ STRING_REF SBDSDeviceChemistry;
+ UINT8 DesignCapacityMultiplier;
+ UINT32 OEMSpecific;
+ UINT8 BatteryNumber; // Temporary
+ BOOLEAN Valid; // Is entry valid - Temporary
+} EFI_MISC_PORTABLE_BATTERY;
+
+
+//
+// Misc. Reset Capabilities - SMBIOS Type 23
+//
+#define EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER 0x00000011
+
+typedef struct {
+ UINT32 Status :1;
+ UINT32 BootOption :2;
+ UINT32 BootOptionOnLimit :2;
+ UINT32 WatchdogTimerPresent:1;
+ UINT32 Reserved :26;
+} EFI_MISC_RESET_CAPABILITIES_TYPE;
+
+typedef struct {
+ EFI_MISC_RESET_CAPABILITIES_TYPE ResetCapabilities;
+ UINT16 ResetCount;
+ UINT16 ResetLimit;
+ UINT16 ResetTimerInterval;
+ UINT16 ResetTimeout;
+} EFI_MISC_RESET_CAPABILITIES;
+
+typedef struct {
+ EFI_MISC_RESET_CAPABILITIES ResetCapabilities;
+ UINT16 ResetCount;
+ UINT16 ResetLimit;
+ UINT16 ResetTimerInterval;
+ UINT16 ResetTimeout;
+} EFI_MISC_RESET_CAPABILITIES_DATA;
+
+//
+// Misc. Hardware Security - SMBIOS Type 24
+//
+#define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER 0x00000012
+
+///
+/// Inconsistent with specification here:
+/// The MiscSubclass specification 0.9 only mentions the possible value of each field in
+/// EFI_MISC_HARDWARE_SECURITY_SETTINGS.
+/// It's implementation-specific in order to to simplify the code logic.
+///
+typedef enum {
+ EfiHardwareSecurityStatusDisabled = 0,
+ EfiHardwareSecurityStatusEnabled = 1,
+ EfiHardwareSecurityStatusNotImplemented = 2,
+ EfiHardwareSecurityStatusUnknown = 3
+} EFI_MISC_HARDWARE_SECURITY_STATUS;
+
+typedef struct {
+ UINT32 FrontPanelResetStatus :2;
+ UINT32 AdministratorPasswordStatus :2;
+ UINT32 KeyboardPasswordStatus :2;
+ UINT32 PowerOnPasswordStatus :2;
+ UINT32 Reserved :24;
+} EFI_MISC_HARDWARE_SECURITY_SETTINGS;
+
+typedef struct {
+ EFI_MISC_HARDWARE_SECURITY_SETTINGS HardwareSecuritySettings;
+} EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA;
+
+//
+// System Power Controls - SMBIOS Type 25
+//
+#define EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER 0x00000013
+
+typedef struct {
+ UINT16 ScheduledPoweronMonth;
+ UINT16 ScheduledPoweronDayOfMonth;
+ UINT16 ScheduledPoweronHour;
+ UINT16 ScheduledPoweronMinute;
+ UINT16 ScheduledPoweronSecond;
+} EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA;
+
+//
+// Voltage Probe - SMBIOS Type 26
+//
+#define EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000014
+
+typedef struct {
+ UINT32 VoltageProbeSite :5;
+ UINT32 VoltageProbeStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_VOLTAGE_PROBE_LOCATION;
+
+typedef struct {
+ STRING_REF VoltageProbeDescription;
+ EFI_MISC_VOLTAGE_PROBE_LOCATION VoltageProbeLocation;
+ EFI_EXP_BASE10_DATA VoltageProbeMaximumValue;
+ EFI_EXP_BASE10_DATA VoltageProbeMinimumValue;
+ EFI_EXP_BASE10_DATA VoltageProbeResolution;
+ EFI_EXP_BASE10_DATA VoltageProbeTolerance;
+ EFI_EXP_BASE10_DATA VoltageProbeAccuracy;
+ EFI_EXP_BASE10_DATA VoltageProbeNominalValue;
+ EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;
+ EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;
+ EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;
+ EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;
+ EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;
+ EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;
+ UINT32 VoltageProbeOemDefined;
+} EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA;
+
+//
+// Cooling Device - SMBIOS Type 27
+//
+#define EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER 0x00000015
+
+typedef struct {
+ UINT32 CoolingDevice :5;
+ UINT32 CoolingDeviceStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_COOLING_DEVICE_TYPE;
+
+typedef struct {
+ EFI_MISC_COOLING_DEVICE_TYPE CoolingDeviceType;
+ EFI_INTER_LINK_DATA CoolingDeviceTemperatureLink;
+ UINT8 CoolingDeviceUnitGroup;
+ UINT16 CoolingDeviceNominalSpeed;
+ UINT32 CoolingDeviceOemDefined;
+} EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA;
+
+//
+// Temperature Probe - SMBIOS Type 28
+//
+#define EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000016
+
+typedef struct {
+ UINT32 TemperatureProbeSite :5;
+ UINT32 TemperatureProbeStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_TEMPERATURE_PROBE_LOCATION;
+
+typedef struct {
+ STRING_REF TemperatureProbeDescription;
+ EFI_MISC_TEMPERATURE_PROBE_LOCATION
+ TemperatureProbeLocation;
+ ///
+ /// Inconsistent with specification here:
+ /// MiscSubclass 0.9 specification defines the fields type as EFI_EXP_BASE10_DATA.
+ /// In fact, they should be UINT16 type because they refer to 16bit width data.
+ /// Keeping this inconsistency for backward compatibility.
+ ///
+ UINT16 TemperatureProbeMaximumValue;
+ UINT16 TemperatureProbeMinimumValue;
+ UINT16 TemperatureProbeResolution;
+ UINT16 TemperatureProbeTolerance;
+ UINT16 TemperatureProbeAccuracy;
+ UINT16 TemperatureProbeNominalValue;
+ UINT16 MDLowerNoncriticalThreshold;
+ UINT16 MDUpperNoncriticalThreshold;
+ UINT16 MDLowerCriticalThreshold;
+ UINT16 MDUpperCriticalThreshold;
+ UINT16 MDLowerNonrecoverableThreshold;
+ UINT16 MDUpperNonrecoverableThreshold;
+ UINT32 TemperatureProbeOemDefined;
+} EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA;
+
+//
+// Electrical Current Probe - SMBIOS Type 29
+//
+
+#define EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000017
+
+typedef struct {
+ UINT32 ElectricalCurrentProbeSite :5;
+ UINT32 ElectricalCurrentProbeStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;
+
+typedef struct {
+ STRING_REF ElectricalCurrentProbeDescription;
+ EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION
+ ElectricalCurrentProbeLocation;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeMaximumValue;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeMinimumValue;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeResolution;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeTolerance;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeAccuracy;
+ EFI_EXP_BASE10_DATA ElectricalCurrentProbeNominalValue;
+ EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;
+ EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;
+ EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;
+ EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;
+ EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;
+ EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;
+ UINT32 ElectricalCurrentProbeOemDefined;
+} EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA;
+
+//
+// Out-of-Band Remote Access - SMBIOS Type 30
+//
+
+#define EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER 0x00000018
+
+typedef struct {
+ UINT32 InboundConnectionEnabled :1;
+ UINT32 OutboundConnectionEnabled :1;
+ UINT32 Reserved :30;
+} EFI_MISC_REMOTE_ACCESS_CONNECTIONS;
+
+typedef struct {
+ STRING_REF RemoteAccessManufacturerNameDescription;
+ EFI_MISC_REMOTE_ACCESS_CONNECTIONS RemoteAccessConnections;
+} EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA;
+
+//
+// Misc. BIS Entry Point - SMBIOS Type 31
+//
+#define EFI_MISC_BIS_ENTRY_POINT_RECORD_NUMBER 0x00000019
+
+typedef struct {
+ EFI_PHYSICAL_ADDRESS BisEntryPoint;
+} EFI_MISC_BIS_ENTRY_POINT_DATA;
+
+//
+// Misc. Boot Information - SMBIOS Type 32
+//
+#define EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER 0x0000001A
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BOOT_INFORMATION_STATUS_TYPE.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef enum {
+ EfiBootInformationStatusNoError = 0x00,
+ EfiBootInformationStatusNoBootableMedia = 0x01,
+ EfiBootInformationStatusNormalOSFailedLoading = 0x02,
+ EfiBootInformationStatusFirmwareDetectedFailure = 0x03,
+ EfiBootInformationStatusOSDetectedFailure = 0x04,
+ EfiBootInformationStatusUserRequestedBoot = 0x05,
+ EfiBootInformationStatusSystemSecurityViolation = 0x06,
+ EfiBootInformationStatusPreviousRequestedImage = 0x07,
+ EfiBootInformationStatusWatchdogTimerExpired = 0x08,
+ EfiBootInformationStatusStartReserved = 0x09,
+ EfiBootInformationStatusStartOemSpecific = 0x80,
+ EfiBootInformationStatusStartProductSpecific = 0xC0
+} EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE;
+
+typedef struct {
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, the field name is EFI_MISC_BOOT_INFORMATION_STATUS_TYPE.
+ /// Keep it unchanged for backward compatibilty.
+ ///
+ EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE BootInformationStatus;
+ UINT8 BootInformationData[9];
+} EFI_MISC_BOOT_INFORMATION_STATUS_DATA;
+
+//
+// Management Device - SMBIOS Type 34
+//
+#define EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER 0x0000001B
+
+typedef enum {
+ EfiManagementDeviceTypeOther = 0x01,
+ EfiManagementDeviceTypeUnknown = 0x02,
+ EfiManagementDeviceTypeLm75 = 0x03,
+ EfiManagementDeviceTypeLm78 = 0x04,
+ EfiManagementDeviceTypeLm79 = 0x05,
+ EfiManagementDeviceTypeLm80 = 0x06,
+ EfiManagementDeviceTypeLm81 = 0x07,
+ EfiManagementDeviceTypeAdm9240 = 0x08,
+ EfiManagementDeviceTypeDs1780 = 0x09,
+ EfiManagementDeviceTypeMaxim1617 = 0x0A,
+ EfiManagementDeviceTypeGl518Sm = 0x0B,
+ EfiManagementDeviceTypeW83781D = 0x0C,
+ EfiManagementDeviceTypeHt82H791 = 0x0D
+} EFI_MISC_MANAGEMENT_DEVICE_TYPE;
+
+typedef enum {
+ EfiManagementDeviceAddressTypeOther = 1,
+ EfiManagementDeviceAddressTypeUnknown = 2,
+ EfiManagementDeviceAddressTypeIOPort = 3,
+ EfiManagementDeviceAddressTypeMemory = 4,
+ EfiManagementDeviceAddressTypeSmbus = 5
+} EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;
+
+typedef struct {
+ STRING_REF ManagementDeviceDescription;
+ EFI_MISC_MANAGEMENT_DEVICE_TYPE ManagementDeviceType;
+ UINTN ManagementDeviceAddress;
+ EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE
+ ManagementDeviceAddressType;
+} EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA;
+
+//
+// Management Device Component - SMBIOS Type 35
+//
+
+#define EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_RECORD_NUMBER 0x0000001C
+
+typedef struct {
+ STRING_REF ManagementDeviceComponentDescription;
+ EFI_INTER_LINK_DATA ManagementDeviceLink;
+ EFI_INTER_LINK_DATA ManagementDeviceComponentLink;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this field is NOT defined.
+ /// It's introduced for SmBios 2.6 specification type 35.
+ ///
+ EFI_INTER_LINK_DATA ManagementDeviceThresholdLink;
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, this field is NOT defined.
+ /// It's implementation-specific to simplify the code logic.
+ ///
+ UINT8 ComponentType;
+} EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA;
+
+//
+// IPMI Data Record - SMBIOS Type 38
+//
+typedef enum {
+ EfiIpmiOther = 0,
+ EfiIpmiKcs = 1,
+ EfiIpmiSmic = 2,
+ EfiIpmiBt = 3
+} EFI_MISC_IPMI_INTERFACE_TYPE;
+
+typedef struct {
+ UINT16 IpmiSpecLeastSignificantDigit:4;
+ UINT16 IpmiSpecMostSignificantDigit: 4;
+ UINT16 Reserved: 8;
+} EFI_MISC_IPMI_SPECIFICATION_REVISION;
+
+typedef struct {
+ EFI_MISC_IPMI_INTERFACE_TYPE IpmiInterfaceType;
+ EFI_MISC_IPMI_SPECIFICATION_REVISION
+ IpmiSpecificationRevision;
+ UINT16 IpmiI2CSlaveAddress;
+ UINT16 IpmiNvDeviceAddress;
+ UINT64 IpmiBaseAddress;
+ EFI_DEVICE_PATH_PROTOCOL IpmiDevicePath;
+} EFI_MISC_IPMI_INTERFACE_TYPE_DATA;
+
+#define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER 0x0000001D
+///
+/// The definition above is *NOT* defined in MiscSubclass specifications 0.9.
+/// It's defined for backward compatibility.
+///
+#define EFI_MISC_IPMI_INTERFACE_TYPE_DATA_RECORD_NUMBER EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER
+
+///
+/// System Power supply Record - SMBIOS Type 39
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the type of all fields are UINT32.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef struct {
+ UINT16 PowerSupplyHotReplaceable:1;
+ UINT16 PowerSupplyPresent :1;
+ UINT16 PowerSupplyUnplugged :1;
+ UINT16 InputVoltageRangeSwitch :4;
+ UINT16 PowerSupplyStatus :3;
+ UINT16 PowerSupplyType :4;
+ UINT16 Reserved :2;
+} EFI_MISC_POWER_SUPPLY_CHARACTERISTICS;
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA.
+/// Keep it unchanged for backward compatibilty.
+///
+typedef struct {
+ UINT16 PowerUnitGroup;
+ STRING_REF PowerSupplyLocation;
+ STRING_REF PowerSupplyDeviceName;
+ STRING_REF PowerSupplyManufacturer;
+ STRING_REF PowerSupplySerialNumber;
+ STRING_REF PowerSupplyAssetTagNumber;
+ STRING_REF PowerSupplyModelPartNumber;
+ STRING_REF PowerSupplyRevisionLevel;
+ UINT16 PowerSupplyMaxPowerCapacity;
+ EFI_MISC_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics;
+ EFI_INTER_LINK_DATA PowerSupplyInputVoltageProbeLink;
+ EFI_INTER_LINK_DATA PowerSupplyCoolingDeviceLink;
+ EFI_INTER_LINK_DATA PowerSupplyInputCurrentProbeLink;
+} EFI_MISC_SYSTEM_POWER_SUPPLY_DATA;
+
+#define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER 0x0000001E
+
+///
+/// OEM Data Record - SMBIOS Type 0x80-0xFF
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the structure name is EFI_SMBIOS_STRUCTURE_HDR.
+/// Due to this, the structure is commonly used by vendors to construct SmBios type 0x80~0xFF table,
+/// Keep it unchanged for backward compatibilty.
+///
+typedef struct {
+ UINT8 Type;
+ UINT8 Length;
+ UINT16 Handle;
+} SMBIOS_STRUCTURE_HDR;
+
+typedef struct {
+ ///
+ /// Inconsistent with specification here:
+ /// In MiscSubclass specification 0.9, the field name is EFI_SMBIOS_STRUCTURE_HDR.
+ /// Keep it unchanged for backward compatibilty.
+ ///
+ SMBIOS_STRUCTURE_HDR Header;
+ UINT8 RawData[1];
+} EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA;
+
+#define EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER 0x0000001F
+
+///
+/// Misc. System Event Log - SMBIOS Type 15
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 specification type 15.
+///
+#define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020
+
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 specification type 15.
+///
+typedef struct {
+ UINT16 LogAreaLength;
+ UINT16 LogHeaderStartOffset;
+ UINT16 LogDataStartOffset;
+ UINT8 AccessMethod;
+ UINT8 LogStatus;
+ UINT32 LogChangeToken;
+ UINT32 AccessMethodAddress;
+ UINT8 LogHeaderFormat;
+ UINT8 NumberOfSupportedLogType;
+ UINT8 LengthOfLogDescriptor;
+} EFI_MISC_SYSTEM_EVENT_LOG_DATA;
+
+//
+// Access Method.
+// 0x00~0x04: as following definition
+// 0x05~0x7f: Available for future assignment.
+// 0x80~0xff: BIOS Vendor/OEM-specific.
+//
+#define ACCESS_INDEXIO_1INDEX8BIT_DATA8BIT 0x00
+#define ACCESS_INDEXIO_2INDEX8BIT_DATA8BIT 0X01
+#define ACCESS_INDEXIO_1INDEX16BIT_DATA8BIT 0X02
+#define ACCESS_MEMORY_MAPPED 0x03
+#define ACCESS_GPNV 0x04
+
+///
+/// Management Device Threshold Data Record - SMBIOS Type 36
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 specification type 36.
+///
+#define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER 0x00000021
+///
+/// Inconsistent with specification here:
+/// In MiscSubclass specification 0.9, the following data structures are NOT defined.
+/// It's introduced for SmBios 2.6 specification type 36.
+///
+typedef struct {
+ UINT16 LowerThresNonCritical;
+ UINT16 UpperThresNonCritical;
+ UINT16 LowerThresCritical;
+ UINT16 UpperThresCritical;
+ UINT16 LowerThresNonRecover;
+ UINT16 UpperThresNonRecover;
+} EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD;
+
+//
+// Declare the following strutures alias to use them more conviniently.
+//
+typedef EFI_MISC_LAST_PCI_BUS_DATA EFI_MISC_LAST_PCI_BUS;
+typedef EFI_MISC_BIOS_VENDOR_DATA EFI_MISC_BIOS_VENDOR;
+typedef EFI_MISC_SYSTEM_MANUFACTURER_DATA EFI_MISC_SYSTEM_MANUFACTURER;
+typedef EFI_MISC_BASE_BOARD_MANUFACTURER_DATA EFI_MISC_BASE_BOARD_MANUFACTURER;
+typedef EFI_MISC_CHASSIS_MANUFACTURER_DATA EFI_MISC_CHASSIS_MANUFACTURER;
+typedef EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR;
+typedef EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA EFI_MISC_SYSTEM_SLOT_DESIGNATION;
+typedef EFI_MISC_ONBOARD_DEVICE_DATA EFI_MISC_ONBOARD_DEVICE;
+typedef EFI_MISC_POINTING_DEVICE_TYPE_DATA EFI_MISC_ONBOARD_DEVICE_TYPE_DATA;
+typedef EFI_MISC_OEM_STRING_DATA EFI_MISC_OEM_STRING;
+typedef EFI_MISC_SYSTEM_OPTION_STRING_DATA EFI_MISC_SYSTEM_OPTION_STRING;
+typedef EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES;
+typedef EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA EFI_MISC_SYSTEM_LANGUAGE_STRING;
+typedef EFI_MISC_SYSTEM_EVENT_LOG_DATA EFI_MISC_SYSTEM_EVENT_LOG;
+typedef EFI_MISC_BIS_ENTRY_POINT_DATA EFI_MISC_BIS_ENTRY_POINT;
+typedef EFI_MISC_BOOT_INFORMATION_STATUS_DATA EFI_MISC_BOOT_INFORMATION_STATUS;
+typedef EFI_MISC_SYSTEM_POWER_SUPPLY_DATA EFI_MISC_SYSTEM_POWER_SUPPLY;
+typedef EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION;
+typedef EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA EFI_MISC_SCHEDULED_POWER_ON_MONTH;
+typedef EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA EFI_MISC_VOLTAGE_PROBE_DESCRIPTION;
+typedef EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA EFI_MISC_COOLING_DEVICE_TEMP_LINK;
+typedef EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION;
+typedef EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA
+ EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION;
+typedef EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION;
+typedef EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION;
+typedef EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA
+ EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It is implementation-specific to simplify the code logic.
+///
+typedef union {
+ EFI_MISC_LAST_PCI_BUS_DATA LastPciBus;
+ EFI_MISC_BIOS_VENDOR_DATA MiscBiosVendor;
+ EFI_MISC_SYSTEM_MANUFACTURER_DATA MiscSystemManufacturer;
+ EFI_MISC_BASE_BOARD_MANUFACTURER_DATA MiscBaseBoardManufacturer;
+ EFI_MISC_CHASSIS_MANUFACTURER_DATA MiscChassisManufacturer;
+ EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA MiscPortInternalConnectorDesignator;
+ EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA MiscSystemSlotDesignation;
+ EFI_MISC_ONBOARD_DEVICE_DATA MiscOnboardDevice;
+ EFI_MISC_OEM_STRING_DATA MiscOemString;
+ EFI_MISC_SYSTEM_OPTION_STRING_DATA MiscOptionString;
+ EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA NumberOfInstallableLanguages;
+ EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA MiscSystemLanguageString;
+ EFI_MISC_SYSTEM_EVENT_LOG_DATA MiscSystemEventLog;
+ EFI_MISC_GROUP_NAME_DATA MiscGroupNameData;
+ EFI_MISC_GROUP_ITEM_SET_DATA MiscGroupItemSetData;
+ EFI_MISC_POINTING_DEVICE_TYPE_DATA MiscPointingDeviceTypeData;
+ EFI_MISC_RESET_CAPABILITIES_DATA MiscResetCapablilitiesData;
+ EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA MiscHardwareSecuritySettingsData;
+ EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA MiscScheduledPowerOnMonthData;
+ EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA MiscVoltagePorbeDescriptionData;
+ EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA MiscCoolingDeviceTempLinkData;
+ EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA MiscTemperatureProbeDescriptionData;
+ EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA MiscElectricalCurrentProbeDescriptionData;
+ EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA
+ MiscRemoteAccessManufacturerDescriptionData;
+ EFI_MISC_BIS_ENTRY_POINT_DATA MiscBisEntryPoint;
+ EFI_MISC_BOOT_INFORMATION_STATUS_DATA MiscBootInformationStatus;
+ EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA MiscMangementDeviceDescriptionData;
+ EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA
+ MiscmangementDeviceComponentDescriptionData;
+ EFI_MISC_IPMI_INTERFACE_TYPE_DATA MiscIpmiInterfaceTypeData;
+ EFI_MISC_SYSTEM_POWER_SUPPLY_DATA MiscPowerSupplyInfo;
+ EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA MiscSmbiosStructEncapsulation;
+ EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD MiscManagementDeviceThreshold;
+} EFI_MISC_SUBCLASS_RECORDS;
+
+///
+/// Inconsistent with specification here:
+/// In MemSubclass specification 0.9, the following data structures are NOT defined.
+/// It is implementation-specific to simplify the code logic.
+///
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER Header;
+ EFI_MISC_SUBCLASS_RECORDS Record;
+} EFI_MISC_SUBCLASS_DRIVER_DATA;
+#pragma pack()
+
+///
+/// Inconsistent with specification here:
+/// In DataHubSubclass specification 0.9 page 16, the following symbol is NOT defined.
+/// But value is meaningful, 0 means Reserved.
+///
+#define EFI_SUBCLASS_INSTANCE_RESERVED 0
+///
+/// Inconsistent with specification here:
+/// In DataHubSubclass specification 0.9 page 16, the following symbol is NOT defined.
+/// But value is meaningful, -1 means Not Applicable.
+///
+#define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF
+
+#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDeviceFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDeviceFunction.c
index 3872312c30..3e74ec31db 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDeviceFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscMemoryDeviceFunction.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscMemoryDeviceFunction.c
@@ -22,8 +19,6 @@ Abstract:
#include "CommonHeader.h"
#include "MiscSubclassDriver.h"
-#include <Protocol/DataHub.h>
-#include <Guid/DataHubRecords.h>
#include <Protocol/MemInfo.h>
@@ -46,13 +41,6 @@ enum {
};
-typedef struct {
- EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress;
- EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress;
- EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
- UINT16 MemoryArrayPartitionWidth;
-} EFI_MEMORY_ARRAY_START_ADDRESS;
-
/**
This function makes boot time changes to the contents of the
MiscBiosVendor (Type 0).
@@ -108,6 +96,7 @@ MISC_SMBIOS_TABLE_FUNCTION( MiscMemoryDevice )
EFI_STATUS Status;
STRING_REF TokenToGet;
SMBIOS_TABLE_TYPE17 *SmbiosRecord;
+ SMBIOS_TABLE_TYPE19 *SmbiosRecord19;
EFI_SMBIOS_HANDLE SmbiosHandle;
EFI_MEMORY_ARRAY_LINK_DATA *ForType17InputData;
UINT16 DdrFreq=0;
@@ -117,6 +106,7 @@ MISC_SMBIOS_TABLE_FUNCTION( MiscMemoryDevice )
UINT8 Dimm;
UINT8 NumSlots;
+ UINT64 TotalMemorySize;
STRING_REF DevLocator[] = {
STRING_TOKEN(STR_MISC_MEM_DEV_LOCATOR0), STRING_TOKEN(STR_MISC_MEM_DEV_LOCATOR1)
};
@@ -183,137 +173,193 @@ MISC_SMBIOS_TABLE_FUNCTION( MiscMemoryDevice )
break;
}
- for (Dimm = 0; Dimm < NumSlots; Dimm++) {
- //
- // Memory Device Locator
- //
- TokenToGet = DevLocator[Dimm];
- MemDevice = SmbiosMiscGetString (TokenToGet);
- MemDeviceStrLen = StrLen(MemDevice);
- if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- TokenToGet = DevLocator[Dimm];
- MemDevice = SmbiosMiscGetString (TokenToGet);
- MemDeviceStrLen = StrLen(MemDevice);
- if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Memory Bank Locator
- //
- TokenToGet = BankLocator[Dimm];
- MemBankLocator = SmbiosMiscGetString (TokenToGet);
- MemBankLocatorStrLen = StrLen(MemBankLocator);
- if (MemBankLocatorStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Memory Manufacturer
- //
- TokenToGet = STRING_TOKEN (STR_MISC_MEM_MANUFACTURER);
- MemManufacturer = SmbiosMiscGetString (TokenToGet);
- MemManufacturerStrLen = StrLen(MemManufacturer);
- if (MemManufacturerStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Memory Serial Number
- //
- TokenToGet = STRING_TOKEN (STR_MISC_MEM_SERIAL_NO);
- MemSerialNumber = SmbiosMiscGetString (TokenToGet);
- MemSerialNumberStrLen = StrLen(MemSerialNumber);
- if (MemSerialNumberStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Memory Asset Tag Number
- //
- TokenToGet = STRING_TOKEN (STR_MISC_MEM_ASSET_TAG);
- MemAssetTag = SmbiosMiscGetString (TokenToGet);
- MemAssetTagStrLen = StrLen(MemAssetTag);
- if (MemAssetTagStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Memory Part Number
- //
- TokenToGet = STRING_TOKEN (STR_MISC_MEM_PART_NUMBER);
- MemPartNumber = SmbiosMiscGetString (TokenToGet);
- MemPartNumberStrLen = StrLen(MemPartNumber);
- if (MemPartNumberStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Two zeros following the last string.
- //
- SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE17) + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1);
- ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE17) + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1);
-
- SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_MEMORY_DEVICE;
- SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE17);
-
- //
- // Make handle chosen by smbios protocol.add automatically.
- //
- SmbiosRecord->Hdr.Handle = 0;
-
- //
- // Memory Array Handle will be the 3rd optional string following the formatted structure.
- //
GetType16Hndl( Smbios, &Type16Handle);
- SmbiosRecord->MemoryArrayHandle = Type16Handle;
+ TotalMemorySize = 0;
+ for (Dimm = 0; Dimm < NumSlots; Dimm++) {
+ //
+ // Memory Device Locator
+ //
+ TokenToGet = DevLocator[Dimm];
+ MemDevice = SmbiosMiscGetString (TokenToGet);
+ MemDeviceStrLen = StrLen(MemDevice);
+ if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
- //
- // Memory Size
- //
- if ((MemInfoHob->MemInfoData.dimmSize[Dimm])!=0){
- SmbiosRecord->TotalWidth = 32;
- SmbiosRecord->DataWidth = 32;
- SmbiosRecord->Size = MemInfoHob->MemInfoData.dimmSize[Dimm];
- SmbiosRecord->Speed = DdrFreq;
- SmbiosRecord->ConfiguredMemoryClockSpeed = DdrFreq;
- SmbiosRecord->FormFactor = EfiMemoryFormFactorDimm;
- }
+ TokenToGet = DevLocator[Dimm];
+ MemDevice = SmbiosMiscGetString (TokenToGet);
+ MemDeviceStrLen = StrLen(MemDevice);
+ if (MemDeviceStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Memory Bank Locator
+ //
+ TokenToGet = BankLocator[Dimm];
+ MemBankLocator = SmbiosMiscGetString (TokenToGet);
+ MemBankLocatorStrLen = StrLen(MemBankLocator);
+ if (MemBankLocatorStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Memory Manufacturer
+ //
+ TokenToGet = STRING_TOKEN (STR_MISC_MEM_MANUFACTURER);
+ MemManufacturer = SmbiosMiscGetString (TokenToGet);
+ MemManufacturerStrLen = StrLen(MemManufacturer);
+ if (MemManufacturerStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Memory Serial Number
+ //
+ TokenToGet = STRING_TOKEN (STR_MISC_MEM_SERIAL_NO);
+ MemSerialNumber = SmbiosMiscGetString (TokenToGet);
+ MemSerialNumberStrLen = StrLen(MemSerialNumber);
+ if (MemSerialNumberStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Memory Asset Tag Number
+ //
+ TokenToGet = STRING_TOKEN (STR_MISC_MEM_ASSET_TAG);
+ MemAssetTag = SmbiosMiscGetString (TokenToGet);
+ MemAssetTagStrLen = StrLen(MemAssetTag);
+ if (MemAssetTagStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Memory Part Number
+ //
+ TokenToGet = STRING_TOKEN (STR_MISC_MEM_PART_NUMBER);
+ MemPartNumber = SmbiosMiscGetString (TokenToGet);
+ MemPartNumberStrLen = StrLen(MemPartNumber);
+ if (MemPartNumberStrLen > SMBIOS_STRING_MAX_LENGTH) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Two zeros following the last string.
+ //
+ SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE17) + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1);
+ ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE17) + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1 + MemAssetTagStrLen+1 + MemPartNumberStrLen + 1 + 1);
+
+ SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_MEMORY_DEVICE;
+ SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE17);
+
+ //
+ // Make handle chosen by smbios protocol.add automatically.
+ //
+ SmbiosRecord->Hdr.Handle = 0;
+
+ //
+ // Memory Array Handle will be the 3rd optional string following the formatted structure.
+ //
+ SmbiosRecord->MemoryArrayHandle = Type16Handle;
+
+ //
+ // Memory Size
+ //
+ if ((MemInfoHob->MemInfoData.dimmSize[Dimm])!=0){
+ SmbiosRecord->TotalWidth = 32;
+ SmbiosRecord->DataWidth = 32;
+ SmbiosRecord->Size = MemInfoHob->MemInfoData.dimmSize[Dimm];
+ SmbiosRecord->Speed = DdrFreq;
+ SmbiosRecord->ConfiguredMemoryClockSpeed = DdrFreq;
+ SmbiosRecord->FormFactor = EfiMemoryFormFactorDimm;
+ }
- SmbiosRecord->DeviceSet =(UINT8) ForType17InputData->MemoryDeviceSet;
- SmbiosRecord->DeviceLocator= 1;
- SmbiosRecord->BankLocator = 2;
+ SmbiosRecord->DeviceSet =(UINT8) ForType17InputData->MemoryDeviceSet;
+ SmbiosRecord->DeviceLocator= 1;
+ SmbiosRecord->BankLocator = 2;
- SmbiosRecord->Manufacturer = 3;
- SmbiosRecord->SerialNumber= 4;
- SmbiosRecord->AssetTag= 5;
- SmbiosRecord->PartNumber= 6;
- SmbiosRecord->Attributes = (UINT8) ForType17InputData->MemoryState;
- SmbiosRecord->MemoryType = MemoryType;
+ SmbiosRecord->Manufacturer = 3;
+ SmbiosRecord->SerialNumber= 4;
+ SmbiosRecord->AssetTag= 5;
+ SmbiosRecord->PartNumber= 6;
+ SmbiosRecord->Attributes = (UINT8) ForType17InputData->MemoryState;
+ SmbiosRecord->MemoryType = MemoryType;
- OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
- UnicodeStrToAsciiStr(MemDevice, OptionalStrStart);
- UnicodeStrToAsciiStr(MemBankLocator, OptionalStrStart + MemDeviceStrLen + 1);
- UnicodeStrToAsciiStr(MemManufacturer, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1);
- UnicodeStrToAsciiStr(MemSerialNumber, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1);
- UnicodeStrToAsciiStr(MemAssetTag, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1);
- UnicodeStrToAsciiStr(MemPartNumber, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1+ MemAssetTagStrLen+1 );
+ OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
+ UnicodeStrToAsciiStr(MemDevice, OptionalStrStart);
+ UnicodeStrToAsciiStr(MemBankLocator, OptionalStrStart + MemDeviceStrLen + 1);
+ UnicodeStrToAsciiStr(MemManufacturer, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1);
+ UnicodeStrToAsciiStr(MemSerialNumber, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1);
+ UnicodeStrToAsciiStr(MemAssetTag, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1);
+ UnicodeStrToAsciiStr(MemPartNumber, OptionalStrStart + MemDeviceStrLen + 1 + MemBankLocatorStrLen + 1 + MemManufacturerStrLen + 1 + MemSerialNumberStrLen + 1+ MemAssetTagStrLen+1 );
+
+ //
+ // Now we have got the full smbios record, call smbios protocol to add this record.
+ //
+ SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
+ Status = Smbios-> Add(
+ Smbios,
+ NULL,
+ &SmbiosHandle,
+ (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
+ );
+
+ if ((SmbiosRecord->Size & BIT15) != 0) {
+ //
+ // Size is in KB
+ //
+ TotalMemorySize = TotalMemorySize + LShiftU64 (SmbiosRecord->Size, 10);
+ } else {
+ //
+ // Size is in MB
+ //
+ TotalMemorySize = TotalMemorySize + LShiftU64 (SmbiosRecord->Size, 20);
+ }
+
+ FreePool(SmbiosRecord);
+ }
+
+ //
+ // Allocate and zero SMBIOS TYPE 19 Record
+ //
+ SmbiosRecord19 = AllocateZeroPool (sizeof (SMBIOS_TABLE_TYPE19));
+ ASSERT (SmbiosRecord19 != NULL);
+
+ //
+ // Fill in SMBIOS type 19 information
+ //
+ SmbiosRecord19->Hdr.Type = SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS;
+ SmbiosRecord19->Hdr.Length = (UINT8) sizeof (SMBIOS_TABLE_TYPE19);
+ SmbiosRecord19->Hdr.Handle = 0;
+
+ SmbiosRecord19->MemoryArrayHandle = Type16Handle;
+ SmbiosRecord19->PartitionWidth = NumSlots;
+ if (TotalMemorySize <= SIZE_4TB) {
+ SmbiosRecord19->StartingAddress = 0x0;
+ //
+ // Convert bytes to KB
+ //
+ SmbiosRecord19->EndingAddress = (UINT32)RShiftU64 (TotalMemorySize, 10) - 1;
+ SmbiosRecord19->ExtendedStartingAddress = 0;
+ SmbiosRecord19->ExtendedEndingAddress = 0;
+ } else {
+ SmbiosRecord19->StartingAddress = 0xffffffff;
+ SmbiosRecord19->EndingAddress = 0xffffffff;
+ SmbiosRecord19->ExtendedStartingAddress = 0;
+ SmbiosRecord19->ExtendedEndingAddress = TotalMemorySize - 1;
+ }
//
- // Now we have got the full smbios record, call smbios protocol to add this record.
+ // Add SMBIOS type 19 record to SMBIOS table.
//
SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
- Status = Smbios-> Add(
- Smbios,
- NULL,
- &SmbiosHandle,
- (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
- );
- FreePool(SmbiosRecord);
- }
+ Smbios->Add(
+ Smbios,
+ NULL,
+ &SmbiosHandle,
+ (EFI_SMBIOS_TABLE_HEADER *)SmbiosRecord19
+ );
+
return Status;
}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
index 2f25ab802b..97a782e362 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscOemType0x94Function.c
@@ -17,7 +17,6 @@ Abstract:
#include "CommonHeader.h"
#include "MiscSubclassDriver.h"
-#include <Protocol/DataHub.h>
#include <Library/HiiLib.h>
#include <Library/PrintLib.h>
#include <Protocol/PciRootBridgeIo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheData.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheData.c
index 6af7f56107..44f2530ac3 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheData.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheData.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2012 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscBiosProcessorCache.c
@@ -28,6 +25,4 @@ Abstract:
//
// Static (possibly build generated) Processor cache data.
//
-MISC_SMBIOS_TABLE_DATA(EFI_CACHE_VARIABLE_RECORD, MiscProcessorCache) = {
-0
-};
+MISC_SMBIOS_TABLE_DATA(UINTN, MiscProcessorCache) = 0;
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheFunction.c
index ca121525a0..c64e87e20b 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorCacheFunction.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscProcessorCacheFunction.c
@@ -20,170 +17,144 @@ Abstract:
--*/
#include "CommonHeader.h"
#include "MiscSubclassDriver.h"
-#include <Protocol/DataHub.h>
-#include <Guid/DataHubRecords.h>
-
-UINT32
-ConvertBase2ToRaw (
- IN EFI_EXP_BASE2_DATA *Data)
-{
- UINTN Index;
- UINT32 RawData;
-
- RawData = Data->Value;
- for (Index = 0; Index < (UINTN) Data->Exponent; Index++) {
- RawData <<= 1;
- }
-
- return RawData;
-}
-
+#include <Register/Cpuid.h>
MISC_SMBIOS_TABLE_FUNCTION(MiscProcessorCache)
{
EFI_SMBIOS_HANDLE SmbiosHandle;
- SMBIOS_TABLE_TYPE7 *SmbiosRecordL1;
- SMBIOS_TABLE_TYPE7 *SmbiosRecordL2;
+ SMBIOS_TABLE_TYPE7 *SmbiosRecord;
EFI_CACHE_SRAM_TYPE_DATA CacheSramType;
CHAR16 *SocketDesignation;
CHAR8 *OptionalStrStart;
UINTN SocketStrLen;
STRING_REF TokenToGet;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- UINT64 MonotonicCount;
- EFI_DATA_RECORD_HEADER *Record;
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;
- UINT8 *SrcData;
- EFI_STATUS Status;
+ UINT32 SubIndex;
+ CPUID_CACHE_PARAMS_EAX CacheParamsEax;
+ CPUID_CACHE_PARAMS_EBX CacheParamsEbx;
+ UINT32 RegisterEcx;
+ CPUID_CACHE_PARAMS_EDX CacheParamsEdx;
+ UINT8 SystemCacheType;
+ UINTN Size;
//
- // Memory Device LOcator
+ // Memory Device Locator
//
- DEBUG ((EFI_D_ERROR, "type 7\n"));
-
TokenToGet = STRING_TOKEN (STR_SOCKET_DESIGNATION);
SocketDesignation = SmbiosMiscGetString (TokenToGet);
SocketStrLen = StrLen(SocketDesignation);
if (SocketStrLen > SMBIOS_STRING_MAX_LENGTH) {
- return EFI_UNSUPPORTED;
+ return EFI_UNSUPPORTED;
}
- SmbiosRecordL1 = AllocatePool(sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1);
- ASSERT (SmbiosRecordL1 != NULL);
- ZeroMem(SmbiosRecordL1, sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1);
-
- SmbiosRecordL2 = AllocatePool(sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1);
- ASSERT (SmbiosRecordL2 != NULL);
- ZeroMem(SmbiosRecordL2, sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1);
-
- //
- // Get the Data Hub Protocol. Assume only one instance
- //
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (VOID **)&DataHub
- );
- ASSERT_EFI_ERROR(Status);
-
- MonotonicCount = 0;
- Record = NULL;
-
- do {
- Status = DataHub->GetNextRecord (
- DataHub,
- &MonotonicCount,
- NULL,
- &Record
- );
- if (!EFI_ERROR(Status)) {
- if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1);
- SrcData = (UINT8 *)(DataHeader + 1);
- if (CompareGuid(&Record->DataRecordGuid, &gEfiCacheSubClassGuid) && (DataHeader->RecordType == CacheSizeRecordType)) {
- if (DataHeader->SubInstance == EFI_CACHE_L1) {
- SmbiosRecordL1->InstalledSize += (UINT16) (ConvertBase2ToRaw((EFI_EXP_BASE2_DATA *)SrcData) >> 10);
- SmbiosRecordL1->MaximumCacheSize = SmbiosRecordL1->InstalledSize;
- }
- else if (DataHeader->SubInstance == EFI_CACHE_L2) {
- SmbiosRecordL2->InstalledSize += (UINT16) (ConvertBase2ToRaw((EFI_EXP_BASE2_DATA *)SrcData) >> 10);
- SmbiosRecordL2->MaximumCacheSize = SmbiosRecordL2->InstalledSize;
- } else {
- continue;
- }
- }
- }
- }
- } while (!EFI_ERROR(Status) && (MonotonicCount != 0));
-
- //
- //Filling SMBIOS type 7 information for different cache levels.
- //
-
- SmbiosRecordL1->Hdr.Type = EFI_SMBIOS_TYPE_CACHE_INFORMATION;
- SmbiosRecordL1->Hdr.Length = (UINT8) sizeof (SMBIOS_TABLE_TYPE7);
- SmbiosRecordL1->Hdr.Handle = 0;
-
- SmbiosRecordL1->Associativity = CacheAssociativity8Way;
- SmbiosRecordL1->SystemCacheType = CacheTypeUnknown;
- SmbiosRecordL1->SocketDesignation = 0x01;
- SmbiosRecordL1->CacheSpeed = 0;
- SmbiosRecordL1->CacheConfiguration = 0x0180;
- ZeroMem (&CacheSramType, sizeof (EFI_CACHE_SRAM_TYPE_DATA));
- CacheSramType.Synchronous = 1;
- CopyMem(&SmbiosRecordL1->SupportedSRAMType, &CacheSramType, 2);
- CopyMem(&SmbiosRecordL1->CurrentSRAMType, &CacheSramType, 2);
- SmbiosRecordL1->ErrorCorrectionType = EfiCacheErrorSingleBit;
-
-
- SmbiosRecordL2->Hdr.Type = EFI_SMBIOS_TYPE_CACHE_INFORMATION;
- SmbiosRecordL2->Hdr.Length = (UINT8) sizeof (SMBIOS_TABLE_TYPE7);
- SmbiosRecordL2->Hdr.Handle = 0;
-
- SmbiosRecordL2->Associativity = CacheAssociativity16Way;
- SmbiosRecordL2->SystemCacheType = CacheTypeInstruction;
- SmbiosRecordL2->SocketDesignation = 0x01;
- SmbiosRecordL2->CacheSpeed = 0;
- SmbiosRecordL2->CacheConfiguration = 0x0281;
- ZeroMem (&CacheSramType, sizeof (EFI_CACHE_SRAM_TYPE_DATA));
- CacheSramType.Synchronous = 1;
- CopyMem(&SmbiosRecordL2->SupportedSRAMType, &CacheSramType, 2);
- CopyMem(&SmbiosRecordL2->CurrentSRAMType, &CacheSramType, 2);
- SmbiosRecordL2->ErrorCorrectionType = EfiCacheErrorSingleBit;
-
-
-
- //
- //Adding SMBIOS type 7 records to SMBIOS table.
- //
- SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
- OptionalStrStart = (CHAR8 *)(SmbiosRecordL1 + 1);
- UnicodeStrToAsciiStr(SocketDesignation, OptionalStrStart);
-
- Smbios-> Add(
- Smbios,
- NULL,
- &SmbiosHandle,
- (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecordL1
- );
-
- //
- //VLV2 incorporates two SLM modules (quad cores) in the SoC. 2 cores share BIU/L2 cache
- //
- SmbiosRecordL2->InstalledSize = (SmbiosRecordL2->InstalledSize)/2;
- SmbiosRecordL2->MaximumCacheSize = SmbiosRecordL2->InstalledSize;
- SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
-
- OptionalStrStart = (CHAR8 *)(SmbiosRecordL2 + 1);
- UnicodeStrToAsciiStr(SocketDesignation, OptionalStrStart);
-
- Smbios-> Add(
- Smbios,
- NULL,
- &SmbiosHandle,
- (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecordL2
- );
-
+ //
+ // Retrieve cache level information using CPUID
+ //
+ for (SubIndex = 0; ; SubIndex++) {
+ AsmCpuidEx (
+ CPUID_CACHE_PARAMS,
+ SubIndex,
+ &CacheParamsEax.Uint32,
+ &CacheParamsEbx.Uint32,
+ &RegisterEcx,
+ &CacheParamsEdx.Uint32
+ );
+ //
+ // Terminate loop when CacheType is CPUID_CACHE_PARAMS_CACHE_TYPE_NULL
+ //
+ if (CacheParamsEax.Bits.CacheType == CPUID_CACHE_PARAMS_CACHE_TYPE_NULL) {
+ break;
+ }
+
+ //
+ // Allocate and zero SMBIOS TYPE 7 Record
+ //
+ SmbiosRecord = AllocateZeroPool (sizeof (SMBIOS_TABLE_TYPE7) + 7 + 1 + 1);
+ ASSERT (SmbiosRecord != NULL);
+
+ //
+ // Compute cache size in bytes
+ //
+ Size = (CacheParamsEbx.Bits.Ways + 1) *
+ (CacheParamsEbx.Bits.LinePartitions + 1) *
+ (CacheParamsEbx.Bits.LineSize + 1) *
+ (RegisterEcx + 1);
+ DEBUG ((DEBUG_INFO, "MiscProcessorCache(): Cache Type = %d Cache Level = %d Size = %x\n", CacheParamsEax.Bits.CacheType, CacheParamsEax.Bits.CacheLevel, Size));
+
+ //
+ // Determine SMBIOS SystemCacheType
+ //
+ switch (CacheParamsEax.Bits.CacheType) {
+ case 1:
+ SystemCacheType = CacheTypeData;
+ break;
+ case 2:
+ SystemCacheType = CacheTypeInstruction;
+ break;
+ case 3:
+ SystemCacheType = CacheTypeUnified;
+ break;
+ default:
+ SystemCacheType = CacheTypeUnknown;
+ }
+
+ //
+ // Update cache sizes in KB
+ //
+ switch (CacheParamsEax.Bits.CacheLevel) {
+ case 1:
+ SmbiosRecord->InstalledSize = (UINT16)(Size >> 10);
+ SmbiosRecord->MaximumCacheSize = SmbiosRecord->InstalledSize;
+ SmbiosRecord->SystemCacheType = SystemCacheType;
+ SmbiosRecord->Associativity = CacheAssociativity8Way;
+ SmbiosRecord->CacheConfiguration = 0x0180;
+ break;
+ case 2:
+ SmbiosRecord->InstalledSize = (UINT16)(Size >> 10);
+ SmbiosRecord->MaximumCacheSize = SmbiosRecord->InstalledSize;
+ SmbiosRecord->SystemCacheType = SystemCacheType;
+ SmbiosRecord->Associativity = CacheAssociativity16Way;
+ SmbiosRecord->CacheConfiguration = 0x0281;
+ //
+ //VLV2 incorporates two SLM modules (quad cores) in the SoC.
+ // 2 cores share BIU/L2 cache
+ //
+ SmbiosRecord->InstalledSize = SmbiosRecord->InstalledSize / 2;
+ SmbiosRecord->MaximumCacheSize = SmbiosRecord->InstalledSize;
+ break;
+ default:
+ DEBUG ((DEBUG_ERROR, "MiscProcessorCache(): Unexpected cache level %d\n", CacheParamsEax.Bits.CacheLevel));
+ break;
+ }
+
+ //
+ //Filling SMBIOS type 7 information for different cache levels.
+ //
+ SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_CACHE_INFORMATION;
+ SmbiosRecord->Hdr.Length = (UINT8) sizeof (SMBIOS_TABLE_TYPE7);
+ SmbiosRecord->Hdr.Handle = 0;
+
+ SmbiosRecord->SocketDesignation = 0x01;
+ SmbiosRecord->CacheSpeed = 0;
+ ZeroMem (&CacheSramType, sizeof (EFI_CACHE_SRAM_TYPE_DATA));
+ CacheSramType.Synchronous = 1;
+ CopyMem(&SmbiosRecord->SupportedSRAMType, &CacheSramType, 2);
+ CopyMem(&SmbiosRecord->CurrentSRAMType, &CacheSramType, 2);
+ SmbiosRecord->ErrorCorrectionType = EfiCacheErrorSingleBit;
+
+ //
+ // Adding SMBIOS type 7 records to SMBIOS table.
+ //
+ SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
+ OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
+ UnicodeStrToAsciiStr(SocketDesignation, OptionalStrStart);
+
+ Smbios->Add(
+ Smbios,
+ NULL,
+ &SmbiosHandle,
+ (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
+ );
+ }
return EFI_SUCCESS;
}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorInformationFunction.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorInformationFunction.c
index e01693ede7..e71a03ceac 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorInformationFunction.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscProcessorInformationFunction.c
@@ -1,12 +1,9 @@
/*++
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscProcessorInformationFunction.c
@@ -23,9 +20,9 @@ Abstract:
#include "MiscSubclassDriver.h"
#include <Protocol/MpService.h>
-#include <Protocol/DataHub.h>
-#include <Guid/DataHubRecords.h>
#include <Library/CpuIA32.h>
+#include <Library/TimerLib.h>
+#include <Register/Cpuid.h>
#define EfiProcessorFamilyIntelAtomProcessor 0x2B
@@ -75,33 +72,6 @@ GetCacheHandle (
*Handle = 0xFFFF;
}
-
-/**
- This function makes boot time changes to the contents of the
- MiscProcessorInformation (Type 4).
-
- @param RecordData Pointer to copy of RecordData from the Data Table.
-
- @retval EFI_SUCCESS All parameters were valid.
- @retval EFI_UNSUPPORTED Unexpected RecordType value.
- @retval EFI_INVALID_PARAMETER Invalid parameter was found.
-
-**/
-UINT32
-ConvertBase10ToRaw (
- IN EFI_EXP_BASE10_DATA *Data)
-{
- UINTN Index;
- UINT32 RawData;
-
- RawData = Data->Value;
- for (Index = 0; Index < (UINTN) Data->Exponent; Index++) {
- RawData *= 10;
- }
-
- return RawData;
-}
-
#define BSEL_CR_OVERCLOCK_CONTROL 0xCD
#define FUSE_BSEL_MASK 0x03
@@ -137,6 +107,96 @@ DetermineiFsbFromMsr (
}
+CHAR16 *
+CpuidSocVendorBrandString (
+ VOID
+ )
+{
+ UINT32 MaximumExtendedFunction;
+ //
+ // Array to store brand string from 3 brand string leafs with
+ // 4 32-bit brand string values per leaf and an extra value to
+ // null terminate the string.
+ //
+ UINT32 BrandString[3 * 4 + 1];
+ CHAR8 *AsciiBrandString;
+ CHAR16 *UnicodeBrandString;
+ UINTN Length;
+
+ AsmCpuid (CPUID_EXTENDED_FUNCTION, &MaximumExtendedFunction, NULL, NULL, NULL);
+
+ ZeroMem (&BrandString, sizeof (BrandString));
+ if (CPUID_BRAND_STRING1 <= MaximumExtendedFunction) {
+ AsmCpuid (
+ CPUID_BRAND_STRING1,
+ &BrandString[0],
+ &BrandString[1],
+ &BrandString[2],
+ &BrandString[3]
+ );
+ }
+ if (CPUID_BRAND_STRING2 <= MaximumExtendedFunction) {
+ AsmCpuid (
+ CPUID_BRAND_STRING2,
+ &BrandString[4],
+ &BrandString[5],
+ &BrandString[6],
+ &BrandString[7]
+ );
+ }
+ if (CPUID_BRAND_STRING3 <= MaximumExtendedFunction) {
+ AsmCpuid (
+ CPUID_BRAND_STRING3,
+ &BrandString[8],
+ &BrandString[9],
+ &BrandString[10],
+ &BrandString[11]
+ );
+ }
+
+ //
+ // Skip spaces at the beginning of the brand string
+ //
+ for (AsciiBrandString = (CHAR8 *)BrandString; *AsciiBrandString == ' '; AsciiBrandString++);
+
+ DEBUG ((DEBUG_INFO, "Processor Brand String = %a\n", AsciiBrandString));
+
+ //
+ // Convert ASCII brand string to an allocated Unicode brand string
+ //
+ Length = AsciiStrLen (AsciiBrandString) + 1;
+ UnicodeBrandString = AllocatePool (Length * sizeof (CHAR16));
+ AsciiStrToUnicodeStrS (AsciiBrandString, UnicodeBrandString, Length);
+
+ DEBUG ((DEBUG_INFO, "Processor Unicode Brand String = %s\n", UnicodeBrandString));
+
+ return UnicodeBrandString;
+}
+
+UINT64
+MeasureTscFrequency (
+ VOID
+ )
+{
+ EFI_TPL CurrentTpl;
+ UINT64 BeginValue;
+ UINT64 EndValue;
+ UINT64 Frequency;
+
+ //
+ // Wait for 10000us = 10ms for the calculation
+ // It needs a precise timer to calculate the ticks
+ //
+ CurrentTpl = gBS->RaiseTPL (TPL_HIGH_LEVEL);
+ BeginValue = AsmReadTsc ();
+ MicroSecondDelay (10000);
+ EndValue = AsmReadTsc ();
+ gBS->RestoreTPL (CurrentTpl);
+ Frequency = MultU64x32 (EndValue - BeginValue, 1000);
+ Frequency = DivU64x32 (Frequency, 10);
+ return Frequency;
+}
+
MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
{
CHAR8 *OptionalStrStart;
@@ -152,7 +212,7 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
UINTN SocketStrLen=0;
UINTN AssetTagStrLen=0;
UINTN PartNumberStrLen=0;
- UINTN ProcessorVoltage=0xAE;
+ UINTN ProcessorVoltage=(BIT7 | 9);
UINT32 Eax01;
UINT32 Ebx01;
UINT32 Ecx01;
@@ -169,17 +229,8 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
UINTN NumberOfProcessors=0;
UINT64 Frequency = 0;
EFI_MP_SERVICES_PROTOCOL *MpService;
- EFI_DATA_HUB_PROTOCOL *DataHub;
- UINT64 MonotonicCount;
- EFI_DATA_RECORD_HEADER *Record;
- EFI_SUBCLASS_TYPE1_HEADER *DataHeader;
- UINT8 *SrcData;
- EFI_PROCESSOR_VERSION_DATA *ProcessorVersion;
- CHAR16 *NewStringToken;
- STRING_REF TokenToUpdate;
PROCESSOR_ID_DATA *ProcessorId = NULL;
-
//
// First check for invalid parameters.
//
@@ -194,59 +245,6 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
return EFI_INVALID_PARAMETER;
}
- //
- // Get the Data Hub Protocol. Assume only one instance
- //
- Status = gBS->LocateProtocol (
- &gEfiDataHubProtocolGuid,
- NULL,
- (VOID **)&DataHub
- );
- ASSERT_EFI_ERROR(Status);
-
- MonotonicCount = 0;
- Record = NULL;
-
- do {
- Status = DataHub->GetNextRecord (
- DataHub,
- &MonotonicCount,
- NULL,
- &Record
- );
- if (!EFI_ERROR(Status)) {
- if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {
-
- DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1);
- SrcData = (UINT8 *)(DataHeader + 1);
-
- //
- // Processor
- //
- if (CompareGuid(&Record->DataRecordGuid, &gEfiProcessorSubClassGuid)) {
- CopyMem (&mProcessorProducerGuid, &Record->ProducerName, sizeof(EFI_GUID));
- switch (DataHeader->RecordType) {
- case ProcessorVoltageRecordType:
- ProcessorVoltage = (((EFI_EXP_BASE10_DATA *)SrcData)->Value)/100 + 0x80;
- break;
- case ProcessorCoreFrequencyRecordType:
- DEBUG ((EFI_D_ERROR, "ProcessorCoreFrequencyRecordType SrcData1 =%d\n", ConvertBase10ToRaw((EFI_EXP_BASE10_DATA *)SrcData)/1000000));
- Frequency = (ConvertBase10ToRaw((EFI_EXP_BASE10_DATA *)SrcData)/1000000);
- break;
- case ProcessorVersionRecordType:
- ProcessorVersion = (EFI_PROCESSOR_VERSION_DATA *)SrcData;
- NewStringToken = HiiGetPackageString(&mProcessorProducerGuid, *ProcessorVersion, NULL);
- TokenToUpdate = (STRING_REF)STR_MISC_PROCESSOR_VERSION;
- HiiSetString(mHiiHandle, TokenToUpdate, NewStringToken, NULL);
- break;
- default:
- break;
- }
- }
- }
- }
- } while (!EFI_ERROR(Status) && (MonotonicCount != 0));
-
//
// Token to get for Socket Name
//
@@ -270,8 +268,7 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
//
// Token to get for Processor Version
//
- TokenToGet = STRING_TOKEN (STR_MISC_PROCESSOR_VERSION);
- Version = SmbiosMiscGetString (TokenToGet);
+ Version = CpuidSocVendorBrandString ();
VersionStrLen = StrLen(Version);
if (VersionStrLen > SMBIOS_STRING_MAX_LENGTH) {
return EFI_UNSUPPORTED;
@@ -372,10 +369,12 @@ MISC_SMBIOS_TABLE_FUNCTION (MiscProcessorInformation)
SmbiosRecord -> ProcessorFamily2 = ForType4InputData-> VariableRecord.ProcessorFamily;
//
- // Processor speed
+ // Processor speed in MHz
//
- SmbiosRecord-> CurrentSpeed = *(UINT16*) & Frequency;
- SmbiosRecord-> MaxSpeed = *(UINT16*) & Frequency;
+ Frequency = MeasureTscFrequency ();
+ Frequency = DivU64x32 (Frequency, 1000000);
+ SmbiosRecord-> CurrentSpeed = (UINT16)Frequency;
+ SmbiosRecord-> MaxSpeed = (UINT16)Frequency;
//
// Processor Characteristics
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c
index 93347a1a04..4c8e00801f 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverDataTable.c
@@ -1,21 +1,17 @@
/** @file
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscSubclassDriverDataTable.c
Abstract:
- Create the mMiscSubclassDataTable structure, and it is used to report
- any generate data to the DataHub.
-
+ Create the mMiscSubclassDataTable structure used to produce
+ SMBIOS records.
**/
@@ -31,7 +27,7 @@ MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_BIOS_VENDOR_DATA, MiscBiosVendor, MiscBiosVen
MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_SYSTEM_MANUFACTURER_DATA, MiscSystemManufacturer, MiscSystemManufacturer);
MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_BASE_BOARD_MANUFACTURER_DATA, MiscBaseBoardManufacturer, MiscBaseBoardManufacturer);
MISC_SMBIOS_TABLE_EXTERNS(EFI_MISC_CHASSIS_MANUFACTURER_DATA, MiscChassisManufacturer, MiscChassisManufacturer);
-MISC_SMBIOS_TABLE_EXTERNS(EFI_CACHE_VARIABLE_RECORD, MiscProcessorCache, MiscProcessorCache); //type 7
+MISC_SMBIOS_TABLE_EXTERNS(UINTN, MiscProcessorCache, MiscProcessorCache); //type 7
MISC_SMBIOS_TABLE_EXTERNS(EFI_CPU_DATA_RECORD, MiscProcessorInformation, MiscProcessorInformation); //type 4
MISC_SMBIOS_TABLE_EXTERNS(EFI_MEMORY_ARRAY_LOCATION_DATA, MiscPhysicalMemoryArray,MiscPhysicalMemoryArray);
MISC_SMBIOS_TABLE_EXTERNS(EFI_MEMORY_ARRAY_LINK_DATA, MiscMemoryDevice, MiscMemoryDevice);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverEntryPoint.c b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverEntryPoint.c
index e70732f5c2..cb677a0aa6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverEntryPoint.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSubclassDriverEntryPoint.c
@@ -1,20 +1,17 @@
/** @file
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
Module Name:
MiscSubclassDriverEntryPoint.c
Abstract:
- This driver parses the mMiscSubclassDataTable structure and reports
- any generated data to the DataHub.
+ This driver parses the mMiscSubclassDataTable structure to
+ produce SMBIOS records.
**/
@@ -99,7 +96,7 @@ Error:
/**
Standard EFI driver point. This driver parses the mMiscSubclassDataTable
- structure and reports any generated data to the DataHub.
+ structure to produce SMBIOS records.
@param ImageHandle - Handle for the image of this driver
@param SystemTable - Pointer to the EFI System Table
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
index 99b1a18185..92b51b1743 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe.inf
@@ -86,6 +86,7 @@ [Packages]
MdePkg/MdePkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
NetworkPkg/NetworkPkg.dec
+ UefiCpuPkg/UefiCpuPkg.dec
[LibraryClasses]
HiiLib
@@ -105,6 +106,7 @@ [LibraryClasses]
PchPlatformLib
NetLib
HobLib
+ TimerLib
[Guids]
gEfiNormalSetupGuid
@@ -114,7 +116,6 @@ [Guids]
[Protocols]
gEfiSmbiosProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiDxeSmmReadyToLockProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiDataHubProtocolGuid
gEfiMpServiceProtocolGuid
gMemInfoProtocolGuid
gEfiTdtOperationProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
index 99db5490b6..dad27f130d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/IgdOpRegion.c
@@ -35,8 +35,6 @@ Abstract:
#include <PiDxe.h>
#include <PchRegs.h>
-#include <Guid/DataHubRecords.h>
-
#include <Protocol/IgdOpRegion.h>
#include <Protocol/FirmwareVolume2.h>
#include <Protocol/PlatformGopPolicy.h>
@@ -66,7 +64,6 @@ extern DXE_VLV_PLATFORM_POLICY_PROTOCOL *DxePlatformSaPolicy;
//
IGD_OPREGION_PROTOCOL mIgdOpRegion;
-EFI_GUID mMiscSubClass = EFI_MISC_SUBCLASS_GUID;
EFI_EVENT mConOutEvent;
EFI_EVENT mSetGOPverEvent;
VOID *mConOutReg;
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
index fe81a6e3bd..2aec0d1a9a 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/VlvPlatformInitDxe/VlvPlatformInitDxe.inf
@@ -3,9 +3,8 @@
#/*++
#
# Copyright (c) 1999 - 2019, Intel Corporation. All rights reserved
-#
-
-# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
#
# Module Name:
#
@@ -65,7 +64,6 @@ [Depex]
gDxeVlvPlatformPolicyGuid AND
gEfiPciRootBridgeIoProtocolGuid AND
gEfiCpuIo2ProtocolGuid AND
- gEfiDataHubProtocolGuid AND
gEfiGlobalNvsAreaProtocolGuid AND
gEfiFirmwareVolume2ProtocolGuid AND
gEfiHiiDatabaseProtocolGuid
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 09/14] Vlv2TbltDevicePkg: Use PI Spec SMBUS2 PPI
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (7 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 08/14] Vlv2TbltDevicePkg: Remove use of Data Hub Protocol Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:08 ` Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 10/14] Vlv2TbltDevicePkg: Switch to MdeModulePkg BdsDxe Michael D Kinney
` (5 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
* Switch from Intel Framework SMBUS PPI to the PI Spec
SMBUS2 PPI.
* Remove unused SmbusLib. Use SmbusLibNull instead.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Include/Guid/PlatformInfo.h | 9 +-
.../BoardClkGens/BoardClkGens.c | 23 +-
.../BoardClkGens/BoardClkGens.h | 8 +-
.../MultiPlatformLib/BoardGpios/BoardGpios.c | 12 +-
.../MultiPlatformLib/BoardGpios/BoardGpios.h | 7 +-
.../MultiPlatformLib/MultiPlatformLib.h | 4 -
.../MultiPlatformLib/MultiPlatformLib.inf | 2 +-
| 26 -
.../Library/SmbusLib/SmbusLib.c | 873 ------------------
.../Library/SmbusLib/SmbusLib.inf | 46 -
.../Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c | 319 -------
.../PlatformInitPei/PlatformEarlyInit.h | 10 +-
| 1 -
.../PlatformPei/PlatformPei.inf | 1 -
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 2 +-
17 files changed, 24 insertions(+), 1323 deletions(-)
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/CommonHeader.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/PlatformInfo.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/PlatformInfo.h
index cac31e2a40..afd4b6f4f0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/PlatformInfo.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/PlatformInfo.h
@@ -1,13 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
Module Name:
PlatformInfo.h
@@ -27,7 +23,6 @@ Abstract:
#include <Library/HobLib.h>
#include <Library/IoLib.h>
#include <Library/DebugLib.h>
-#include <Library/SmbusLib.h>
#include <IndustryStandard/SmBus.h>
#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c
index 919032c2df..4356f7b366 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c
@@ -1,12 +1,10 @@
/** @file
Clock generator setting for multiplatform.
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
**/
#include <BoardClkGens.h>
@@ -44,7 +42,7 @@ CLOCK_GENERATOR_DETAILS mSupportedClockGeneratorTable[] =
EFI_STATUS
ConfigureClockGenerator (
IN EFI_PEI_SERVICES **PeiServices,
- IN EFI_PEI_SMBUS_PPI *SmbusPpi,
+ IN EFI_PEI_SMBUS2_PPI *SmbusPpi,
IN CLOCK_GENERATOR_TYPE ClockType,
IN UINT8 ClockAddress,
IN UINTN ConfigurationTableLength,
@@ -76,7 +74,6 @@ ConfigureClockGenerator (
Length = sizeof (Buffer);
Command = 0;
Status = SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -116,7 +113,6 @@ ConfigureClockGenerator (
Buffer[30] = 0x00;
Status = SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -127,7 +123,6 @@ ConfigureClockGenerator (
);
#else
Status = SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -142,7 +137,6 @@ ConfigureClockGenerator (
Command = 4;
Length = 1;
Status = SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -164,7 +158,6 @@ ConfigureClockGenerator (
Length = sizeof (Buffer);
Command = 0;
Status = SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -201,7 +194,7 @@ ConfigureClockGenerator (
UINT8
ReadClockGeneratorID (
IN EFI_PEI_SERVICES **PeiServices,
- IN EFI_PEI_SMBUS_PPI *SmbusPpi,
+ IN EFI_PEI_SMBUS2_PPI *SmbusPpi,
IN UINT8 ClockAddress
)
{
@@ -217,7 +210,6 @@ ReadClockGeneratorID (
Length = sizeof (Buffer);
Command = 0;
SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -289,7 +281,7 @@ ConfigurePlatformClocks (
//
Status = (**PeiServices).LocatePpi (
(CONST EFI_PEI_SERVICES **) PeiServices,
- &gEfiPeiSmbusPpiGuid,
+ &gEfiPeiSmbus2PpiGuid,
0,
NULL,
&SmbusPpi
@@ -300,8 +292,7 @@ ConfigurePlatformClocks (
SlaveAddress.SmbusDeviceAddress = ClockAddress >> 1;
Length = 1;
Command = 0x87; //Control Register 7 Vendor ID Check
- Status = ((EFI_PEI_SMBUS_PPI *) SmbusPpi)->Execute (
- PeiServices,
+ Status = ((EFI_PEI_SMBUS2_PPI *) SmbusPpi)->Execute (
SmbusPpi,
SlaveAddress,
Command,
@@ -405,7 +396,7 @@ ConfigurePlatformClocks (
static EFI_PEI_NOTIFY_DESCRIPTOR mNotifyList[] = {
{
EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK| EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
- &gEfiPeiSmbusPpiGuid,
+ &gEfiPeiSmbus2PpiGuid,
ConfigurePlatformClocks
}
};
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h
index e153933d72..fe0ed24af7 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h
@@ -3,11 +3,10 @@
This file includes package header files, library classes.
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
**/
#ifndef _BOARD_CLK_GEN_H_
@@ -17,8 +16,7 @@
#include <Library/HobLib.h>
#include <Library/IoLib.h>
#include <Library/DebugLib.h>
-#include <Library/SmbusLib.h>
-#include <Ppi/Smbus.h>
+#include <Ppi/Smbus2.h>
#include <IndustryStandard/SmBus.h>
#include <Guid/PlatformInfo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c
index 5790d045fc..a9e2c8c060 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c
@@ -1,12 +1,10 @@
/** @file
Gpio setting for multiplatform..
- Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
**/
#include <BoardGpios.h>
@@ -25,8 +23,6 @@
//AlpineValley platform code end
//
-EFI_GUID gPeiSmbusPpiGuid = EFI_PEI_SMBUS_PPI_GUID;
-
/**
@param None
@@ -66,7 +62,7 @@ ConfigurePlatformSysCtrlGpio (
Status = (**PeiServices).LocatePpi (
(const EFI_PEI_SERVICES **)PeiServices,
- &gPeiSmbusPpiGuid,
+ &gEfiPeiSmbus2PpiGuid,
0,
NULL,
(void **)&SmbusPpi
@@ -92,7 +88,7 @@ ConfigurePlatformSysCtrlGpio (
static EFI_PEI_NOTIFY_DESCRIPTOR mNotifyList[] = {
{
EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK| EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
- &gEfiPeiSmbusPpiGuid,
+ &gEfiPeiSmbus2PpiGuid,
ConfigurePlatformSysCtrlGpio
}
};
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h
index 0e19819b22..594616d63a 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h
@@ -3,11 +3,10 @@
This file includes package header files, library classes.
- Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
**/
#ifndef _BOARDGPIOS_H_
@@ -20,7 +19,7 @@
#include <Library/IoLib.h>
#include <Library/HobLib.h>
#include <Guid/PlatformInfo.h>
-#include <Ppi/Smbus.h>
+#include <Ppi/Smbus2.h>
#include <Ppi/ReadOnlyVariable2.h>
#include <Guid/SetupVariable.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
index 3fa9f7b129..13097fbc74 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
@@ -26,7 +26,6 @@
#include <PiDxe.h>
#include <Library/BaseLib.h>
-#include <FrameworkPei.h>
#include "PlatformBaseAddresses.h"
#include "PchAccess.h"
@@ -37,7 +36,6 @@
#include <Ppi/Stall.h>
#include <Guid/SetupVariable.h>
#include <Ppi/AtaController.h>
-#include <Ppi/FindFv.h>
#include <Ppi/BootInRecoveryMode.h>
#include <Ppi/ReadOnlyVariable2.h>
#include <Ppi/Capsule.h>
@@ -50,7 +48,6 @@
#include <Library/BaseLib.h>
#include <IndustryStandard/Pci22.h>
#include <Ppi/Speaker.h>
-#include <Guid/FirmwareFileSystem.h>
#include <Guid/MemoryTypeInformation.h>
#include <Ppi/Reset.h>
#include <Ppi/EndOfPeiPhase.h>
@@ -58,7 +55,6 @@
#include <Guid/GlobalVariable.h>
#include <Ppi/RecoveryModule.h>
#include <Ppi/DeviceRecoveryModule.h>
-#include <Guid/Capsule.h>
#include <Guid/RecoveryDevice.h>
#include <Ppi/MasterBootMode.h>
#include <Guid/PlatformInfo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
index a4942a097c..7a084bea3c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
@@ -54,7 +54,6 @@ [Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
[LibraryClasses]
@@ -64,6 +63,7 @@ [LibraryClasses]
[Ppis]
gEfiPeiReadOnlyVariable2PpiGuid
+ gEfiPeiSmbus2PpiGuid
[Pcd.common]
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/CommonHeader.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/CommonHeader.h
deleted file mode 100644
index d34dd942d3..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/CommonHeader.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**@file
- Common header file shared by all source files.
-
- This file includes package header files, library classes.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-**/
-
-#ifndef __COMMON_HEADER_H_
-#define __COMMON_HEADER_H_
-
-
-#include <Base.h>
-#include <PchAccess.h>
-
-#include <Library/SmbusLib.h>
-#include <Library/IoLib.h>
-#include <Library/PciLib.h>
-#include <Library/DebugLib.h>
-#include <Library/PcdLib.h>
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.c
deleted file mode 100644
index 4052724812..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.c
+++ /dev/null
@@ -1,873 +0,0 @@
-/** @file
- Intel ICH9 SMBUS library implementation built upon I/O library.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-
-#include "CommonHeader.h"
-
-/**
- Gets Io port base address of Smbus Host Controller.
-
- This internal function depends on a feature flag named PcdIchSmbusFixedIoPortBaseAddress
- to retrieve Smbus Io port base. If that feature flag is true, it will get Smbus Io port base
- address from a preset Pcd entry named PcdIchSmbusIoPortBaseAddress; otherwise, it will always
- read Pci configuration space to get that value in each Smbus bus transaction.
-
- @return The Io port base address of Smbus host controller.
-
-**/
-UINTN
-InternalGetSmbusIoPortBaseAddress (
- VOID
- )
-{
- UINTN IoPortBaseAddress;
-
- IoPortBaseAddress = (UINTN) MmioRead32 (MmPciAddress (0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_SMBUS, PCI_FUNCTION_NUMBER_PCH_SMBUS, R_PCH_SMBUS_BASE)) & B_PCH_SMBUS_BASE_BAR;
-
- //
- // Make sure that the IO port base address has been properly set.
- //
- ASSERT (IoPortBaseAddress != 0);
-
- return IoPortBaseAddress;
-}
-
-/**
- Acquires the ownership of SMBUS.
-
- This internal function reads the host state register.
- If the SMBUS is not available, RETURN_TIMEOUT is returned;
- Otherwise, it performs some basic initializations and returns
- RETURN_SUCCESS.
-
- @param IoPortBaseAddress The Io port base address of Smbus Host controller.
-
- @retval RETURN_SUCCESS The SMBUS command was executed successfully.
- @retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
-
-**/
-RETURN_STATUS
-InternalSmBusAcquire (
- UINTN IoPortBaseAddress
- )
-{
- UINT8 HostStatus;
-
- HostStatus = IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS);
- if ((HostStatus & B_PCH_SMBUS_IUS) != 0) {
- return RETURN_TIMEOUT;
- } else if ((HostStatus & B_PCH_SMBUS_HBSY) != 0) {
- //
- // Clear host status register and exit.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS, B_PCH_SMBUS_HSTS_ALL);
- return RETURN_TIMEOUT;
- }
- //
- // Clear out any odd status information (Will Not Clear In Use).
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS, HostStatus);
-
- return RETURN_SUCCESS;
-}
-
-/**
- Starts the SMBUS transaction and waits until the end.
-
- This internal function start the SMBUS transaction and waits until the transaction
- of SMBUS is over by polling the INTR bit of Host status register.
- If the SMBUS is not available, RETURN_TIMEOUT is returned;
- Otherwise, it performs some basic initializations and returns
- RETURN_SUCCESS.
-
- @param IoPortBaseAddress The Io port base address of Smbus Host controller.
- @param HostControl The Host control command to start SMBUS transaction.
-
- @retval RETURN_SUCCESS The SMBUS command was executed successfully.
- @retval RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
- @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected
- in the Host Status Register bit. Device errors are
- a result of a transaction collision, illegal command field,
- unclaimed cycle (host initiated), or bus errors (collisions).
-
-**/
-RETURN_STATUS
-InternalSmBusStart (
- IN UINTN IoPortBaseAddress,
- IN UINT8 HostControl
- )
-{
- UINT8 HostStatus;
- UINT8 AuxiliaryStatus;
-
- //
- // Set Host Control Register (Initiate Operation, Interrupt disabled).
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HCTL, (UINT8)(HostControl + B_PCH_SMBUS_START));
-
- do {
- //
- // Poll INTR bit of Host Status Register.
- //
- HostStatus = IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS);
- } while ((HostStatus & (B_PCH_SMBUS_INTR | B_PCH_SMBUS_ERRORS | B_PCH_SMBUS_BYTE_DONE_STS)) == 0);
-
- if ((HostStatus & B_PCH_SMBUS_ERRORS) == 0) {
- return RETURN_SUCCESS;
- }
-
- //
- // Clear error bits of Host Status Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS, B_PCH_SMBUS_ERRORS);
-
- //
- // Read Auxiliary Status Register to judge CRC error.
- //
- AuxiliaryStatus = IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_AUXS);
- if ((AuxiliaryStatus & B_PCH_SMBUS_CRCE) != 0) {
- return RETURN_CRC_ERROR;
- }
-
- return RETURN_DEVICE_ERROR;
-}
-
-/**
- Executes an SMBUS quick, byte or word command.
-
- This internal function executes an SMBUS quick, byte or word commond.
- If Status is not NULL, then the status of the executed command is returned in Status.
-
- @param HostControl The value of Host Control Register to set.
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Value The byte/word write to the SMBUS.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The byte/word read from the SMBUS.
-
-**/
-UINT16
-InternalSmBusNonBlock (
- IN UINT8 HostControl,
- IN UINTN SmBusAddress,
- IN UINT16 Value,
- OUT RETURN_STATUS *Status
- )
-{
- RETURN_STATUS ReturnStatus;
- UINTN IoPortBaseAddress;
- UINT8 AuxiliaryControl;
-
- IoPortBaseAddress = InternalGetSmbusIoPortBaseAddress ();
-
- //
- // Try to acquire the ownership of ICH SMBUS.
- //
- ReturnStatus = InternalSmBusAcquire (IoPortBaseAddress);
- if (RETURN_ERROR (ReturnStatus)) {
- goto Done;
- }
-
- //
- // Set the appropriate Host Control Register and auxiliary Control Register.
- //
- AuxiliaryControl = 0;
- if (SMBUS_LIB_PEC (SmBusAddress)) {
- AuxiliaryControl |= B_PCH_SMBUS_AAC;
- HostControl |= B_PCH_SMBUS_PEC_EN;
- }
-
- //
- // Set Host Command Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HCMD, (UINT8) SMBUS_LIB_COMMAND (SmBusAddress));
-
- //
- // Write value to Host Data 0 and Host Data 1 Registers.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HD0, (UINT8) Value);
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HD1, (UINT8) (Value >> 8));
-
- //
- // Set Auxiliary Control Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_AUXC, AuxiliaryControl);
-
- //
- // Set SMBUS slave address for the device to send/receive from.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_TSA, (UINT8) SmBusAddress);
-
- //
- // Start the SMBUS transaction and wait for the end.
- //
- ReturnStatus = InternalSmBusStart (IoPortBaseAddress, HostControl);
-
- //
- // Read value from Host Data 0 and Host Data 1 Registers.
- //
- Value = (UINT16)(IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HD1) << 8);
- Value = (UINT16)(Value | IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HD0));
-
- //
- // Clear Host Status Register and Auxiliary Status Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS, B_PCH_SMBUS_HSTS_ALL);
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_AUXS, B_PCH_SMBUS_CRCE);
-
-Done:
- if (Status != NULL) {
- *Status = ReturnStatus;
- }
-
- return Value;
-}
-
-/**
- Executes an SMBUS quick read command.
-
- Executes an SMBUS quick read command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address field of SmBusAddress is required.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If PEC is set in SmBusAddress, then ASSERT().
- If Command in SmBusAddress is not zero, then ASSERT().
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
-**/
-VOID
-EFIAPI
-SmBusQuickRead (
- IN UINTN SmBusAddress,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
- ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_QUICK,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_READ,
- 0,
- Status
- );
-}
-
-/**
- Executes an SMBUS quick write command.
-
- Executes an SMBUS quick write command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address field of SmBusAddress is required.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If PEC is set in SmBusAddress, then ASSERT().
- If Command in SmBusAddress is not zero, then ASSERT().
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
-**/
-VOID
-EFIAPI
-SmBusQuickWrite (
- IN UINTN SmBusAddress,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
- ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_QUICK,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- 0,
- Status
- );
-}
-
-/**
- Executes an SMBUS receive byte command.
-
- Executes an SMBUS receive byte command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address field of SmBusAddress is required.
- The byte received from the SMBUS is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Command in SmBusAddress is not zero, then ASSERT().
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The byte received from the SMBUS.
-
-**/
-UINT8
-EFIAPI
-SmBusReceiveByte (
- IN UINTN SmBusAddress,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT8 ValueReturn = 0;
-
- ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = (UINT8) InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_BYTE,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_READ,
- 0,
- Status
- );
- return ValueReturn;
-
- }
-
-/**
- Executes an SMBUS send byte command.
-
- Executes an SMBUS send byte command on the SMBUS device specified by SmBusAddress.
- The byte specified by Value is sent.
- Only the SMBUS slave address field of SmBusAddress is required. Value is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Command in SmBusAddress is not zero, then ASSERT().
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Value The 8-bit value to send.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The parameter of Value.
-
-**/
-UINT8
-EFIAPI
-SmBusSendByte (
- IN UINTN SmBusAddress,
- IN UINT8 Value,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT8 ValueReturn = 0;
-
- ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = (UINT8) InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_BYTE,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- Value,
- Status
- );
- return ValueReturn;
-
- }
-
-/**
- Executes an SMBUS read data byte command.
-
- Executes an SMBUS read data byte command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- The 8-bit value read from the SMBUS is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The byte read from the SMBUS.
-
-**/
-UINT8
-EFIAPI
-SmBusReadDataByte (
- IN UINTN SmBusAddress,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT8 ValueReturn = 0;
-
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
- ValueReturn = (UINT8) InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_BYTE_DATA,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_READ,
- 0,
- Status
- );
- return ValueReturn;
-}
-
-/**
- Executes an SMBUS write data byte command.
-
- Executes an SMBUS write data byte command on the SMBUS device specified by SmBusAddress.
- The 8-bit value specified by Value is written.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- Value is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Value The 8-bit value to write.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The parameter of Value.
-
-**/
-UINT8
-EFIAPI
-SmBusWriteDataByte (
- IN UINTN SmBusAddress,
- IN UINT8 Value,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT8 ValueReturn = 0;
-
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = (UINT8) InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_BYTE_DATA,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- Value,
- Status
- );
- return ValueReturn;
-
-}
-
-/**
- Executes an SMBUS read data word command.
-
- Executes an SMBUS read data word command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- The 16-bit value read from the SMBUS is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The byte read from the SMBUS.
-
-**/
-UINT16
-EFIAPI
-SmBusReadDataWord (
- IN UINTN SmBusAddress,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT16 ValueReturn = 0;
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_WORD_DATA,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_READ,
- 0,
- Status
- );
- return ValueReturn;
-
-}
-
-/**
- Executes an SMBUS write data word command.
-
- Executes an SMBUS write data word command on the SMBUS device specified by SmBusAddress.
- The 16-bit value specified by Value is written.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- Value is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Value The 16-bit value to write.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The parameter of Value.
-
-**/
-UINT16
-EFIAPI
-SmBusWriteDataWord (
- IN UINTN SmBusAddress,
- IN UINT16 Value,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT16 ValueReturn = 0;
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_WORD_DATA,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- Value,
- Status
- );
- return ValueReturn;
-}
-
-/**
- Executes an SMBUS process call command.
-
- Executes an SMBUS process call command on the SMBUS device specified by SmBusAddress.
- The 16-bit value specified by Value is written.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- The 16-bit value returned by the process call command is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Value The 16-bit value to write.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The 16-bit value returned by the process call command.
-
-**/
-UINT16
-EFIAPI
-SmBusProcessCall (
- IN UINTN SmBusAddress,
- IN UINT16 Value,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT16 ValueReturn = 0;
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_PROCESS_CALL,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- Value,
- Status
- );
- return ValueReturn;
-}
-
-/**
- Executes an SMBUS block command.
-
- Executes an SMBUS block read, block write and block write-block read command
- on the SMBUS device specified by SmBusAddress.
- Bytes are read from the SMBUS and stored in Buffer.
- The number of bytes read is returned, and will never return a value larger than 32-bytes.
- If Status is not NULL, then the status of the executed command is returned in Status.
- It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
- SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
-
- @param HostControl The value of Host Control Register to set.
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param WriteBuffer Pointer to the buffer of bytes to write to the SMBUS.
- @param ReadBuffer Pointer to the buffer of bytes to read from the SMBUS.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The number of bytes read from the SMBUS.
-
-**/
-UINTN
-InternalSmBusBlock (
- IN UINT8 HostControl,
- IN UINTN SmBusAddress,
- IN UINT8 *WriteBuffer,
- OUT UINT8 *ReadBuffer,
- OUT RETURN_STATUS *Status
- )
-{
- RETURN_STATUS ReturnStatus;
- UINTN Index;
- UINTN BytesCount;
- UINTN IoPortBaseAddress;
- UINT8 AuxiliaryControl;
-
- IoPortBaseAddress = InternalGetSmbusIoPortBaseAddress ();
-
- BytesCount = SMBUS_LIB_LENGTH (SmBusAddress);
-
- //
- // Try to acquire the ownership of ICH SMBUS.
- //
- ReturnStatus = InternalSmBusAcquire (IoPortBaseAddress);
- if (RETURN_ERROR (ReturnStatus)) {
- goto Done;
- }
-
- //
- // Set the appropriate Host Control Register and auxiliary Control Register.
- //
- AuxiliaryControl = B_PCH_SMBUS_E32B;
- if (SMBUS_LIB_PEC (SmBusAddress)) {
- AuxiliaryControl |= B_PCH_SMBUS_AAC;
- HostControl |= B_PCH_SMBUS_PEC_EN;
- }
-
- //
- // Set Host Command Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HCMD, (UINT8) SMBUS_LIB_COMMAND (SmBusAddress));
-
- //
- // Set Auxiliary Control Regiester.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_AUXC, AuxiliaryControl);
-
- //
- // Clear byte pointer of 32-byte buffer.
- //
- IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HCTL);
-
- if (WriteBuffer != NULL) {
- //
- // Write the number of block to Host Block Data Byte Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HD0, (UINT8) BytesCount);
-
- //
- // Write data block to Host Block Data Register.
- //
- for (Index = 0; Index < BytesCount; Index++) {
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HBD, WriteBuffer[Index]);
- }
- }
-
- //
- // Set SMBUS slave address for the device to send/receive from.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_TSA, (UINT8) SmBusAddress);
-
- //
- // Start the SMBUS transaction and wait for the end.
- //
- ReturnStatus = InternalSmBusStart (IoPortBaseAddress, HostControl);
- if (RETURN_ERROR (ReturnStatus)) {
- goto Done;
- }
-
- if (ReadBuffer != NULL) {
- //
- // Read the number of block from host block data byte register.
- //
- BytesCount = IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HD0);
-
- //
- // Write data block from Host Block Data Register.
- //
- for (Index = 0; Index < BytesCount; Index++) {
- ReadBuffer[Index] = IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HBD);
- }
- }
-
-Done:
- //
- // Clear Host Status Register and Auxiliary Status Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS, B_PCH_SMBUS_HSTS_ALL);
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_AUXS, B_PCH_SMBUS_CRCE);
-
- if (Status != NULL) {
- *Status = ReturnStatus;
- }
-
- return BytesCount;
-}
-
-/**
- Executes an SMBUS read block command.
-
- Executes an SMBUS read block command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- Bytes are read from the SMBUS and stored in Buffer.
- The number of bytes read is returned, and will never return a value larger than 32-bytes.
- If Status is not NULL, then the status of the executed command is returned in Status.
- It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
- SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
- If Length in SmBusAddress is not zero, then ASSERT().
- If Buffer is NULL, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The number of bytes read.
-
-**/
-UINTN
-EFIAPI
-SmBusReadBlock (
- IN UINTN SmBusAddress,
- OUT VOID *Buffer,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINTN BytesCount = 0;
-
- ASSERT (Buffer != NULL);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
-
- BytesCount = InternalSmBusBlock (
- V_PCH_SMBUS_SMB_CMD_BLOCK,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_READ,
- NULL,
- Buffer,
- Status
- );
- return BytesCount;
-
-}
-
-/**
- Executes an SMBUS write block command.
-
- Executes an SMBUS write block command on the SMBUS device specified by SmBusAddress.
- The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
- Bytes are written to the SMBUS from Buffer.
- The number of bytes written is returned, and will never return a value larger than 32-bytes.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is zero or greater than 32, then ASSERT().
- If Buffer is NULL, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The number of bytes written.
-
-**/
-UINTN
-EFIAPI
-SmBusWriteBlock (
- IN UINTN SmBusAddress,
- OUT VOID *Buffer,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINTN BytesCount = 0;
-
- ASSERT (Buffer != NULL);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) >= 1);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) <= 32);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
-
- BytesCount = InternalSmBusBlock (
-
- V_PCH_SMBUS_SMB_CMD_BLOCK,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- Buffer,
- NULL,
- Status
- );
-
- return BytesCount;
-}
-
-/**
- Executes an SMBUS block process call command.
-
- Executes an SMBUS block process call command on the SMBUS device specified by SmBusAddress.
- The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
- Bytes are written to the SMBUS from WriteBuffer. Bytes are then read from the SMBUS into ReadBuffer.
- If Status is not NULL, then the status of the executed command is returned in Status.
- It is the caller's responsibility to make sure ReadBuffer is large enough for the total number of bytes read.
- SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
- If Length in SmBusAddress is zero or greater than 32, then ASSERT().
- If WriteBuffer is NULL, then ASSERT().
- If ReadBuffer is NULL, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param WriteBuffer Pointer to the buffer of bytes to write to the SMBUS.
- @param ReadBuffer Pointer to the buffer of bytes to read from the SMBUS.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The number of bytes written.
-
-**/
-UINTN
-EFIAPI
-SmBusBlockProcessCall (
- IN UINTN SmBusAddress,
- IN VOID *WriteBuffer,
- OUT VOID *ReadBuffer,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINTN BytesCount = 0;
-
- ASSERT (WriteBuffer != NULL);
- ASSERT (ReadBuffer != NULL);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) >= 1);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) <= 32);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- BytesCount = InternalSmBusBlock (
- V_PCH_SMBUS_SMB_CMD_BLOCK_PROCESS,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- WriteBuffer,
- ReadBuffer,
- Status
- );
- return BytesCount;
-
- }
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
deleted file mode 100644
index b13e3de0cc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+++ /dev/null
@@ -1,46 +0,0 @@
-## @file
-# Component description file for Intel Ich9 Smbus Library.
-#
-# SMBUS Library that layers on top of the I/O Library to directly
-# access a standard SMBUS host controller.
-# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SmbusLib
- FILE_GUID = 0558CAEA-FEF3-4b6d-915E-8742EFE6DEE1
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = SmbusLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- SmbusLib.c
-
-[Packages]
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- MdePkg/MdePkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
-
-[LibraryClasses]
- PcdLib
- DebugLib
- PciLib
- IoLib
-
-[Pcd.common]
- gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c
deleted file mode 100644
index 3fda6313d0..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
-
- Dimm.c
-
-Abstract:
-
- PPI for reading SPD modules on DIMMs.
-
---*/
-
-
-//
-// Header Files
-//
-#include "Platformearlyinit.h"
-
-#define DIMM_SOCKETS 4 // Total number of DIMM sockets allowed on
- // the platform
-#define DIMM_SEGMENTS 1 // Total number of Segments Per DIMM.
-#define MEMORY_CHANNELS 2 // Total number of memory channels
- // populated on the system board
-//
-// Prototypes
-//
-
-EFI_STATUS
-EFIAPI
-GetDimmState (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- OUT PEI_PLATFORM_DIMM_STATE *State
- );
-
-EFI_STATUS
-EFIAPI
-SetDimmState (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- IN PEI_PLATFORM_DIMM_STATE *State
- );
-
-EFI_STATUS
-EFIAPI
-ReadSpd (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- IN UINT8 Offset,
- IN UINTN Count,
- IN OUT UINT8 *Buffer
- );
-
-static PEI_PLATFORM_DIMM_PPI mGchDimmPpi = {
- DIMM_SOCKETS,
- DIMM_SEGMENTS,
- MEMORY_CHANNELS,
- GetDimmState,
- SetDimmState,
- ReadSpd
-};
-
-static EFI_PEI_PPI_DESCRIPTOR mPpiPlatformDimm = {
- (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
- &gPeiPlatformDimmPpiGuid,
- &mGchDimmPpi
-};
-
-
-//
-// Functions
-//
-
-/**
- This function returns the current state of a single DIMM. Present indicates
- that the DIMM slot is physically populated. Disabled indicates that the DIMM
- should not be used.
-
- @param PeiServices PEI services table pointer
- @param This PPI pointer
- @param Dimm DIMM to read from
- @param State Pointer to a return buffer to be updated with the current state
- of the DIMM
-
- @retval EFI_SUCCESS The function completed successfully.
-
-**/
-EFI_STATUS
-EFIAPI
-GetDimmState (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- OUT PEI_PLATFORM_DIMM_STATE *State
- )
-{
- EFI_STATUS Status;
- UINT8 Buffer;
-
- PEI_ASSERT (PeiServices, (Dimm < This->DimmSockets));
-
- //
- // A failure here does not necessarily mean that no DIMM is present.
- // Read a single byte. All we care about is the return status.
- //
- Status = ReadSpd (
- PeiServices,
- This,
- Dimm,
- 0,
- 1,
- &Buffer
- );
-
- if (EFI_ERROR (Status)) {
- State->Present = 0;
- } else {
- State->Present = 1;
- }
-
- //
- // BUGBUG: Update to check platform variable when it is available
- //
- State->Disabled = 0;
- State->Reserved = 0;
-
- return EFI_SUCCESS;
-}
-
-/**
-
- This function updates the state of a single DIMM.
-
- @param PeiServices PEI services table pointer
- @param This PPI pointer
- @param Dimm DIMM to set state for
- @param State Pointer to the state information to set.
-
- @retval EFI_SUCCESS The function completed successfully.
- @retval EFI_UNSUPPORTED The function is not supported.
-
-**/
-EFI_STATUS
-EFIAPI
-SetDimmState (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- IN PEI_PLATFORM_DIMM_STATE *State
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-/**
- This function reads SPD information from a DIMM.
-
- PeiServices PEI services table pointer
- This PPI pointer
- Dimm DIMM to read from
- Offset Offset in DIMM
- Count Number of bytes
- Buffer Return buffer
-
- @param EFI_SUCCESS The function completed successfully.
- @param EFI_DEVICE_ERROR The DIMM being accessed reported a device error,
- does not have an SPD module, or is not installed in
- the system.
- @retval EFI_TIMEOUT Time out trying to read the SPD module.
- @retval EFI_INVALID_PARAMETER A parameter was outside the legal limits.
-
-**/
-EFI_STATUS
-EFIAPI
-ReadSpd (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- IN UINT8 Offset,
- IN UINTN Count,
- IN OUT UINT8 *Buffer
- )
-{
- EFI_STATUS Status;
- PEI_SMBUS_PPI *Smbus;
- UINTN Index;
- UINTN Index1;
- EFI_SMBUS_DEVICE_ADDRESS SlaveAddress;
- EFI_SMBUS_DEVICE_COMMAND Command;
- UINTN Length;
-
- Status = (**PeiServices).LocatePpi (
- PeiServices,
- &gPeiSmbusPpiGuid, // GUID
- 0, // INSTANCE
- NULL, // EFI_PEI_PPI_DESCRIPTOR
- &Smbus // PPI
- );
- ASSERT_PEI_ERROR (PeiServices, Status);
-
- switch (Dimm) {
- case 0:
- SlaveAddress.SmbusDeviceAddress = SMBUS_ADDR_CH_A_1 >> 1;
- break;
- case 1:
- SlaveAddress.SmbusDeviceAddress = SMBUS_ADDR_CH_A_2 >> 1;
- break;
- case 2:
- SlaveAddress.SmbusDeviceAddress = SMBUS_ADDR_CH_B_1 >> 1;
- break;
- case 3:
- SlaveAddress.SmbusDeviceAddress = SMBUS_ADDR_CH_B_2 >> 1;
- break;
- default:
- return EFI_INVALID_PARAMETER;
- }
-
- Index = Count % 4;
- if (Index != 0) {
- //
- // read the first serveral bytes to speed up following reading
- //
- for (Index1 = 0; Index1 < Index; Index1++) {
- Length = 1;
- Command = Offset + Index1;
- Status = Smbus->Execute (
- PeiServices,
- Smbus,
- SlaveAddress,
- Command,
- EfiSmbusReadByte,
- FALSE,
- &Length,
- &Buffer[Index1]
- );
- if (EFI_ERROR(Status)) {
- return Status;
- }
- }
- }
-
- //
- // Now collect all the remaining bytes on 4 bytes block
- //
- for (; Index < Count; Index += 2) {
- Command = Index + Offset;
- Length = 2;
- Status = Smbus->Execute (
- PeiServices,
- Smbus,
- SlaveAddress,
- Command,
- EfiSmbusReadWord,
- FALSE,
- &Length,
- &Buffer[Index]
- );
- if (EFI_ERROR(Status)) {
- return Status;
- }
-
- Index += 2;
- Command = Index + Offset;
- Length = 2;
- Status = Smbus->Execute (
- PeiServices,
- Smbus,
- SlaveAddress,
- Command,
- EfiSmbusReadWord,
- FALSE,
- &Length,
- &Buffer[Index]
- );
- if (EFI_ERROR(Status)) {
- return Status;
- }
- }
- return EFI_SUCCESS;
-}
-
-/**
- This function initializes the PEIM. It simply installs the DIMM PPI.
-
- @param FfsHeader Not used by this function
- @param PeiServices Pointer to PEI services table
-
- @retval EFI_SUCCESS The function completed successfully.
-
-**/
-EFI_STATUS
-EFIAPI
-PeimInitializeDimm (
- IN EFI_PEI_SERVICES **PeiServices,
- IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
- IN VOID *SmbusPpi
- )
-{
- EFI_STATUS Status;
-
- Status = (**PeiServices).InstallPpi (
- PeiServices,
- &mPpiPlatformDimm
- );
- ASSERT_PEI_ERROR (PeiServices, Status);
-
- return EFI_SUCCESS;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
index 9631d49a84..6a2ecf8fb4 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
@@ -59,7 +59,7 @@ Abstract:
#include <Ppi/Speaker.h>
#include <Guid/MemoryTypeInformation.h>
#include <Ppi/Cache.h>
-#include <Ppi/Smbus.h>
+#include <Ppi/Smbus2.h>
#include <Library/PchPlatformLib.h>
#include <Ppi/SmbusPolicy.h>
#include <Ppi/Reset.h>
@@ -1454,14 +1454,6 @@ SetDxeCacheMode (
IN CONST EFI_PEI_SERVICES **PeiServices
);
-EFI_STATUS
-GPIO_initialization (
- IN EFI_PEI_SERVICES **PeiServices,
- IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
- IN VOID *SmbusPpi
- );
-
-
BOOLEAN
IsRtcUipAlwaysSet (
IN CONST EFI_PEI_SERVICES **PeiServices
--git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
index a533f3918c..c18cabb2f2 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
@@ -42,7 +42,6 @@
#include <Library/PciLib.h>
#include <Library/ReportStatusCodeLib.h>
#include <Library/PcdLib.h>
-#include <Library/SmbusLib.h>
#include <Library/TimerLib.h>
#include <Library/PrintLib.h>
#include <Library/ResetSystemLib.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
index 28a5274c40..d3969f2344 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
@@ -72,7 +72,6 @@ [LibraryClasses]
DebugLib
HobLib
IoLib
- MultiPlatformLib
MtrrLib
PerformanceLib
MonoStatusCodeLib
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index b16883e98c..3910281c49 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -171,7 +171,7 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index c9335a98c8..2ae594e5be 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -169,7 +169,7 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index fd9ddebfd9..5cdc9bebc8 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -171,7 +171,7 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-platforms Patch 09/14] Vlv2TbltDevicePkg: Use PI Spec SMBUS2 PPI
2019-07-01 2:55 ` [edk2-platforms Patch 09/14] Vlv2TbltDevicePkg: Use PI Spec SMBUS2 PPI Michael D Kinney
@ 2019-07-01 4:08 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:08 UTC (permalink / raw)
To: Kinney, Michael D, devel@edk2.groups.io; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: Kinney, Michael D
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-platforms Patch 09/14] Vlv2TbltDevicePkg: Use PI Spec SMBUS2 PPI
* Switch from Intel Framework SMBUS PPI to the PI Spec
SMBUS2 PPI.
* Remove unused SmbusLib. Use SmbusLibNull instead.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Include/Guid/PlatformInfo.h | 9 +-
.../BoardClkGens/BoardClkGens.c | 23 +-
.../BoardClkGens/BoardClkGens.h | 8 +-
.../MultiPlatformLib/BoardGpios/BoardGpios.c | 12 +-
.../MultiPlatformLib/BoardGpios/BoardGpios.h | 7 +-
.../MultiPlatformLib/MultiPlatformLib.h | 4 -
.../MultiPlatformLib/MultiPlatformLib.inf | 2 +-
| 26 -
.../Library/SmbusLib/SmbusLib.c | 873 ------------------
.../Library/SmbusLib/SmbusLib.inf | 46 -
.../Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c | 319 -------
.../PlatformInitPei/PlatformEarlyInit.h | 10 +-
| 1 -
.../PlatformPei/PlatformPei.inf | 1 -
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 2 +-
17 files changed, 24 insertions(+), 1323 deletions(-)
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/CommonHeader.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/PlatformInfo.h b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/PlatformInfo.h
index cac31e2a40..afd4b6f4f0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/PlatformInfo.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/PlatformInfo.h
@@ -1,13 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
Module Name:
PlatformInfo.h
@@ -27,7 +23,6 @@ Abstract:
#include <Library/HobLib.h>
#include <Library/IoLib.h>
#include <Library/DebugLib.h>
-#include <Library/SmbusLib.h>
#include <IndustryStandard/SmBus.h>
#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c
index 919032c2df..4356f7b366 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c
@@ -1,12 +1,10 @@
/** @file
Clock generator setting for multiplatform.
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
**/
#include <BoardClkGens.h>
@@ -44,7 +42,7 @@ CLOCK_GENERATOR_DETAILS mSupportedClockGeneratorTable[] =
EFI_STATUS
ConfigureClockGenerator (
IN EFI_PEI_SERVICES **PeiServices,
- IN EFI_PEI_SMBUS_PPI *SmbusPpi,
+ IN EFI_PEI_SMBUS2_PPI *SmbusPpi,
IN CLOCK_GENERATOR_TYPE ClockType,
IN UINT8 ClockAddress,
IN UINTN ConfigurationTableLength,
@@ -76,7 +74,6 @@ ConfigureClockGenerator (
Length = sizeof (Buffer);
Command = 0;
Status = SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -116,7 +113,6 @@ ConfigureClockGenerator (
Buffer[30] = 0x00;
Status = SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -127,7 +123,6 @@ ConfigureClockGenerator (
);
#else
Status = SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -142,7 +137,6 @@ ConfigureClockGenerator (
Command = 4;
Length = 1;
Status = SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -164,7 +158,6 @@ ConfigureClockGenerator (
Length = sizeof (Buffer);
Command = 0;
Status = SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -201,7 +194,7 @@ ConfigureClockGenerator (
UINT8
ReadClockGeneratorID (
IN EFI_PEI_SERVICES **PeiServices,
- IN EFI_PEI_SMBUS_PPI *SmbusPpi,
+ IN EFI_PEI_SMBUS2_PPI *SmbusPpi,
IN UINT8 ClockAddress
)
{
@@ -217,7 +210,6 @@ ReadClockGeneratorID (
Length = sizeof (Buffer);
Command = 0;
SmbusPpi->Execute (
- PeiServices,
SmbusPpi,
SlaveAddress,
Command,
@@ -289,7 +281,7 @@ ConfigurePlatformClocks (
//
Status = (**PeiServices).LocatePpi (
(CONST EFI_PEI_SERVICES **) PeiServices,
- &gEfiPeiSmbusPpiGuid,
+ &gEfiPeiSmbus2PpiGuid,
0,
NULL,
&SmbusPpi
@@ -300,8 +292,7 @@ ConfigurePlatformClocks (
SlaveAddress.SmbusDeviceAddress = ClockAddress >> 1;
Length = 1;
Command = 0x87; //Control Register 7 Vendor ID Check
- Status = ((EFI_PEI_SMBUS_PPI *) SmbusPpi)->Execute (
- PeiServices,
+ Status = ((EFI_PEI_SMBUS2_PPI *) SmbusPpi)->Execute (
SmbusPpi,
SlaveAddress,
Command,
@@ -405,7 +396,7 @@ ConfigurePlatformClocks (
static EFI_PEI_NOTIFY_DESCRIPTOR mNotifyList[] = {
{
EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK| EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
- &gEfiPeiSmbusPpiGuid,
+ &gEfiPeiSmbus2PpiGuid,
ConfigurePlatformClocks
}
};
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h
index e153933d72..fe0ed24af7 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h
@@ -3,11 +3,10 @@
This file includes package header files, library classes.
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
**/
#ifndef _BOARD_CLK_GEN_H_
@@ -17,8 +16,7 @@
#include <Library/HobLib.h>
#include <Library/IoLib.h>
#include <Library/DebugLib.h>
-#include <Library/SmbusLib.h>
-#include <Ppi/Smbus.h>
+#include <Ppi/Smbus2.h>
#include <IndustryStandard/SmBus.h>
#include <Guid/PlatformInfo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c
index 5790d045fc..a9e2c8c060 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c
@@ -1,12 +1,10 @@
/** @file
Gpio setting for multiplatform..
- Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
**/
#include <BoardGpios.h>
@@ -25,8 +23,6 @@
//AlpineValley platform code end
//
-EFI_GUID gPeiSmbusPpiGuid = EFI_PEI_SMBUS_PPI_GUID;
-
/**
@param None
@@ -66,7 +62,7 @@ ConfigurePlatformSysCtrlGpio (
Status = (**PeiServices).LocatePpi (
(const EFI_PEI_SERVICES **)PeiServices,
- &gPeiSmbusPpiGuid,
+ &gEfiPeiSmbus2PpiGuid,
0,
NULL,
(void **)&SmbusPpi
@@ -92,7 +88,7 @@ ConfigurePlatformSysCtrlGpio (
static EFI_PEI_NOTIFY_DESCRIPTOR mNotifyList[] = {
{
EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK| EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
- &gEfiPeiSmbusPpiGuid,
+ &gEfiPeiSmbus2PpiGuid,
ConfigurePlatformSysCtrlGpio
}
};
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h
index 0e19819b22..594616d63a 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h
@@ -3,11 +3,10 @@
This file includes package header files, library classes.
- Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
**/
#ifndef _BOARDGPIOS_H_
@@ -20,7 +19,7 @@
#include <Library/IoLib.h>
#include <Library/HobLib.h>
#include <Guid/PlatformInfo.h>
-#include <Ppi/Smbus.h>
+#include <Ppi/Smbus2.h>
#include <Ppi/ReadOnlyVariable2.h>
#include <Guid/SetupVariable.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
index 3fa9f7b129..13097fbc74 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.h
@@ -26,7 +26,6 @@
#include <PiDxe.h>
#include <Library/BaseLib.h>
-#include <FrameworkPei.h>
#include "PlatformBaseAddresses.h"
#include "PchAccess.h"
@@ -37,7 +36,6 @@
#include <Ppi/Stall.h>
#include <Guid/SetupVariable.h>
#include <Ppi/AtaController.h>
-#include <Ppi/FindFv.h>
#include <Ppi/BootInRecoveryMode.h>
#include <Ppi/ReadOnlyVariable2.h>
#include <Ppi/Capsule.h>
@@ -50,7 +48,6 @@
#include <Library/BaseLib.h>
#include <IndustryStandard/Pci22.h>
#include <Ppi/Speaker.h>
-#include <Guid/FirmwareFileSystem.h>
#include <Guid/MemoryTypeInformation.h>
#include <Ppi/Reset.h>
#include <Ppi/EndOfPeiPhase.h>
@@ -58,7 +55,6 @@
#include <Guid/GlobalVariable.h>
#include <Ppi/RecoveryModule.h>
#include <Ppi/DeviceRecoveryModule.h>
-#include <Guid/Capsule.h>
#include <Guid/RecoveryDevice.h>
#include <Ppi/MasterBootMode.h>
#include <Guid/PlatformInfo.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
index a4942a097c..7a084bea3c 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
@@ -54,7 +54,6 @@ [Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
[LibraryClasses]
@@ -64,6 +63,7 @@ [LibraryClasses]
[Ppis]
gEfiPeiReadOnlyVariable2PpiGuid
+ gEfiPeiSmbus2PpiGuid
[Pcd.common]
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/CommonHeader.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/CommonHeader.h
deleted file mode 100644
index d34dd942d3..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/CommonHeader.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**@file
- Common header file shared by all source files.
-
- This file includes package header files, library classes.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-**/
-
-#ifndef __COMMON_HEADER_H_
-#define __COMMON_HEADER_H_
-
-
-#include <Base.h>
-#include <PchAccess.h>
-
-#include <Library/SmbusLib.h>
-#include <Library/IoLib.h>
-#include <Library/PciLib.h>
-#include <Library/DebugLib.h>
-#include <Library/PcdLib.h>
-
-#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.c
deleted file mode 100644
index 4052724812..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.c
+++ /dev/null
@@ -1,873 +0,0 @@
-/** @file
- Intel ICH9 SMBUS library implementation built upon I/O library.
-
- Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-**/
-
-#include "CommonHeader.h"
-
-/**
- Gets Io port base address of Smbus Host Controller.
-
- This internal function depends on a feature flag named PcdIchSmbusFixedIoPortBaseAddress
- to retrieve Smbus Io port base. If that feature flag is true, it will get Smbus Io port base
- address from a preset Pcd entry named PcdIchSmbusIoPortBaseAddress; otherwise, it will always
- read Pci configuration space to get that value in each Smbus bus transaction.
-
- @return The Io port base address of Smbus host controller.
-
-**/
-UINTN
-InternalGetSmbusIoPortBaseAddress (
- VOID
- )
-{
- UINTN IoPortBaseAddress;
-
- IoPortBaseAddress = (UINTN) MmioRead32 (MmPciAddress (0, DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_SMBUS, PCI_FUNCTION_NUMBER_PCH_SMBUS, R_PCH_SMBUS_BASE)) & B_PCH_SMBUS_BASE_BAR;
-
- //
- // Make sure that the IO port base address has been properly set.
- //
- ASSERT (IoPortBaseAddress != 0);
-
- return IoPortBaseAddress;
-}
-
-/**
- Acquires the ownership of SMBUS.
-
- This internal function reads the host state register.
- If the SMBUS is not available, RETURN_TIMEOUT is returned;
- Otherwise, it performs some basic initializations and returns
- RETURN_SUCCESS.
-
- @param IoPortBaseAddress The Io port base address of Smbus Host controller.
-
- @retval RETURN_SUCCESS The SMBUS command was executed successfully.
- @retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
-
-**/
-RETURN_STATUS
-InternalSmBusAcquire (
- UINTN IoPortBaseAddress
- )
-{
- UINT8 HostStatus;
-
- HostStatus = IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS);
- if ((HostStatus & B_PCH_SMBUS_IUS) != 0) {
- return RETURN_TIMEOUT;
- } else if ((HostStatus & B_PCH_SMBUS_HBSY) != 0) {
- //
- // Clear host status register and exit.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS, B_PCH_SMBUS_HSTS_ALL);
- return RETURN_TIMEOUT;
- }
- //
- // Clear out any odd status information (Will Not Clear In Use).
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS, HostStatus);
-
- return RETURN_SUCCESS;
-}
-
-/**
- Starts the SMBUS transaction and waits until the end.
-
- This internal function start the SMBUS transaction and waits until the transaction
- of SMBUS is over by polling the INTR bit of Host status register.
- If the SMBUS is not available, RETURN_TIMEOUT is returned;
- Otherwise, it performs some basic initializations and returns
- RETURN_SUCCESS.
-
- @param IoPortBaseAddress The Io port base address of Smbus Host controller.
- @param HostControl The Host control command to start SMBUS transaction.
-
- @retval RETURN_SUCCESS The SMBUS command was executed successfully.
- @retval RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect).
- @retval RETURN_DEVICE_ERROR The request was not completed because a failure reflected
- in the Host Status Register bit. Device errors are
- a result of a transaction collision, illegal command field,
- unclaimed cycle (host initiated), or bus errors (collisions).
-
-**/
-RETURN_STATUS
-InternalSmBusStart (
- IN UINTN IoPortBaseAddress,
- IN UINT8 HostControl
- )
-{
- UINT8 HostStatus;
- UINT8 AuxiliaryStatus;
-
- //
- // Set Host Control Register (Initiate Operation, Interrupt disabled).
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HCTL, (UINT8)(HostControl + B_PCH_SMBUS_START));
-
- do {
- //
- // Poll INTR bit of Host Status Register.
- //
- HostStatus = IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS);
- } while ((HostStatus & (B_PCH_SMBUS_INTR | B_PCH_SMBUS_ERRORS | B_PCH_SMBUS_BYTE_DONE_STS)) == 0);
-
- if ((HostStatus & B_PCH_SMBUS_ERRORS) == 0) {
- return RETURN_SUCCESS;
- }
-
- //
- // Clear error bits of Host Status Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS, B_PCH_SMBUS_ERRORS);
-
- //
- // Read Auxiliary Status Register to judge CRC error.
- //
- AuxiliaryStatus = IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_AUXS);
- if ((AuxiliaryStatus & B_PCH_SMBUS_CRCE) != 0) {
- return RETURN_CRC_ERROR;
- }
-
- return RETURN_DEVICE_ERROR;
-}
-
-/**
- Executes an SMBUS quick, byte or word command.
-
- This internal function executes an SMBUS quick, byte or word commond.
- If Status is not NULL, then the status of the executed command is returned in Status.
-
- @param HostControl The value of Host Control Register to set.
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Value The byte/word write to the SMBUS.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The byte/word read from the SMBUS.
-
-**/
-UINT16
-InternalSmBusNonBlock (
- IN UINT8 HostControl,
- IN UINTN SmBusAddress,
- IN UINT16 Value,
- OUT RETURN_STATUS *Status
- )
-{
- RETURN_STATUS ReturnStatus;
- UINTN IoPortBaseAddress;
- UINT8 AuxiliaryControl;
-
- IoPortBaseAddress = InternalGetSmbusIoPortBaseAddress ();
-
- //
- // Try to acquire the ownership of ICH SMBUS.
- //
- ReturnStatus = InternalSmBusAcquire (IoPortBaseAddress);
- if (RETURN_ERROR (ReturnStatus)) {
- goto Done;
- }
-
- //
- // Set the appropriate Host Control Register and auxiliary Control Register.
- //
- AuxiliaryControl = 0;
- if (SMBUS_LIB_PEC (SmBusAddress)) {
- AuxiliaryControl |= B_PCH_SMBUS_AAC;
- HostControl |= B_PCH_SMBUS_PEC_EN;
- }
-
- //
- // Set Host Command Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HCMD, (UINT8) SMBUS_LIB_COMMAND (SmBusAddress));
-
- //
- // Write value to Host Data 0 and Host Data 1 Registers.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HD0, (UINT8) Value);
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HD1, (UINT8) (Value >> 8));
-
- //
- // Set Auxiliary Control Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_AUXC, AuxiliaryControl);
-
- //
- // Set SMBUS slave address for the device to send/receive from.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_TSA, (UINT8) SmBusAddress);
-
- //
- // Start the SMBUS transaction and wait for the end.
- //
- ReturnStatus = InternalSmBusStart (IoPortBaseAddress, HostControl);
-
- //
- // Read value from Host Data 0 and Host Data 1 Registers.
- //
- Value = (UINT16)(IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HD1) << 8);
- Value = (UINT16)(Value | IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HD0));
-
- //
- // Clear Host Status Register and Auxiliary Status Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS, B_PCH_SMBUS_HSTS_ALL);
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_AUXS, B_PCH_SMBUS_CRCE);
-
-Done:
- if (Status != NULL) {
- *Status = ReturnStatus;
- }
-
- return Value;
-}
-
-/**
- Executes an SMBUS quick read command.
-
- Executes an SMBUS quick read command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address field of SmBusAddress is required.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If PEC is set in SmBusAddress, then ASSERT().
- If Command in SmBusAddress is not zero, then ASSERT().
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
-**/
-VOID
-EFIAPI
-SmBusQuickRead (
- IN UINTN SmBusAddress,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
- ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_QUICK,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_READ,
- 0,
- Status
- );
-}
-
-/**
- Executes an SMBUS quick write command.
-
- Executes an SMBUS quick write command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address field of SmBusAddress is required.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If PEC is set in SmBusAddress, then ASSERT().
- If Command in SmBusAddress is not zero, then ASSERT().
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
-**/
-VOID
-EFIAPI
-SmBusQuickWrite (
- IN UINTN SmBusAddress,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
- ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_QUICK,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- 0,
- Status
- );
-}
-
-/**
- Executes an SMBUS receive byte command.
-
- Executes an SMBUS receive byte command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address field of SmBusAddress is required.
- The byte received from the SMBUS is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Command in SmBusAddress is not zero, then ASSERT().
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The byte received from the SMBUS.
-
-**/
-UINT8
-EFIAPI
-SmBusReceiveByte (
- IN UINTN SmBusAddress,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT8 ValueReturn = 0;
-
- ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = (UINT8) InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_BYTE,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_READ,
- 0,
- Status
- );
- return ValueReturn;
-
- }
-
-/**
- Executes an SMBUS send byte command.
-
- Executes an SMBUS send byte command on the SMBUS device specified by SmBusAddress.
- The byte specified by Value is sent.
- Only the SMBUS slave address field of SmBusAddress is required. Value is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Command in SmBusAddress is not zero, then ASSERT().
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Value The 8-bit value to send.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The parameter of Value.
-
-**/
-UINT8
-EFIAPI
-SmBusSendByte (
- IN UINTN SmBusAddress,
- IN UINT8 Value,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT8 ValueReturn = 0;
-
- ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = (UINT8) InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_BYTE,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- Value,
- Status
- );
- return ValueReturn;
-
- }
-
-/**
- Executes an SMBUS read data byte command.
-
- Executes an SMBUS read data byte command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- The 8-bit value read from the SMBUS is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The byte read from the SMBUS.
-
-**/
-UINT8
-EFIAPI
-SmBusReadDataByte (
- IN UINTN SmBusAddress,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT8 ValueReturn = 0;
-
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
- ValueReturn = (UINT8) InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_BYTE_DATA,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_READ,
- 0,
- Status
- );
- return ValueReturn;
-}
-
-/**
- Executes an SMBUS write data byte command.
-
- Executes an SMBUS write data byte command on the SMBUS device specified by SmBusAddress.
- The 8-bit value specified by Value is written.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- Value is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Value The 8-bit value to write.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The parameter of Value.
-
-**/
-UINT8
-EFIAPI
-SmBusWriteDataByte (
- IN UINTN SmBusAddress,
- IN UINT8 Value,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT8 ValueReturn = 0;
-
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = (UINT8) InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_BYTE_DATA,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- Value,
- Status
- );
- return ValueReturn;
-
-}
-
-/**
- Executes an SMBUS read data word command.
-
- Executes an SMBUS read data word command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- The 16-bit value read from the SMBUS is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The byte read from the SMBUS.
-
-**/
-UINT16
-EFIAPI
-SmBusReadDataWord (
- IN UINTN SmBusAddress,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT16 ValueReturn = 0;
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_WORD_DATA,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_READ,
- 0,
- Status
- );
- return ValueReturn;
-
-}
-
-/**
- Executes an SMBUS write data word command.
-
- Executes an SMBUS write data word command on the SMBUS device specified by SmBusAddress.
- The 16-bit value specified by Value is written.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- Value is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Value The 16-bit value to write.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The parameter of Value.
-
-**/
-UINT16
-EFIAPI
-SmBusWriteDataWord (
- IN UINTN SmBusAddress,
- IN UINT16 Value,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT16 ValueReturn = 0;
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_WORD_DATA,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- Value,
- Status
- );
- return ValueReturn;
-}
-
-/**
- Executes an SMBUS process call command.
-
- Executes an SMBUS process call command on the SMBUS device specified by SmBusAddress.
- The 16-bit value specified by Value is written.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- The 16-bit value returned by the process call command is returned.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is not zero, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Value The 16-bit value to write.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The 16-bit value returned by the process call command.
-
-**/
-UINT16
-EFIAPI
-SmBusProcessCall (
- IN UINTN SmBusAddress,
- IN UINT16 Value,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINT16 ValueReturn = 0;
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- ValueReturn = InternalSmBusNonBlock (
- V_PCH_SMBUS_SMB_CMD_PROCESS_CALL,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- Value,
- Status
- );
- return ValueReturn;
-}
-
-/**
- Executes an SMBUS block command.
-
- Executes an SMBUS block read, block write and block write-block read command
- on the SMBUS device specified by SmBusAddress.
- Bytes are read from the SMBUS and stored in Buffer.
- The number of bytes read is returned, and will never return a value larger than 32-bytes.
- If Status is not NULL, then the status of the executed command is returned in Status.
- It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
- SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
-
- @param HostControl The value of Host Control Register to set.
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param WriteBuffer Pointer to the buffer of bytes to write to the SMBUS.
- @param ReadBuffer Pointer to the buffer of bytes to read from the SMBUS.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The number of bytes read from the SMBUS.
-
-**/
-UINTN
-InternalSmBusBlock (
- IN UINT8 HostControl,
- IN UINTN SmBusAddress,
- IN UINT8 *WriteBuffer,
- OUT UINT8 *ReadBuffer,
- OUT RETURN_STATUS *Status
- )
-{
- RETURN_STATUS ReturnStatus;
- UINTN Index;
- UINTN BytesCount;
- UINTN IoPortBaseAddress;
- UINT8 AuxiliaryControl;
-
- IoPortBaseAddress = InternalGetSmbusIoPortBaseAddress ();
-
- BytesCount = SMBUS_LIB_LENGTH (SmBusAddress);
-
- //
- // Try to acquire the ownership of ICH SMBUS.
- //
- ReturnStatus = InternalSmBusAcquire (IoPortBaseAddress);
- if (RETURN_ERROR (ReturnStatus)) {
- goto Done;
- }
-
- //
- // Set the appropriate Host Control Register and auxiliary Control Register.
- //
- AuxiliaryControl = B_PCH_SMBUS_E32B;
- if (SMBUS_LIB_PEC (SmBusAddress)) {
- AuxiliaryControl |= B_PCH_SMBUS_AAC;
- HostControl |= B_PCH_SMBUS_PEC_EN;
- }
-
- //
- // Set Host Command Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HCMD, (UINT8) SMBUS_LIB_COMMAND (SmBusAddress));
-
- //
- // Set Auxiliary Control Regiester.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_AUXC, AuxiliaryControl);
-
- //
- // Clear byte pointer of 32-byte buffer.
- //
- IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HCTL);
-
- if (WriteBuffer != NULL) {
- //
- // Write the number of block to Host Block Data Byte Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HD0, (UINT8) BytesCount);
-
- //
- // Write data block to Host Block Data Register.
- //
- for (Index = 0; Index < BytesCount; Index++) {
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HBD, WriteBuffer[Index]);
- }
- }
-
- //
- // Set SMBUS slave address for the device to send/receive from.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_TSA, (UINT8) SmBusAddress);
-
- //
- // Start the SMBUS transaction and wait for the end.
- //
- ReturnStatus = InternalSmBusStart (IoPortBaseAddress, HostControl);
- if (RETURN_ERROR (ReturnStatus)) {
- goto Done;
- }
-
- if (ReadBuffer != NULL) {
- //
- // Read the number of block from host block data byte register.
- //
- BytesCount = IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HD0);
-
- //
- // Write data block from Host Block Data Register.
- //
- for (Index = 0; Index < BytesCount; Index++) {
- ReadBuffer[Index] = IoRead8 (IoPortBaseAddress + R_PCH_SMBUS_HBD);
- }
- }
-
-Done:
- //
- // Clear Host Status Register and Auxiliary Status Register.
- //
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_HSTS, B_PCH_SMBUS_HSTS_ALL);
- IoWrite8 (IoPortBaseAddress + R_PCH_SMBUS_AUXS, B_PCH_SMBUS_CRCE);
-
- if (Status != NULL) {
- *Status = ReturnStatus;
- }
-
- return BytesCount;
-}
-
-/**
- Executes an SMBUS read block command.
-
- Executes an SMBUS read block command on the SMBUS device specified by SmBusAddress.
- Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
- Bytes are read from the SMBUS and stored in Buffer.
- The number of bytes read is returned, and will never return a value larger than 32-bytes.
- If Status is not NULL, then the status of the executed command is returned in Status.
- It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
- SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
- If Length in SmBusAddress is not zero, then ASSERT().
- If Buffer is NULL, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The number of bytes read.
-
-**/
-UINTN
-EFIAPI
-SmBusReadBlock (
- IN UINTN SmBusAddress,
- OUT VOID *Buffer,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINTN BytesCount = 0;
-
- ASSERT (Buffer != NULL);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
-
- BytesCount = InternalSmBusBlock (
- V_PCH_SMBUS_SMB_CMD_BLOCK,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_READ,
- NULL,
- Buffer,
- Status
- );
- return BytesCount;
-
-}
-
-/**
- Executes an SMBUS write block command.
-
- Executes an SMBUS write block command on the SMBUS device specified by SmBusAddress.
- The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
- Bytes are written to the SMBUS from Buffer.
- The number of bytes written is returned, and will never return a value larger than 32-bytes.
- If Status is not NULL, then the status of the executed command is returned in Status.
- If Length in SmBusAddress is zero or greater than 32, then ASSERT().
- If Buffer is NULL, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The number of bytes written.
-
-**/
-UINTN
-EFIAPI
-SmBusWriteBlock (
- IN UINTN SmBusAddress,
- OUT VOID *Buffer,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINTN BytesCount = 0;
-
- ASSERT (Buffer != NULL);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) >= 1);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) <= 32);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
-
- BytesCount = InternalSmBusBlock (
-
- V_PCH_SMBUS_SMB_CMD_BLOCK,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- Buffer,
- NULL,
- Status
- );
-
- return BytesCount;
-}
-
-/**
- Executes an SMBUS block process call command.
-
- Executes an SMBUS block process call command on the SMBUS device specified by SmBusAddress.
- The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
- Bytes are written to the SMBUS from WriteBuffer. Bytes are then read from the SMBUS into ReadBuffer.
- If Status is not NULL, then the status of the executed command is returned in Status.
- It is the caller's responsibility to make sure ReadBuffer is large enough for the total number of bytes read.
- SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
- If Length in SmBusAddress is zero or greater than 32, then ASSERT().
- If WriteBuffer is NULL, then ASSERT().
- If ReadBuffer is NULL, then ASSERT().
- If any reserved bits of SmBusAddress are set, then ASSERT().
-
- @param SmBusAddress Address that encodes the SMBUS Slave Address,
- SMBUS Command, SMBUS Data Length, and PEC.
- @param WriteBuffer Pointer to the buffer of bytes to write to the SMBUS.
- @param ReadBuffer Pointer to the buffer of bytes to read from the SMBUS.
- @param Status Return status for the executed command.
- This is an optional parameter and may be NULL.
-
- @return The number of bytes written.
-
-**/
-UINTN
-EFIAPI
-SmBusBlockProcessCall (
- IN UINTN SmBusAddress,
- IN VOID *WriteBuffer,
- OUT VOID *ReadBuffer,
- OUT RETURN_STATUS *Status OPTIONAL
- )
-{
- UINTN BytesCount = 0;
-
- ASSERT (WriteBuffer != NULL);
- ASSERT (ReadBuffer != NULL);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) >= 1);
- ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) <= 32);
- ASSERT (SMBUS_LIB_RESERVED (SmBusAddress) == 0);
-
- BytesCount = InternalSmBusBlock (
- V_PCH_SMBUS_SMB_CMD_BLOCK_PROCESS,
- SmBusAddress | B_PCH_SMBUS_RW_SEL_WRITE,
- WriteBuffer,
- ReadBuffer,
- Status
- );
- return BytesCount;
-
- }
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
deleted file mode 100644
index b13e3de0cc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+++ /dev/null
@@ -1,46 +0,0 @@
-## @file
-# Component description file for Intel Ich9 Smbus Library.
-#
-# SMBUS Library that layers on top of the I/O Library to directly
-# access a standard SMBUS host controller.
-# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SmbusLib
- FILE_GUID = 0558CAEA-FEF3-4b6d-915E-8742EFE6DEE1
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = SmbusLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- SmbusLib.c
-
-[Packages]
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- MdePkg/MdePkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
-
-[LibraryClasses]
- PcdLib
- DebugLib
- PciLib
- IoLib
-
-[Pcd.common]
- gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c
deleted file mode 100644
index 3fda6313d0..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
-
- Dimm.c
-
-Abstract:
-
- PPI for reading SPD modules on DIMMs.
-
---*/
-
-
-//
-// Header Files
-//
-#include "Platformearlyinit.h"
-
-#define DIMM_SOCKETS 4 // Total number of DIMM sockets allowed on
- // the platform
-#define DIMM_SEGMENTS 1 // Total number of Segments Per DIMM.
-#define MEMORY_CHANNELS 2 // Total number of memory channels
- // populated on the system board
-//
-// Prototypes
-//
-
-EFI_STATUS
-EFIAPI
-GetDimmState (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- OUT PEI_PLATFORM_DIMM_STATE *State
- );
-
-EFI_STATUS
-EFIAPI
-SetDimmState (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- IN PEI_PLATFORM_DIMM_STATE *State
- );
-
-EFI_STATUS
-EFIAPI
-ReadSpd (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- IN UINT8 Offset,
- IN UINTN Count,
- IN OUT UINT8 *Buffer
- );
-
-static PEI_PLATFORM_DIMM_PPI mGchDimmPpi = {
- DIMM_SOCKETS,
- DIMM_SEGMENTS,
- MEMORY_CHANNELS,
- GetDimmState,
- SetDimmState,
- ReadSpd
-};
-
-static EFI_PEI_PPI_DESCRIPTOR mPpiPlatformDimm = {
- (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
- &gPeiPlatformDimmPpiGuid,
- &mGchDimmPpi
-};
-
-
-//
-// Functions
-//
-
-/**
- This function returns the current state of a single DIMM. Present indicates
- that the DIMM slot is physically populated. Disabled indicates that the DIMM
- should not be used.
-
- @param PeiServices PEI services table pointer
- @param This PPI pointer
- @param Dimm DIMM to read from
- @param State Pointer to a return buffer to be updated with the current state
- of the DIMM
-
- @retval EFI_SUCCESS The function completed successfully.
-
-**/
-EFI_STATUS
-EFIAPI
-GetDimmState (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- OUT PEI_PLATFORM_DIMM_STATE *State
- )
-{
- EFI_STATUS Status;
- UINT8 Buffer;
-
- PEI_ASSERT (PeiServices, (Dimm < This->DimmSockets));
-
- //
- // A failure here does not necessarily mean that no DIMM is present.
- // Read a single byte. All we care about is the return status.
- //
- Status = ReadSpd (
- PeiServices,
- This,
- Dimm,
- 0,
- 1,
- &Buffer
- );
-
- if (EFI_ERROR (Status)) {
- State->Present = 0;
- } else {
- State->Present = 1;
- }
-
- //
- // BUGBUG: Update to check platform variable when it is available
- //
- State->Disabled = 0;
- State->Reserved = 0;
-
- return EFI_SUCCESS;
-}
-
-/**
-
- This function updates the state of a single DIMM.
-
- @param PeiServices PEI services table pointer
- @param This PPI pointer
- @param Dimm DIMM to set state for
- @param State Pointer to the state information to set.
-
- @retval EFI_SUCCESS The function completed successfully.
- @retval EFI_UNSUPPORTED The function is not supported.
-
-**/
-EFI_STATUS
-EFIAPI
-SetDimmState (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- IN PEI_PLATFORM_DIMM_STATE *State
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-/**
- This function reads SPD information from a DIMM.
-
- PeiServices PEI services table pointer
- This PPI pointer
- Dimm DIMM to read from
- Offset Offset in DIMM
- Count Number of bytes
- Buffer Return buffer
-
- @param EFI_SUCCESS The function completed successfully.
- @param EFI_DEVICE_ERROR The DIMM being accessed reported a device error,
- does not have an SPD module, or is not installed in
- the system.
- @retval EFI_TIMEOUT Time out trying to read the SPD module.
- @retval EFI_INVALID_PARAMETER A parameter was outside the legal limits.
-
-**/
-EFI_STATUS
-EFIAPI
-ReadSpd (
- IN EFI_PEI_SERVICES **PeiServices,
- IN PEI_PLATFORM_DIMM_PPI *This,
- IN UINT8 Dimm,
- IN UINT8 Offset,
- IN UINTN Count,
- IN OUT UINT8 *Buffer
- )
-{
- EFI_STATUS Status;
- PEI_SMBUS_PPI *Smbus;
- UINTN Index;
- UINTN Index1;
- EFI_SMBUS_DEVICE_ADDRESS SlaveAddress;
- EFI_SMBUS_DEVICE_COMMAND Command;
- UINTN Length;
-
- Status = (**PeiServices).LocatePpi (
- PeiServices,
- &gPeiSmbusPpiGuid, // GUID
- 0, // INSTANCE
- NULL, // EFI_PEI_PPI_DESCRIPTOR
- &Smbus // PPI
- );
- ASSERT_PEI_ERROR (PeiServices, Status);
-
- switch (Dimm) {
- case 0:
- SlaveAddress.SmbusDeviceAddress = SMBUS_ADDR_CH_A_1 >> 1;
- break;
- case 1:
- SlaveAddress.SmbusDeviceAddress = SMBUS_ADDR_CH_A_2 >> 1;
- break;
- case 2:
- SlaveAddress.SmbusDeviceAddress = SMBUS_ADDR_CH_B_1 >> 1;
- break;
- case 3:
- SlaveAddress.SmbusDeviceAddress = SMBUS_ADDR_CH_B_2 >> 1;
- break;
- default:
- return EFI_INVALID_PARAMETER;
- }
-
- Index = Count % 4;
- if (Index != 0) {
- //
- // read the first serveral bytes to speed up following reading
- //
- for (Index1 = 0; Index1 < Index; Index1++) {
- Length = 1;
- Command = Offset + Index1;
- Status = Smbus->Execute (
- PeiServices,
- Smbus,
- SlaveAddress,
- Command,
- EfiSmbusReadByte,
- FALSE,
- &Length,
- &Buffer[Index1]
- );
- if (EFI_ERROR(Status)) {
- return Status;
- }
- }
- }
-
- //
- // Now collect all the remaining bytes on 4 bytes block
- //
- for (; Index < Count; Index += 2) {
- Command = Index + Offset;
- Length = 2;
- Status = Smbus->Execute (
- PeiServices,
- Smbus,
- SlaveAddress,
- Command,
- EfiSmbusReadWord,
- FALSE,
- &Length,
- &Buffer[Index]
- );
- if (EFI_ERROR(Status)) {
- return Status;
- }
-
- Index += 2;
- Command = Index + Offset;
- Length = 2;
- Status = Smbus->Execute (
- PeiServices,
- Smbus,
- SlaveAddress,
- Command,
- EfiSmbusReadWord,
- FALSE,
- &Length,
- &Buffer[Index]
- );
- if (EFI_ERROR(Status)) {
- return Status;
- }
- }
- return EFI_SUCCESS;
-}
-
-/**
- This function initializes the PEIM. It simply installs the DIMM PPI.
-
- @param FfsHeader Not used by this function
- @param PeiServices Pointer to PEI services table
-
- @retval EFI_SUCCESS The function completed successfully.
-
-**/
-EFI_STATUS
-EFIAPI
-PeimInitializeDimm (
- IN EFI_PEI_SERVICES **PeiServices,
- IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
- IN VOID *SmbusPpi
- )
-{
- EFI_STATUS Status;
-
- Status = (**PeiServices).InstallPpi (
- PeiServices,
- &mPpiPlatformDimm
- );
- ASSERT_PEI_ERROR (PeiServices, Status);
-
- return EFI_SUCCESS;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
index 9631d49a84..6a2ecf8fb4 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.h
@@ -59,7 +59,7 @@ Abstract:
#include <Ppi/Speaker.h>
#include <Guid/MemoryTypeInformation.h>
#include <Ppi/Cache.h>
-#include <Ppi/Smbus.h>
+#include <Ppi/Smbus2.h>
#include <Library/PchPlatformLib.h>
#include <Ppi/SmbusPolicy.h>
#include <Ppi/Reset.h>
@@ -1454,14 +1454,6 @@ SetDxeCacheMode (
IN CONST EFI_PEI_SERVICES **PeiServices
);
-EFI_STATUS
-GPIO_initialization (
- IN EFI_PEI_SERVICES **PeiServices,
- IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
- IN VOID *SmbusPpi
- );
-
-
BOOLEAN
IsRtcUipAlwaysSet (
IN CONST EFI_PEI_SERVICES **PeiServices
--git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
index a533f3918c..c18cabb2f2 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/CommonHeader.h
@@ -42,7 +42,6 @@
#include <Library/PciLib.h>
#include <Library/ReportStatusCodeLib.h>
#include <Library/PcdLib.h>
-#include <Library/SmbusLib.h>
#include <Library/TimerLib.h>
#include <Library/PrintLib.h>
#include <Library/ResetSystemLib.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
index 28a5274c40..d3969f2344 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
@@ -72,7 +72,6 @@ [LibraryClasses]
DebugLib
HobLib
IoLib
- MultiPlatformLib
MtrrLib
PerformanceLib
MonoStatusCodeLib
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index b16883e98c..3910281c49 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -171,7 +171,7 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index c9335a98c8..2ae594e5be 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -169,7 +169,7 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index fd9ddebfd9..5cdc9bebc8 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -171,7 +171,7 @@ [LibraryClasses.common]
#
# ICH
#
- SmbusLib|Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
+ SmbusLib|MdePkg/Library/BaseSmbusLibNull/BaseSmbusLibNull.inf
SmmLib|Vlv2TbltDevicePkg/Library/PchSmmLib/PchSmmLib.inf
#
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 10/14] Vlv2TbltDevicePkg: Switch to MdeModulePkg BdsDxe
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (8 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 09/14] Vlv2TbltDevicePkg: Use PI Spec SMBUS2 PPI Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:08 ` Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 11/14] Vlv2TbltDevicePkg: Update boot mode/state behaviors Michael D Kinney
` (4 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
Switch from Intel Framework BDS module and libraries to the
MdeModulePkg BdsDxe module and libraries.
Update FLASH map for full 8MB FLASH size
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Library/FmpDeviceLib/FmpDeviceLib.c | 12 +-
.../DxePlatformBootManagerLib/BdsPlatform.c | 1409 ++++++
.../DxePlatformBootManagerLib/BdsPlatform.h | 253 +
.../DxePlatformBootManagerLib.inf | 95 +
.../DxePlatformBootManagerLib/MemoryTest.c | 83 +
.../PlatformBootOption.c | 559 ++
.../Library/PlatformBdsLib/BdsPlatform.c | 3092 ------------
.../Library/PlatformBdsLib/BdsPlatform.h | 516 --
.../Library/PlatformBdsLib/PlatformBdsLib.inf | 128 -
.../PlatformBdsLib/PlatformBdsStrings.uni | 30 -
.../Library/PlatformBdsLib/PlatformData.c | 306 --
.../Library/GenericBdsLib/BdsBoot.c | 4490 -----------------
.../Library/GenericBdsLib/BdsConnect.c | 429 --
.../Library/GenericBdsLib/BdsConsole.c | 1061 ----
.../Library/GenericBdsLib/BdsMisc.c | 1575 ------
.../Library/GenericBdsLib/DevicePath.c | 27 -
.../Library/GenericBdsLib/GenericBdsLib.inf | 143 -
.../Library/GenericBdsLib/GenericBdsLib.uni | 19 -
.../GenericBdsLib/GenericBdsStrings.uni | 30 -
.../Library/GenericBdsLib/InternalBdsLib.h | 173 -
.../Library/GenericBdsLib/String.c | 26 -
.../Library/GenericBdsLib/String.h | 42 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 26 +-
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 53 +-
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 22 +-
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 22 +-
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 22 +-
.../Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c | 33 -
.../Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf | 32 -
29 files changed, 2477 insertions(+), 12231 deletions(-)
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.h
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/MemoryTest.c
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/PlatformBootOption.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsStrings.uni
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformData.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConnect.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConsole.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/DevicePath.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.uni
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsStrings.uni
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib/FmpDeviceLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib/FmpDeviceLib.c
index a863d69381..57185d8d09 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib/FmpDeviceLib.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib/FmpDeviceLib.c
@@ -32,11 +32,11 @@ typedef struct {
} UPDATE_CONFIG_DATA;
UPDATE_CONFIG_DATA mUpdateConfigData[] = {
- { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00000000, 0x00040000, 0x00000000 },
- { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x000C0000, 0x00050000, 0x000C0000 },
- { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00110000, 0x00210000, 0x00110000 },
- { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00320000, 0x00070000, 0x00320000 },
- { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00390000, 0x00070000, 0x00390000 }
+ { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00400000, 0x00040000, 0x00400000 },
+ { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x004C0000, 0x00050000, 0x004C0000 },
+ { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00510000, 0x00210000, 0x00510000 },
+ { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00720000, 0x00070000, 0x00720000 },
+ { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00790000, 0x00070000, 0x00790000 }
};
/**
@@ -95,7 +95,7 @@ FmpDeviceGetSize (
if (Size == NULL) {
return EFI_INVALID_PARAMETER;
}
- *Size = PcdGet32 (PcdBiosRomBase);
+ *Size = PcdGet32 (PcdBiosRomSize);
return EFI_SUCCESS;
}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
new file mode 100644
index 0000000000..4dd3827a6e
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
@@ -0,0 +1,1409 @@
+/** @file
+ This file include all platform action which can be customized by IBV/OEM.
+
+Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "BdsPlatform.h"
+#include <Guid/EventGroup.h>
+#include <Protocol/DxeSmmReadyToLock.h>
+#include <Protocol/FirmwareVolume2.h>
+#include <Protocol/PciRootBridgeIo.h>
+
+#include <Protocol/BlockIo.h>
+#include <Protocol/PciIo.h>
+#include <Library/IoLib.h>
+#include <Library/PciLib.h>
+#include <Guid/EventGroup.h>
+
+#include <Library/Tcg2PhysicalPresenceLib.h>
+
+#include <Library/HobLib.h>
+#include <Protocol/UsbIo.h>
+#include <Library/BootLogoLib.h>
+
+#include <Library/UefiBootManagerLib.h>
+
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_BOOT_MODE gBootMode;
+
+BOOLEAN gPPRequireUIConfirm;
+
+extern UINTN mBootMenuOptionNumber;
+
+GLOBAL_REMOVE_IF_UNREFERENCED USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath = {
+ {
+ {
+ MESSAGING_DEVICE_PATH,
+ MSG_USB_CLASS_DP,
+ {
+ (UINT8) (sizeof (USB_CLASS_DEVICE_PATH)),
+ (UINT8) ((sizeof (USB_CLASS_DEVICE_PATH)) >> 8)
+ }
+ },
+ 0xffff, // VendorId
+ 0xffff, // ProductId
+ CLASS_HID, // DeviceClass
+ SUBCLASS_BOOT, // DeviceSubClass
+ PROTOCOL_KEYBOARD // DeviceProtocol
+ },
+ gEndEntire
+};
+
+//
+// Platform specific ISA serial device path
+//
+GLOBAL_REMOVE_IF_UNREFERENCED PLATFORM_ISA_SERIAL_DEVICE_PATH gIsaSerialDevicePath = {
+ gPciRootBridge,
+ gPciIsaBridge,
+ gPnp16550ComPort,
+ gUart(115200, 8, 1, 1),
+ gPcAnsiTerminal,
+ gEndEntire
+};
+
+//
+// Internal shell mode
+//
+GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mShellModeColumn;
+GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mShellModeRow;
+GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mShellHorizontalResolution;
+GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mShellVerticalResolution;
+//
+// BDS Platform Functions
+//
+
+BOOLEAN
+IsMorBitSet (
+ VOID
+ )
+{
+ UINTN MorControl;
+ EFI_STATUS Status;
+ UINTN DataSize;
+
+ //
+ // Check if the MOR bit is set.
+ //
+ DataSize = sizeof (MorControl);
+ Status = gRT->GetVariable (
+ MEMORY_OVERWRITE_REQUEST_VARIABLE_NAME,
+ &gEfiMemoryOverwriteControlDataGuid,
+ NULL,
+ &DataSize,
+ &MorControl
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_INFO, " PlatformBootMangerLib: gEfiMemoryOverwriteControlDataGuid doesn't exist!!***\n"));
+ MorControl = 0;
+ } else {
+ DEBUG ((DEBUG_INFO, " PlatformBootMangerLib: Get the gEfiMemoryOverwriteControlDataGuid = %x!!***\n", MorControl));
+ }
+
+ return (BOOLEAN) (MorControl & 0x01);
+}
+
+VOID
+DumpDevicePath (
+ IN CHAR16 *Name,
+ IN EFI_DEVICE_PATH *DevicePath
+ )
+{
+ CHAR16 *Str;
+
+ Str = ConvertDevicePathToText(DevicePath, TRUE, TRUE);
+ DEBUG ((DEBUG_INFO, "%s: %s\n", Name, Str));
+ if (Str != NULL) {
+ FreePool (Str);
+ }
+}
+
+/**
+ An empty function to pass error checking of CreateEventEx ().
+
+ This empty function ensures that EVT_NOTIFY_SIGNAL_ALL is error
+ checked correctly since it is now mapped into CreateEventEx() in UEFI 2.0.
+
+ @param Event Event whose notification function is being invoked.
+ @param Context The pointer to the notification function's context,
+ which is implementation-dependent.
+**/
+VOID
+EFIAPI
+InternalBdsEmptyCallbackFuntion (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ return;
+}
+
+VOID
+ExitPmAuth (
+ VOID
+ )
+{
+ EFI_HANDLE Handle;
+ EFI_STATUS Status;
+ EFI_EVENT EndOfDxeEvent;
+
+ DEBUG((DEBUG_INFO,"ExitPmAuth ()- Start\n"));
+ //
+ // Prepare S3 information, this MUST be done before ExitPmAuth/EndOfDxe
+ //
+ //
+ // Since PI1.2.1, we need signal EndOfDxe as ExitPmAuth
+ //
+ Status = gBS->CreateEventEx (
+ EVT_NOTIFY_SIGNAL,
+ TPL_CALLBACK,
+ InternalBdsEmptyCallbackFuntion,
+ NULL,
+ &gEfiEndOfDxeEventGroupGuid,
+ &EndOfDxeEvent
+ );
+ ASSERT_EFI_ERROR (Status);
+ gBS->SignalEvent (EndOfDxeEvent);
+ gBS->CloseEvent (EndOfDxeEvent);
+ DEBUG((DEBUG_INFO,"All EndOfDxe callbacks have returned successfully\n"));
+
+ //
+ // NOTE: We need install DxeSmmReadyToLock directly here because many boot script is added via ExitPmAuth/EndOfDxe callback.
+ // If we install them at same callback, these boot script will be rejected because BootScript Driver runs first to lock them done.
+ // So we seperate them to be 2 different events, ExitPmAuth is last chance to let platform add boot script. DxeSmmReadyToLock will
+ // make boot script save driver lock down the interface.
+ //
+ Handle = NULL;
+ Status = gBS->InstallProtocolInterface (
+ &Handle,
+ &gEfiDxeSmmReadyToLockProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+ DEBUG((DEBUG_INFO,"ExitPmAuth ()- End\n"));
+}
+
+VOID
+ConnectRootBridge (
+ BOOLEAN Recursive
+ )
+{
+ UINTN RootBridgeHandleCount;
+ EFI_HANDLE *RootBridgeHandleBuffer;
+ UINTN RootBridgeIndex;
+
+ RootBridgeHandleCount = 0;
+ gBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiPciRootBridgeIoProtocolGuid,
+ NULL,
+ &RootBridgeHandleCount,
+ &RootBridgeHandleBuffer
+ );
+ for (RootBridgeIndex = 0; RootBridgeIndex < RootBridgeHandleCount; RootBridgeIndex++) {
+ gBS->ConnectController (RootBridgeHandleBuffer[RootBridgeIndex], NULL, NULL, Recursive);
+ }
+}
+
+
+/**
+ Return whether the device is trusted console.
+
+ @param Device The device to be tested.
+
+ @retval TRUE The device can be trusted.
+ @retval FALSE The device cannot be trusted.
+**/
+BOOLEAN
+IsTrustedConsole (
+ IN CONSOLE_TYPE ConsoleType,
+ IN EFI_DEVICE_PATH_PROTOCOL *Device
+ )
+{
+ VOID *TrustedConsoleDevicepath;
+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *Instance;
+ UINTN Size;
+ EFI_DEVICE_PATH_PROTOCOL *ConsoleDevice;
+
+ if (Device == NULL) {
+ return FALSE;
+ }
+
+ ConsoleDevice = DuplicateDevicePath(Device);
+
+ TrustedConsoleDevicepath = NULL;
+
+ switch (ConsoleType) {
+ case ConIn:
+ TrustedConsoleDevicepath = PcdGetPtr (PcdTrustedConsoleInputDevicePath);
+ break;
+ case ConOut:
+ //
+ // Check GOP and remove last node
+ //
+ TempDevicePath = ConsoleDevice;
+ while (!IsDevicePathEndType (TempDevicePath)) {
+ if (DevicePathType (TempDevicePath) == ACPI_DEVICE_PATH &&
+ DevicePathSubType (TempDevicePath) == ACPI_ADR_DP) {
+ SetDevicePathEndNode (TempDevicePath);
+ break;
+ }
+ TempDevicePath = NextDevicePathNode (TempDevicePath);
+ }
+
+ TrustedConsoleDevicepath = PcdGetPtr (PcdTrustedConsoleOutputDevicePath);
+ break;
+ default:
+ ASSERT(FALSE);
+ break;
+ }
+
+ TempDevicePath = TrustedConsoleDevicepath;
+ do {
+ Instance = GetNextDevicePathInstance (&TempDevicePath, &Size);
+ if (Instance == NULL) {
+ break;
+ }
+
+ if (CompareMem (ConsoleDevice, Instance, Size - END_DEVICE_PATH_LENGTH) == 0) {
+ FreePool (Instance);
+ FreePool (ConsoleDevice);
+ return TRUE;
+ }
+
+ FreePool (Instance);
+ } while (TempDevicePath != NULL);
+
+ FreePool (ConsoleDevice);
+
+ return FALSE;
+}
+
+BOOLEAN
+IsUsbShortForm (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+ )
+{
+ if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) &&
+ ((DevicePathSubType (DevicePath) == MSG_USB_CLASS_DP) || (DevicePathSubType (DevicePath) == MSG_USB_WWID_DP)) ) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ Connect the USB short form device path.
+
+ @param DevicePath USB short form device path
+
+ @retval EFI_SUCCESS Successfully connected the USB device
+ @retval EFI_NOT_FOUND Cannot connect the USB device
+ @retval EFI_INVALID_PARAMETER The device path is invalid.
+**/
+EFI_STATUS
+ConnectUsbShortFormDevicePath (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+ )
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *Handles;
+ UINTN HandleCount;
+ UINTN Index;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ UINT8 Class[3];
+ BOOLEAN AtLeastOneConnected;
+
+ //
+ // Check the passed in parameters
+ //
+ if (DevicePath == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (!IsUsbShortForm (DevicePath)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // Find the usb host controller firstly, then connect with the remaining device path
+ //
+ AtLeastOneConnected = FALSE;
+ Status = gBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiPciIoProtocolGuid,
+ NULL,
+ &HandleCount,
+ &Handles
+ );
+ for (Index = 0; Index < HandleCount; Index++) {
+ Status = gBS->HandleProtocol (
+ Handles[Index],
+ &gEfiPciIoProtocolGuid,
+ (VOID **) &PciIo
+ );
+ if (!EFI_ERROR (Status)) {
+ //
+ // Check whether the Pci device is the wanted usb host controller
+ //
+ Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, 0x09, 3, &Class);
+ if (!EFI_ERROR (Status) &&
+ ((PCI_CLASS_SERIAL == Class[2]) && (PCI_CLASS_SERIAL_USB == Class[1]))
+ ) {
+ Status = gBS->ConnectController (
+ Handles[Index],
+ NULL,
+ DevicePath,
+ FALSE
+ );
+ if (!EFI_ERROR(Status)) {
+ AtLeastOneConnected = TRUE;
+ }
+ }
+ }
+ }
+
+ return AtLeastOneConnected ? EFI_SUCCESS : EFI_NOT_FOUND;
+}
+
+/**
+ Update the ConIn/ConOut variable with ISA Serial device path,if its not already exists in ConIn/ConOut
+**/
+VOID
+EnumIsaSerial (
+ VOID
+ )
+{
+ DEBUG ((DEBUG_INFO, "[EnumIsaSerial]\n"));
+ EfiBootManagerUpdateConsoleVariable (ConIn, (EFI_DEVICE_PATH_PROTOCOL *) &gIsaSerialDevicePath, NULL);
+ EfiBootManagerUpdateConsoleVariable (ConOut, (EFI_DEVICE_PATH_PROTOCOL *) &gIsaSerialDevicePath, NULL);
+
+ //
+ // Append ISA Serial DevicePath to "ConInDev" and "ConOutDev"
+ //
+ EfiBootManagerUpdateConsoleVariable (ConInDev, (EFI_DEVICE_PATH_PROTOCOL *) &gIsaSerialDevicePath, NULL);
+ EfiBootManagerUpdateConsoleVariable (ConOutDev, (EFI_DEVICE_PATH_PROTOCOL *) &gIsaSerialDevicePath, NULL);
+}
+
+/**
+ Update the ConIn variable with USB Keyboard device path,if its not already exists in ConIn
+**/
+VOID
+EnumUsbKeyboard (
+ VOID
+ )
+{
+ DEBUG ((DEBUG_INFO, "[EnumUsbKeyboard]\n"));
+ EfiBootManagerUpdateConsoleVariable (ConIn, (EFI_DEVICE_PATH_PROTOCOL *) &gUsbClassKeyboardDevicePath, NULL);
+
+ //
+ // Append Usb Keyboard short form DevicePath into "ConInDev"
+ //
+ EfiBootManagerUpdateConsoleVariable (ConInDev, (EFI_DEVICE_PATH_PROTOCOL *) &gUsbClassKeyboardDevicePath, NULL);
+}
+
+BOOLEAN
+IsVgaHandle (
+ IN EFI_HANDLE Handle
+ )
+{
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ PCI_TYPE00 Pci;
+ EFI_STATUS Status;
+
+ Status = gBS->HandleProtocol (
+ Handle,
+ &gEfiPciIoProtocolGuid,
+ (VOID **)&PciIo
+ );
+ if (!EFI_ERROR (Status)) {
+ Status = PciIo->Pci.Read (
+ PciIo,
+ EfiPciIoWidthUint32,
+ 0,
+ sizeof (Pci) / sizeof (UINT32),
+ &Pci
+ );
+ if (!EFI_ERROR (Status)) {
+ if (IS_PCI_VGA (&Pci) || IS_PCI_OLD_VGA (&Pci)) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+EFI_HANDLE
+IsVideoController (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+ )
+{
+ EFI_DEVICE_PATH_PROTOCOL *DupDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
+ EFI_STATUS Status;
+ EFI_HANDLE DeviceHandle;
+
+ DupDevicePath = DuplicateDevicePath (DevicePath);
+ ASSERT (DupDevicePath != NULL);
+ if (DupDevicePath == NULL) {
+ return NULL;
+ }
+
+ TempDevicePath = DupDevicePath;
+ Status = gBS->LocateDevicePath (
+ &gEfiDevicePathProtocolGuid,
+ &TempDevicePath,
+ &DeviceHandle
+ );
+ FreePool (DupDevicePath);
+ if (EFI_ERROR (Status)) {
+ return NULL;
+ }
+
+ if (IsVgaHandle (DeviceHandle)) {
+ return DeviceHandle;
+ } else {
+ return NULL;
+ }
+}
+
+BOOLEAN
+IsGopDevicePath (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+ )
+{
+ while (!IsDevicePathEndType (DevicePath)) {
+ if (DevicePathType (DevicePath) == ACPI_DEVICE_PATH &&
+ DevicePathSubType (DevicePath) == ACPI_ADR_DP) {
+ return TRUE;
+ }
+ DevicePath = NextDevicePathNode (DevicePath);
+ }
+ return FALSE;
+}
+
+/**
+ Remove all GOP device path instance from DevicePath and add the Gop to the DevicePath.
+**/
+EFI_DEVICE_PATH_PROTOCOL *
+UpdateGopDevicePath (
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath,
+ EFI_DEVICE_PATH_PROTOCOL *Gop
+ )
+{
+ UINTN Size;
+ UINTN GopSize;
+ EFI_DEVICE_PATH_PROTOCOL *Temp;
+ EFI_DEVICE_PATH_PROTOCOL *Return;
+ EFI_DEVICE_PATH_PROTOCOL *Instance;
+ BOOLEAN Exist;
+
+ Exist = FALSE;
+ Return = NULL;
+ GopSize = GetDevicePathSize (Gop);
+ do {
+ Instance = GetNextDevicePathInstance (&DevicePath, &Size);
+ if (Instance == NULL) {
+ break;
+ }
+ if (!IsGopDevicePath (Instance) ||
+ (Size == GopSize && CompareMem (Instance, Gop, GopSize) == 0)
+ ) {
+ if (Size == GopSize && CompareMem (Instance, Gop, GopSize) == 0) {
+ Exist = TRUE;
+ }
+ Temp = Return;
+ Return = AppendDevicePathInstance (Return, Instance);
+ if (Temp != NULL) {
+ FreePool (Temp);
+ }
+ }
+ FreePool (Instance);
+ } while (DevicePath != NULL);
+
+ if (!Exist) {
+ Temp = Return;
+ Return = AppendDevicePathInstance (Return, Gop);
+ if (Temp != NULL) {
+ FreePool (Temp);
+ }
+ }
+ return Return;
+}
+
+/**
+ Get Graphics Controller Handle.
+
+ @retval GraphicsController Successfully located
+ @retval NULL Failed to locate
+**/
+EFI_HANDLE
+EFIAPI
+GetGraphicsController (
+ IN BOOLEAN NeedTrustedConsole
+ )
+{
+ EFI_STATUS Status;
+ UINTN Index;
+ EFI_HANDLE *PciHandles;
+ UINTN PciHandlesSize;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+
+ Status = gBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiPciIoProtocolGuid,
+ NULL,
+ &PciHandlesSize,
+ &PciHandles
+ );
+ if (EFI_ERROR (Status)) {
+ return NULL;
+ }
+
+ for (Index = 0; Index < PciHandlesSize; Index++) {
+ Status = gBS->HandleProtocol (
+ PciHandles[Index],
+ &gEfiDevicePathProtocolGuid,
+ (VOID **) &DevicePath
+ );
+ if (EFI_ERROR(Status)) {
+ continue;
+ }
+ if (!IsVgaHandle (PciHandles[Index])) {
+ continue;
+ }
+ if ((NeedTrustedConsole && IsTrustedConsole (ConOut, DevicePath)) ||
+ ((!NeedTrustedConsole) && (!IsTrustedConsole (ConOut, DevicePath)))) {
+ return PciHandles[Index];
+ }
+ }
+
+ return NULL;
+}
+
+VOID
+UpdateGraphicConOut (
+ IN BOOLEAN NeedTrustedConsole
+ )
+{
+ EFI_HANDLE GraphicsControllerHandle;
+ EFI_DEVICE_PATH_PROTOCOL *GopDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *ConOutDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *UpdatedConOutDevicePath;
+
+ //
+ // Update ConOut variable
+ //
+ GraphicsControllerHandle = GetGraphicsController (NeedTrustedConsole);
+ if (GraphicsControllerHandle != NULL) {
+ //
+ // Connect the GOP driver
+ //
+ gBS->ConnectController (GraphicsControllerHandle, NULL, NULL, TRUE);
+
+ //
+ // Get the GOP device path
+ // NOTE: We may get a device path that contains Controller node in it.
+ //
+ GopDevicePath = EfiBootManagerGetGopDevicePath (GraphicsControllerHandle);
+ if (GopDevicePath != NULL) {
+ GetEfiGlobalVariable2 (L"ConOut", (VOID **)&ConOutDevicePath, NULL);
+ UpdatedConOutDevicePath = UpdateGopDevicePath (ConOutDevicePath, GopDevicePath);
+ if (ConOutDevicePath != NULL) {
+ FreePool (ConOutDevicePath);
+ }
+ FreePool (GopDevicePath);
+ gRT->SetVariable (
+ L"ConOut",
+ &gEfiGlobalVariableGuid,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ GetDevicePathSize (UpdatedConOutDevicePath),
+ UpdatedConOutDevicePath
+ );
+ }
+ }
+}
+
+VOID
+AddConsoleVariable (
+ IN CONSOLE_TYPE ConsoleType,
+ IN EFI_DEVICE_PATH *ConsoleDevicePath
+ )
+{
+ EFI_DEVICE_PATH *TempDevicePath;
+ EFI_DEVICE_PATH *Instance;
+ UINTN Size;
+ EFI_HANDLE GraphicsControllerHandle;
+ EFI_DEVICE_PATH *GopDevicePath;
+
+ TempDevicePath = ConsoleDevicePath;
+ do {
+ Instance = GetNextDevicePathInstance (&TempDevicePath, &Size);
+ if (Instance == NULL) {
+ break;
+ }
+
+ switch (ConsoleType) {
+ case ConIn:
+ if (IsUsbShortForm (Instance)) {
+ //
+ // Append Usb Keyboard short form DevicePath into "ConInDev"
+ //
+ EfiBootManagerUpdateConsoleVariable (ConInDev, Instance, NULL);
+ }
+ EfiBootManagerUpdateConsoleVariable (ConsoleType, Instance, NULL);
+ break;
+ case ConOut:
+ GraphicsControllerHandle = IsVideoController (Instance);
+ if (GraphicsControllerHandle == NULL) {
+ EfiBootManagerUpdateConsoleVariable (ConsoleType, Instance, NULL);
+ } else {
+ //
+ // Connect the GOP driver
+ //
+ gBS->ConnectController (GraphicsControllerHandle, NULL, NULL, TRUE);
+ //
+ // Get the GOP device path
+ // NOTE: We may get a device path that contains Controller node in it.
+ //
+ GopDevicePath = EfiBootManagerGetGopDevicePath (GraphicsControllerHandle);
+ if (GopDevicePath != NULL) {
+ EfiBootManagerUpdateConsoleVariable (ConsoleType, GopDevicePath, NULL);
+ }
+ }
+ break;
+ default:
+ ASSERT(FALSE);
+ break;
+ }
+
+ FreePool (Instance);
+ } while (TempDevicePath != NULL);
+}
+
+/**
+ The function connects the trusted consoles.
+**/
+VOID
+ConnectTrustedConsole (
+ VOID
+ )
+{
+ EFI_DEVICE_PATH_PROTOCOL *Consoles;
+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *Instance;
+ EFI_DEVICE_PATH_PROTOCOL *Next;
+ UINTN Size;
+ UINTN Index;
+ EFI_HANDLE Handle;
+ EFI_STATUS Status;
+ CHAR16 *ConsoleVar[] = {L"ConIn", L"ConOut"};
+ VOID *TrustedConsoleDevicepath;
+
+ TrustedConsoleDevicepath = PcdGetPtr (PcdTrustedConsoleInputDevicePath);
+ DumpDevicePath (L"TrustedConsoleIn", TrustedConsoleDevicepath);
+ TrustedConsoleDevicepath = PcdGetPtr (PcdTrustedConsoleOutputDevicePath);
+ DumpDevicePath (L"TrustedConsoleOut", TrustedConsoleDevicepath);
+
+ for (Index = 0; Index < sizeof (ConsoleVar) / sizeof (ConsoleVar[0]); Index++) {
+
+ GetEfiGlobalVariable2 (ConsoleVar[Index], (VOID **)&Consoles, NULL);
+
+ TempDevicePath = Consoles;
+ do {
+ Instance = GetNextDevicePathInstance (&TempDevicePath, &Size);
+ if (Instance == NULL) {
+ break;
+ }
+ if (IsTrustedConsole (Index, Instance)) {
+ if (IsUsbShortForm (Instance)) {
+ ConnectUsbShortFormDevicePath (Instance);
+ } else {
+ for (Next = Instance; !IsDevicePathEnd (Next); Next = NextDevicePathNode (Next)) {
+ if (DevicePathType (Next) == ACPI_DEVICE_PATH && DevicePathSubType (Next) == ACPI_ADR_DP) {
+ break;
+ } else if (DevicePathType (Next) == HARDWARE_DEVICE_PATH &&
+ DevicePathSubType (Next) == HW_CONTROLLER_DP &&
+ DevicePathType (NextDevicePathNode (Next)) == ACPI_DEVICE_PATH &&
+ DevicePathSubType (NextDevicePathNode (Next)) == ACPI_ADR_DP
+ ) {
+ break;
+ }
+ }
+ if (!IsDevicePathEnd (Next)) {
+ SetDevicePathEndNode (Next);
+ Status = EfiBootManagerConnectDevicePath (Instance, &Handle);
+ if (!EFI_ERROR (Status)) {
+ gBS->ConnectController (Handle, NULL, NULL, TRUE);
+ }
+ } else {
+ EfiBootManagerConnectDevicePath (Instance, NULL);
+ }
+ }
+ }
+ FreePool (Instance);
+ } while (TempDevicePath != NULL);
+
+ if (Consoles != NULL) {
+ FreePool (Consoles);
+ }
+ }
+}
+
+/**
+ The function connects the trusted Storages.
+**/
+VOID
+ConnectTrustedStorage (
+ VOID
+ )
+{
+ VOID *TrustedStorageDevicepath;
+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *Instance;
+ UINTN Size;
+ EFI_DEVICE_PATH_PROTOCOL *TempStorageDevicePath;
+ EFI_STATUS Status;
+ EFI_HANDLE DeviceHandle;
+
+ TrustedStorageDevicepath = PcdGetPtr (PcdTrustedStorageDevicePath);
+ DumpDevicePath (L"TrustedStorage", TrustedStorageDevicepath);
+
+ TempDevicePath = TrustedStorageDevicepath;
+ do {
+ Instance = GetNextDevicePathInstance (&TempDevicePath, &Size);
+ if (Instance == NULL) {
+ break;
+ }
+
+ EfiBootManagerConnectDevicePath (Instance, NULL);
+
+ TempStorageDevicePath = Instance;
+
+ Status = gBS->LocateDevicePath (
+ &gEfiDevicePathProtocolGuid,
+ &TempStorageDevicePath,
+ &DeviceHandle
+ );
+ if (!EFI_ERROR (Status)) {
+ gBS->ConnectController (DeviceHandle, NULL, NULL, FALSE);
+ }
+
+ FreePool (Instance);
+ } while (TempDevicePath != NULL);
+}
+
+/**
+ The function connects the trusted consoles and then call the PP processing library interface.
+**/
+VOID
+ProcessTcgPp (
+ VOID
+ )
+{
+ gPPRequireUIConfirm |= Tcg2PhysicalPresenceLibNeedUserConfirm();
+
+ if (gPPRequireUIConfirm) {
+ ConnectTrustedConsole ();
+ }
+
+ Tcg2PhysicalPresenceLibProcessRequest (NULL);
+}
+
+/**
+ The function connects the trusted storage to perform TPerReset.
+**/
+VOID
+ProcessTcgMor (
+ VOID
+ )
+{
+ if (IsMorBitSet ()) {
+ ConnectTrustedConsole();
+ ConnectTrustedStorage();
+ }
+}
+
+/**
+ Check if current BootCurrent variable is internal shell boot option.
+
+ @retval TRUE BootCurrent is internal shell.
+ @retval FALSE BootCurrent is not internal shell.
+**/
+BOOLEAN
+BootCurrentIsInternalShell (
+ VOID
+ )
+{
+ UINTN VarSize;
+ UINT16 BootCurrent;
+ CHAR16 BootOptionName[16];
+ UINT8 *BootOption;
+ UINT8 *Ptr;
+ BOOLEAN Result;
+ EFI_STATUS Status;
+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *LastDeviceNode;
+ EFI_GUID *GuidPoint;
+
+ BootOption = NULL;
+ Result = FALSE;
+
+ //
+ // Get BootCurrent variable
+ //
+ VarSize = sizeof (UINT16);
+ Status = gRT->GetVariable (
+ L"BootCurrent",
+ &gEfiGlobalVariableGuid,
+ NULL,
+ &VarSize,
+ &BootCurrent
+ );
+ if (EFI_ERROR (Status)) {
+ return FALSE;
+ }
+
+ //
+ // Create boot option Bootxxxx from BootCurrent
+ //
+ UnicodeSPrint (BootOptionName, sizeof(BootOptionName), L"Boot%04X", BootCurrent);
+
+ GetEfiGlobalVariable2 (BootOptionName, (VOID **) &BootOption, &VarSize);
+ if (BootOption == NULL || VarSize == 0) {
+ return FALSE;
+ }
+
+ Ptr = BootOption;
+ Ptr += sizeof (UINT32);
+ Ptr += sizeof (UINT16);
+ Ptr += StrSize ((CHAR16 *) Ptr);
+ TempDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;
+ LastDeviceNode = TempDevicePath;
+ while (!IsDevicePathEnd (TempDevicePath)) {
+ LastDeviceNode = TempDevicePath;
+ TempDevicePath = NextDevicePathNode (TempDevicePath);
+ }
+ GuidPoint = EfiGetNameGuidFromFwVolDevicePathNode (
+ (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode
+ );
+ if ((GuidPoint != NULL) &&
+ ((CompareGuid (GuidPoint, &gUefiShellFileGuid)))
+ ) {
+ //
+ // if this option is internal shell, return TRUE
+ //
+ Result = TRUE;
+ }
+
+ if (BootOption != NULL) {
+ FreePool (BootOption);
+ BootOption = NULL;
+ }
+
+ return Result;
+}
+
+/**
+ This function will change video resolution and text mode
+ for internl shell when internal shell is launched.
+
+ @param None.
+
+ @retval EFI_SUCCESS Mode is changed successfully.
+ @retval Others Mode failed to changed.
+**/
+EFI_STATUS
+EFIAPI
+ChangeModeForInternalShell (
+ VOID
+ )
+{
+ EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut;
+ UINTN SizeOfInfo;
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
+ UINT32 MaxGopMode;
+ UINT32 MaxTextMode;
+ UINT32 ModeNumber;
+ UINTN HandleCount;
+ EFI_HANDLE *HandleBuffer;
+ EFI_STATUS Status;
+ UINTN Index;
+ UINTN CurrentColumn;
+ UINTN CurrentRow;
+
+ Status = gBS->HandleProtocol (
+ gST->ConsoleOutHandle,
+ &gEfiGraphicsOutputProtocolGuid,
+ (VOID**)&GraphicsOutput
+ );
+ if (EFI_ERROR (Status)) {
+ GraphicsOutput = NULL;
+ }
+
+ Status = gBS->HandleProtocol (
+ gST->ConsoleOutHandle,
+ &gEfiSimpleTextOutProtocolGuid,
+ (VOID**)&SimpleTextOut
+ );
+ if (EFI_ERROR (Status)) {
+ SimpleTextOut = NULL;
+ }
+
+ if ((GraphicsOutput == NULL) || (SimpleTextOut == NULL)) {
+ return EFI_UNSUPPORTED;
+ }
+
+ MaxGopMode = GraphicsOutput->Mode->MaxMode;
+ MaxTextMode = SimpleTextOut->Mode->MaxMode;
+
+ //
+ // 1. If current video resolution is same with new video resolution,
+ // video resolution need not be changed.
+ // 1.1. If current text mode is same with new text mode, text mode need not be change.
+ // 1.2. If current text mode is different with new text mode, text mode need be change to new text mode.
+ // 2. If current video resolution is different with new video resolution, we need restart whole console drivers.
+ //
+ for (ModeNumber = 0; ModeNumber < MaxGopMode; ModeNumber++) {
+ Status = GraphicsOutput->QueryMode (
+ GraphicsOutput,
+ ModeNumber,
+ &SizeOfInfo,
+ &Info
+ );
+ if (!EFI_ERROR (Status)) {
+ if ((Info->HorizontalResolution == mShellHorizontalResolution) &&
+ (Info->VerticalResolution == mShellVerticalResolution)) {
+ if ((GraphicsOutput->Mode->Info->HorizontalResolution == mShellHorizontalResolution) &&
+ (GraphicsOutput->Mode->Info->VerticalResolution == mShellVerticalResolution)) {
+ //
+ // If current video resolution is same with new resolution,
+ // then check if current text mode is same with new text mode.
+ //
+ Status = SimpleTextOut->QueryMode (SimpleTextOut, SimpleTextOut->Mode->Mode, &CurrentColumn, &CurrentRow);
+ ASSERT_EFI_ERROR (Status);
+ if (CurrentColumn == mShellModeColumn && CurrentRow == mShellModeRow) {
+ //
+ // Current text mode is same with new text mode, text mode need not be change.
+ //
+ FreePool (Info);
+ return EFI_SUCCESS;
+ } else {
+ //
+ // Current text mode is different with new text mode, text mode need be change to new text mode.
+ //
+ for (Index = 0; Index < MaxTextMode; Index++) {
+ Status = SimpleTextOut->QueryMode (SimpleTextOut, Index, &CurrentColumn, &CurrentRow);
+ if (!EFI_ERROR(Status)) {
+ if ((CurrentColumn == mShellModeColumn) && (CurrentRow == mShellModeRow)) {
+ //
+ // New text mode is supported, set it.
+ //
+ Status = SimpleTextOut->SetMode (SimpleTextOut, Index);
+ ASSERT_EFI_ERROR (Status);
+ //
+ // Update text mode PCD.
+ //
+ Status = PcdSet32S (PcdConOutColumn, mShellModeColumn);
+ ASSERT_EFI_ERROR (Status);
+
+ Status = PcdSet32S (PcdConOutRow, mShellModeRow);
+ ASSERT_EFI_ERROR (Status);
+
+ FreePool (Info);
+ return EFI_SUCCESS;
+ }
+ }
+ }
+ if (Index == MaxTextMode) {
+ //
+ // If new text mode is not supported, return error.
+ //
+ FreePool (Info);
+ return EFI_UNSUPPORTED;
+ }
+ }
+ } else {
+ FreePool (Info);
+ //
+ // If current video resolution is not same with the new one, set new video resolution.
+ // In this case, the driver which produces simple text out need be restarted.
+ //
+ Status = GraphicsOutput->SetMode (GraphicsOutput, ModeNumber);
+ if (!EFI_ERROR (Status)) {
+ //
+ // Set PCD to restart GraphicsConsole and Consplitter to change video resolution
+ // and produce new text mode based on new resolution.
+ //
+ Status = PcdSet32S (PcdVideoHorizontalResolution, mShellHorizontalResolution);
+ ASSERT_EFI_ERROR (Status);
+
+ Status = PcdSet32S (PcdVideoVerticalResolution, mShellVerticalResolution);
+ ASSERT_EFI_ERROR (Status);
+
+ Status = PcdSet32S (PcdConOutColumn, mShellModeColumn);
+ ASSERT_EFI_ERROR (Status);
+
+ Status = PcdSet32S (PcdConOutRow, mShellModeRow);
+ ASSERT_EFI_ERROR (Status);
+
+ Status = gBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiSimpleTextOutProtocolGuid,
+ NULL,
+ &HandleCount,
+ &HandleBuffer
+ );
+ if (!EFI_ERROR (Status)) {
+ for (Index = 0; Index < HandleCount; Index++) {
+ gBS->DisconnectController (HandleBuffer[Index], NULL, NULL);
+ }
+ for (Index = 0; Index < HandleCount; Index++) {
+ gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
+ }
+ if (HandleBuffer != NULL) {
+ FreePool (HandleBuffer);
+ }
+ break;
+ }
+ }
+ }
+ }
+ FreePool (Info);
+ }
+ }
+
+ if (ModeNumber == MaxGopMode) {
+ //
+ // If the new resolution is not supported, return error.
+ //
+ return EFI_UNSUPPORTED;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ ReadyToBoot callback to set video and text mode for internal shell boot.
+ That will not connect USB controller while CSM and FastBoot are disabled, we need to connect them
+ before booting to Shell for showing USB devices in Shell.
+
+ When FastBoot is enabled and Windows Console is the chosen Console behavior, input devices will not be connected
+ by default. Hence, when booting to EFI shell, connecting input consoles are required.
+
+ @param Event Pointer to this event
+ @param Context Event hanlder private data
+
+ @retval None.
+**/
+VOID
+EFIAPI
+OnReadyToBootCallBack (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ DEBUG ((DEBUG_INFO, "OnReadyToBootCallBack\n"));
+
+ if (BootCurrentIsInternalShell ()) {
+
+ ChangeModeForInternalShell ();
+ EfiBootManagerConnectAllDefaultConsoles();
+ gDS->Dispatch ();
+ }
+}
+
+/**
+ Platform Bds init. Incude the platform firmware vendor, revision
+ and so crc check.
+**/
+VOID
+EFIAPI
+PlatformBootManagerBeforeConsole (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_DEVICE_PATH_PROTOCOL *VarConOut;
+ EFI_DEVICE_PATH_PROTOCOL *VarConIn;
+ EFI_EVENT Event;
+
+ DEBUG ((DEBUG_INFO, "PlatformBootManagerBeforeConsole\n"));
+
+ Status = EFI_SUCCESS;
+
+ //
+ // Get user defined text mode for internal shell only once.
+ //
+ mShellHorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);
+ mShellVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);
+ mShellModeColumn = PcdGet32 (PcdSetupConOutColumn);
+ mShellModeRow = PcdGet32 (PcdSetupConOutRow);
+
+ //
+ // Create event to set proper video resolution and text mode for internal shell.
+ //
+ Status = EfiCreateEventReadyToBootEx (
+ TPL_CALLBACK,
+ OnReadyToBootCallBack,
+ NULL,
+ &Event
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Connect Root Bridge to make PCI BAR resource allocated and all PciIo created
+ //
+ ConnectRootBridge (FALSE);
+
+ //
+ // Fill ConIn/ConOut in Full Configuration boot mode
+ //
+ gBootMode = GetBootModeHob();
+ DEBUG ((DEBUG_INFO, "PlatformBootManagerInit - %x\n", gBootMode));
+
+ if (gBootMode == BOOT_WITH_FULL_CONFIGURATION ||
+ gBootMode == BOOT_WITH_DEFAULT_SETTINGS ||
+ gBootMode == BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS ||
+ gBootMode == BOOT_IN_RECOVERY_MODE) {
+
+ GetEfiGlobalVariable2 (L"ConOut", (VOID **)&VarConOut, NULL); if (VarConOut != NULL) { FreePool (VarConOut); }
+ GetEfiGlobalVariable2 (L"ConIn", (VOID **)&VarConIn, NULL); if (VarConIn != NULL) { FreePool (VarConIn); }
+
+ //
+ // Only fill ConIn/ConOut when ConIn/ConOut is empty because we may drop to Full Configuration boot mode in non-first boot
+ //
+ if (VarConOut == NULL || VarConIn == NULL) {
+ if (PcdGetSize (PcdTrustedConsoleOutputDevicePath) >= sizeof(EFI_DEVICE_PATH_PROTOCOL)) {
+ AddConsoleVariable (ConOut, PcdGetPtr (PcdTrustedConsoleOutputDevicePath));
+ }
+ if (PcdGetSize (PcdTrustedConsoleInputDevicePath) >= sizeof(EFI_DEVICE_PATH_PROTOCOL)) {
+ AddConsoleVariable (ConIn, PcdGetPtr (PcdTrustedConsoleInputDevicePath));
+ }
+ }
+ }
+
+ EnumIsaSerial ();
+
+ EnumUsbKeyboard ();
+ //
+ // For trusted console it must be handled here.
+ //
+ UpdateGraphicConOut (TRUE);
+
+ if (gBootMode == BOOT_ON_FLASH_UPDATE) {
+ //
+ // Logo show
+ //
+ BootLogoEnableLogo ();
+
+ DEBUG((DEBUG_INFO, "ProcessCapsules Before EndOfDxe......\n"));
+ ProcessCapsules ();
+ DEBUG((DEBUG_INFO, "ProcessCapsules Done\n"));
+ }
+
+ //
+ // Dynamically register hot key: F2/F7/Enter
+ //
+ RegisterDefaultBootOption ();
+ RegisterStaticHotkey ();
+
+ PERF_START_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7010);
+ if (PcdGetBool (PcdTpm2Enable)) {
+ ProcessTcgPp ();
+ ProcessTcgMor ();
+ }
+ PERF_END_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7011);
+
+ //
+ // We should make all UEFI memory and GCD information populated before ExitPmAuth.
+ // SMM may consume these information.
+ //
+ MemoryTest((EXTENDMEM_COVERAGE_LEVEL) PcdGet32 (PcdPlatformMemoryCheckLevel));
+
+ PERF_START_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7020);
+ ExitPmAuth ();
+ PERF_END_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7021);
+
+ //
+ // Dispatch the deferred 3rd party images.
+ //
+ EfiBootManagerDispatchDeferredImages ();
+
+ //
+ // For non-trusted console it must be handled here.
+ //
+ UpdateGraphicConOut (FALSE);
+
+ if (gBootMode == BOOT_ON_FLASH_UPDATE) {
+ //
+ // Logo show
+ //
+ BootLogoEnableLogo ();
+
+ DEBUG((DEBUG_INFO, "ProcessCapsules After ConnectAll......\n"));
+ ProcessCapsules();
+ DEBUG((DEBUG_INFO, "ProcessCapsules Done\n"));
+ }
+}
+
+
+/**
+ Connect with predeined platform connect sequence,
+ the OEM/IBV can customize with their own connect sequence.
+
+ @param[in] BootMode Boot mode of this boot.
+**/
+VOID
+ConnectSequence (
+ IN EFI_BOOT_MODE BootMode
+ )
+{
+ EfiBootManagerConnectAll ();
+}
+
+/**
+ The function is to consider the boot order which is not in our expectation.
+ In the case that we need to re-sort the boot option.
+
+ @retval TRUE Need to sort Boot Option.
+ @retval FALSE Don't need to sort Boot Option.
+**/
+BOOLEAN
+IsNeedSortBootOption (
+ VOID
+ )
+{
+ EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
+ UINTN BootOptionCount;
+
+ BootOptions = EfiBootManagerGetLoadOptions (&BootOptionCount, LoadOptionTypeBoot);
+
+ //
+ // If setup is the first priority in boot option, we need to sort boot option.
+ //
+ if ((BootOptionCount > 1) &&
+ (((StrnCmp (BootOptions->Description, L"Enter Setup", StrLen (L"Enter Setup"))) == 0) ||
+ ((StrnCmp (BootOptions->Description, L"BootManagerMenuApp", StrLen (L"BootManagerMenuApp"))) == 0))) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ The function will excute with as the platform policy, current policy
+ is driven by boot mode. IBV/OEM can customize this code for their specific
+ policy action.
+
+ @param DriverOptionList - The header of the driver option link list
+ @param BootOptionList - The header of the boot option link list
+ @param ProcessCapsules - A pointer to ProcessCapsules()
+ @param BaseMemoryTest - A pointer to BaseMemoryTest()
+**/
+VOID
+EFIAPI
+PlatformBootManagerAfterConsole (
+ VOID
+ )
+{
+ EFI_BOOT_MODE LocalBootMode;
+
+ DEBUG ((DEBUG_INFO, "PlatformBootManagerAfterConsole\n"));
+
+ //
+ // Get current Boot Mode
+ //
+ LocalBootMode = gBootMode;
+ DEBUG ((DEBUG_INFO, "Current local bootmode - %x\n", LocalBootMode));
+
+ //
+ // Logo show
+ //
+ BootLogoEnableLogo ();
+
+ //
+ // Go the different platform policy with different boot mode
+ // Notes: this part code can be change with the table policy
+ //
+ switch (LocalBootMode) {
+
+
+ case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES:
+ case BOOT_WITH_MINIMAL_CONFIGURATION:
+ case BOOT_ON_S4_RESUME:
+ //
+ // Perform some platform specific connect sequence
+ //
+ PERF_START_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7050);
+ ConnectSequence (LocalBootMode);
+ PERF_END_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7051);
+
+ break;
+
+ case BOOT_WITH_FULL_CONFIGURATION:
+ case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS:
+ case BOOT_WITH_DEFAULT_SETTINGS:
+ default:
+ //
+ // Perform some platform specific connect sequence
+ //
+ ConnectSequence (LocalBootMode);
+
+ //
+ // Only in Full Configuration boot mode we do the enumeration of boot device
+ //
+ //
+ // Dispatch all but Storage Oprom explicitly, because we assume Int13Thunk driver is there.
+ //
+ EfiBootManagerRefreshAllBootOption ();
+
+ if (IsNeedSortBootOption()) {
+ EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, CompareBootOption);
+ }
+ //
+ // PXE boot option may appear after boot option enumeration
+ //
+
+ break;
+ }
+
+ Print (L"Press F7 for BootMenu!\n");
+
+ EfiBootManagerRefreshAllBootOption ();
+ EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, CompareBootOption);
+}
+
+/**
+ The function is called when no boot option could be launched,
+ including platform recovery options and options pointing to applications
+ built into firmware volumes.
+
+ If this function returns, BDS attempts to enter an infinite loop.
+**/
+VOID
+EFIAPI
+PlatformBootManagerUnableToBoot (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_BOOT_MANAGER_LOAD_OPTION BootDeviceList;
+ CHAR16 OptionName[sizeof ("Boot####")];
+
+ if (mBootMenuOptionNumber == LoadOptionNumberUnassigned) {
+ return;
+ }
+ UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", mBootMenuOptionNumber);
+ Status = EfiBootManagerVariableToLoadOption (OptionName, &BootDeviceList);
+ if (EFI_ERROR (Status)) {
+ return;
+ }
+ for (;;) {
+ EfiBootManagerBoot (&BootDeviceList);
+ }
+}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.h
new file mode 100644
index 0000000000..0bdc11bdd8
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.h
@@ -0,0 +1,253 @@
+/** @file
+ Header file for BDS Platform specific code
+
+Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef _BDS_PLATFORM_H
+#define _BDS_PLATFORM_H
+
+#include <PiDxe.h>
+#include <Protocol/DevicePath.h>
+#include <Protocol/SimpleNetwork.h>
+#include <Protocol/PciRootBridgeIo.h>
+#include <Protocol/LoadFile.h>
+#include <Protocol/PciIo.h>
+#include <Protocol/CpuIo2.h>
+#include <Protocol/LoadedImage.h>
+#include <Protocol/DiskInfo.h>
+#include <Protocol/GraphicsOutput.h>
+#include <Protocol/UgaDraw.h>
+#include <Protocol/GenericMemoryTest.h>
+#include <Protocol/DevicePathToText.h>
+#include <Protocol/FirmwareVolume2.h>
+#include <Protocol/SimpleFileSystem.h>
+
+#include <Guid/CapsuleVendor.h>
+#include <Guid/MemoryTypeInformation.h>
+#include <Guid/GlobalVariable.h>
+#include <Guid/MemoryOverwriteControl.h>
+#include <Guid/FileInfo.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/BaseLib.h>
+#include <Library/PcdLib.h>
+#include <Library/PlatformBootManagerLib.h>
+#include <Library/DevicePathLib.h>
+#include <Library/UefiLib.h>
+#include <Library/HobLib.h>
+#include <Library/DxeServicesLib.h>
+#include <Library/DxeServicesTableLib.h>
+#include <Library/PrintLib.h>
+#include <Library/HiiLib.h>
+#include <Library/CapsuleLib.h>
+#include <Library/PerformanceLib.h>
+
+#include <IndustryStandard/Pci30.h>
+#include <IndustryStandard/PciCodeId.h>
+
+///
+/// ConnectType
+///
+#define CONSOLE_OUT 0x00000001
+#define STD_ERROR 0x00000002
+#define CONSOLE_IN 0x00000004
+#define CONSOLE_ALL (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)
+
+extern EFI_GUID gUefiShellFileGuid;
+extern EFI_BOOT_MODE gBootMode;
+
+#define PCI_DEVICE_PATH_NODE(Func, Dev) \
+ { \
+ HARDWARE_DEVICE_PATH, \
+ HW_PCI_DP, \
+ { \
+ (UINT8) (sizeof (PCI_DEVICE_PATH)), \
+ (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \
+ }, \
+ (Func), \
+ (Dev) \
+ }
+
+#define PNPID_DEVICE_PATH_NODE(PnpId) \
+ { \
+ { \
+ ACPI_DEVICE_PATH, \
+ ACPI_DP, \
+ { \
+ (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
+ (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
+ } \
+ }, \
+ EISA_PNP_ID((PnpId)), \
+ 0 \
+ }
+
+#define gPciRootBridge \
+ { \
+ { \
+ ACPI_DEVICE_PATH, \
+ ACPI_DP, \
+ { \
+ (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
+ (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
+ }, \
+ }, \
+ EISA_PNP_ID (0x0A03), \
+ 0 \
+ }
+
+#define gPciIsaBridge \
+ PCI_DEVICE_PATH_NODE(0, 0x1f)
+
+#define gPnp16550ComPort \
+ PNPID_DEVICE_PATH_NODE(0x0501)
+
+#define gUart(BaudRate, DataBits, Parity, StopBits) \
+ { \
+ { \
+ MESSAGING_DEVICE_PATH, \
+ MSG_UART_DP, \
+ { \
+ (UINT8) (sizeof (UART_DEVICE_PATH)), \
+ (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \
+ } \
+ }, \
+ 0, \
+ (BaudRate), \
+ (DataBits), \
+ (Parity), \
+ (StopBits) \
+ }
+
+#define gPcAnsiTerminal \
+ { \
+ { \
+ MESSAGING_DEVICE_PATH, \
+ MSG_VENDOR_DP, \
+ { \
+ (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \
+ (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \
+ } \
+ }, \
+ DEVICE_PATH_MESSAGING_PC_ANSI \
+ }
+
+#define gEndEntire \
+ { \
+ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { END_DEVICE_PATH_LENGTH, 0 } \
+ }
+
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ UINTN ConnectType;
+} BDS_CONSOLE_CONNECT_ENTRY;
+
+//
+// Platform Root Bridge
+//
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_ROOT_BRIDGE_DEVICE_PATH;
+
+//
+// Below is the platform console device path
+//
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ PCI_DEVICE_PATH IsaBridge;
+ ACPI_HID_DEVICE_PATH Keyboard;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_KEYBOARD_DEVICE_PATH;
+
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ PCI_DEVICE_PATH PciDevice;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_ONBOARD_CONTROLLER_DEVICE_PATH;
+
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ PCI_DEVICE_PATH Pci0Device;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_PEG_ROOT_CONTROLLER_DEVICE_PATH;
+
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ PCI_DEVICE_PATH PciBridge;
+ PCI_DEVICE_PATH PciDevice;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_PCI_CONTROLLER_DEVICE_PATH;
+
+//
+// Below is the boot option device path
+//
+
+#define CLASS_HID 3
+#define SUBCLASS_BOOT 1
+#define PROTOCOL_KEYBOARD 1
+
+typedef struct {
+ USB_CLASS_DEVICE_PATH UsbClass;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} USB_CLASS_FORMAT_DEVICE_PATH;
+
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ PCI_DEVICE_PATH IsaBridge;
+ ACPI_HID_DEVICE_PATH IsaSerial;
+ UART_DEVICE_PATH Uart;
+ VENDOR_DEVICE_PATH TerminalType;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_ISA_SERIAL_DEVICE_PATH;
+
+//
+// Platform BDS Functions
+//
+
+
+/**
+ Perform the memory test base on the memory test intensive level,
+ and update the memory resource.
+
+ @param Level The memory test intensive level.
+
+ @retval EFI_STATUS Success test all the system memory and update
+ the memory resource
+
+**/
+EFI_STATUS
+MemoryTest (
+ IN EXTENDMEM_COVERAGE_LEVEL Level
+ );
+
+VOID
+ConnectSequence (
+ IN EFI_BOOT_MODE BootMode
+ );
+
+
+INTN
+EFIAPI
+CompareBootOption (
+ CONST VOID *Left,
+ CONST VOID *Right
+ );
+
+
+VOID
+RegisterStaticHotkey (
+ VOID
+ );
+VOID
+RegisterDefaultBootOption (
+ VOID
+ );
+
+#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
new file mode 100644
index 0000000000..b04169ad33
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
@@ -0,0 +1,95 @@
+### @file
+# Component name for module DxePlatformBootManagerLib
+#
+# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+###
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = DxePlatformBootManagerLib
+ FILE_GUID = A6BC385D-59E5-4B77-87D7-200ABAA83C15
+ VERSION_STRING = 1.0
+ MODULE_TYPE = DXE_DRIVER
+ UEFI_SPECIFICATION_VERSION = 2.10
+ LIBRARY_CLASS = PlatformBootManagerLib|DXE_DRIVER
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 EBC
+#
+
+[LibraryClasses]
+ BaseLib
+ MemoryAllocationLib
+ UefiBootServicesTableLib
+ UefiRuntimeServicesTableLib
+ BaseMemoryLib
+ DebugLib
+ PcdLib
+ PrintLib
+ DevicePathLib
+ UefiLib
+ HobLib
+ DxeServicesLib
+ DxeServicesTableLib
+ HiiLib
+ UefiBootManagerLib
+ PerformanceLib
+ TimerLib
+ Tcg2PhysicalPresenceLib
+ CapsuleLib
+ BootLogoLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ SecurityPkg/SecurityPkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+
+[Pcd]
+ gMinPlatformPkgTokenSpaceGuid.PcdTpm2Enable ## CONSUMES
+ gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut ## PRODUCES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution ## PRODUCES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution ## PRODUCES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow ## PRODUCES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn ## PRODUCES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutColumn ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutRow ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdConInConnectOnDemand ## PRODUCES
+ gMinPlatformPkgTokenSpaceGuid.PcdPlatformMemoryCheckLevel ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdTrustedConsoleInputDevicePath ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdTrustedConsoleOutputDevicePath ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdTrustedStorageDevicePath ## CONSUMES
+
+[Sources]
+ BdsPlatform.c
+ BdsPlatform.h
+ PlatformBootOption.c
+ MemoryTest.c
+
+[Protocols]
+ gEfiPciRootBridgeIoProtocolGuid ## CONSUMES
+ gEfiPciIoProtocolGuid ## CONSUMES
+ gEfiCpuIo2ProtocolGuid ## CONSUMES
+ gEfiDxeSmmReadyToLockProtocolGuid ## PRODUCES
+ gEfiGenericMemTestProtocolGuid ## CONSUMES
+ gEfiDiskInfoProtocolGuid ## CONSUMES
+ gEfiDevicePathToTextProtocolGuid ## CONSUMES
+ gEfiSimpleTextInputExProtocolGuid ## CONSUMES
+ gEfiFirmwareVolume2ProtocolGuid ## CONSUMES
+ gEfiFormBrowser2ProtocolGuid ## CONSUMES
+ gEfiGenericMemTestProtocolGuid ## CONSUMES
+
+[Guids]
+ gEfiGlobalVariableGuid ## PRODUCES
+ gEfiMemoryOverwriteControlDataGuid ## PRODUCES
+ gEfiEndOfDxeEventGroupGuid ## CONSUMES
+
+[Depex.common.DXE_DRIVER]
+ gEfiVariableArchProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/MemoryTest.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/MemoryTest.c
new file mode 100644
index 0000000000..654845349a
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/MemoryTest.c
@@ -0,0 +1,83 @@
+/** @file
+ Perform the platform memory test
+
+Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "BdsPlatform.h"
+#include <Protocol/GenericMemoryTest.h>
+
+/**
+ Perform the memory test base on the memory test intensive level,
+ and update the memory resource.
+
+ @param Level The memory test intensive level.
+
+ @retval EFI_STATUS Success test all the system memory and update
+ the memory resource
+
+**/
+EFI_STATUS
+MemoryTest (
+ IN EXTENDMEM_COVERAGE_LEVEL Level
+ )
+{
+ EFI_STATUS Status;
+ BOOLEAN RequireSoftECCInit;
+ EFI_GENERIC_MEMORY_TEST_PROTOCOL *GenMemoryTest;
+ UINT64 TestedMemorySize;
+ UINT64 TotalMemorySize;
+ BOOLEAN ErrorOut;
+ BOOLEAN TestAbort;
+
+ TestedMemorySize = 0;
+ TotalMemorySize = 0;
+ ErrorOut = FALSE;
+ TestAbort = FALSE;
+
+ RequireSoftECCInit = FALSE;
+
+ Status = gBS->LocateProtocol (
+ &gEfiGenericMemTestProtocolGuid,
+ NULL,
+ (VOID **) &GenMemoryTest
+ );
+ if (EFI_ERROR (Status)) {
+ return EFI_SUCCESS;
+ }
+
+ Status = GenMemoryTest->MemoryTestInit (
+ GenMemoryTest,
+ Level,
+ &RequireSoftECCInit
+ );
+ if (Status == EFI_NO_MEDIA) {
+ //
+ // The PEI codes also have the relevant memory test code to check the memory,
+ // it can select to test some range of the memory or all of them. If PEI code
+ // checks all the memory, this BDS memory test will has no not-test memory to
+ // do the test, and then the status of EFI_NO_MEDIA will be returned by
+ // "MemoryTestInit". So it does not need to test memory again, just return.
+ //
+ return EFI_SUCCESS;
+ }
+
+ do {
+ Status = GenMemoryTest->PerformMemoryTest (
+ GenMemoryTest,
+ &TestedMemorySize,
+ &TotalMemorySize,
+ &ErrorOut,
+ TestAbort
+ );
+ if (ErrorOut && (Status == EFI_DEVICE_ERROR)) {
+ ASSERT (0);
+ }
+ } while (Status != EFI_NOT_FOUND);
+
+ Status = GenMemoryTest->Finished (GenMemoryTest);
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/PlatformBootOption.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/PlatformBootOption.c
new file mode 100644
index 0000000000..84aa097d58
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/PlatformBootOption.c
@@ -0,0 +1,559 @@
+/** @file
+ Driver for Platform Boot Options support.
+
+Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "BdsPlatform.h"
+
+#include <Library/PcdLib.h>
+
+BOOLEAN mContinueBoot = FALSE;
+BOOLEAN mBootMenuBoot = FALSE;
+BOOLEAN mPxeBoot = FALSE;
+BOOLEAN mHotKeypressed = FALSE;
+EFI_EVENT HotKeyEvent = NULL;
+
+UINTN mBootMenuOptionNumber;
+
+EFI_DEVICE_PATH_PROTOCOL *
+BdsCreateShellDevicePath (
+ VOID
+ )
+/*++
+
+Routine Description:
+
+ This function will create a SHELL BootOption to boot.
+
+Arguments:
+
+ None.
+
+Returns:
+
+ Shell Device path for booting.
+
+--*/
+{
+ UINTN FvHandleCount;
+ EFI_HANDLE *FvHandleBuffer;
+ UINTN Index;
+ EFI_STATUS Status;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
+ UINTN Size;
+ UINT32 AuthenticationStatus;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ VOID *Buffer;
+
+ DevicePath = NULL;
+ Status = EFI_SUCCESS;
+
+ DEBUG ((DEBUG_INFO, "BdsCreateShellDevicePath\n"));
+ gBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiFirmwareVolume2ProtocolGuid,
+ NULL,
+ &FvHandleCount,
+ &FvHandleBuffer
+ );
+
+ for (Index = 0; Index < FvHandleCount; Index++) {
+ gBS->HandleProtocol (
+ FvHandleBuffer[Index],
+ &gEfiFirmwareVolume2ProtocolGuid,
+ (VOID **) &Fv
+ );
+
+ Buffer = NULL;
+ Size = 0;
+ Status = Fv->ReadSection (
+ Fv,
+ &gUefiShellFileGuid,
+ EFI_SECTION_PE32,
+ 0,
+ &Buffer,
+ &Size,
+ &AuthenticationStatus
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // Skip if no shell file in the FV
+ //
+ continue;
+ } else {
+ //
+ // Found the shell
+ //
+ break;
+ }
+ }
+
+ if (EFI_ERROR (Status)) {
+ //
+ // No shell present
+ //
+ if (FvHandleCount) {
+ FreePool (FvHandleBuffer);
+ }
+ return NULL;
+ }
+ //
+ // Build the shell boot option
+ //
+ DevicePath = DevicePathFromHandle (FvHandleBuffer[Index]);
+
+ if (FvHandleCount) {
+ FreePool (FvHandleBuffer);
+ }
+
+ return DevicePath;
+}
+
+
+EFI_STATUS
+CreateFvBootOption (
+ EFI_GUID *FileGuid,
+ CHAR16 *Description,
+ EFI_BOOT_MANAGER_LOAD_OPTION *BootOption,
+ UINT32 Attributes,
+ UINT8 *OptionalData, OPTIONAL
+ UINT32 OptionalDataSize
+ )
+{
+ EFI_STATUS Status;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
+ MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
+ UINT32 AuthenticationStatus;
+ VOID *Buffer;
+ UINTN Size;
+
+ if ((BootOption == NULL) || (FileGuid == NULL) || (Description == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ EfiInitializeFwVolDevicepathNode (&FileNode, FileGuid);
+
+ if (!CompareGuid (&gUefiShellFileGuid, FileGuid)) {
+ Status = gBS->HandleProtocol (
+ gImageHandle,
+ &gEfiLoadedImageProtocolGuid,
+ (VOID **) &LoadedImage
+ );
+ if (!EFI_ERROR (Status)) {
+ Status = gBS->HandleProtocol (
+ LoadedImage->DeviceHandle,
+ &gEfiFirmwareVolume2ProtocolGuid,
+ (VOID **) &Fv
+ );
+ if (!EFI_ERROR (Status)) {
+ Buffer = NULL;
+ Size = 0;
+ Status = Fv->ReadSection (
+ Fv,
+ FileGuid,
+ EFI_SECTION_PE32,
+ 0,
+ &Buffer,
+ &Size,
+ &AuthenticationStatus
+ );
+ if (Buffer != NULL) {
+ FreePool (Buffer);
+ }
+ }
+ }
+ if (EFI_ERROR (Status)) {
+ return EFI_NOT_FOUND;
+ }
+
+ DevicePath = AppendDevicePathNode (
+ DevicePathFromHandle (LoadedImage->DeviceHandle),
+ (EFI_DEVICE_PATH_PROTOCOL *) &FileNode
+ );
+ } else {
+ DevicePath = AppendDevicePathNode (
+ BdsCreateShellDevicePath (),
+ (EFI_DEVICE_PATH_PROTOCOL *) &FileNode
+ );
+ }
+
+ Status = EfiBootManagerInitializeLoadOption (
+ BootOption,
+ LoadOptionNumberUnassigned,
+ LoadOptionTypeBoot,
+ Attributes,
+ Description,
+ DevicePath,
+ OptionalData,
+ OptionalDataSize
+ );
+ FreePool (DevicePath);
+ return Status;
+}
+
+EFI_GUID mUiFile = {
+ 0x462CAA21, 0x7614, 0x4503, { 0x83, 0x6E, 0x8A, 0xB6, 0xF4, 0x66, 0x23, 0x31 }
+};
+EFI_GUID mBootMenuFile = {
+ 0xEEC25BDC, 0x67F2, 0x4D95, { 0xB1, 0xD5, 0xF8, 0x1B, 0x20, 0x39, 0xD1, 0x1D }
+};
+
+
+/**
+ Return the index of the load option in the load option array.
+
+ The function consider two load options are equal when the
+ OptionType, Attributes, Description, FilePath and OptionalData are equal.
+
+ @param Key Pointer to the load option to be found.
+ @param Array Pointer to the array of load options to be found.
+ @param Count Number of entries in the Array.
+
+ @retval -1 Key wasn't found in the Array.
+ @retval 0 ~ Count-1 The index of the Key in the Array.
+**/
+INTN
+PlatformFindLoadOption (
+ IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Key,
+ IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Array,
+ IN UINTN Count
+ )
+{
+ UINTN Index;
+
+ for (Index = 0; Index < Count; Index++) {
+ if ((Key->OptionType == Array[Index].OptionType) &&
+ (Key->Attributes == Array[Index].Attributes) &&
+ (StrCmp (Key->Description, Array[Index].Description) == 0) &&
+ (CompareMem (Key->FilePath, Array[Index].FilePath, GetDevicePathSize (Key->FilePath)) == 0) &&
+ (Key->OptionalDataSize == Array[Index].OptionalDataSize) &&
+ (CompareMem (Key->OptionalData, Array[Index].OptionalData, Key->OptionalDataSize) == 0)) {
+ return (INTN) Index;
+ }
+ }
+
+ return -1;
+}
+
+UINTN
+RegisterFvBootOption (
+ EFI_GUID *FileGuid,
+ CHAR16 *Description,
+ UINTN Position,
+ UINT32 Attributes,
+ UINT8 *OptionalData, OPTIONAL
+ UINT32 OptionalDataSize
+ )
+{
+ EFI_STATUS Status;
+ UINTN OptionIndex;
+ EFI_BOOT_MANAGER_LOAD_OPTION NewOption;
+ EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
+ UINTN BootOptionCount;
+
+ NewOption.OptionNumber = LoadOptionNumberUnassigned;
+ Status = CreateFvBootOption (FileGuid, Description, &NewOption, Attributes, OptionalData, OptionalDataSize);
+ if (!EFI_ERROR (Status)) {
+ BootOptions = EfiBootManagerGetLoadOptions (&BootOptionCount, LoadOptionTypeBoot);
+
+ OptionIndex = PlatformFindLoadOption (&NewOption, BootOptions, BootOptionCount);
+
+ if (OptionIndex == -1) {
+ Status = EfiBootManagerAddLoadOptionVariable (&NewOption, Position);
+ ASSERT_EFI_ERROR (Status);
+ } else {
+ NewOption.OptionNumber = BootOptions[OptionIndex].OptionNumber;
+ }
+ EfiBootManagerFreeLoadOption (&NewOption);
+ EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
+ }
+
+ return NewOption.OptionNumber;
+}
+
+
+
+VOID
+EFIAPI
+PlatformBootManagerWaitCallback (
+ UINT16 TimeoutRemain
+ )
+{
+ EFI_STATUS Status;
+ EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TxtInEx;
+ EFI_KEY_DATA KeyData;
+ BOOLEAN PausePressed;
+
+ //
+ // Pause on PAUSE key
+ //
+ Status = gBS->HandleProtocol (gST->ConsoleInHandle, &gEfiSimpleTextInputExProtocolGuid, (VOID **) &TxtInEx);
+ ASSERT_EFI_ERROR (Status);
+
+ PausePressed = FALSE;
+
+ while (TRUE) {
+ Status = TxtInEx->ReadKeyStrokeEx (TxtInEx, &KeyData);
+ if (EFI_ERROR (Status)) {
+ break;
+ }
+
+ if (KeyData.Key.ScanCode == SCAN_PAUSE) {
+ PausePressed = TRUE;
+ break;
+ }
+ }
+
+ //
+ // Loop until non-PAUSE key pressed
+ //
+ while (PausePressed) {
+ Status = TxtInEx->ReadKeyStrokeEx (TxtInEx, &KeyData);
+ if (!EFI_ERROR (Status)) {
+ DEBUG ((
+ DEBUG_INFO, "[PauseCallback] %x/%x %x/%x\n",
+ KeyData.Key.ScanCode, KeyData.Key.UnicodeChar,
+ KeyData.KeyState.KeyShiftState, KeyData.KeyState.KeyToggleState
+ ));
+ PausePressed = (BOOLEAN) (KeyData.Key.ScanCode == SCAN_PAUSE);
+ }
+ }
+}
+
+
+EFI_GUID gUefiShellFileGuid = { 0x7C04A583, 0x9E3E, 0x4f1c, { 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 0xB4, 0xD1 } };
+
+#define INTERNAL_UEFI_SHELL_NAME L"Internal UEFI Shell 2.0"
+#define UEFI_HARD_DRIVE_NAME L"UEFI Hard Drive"
+
+VOID
+RegisterDefaultBootOption (
+ VOID
+ )
+{
+#if 0
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
+ MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode;
+#endif
+ UINT16 *ShellData;
+ UINT32 ShellDataSize;
+
+ ShellData = NULL;
+ ShellDataSize = 0;
+ RegisterFvBootOption (&gUefiShellFileGuid, INTERNAL_UEFI_SHELL_NAME, (UINTN) -1, LOAD_OPTION_ACTIVE, (UINT8 *)ShellData, ShellDataSize);
+
+ //
+ // Boot Menu
+ //
+ mBootMenuOptionNumber = RegisterFvBootOption (&mBootMenuFile, L"Boot Device List", (UINTN) -1, LOAD_OPTION_CATEGORY_APP | LOAD_OPTION_ACTIVE | LOAD_OPTION_HIDDEN, NULL, 0);
+
+ if (mBootMenuOptionNumber == LoadOptionNumberUnassigned) {
+ DEBUG ((DEBUG_INFO, "BootMenuOptionNumber (%d) should not be same to LoadOptionNumberUnassigned(%d).\n", mBootMenuOptionNumber, LoadOptionNumberUnassigned));
+ }
+#if 0
+ //
+ // Boot Manager Menu
+ //
+ EfiInitializeFwVolDevicepathNode (&FileNode, &mUiFile);
+
+ gBS->HandleProtocol (
+ gImageHandle,
+ &gEfiLoadedImageProtocolGuid,
+ (VOID **) &LoadedImage
+ );
+ DevicePath = AppendDevicePathNode (DevicePathFromHandle (LoadedImage->DeviceHandle), (EFI_DEVICE_PATH_PROTOCOL *) &FileNode);
+#endif
+
+}
+
+VOID
+RegisterBootOptionHotkey (
+ UINT16 OptionNumber,
+ EFI_INPUT_KEY *Key,
+ BOOLEAN Add
+ )
+{
+ EFI_STATUS Status;
+
+ if (!Add) {
+ //
+ // No enter hotkey when force to setup or there is no boot option
+ //
+ Status = EfiBootManagerDeleteKeyOptionVariable (NULL, 0, Key, NULL);
+ ASSERT (Status == EFI_SUCCESS || Status == EFI_NOT_FOUND);
+ } else {
+ //
+ // Register enter hotkey for the first boot option
+ //
+ Status = EfiBootManagerAddKeyOptionVariable (NULL, OptionNumber, 0, Key,NULL);
+ ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);
+ }
+}
+
+EFI_STATUS
+EFIAPI
+DetectKeypressCallback (
+ IN EFI_KEY_DATA *KeyData
+)
+{
+ mHotKeypressed = TRUE;
+
+ if (HotKeyEvent != NULL) {
+ gBS->SignalEvent(HotKeyEvent);
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This function is called after all the boot options are enumerated and ordered properly.
+**/
+VOID
+RegisterStaticHotkey (
+ VOID
+ )
+{
+
+ EFI_INPUT_KEY Enter;
+ EFI_KEY_DATA F2;
+ EFI_KEY_DATA F7;
+ BOOLEAN EnterSetup;
+ EFI_STATUS Status;
+ EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
+
+ EnterSetup = FALSE;
+
+ //
+ // [Enter]
+ //
+ mContinueBoot = !EnterSetup;
+ if (mContinueBoot) {
+ Enter.ScanCode = SCAN_NULL;
+ Enter.UnicodeChar = CHAR_CARRIAGE_RETURN;
+ EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL);
+ }
+
+
+ //
+ // [F2]/[F7]
+ //
+ F2.Key.ScanCode = SCAN_F2;
+ F2.Key.UnicodeChar = CHAR_NULL;
+ F2.KeyState.KeyShiftState = EFI_SHIFT_STATE_VALID;
+ F2.KeyState.KeyToggleState = 0;
+ Status = EfiBootManagerGetBootManagerMenu (&BootOption);
+ ASSERT_EFI_ERROR (Status);
+ RegisterBootOptionHotkey ((UINT16) BootOption.OptionNumber, &F2.Key, TRUE);
+ EfiBootManagerFreeLoadOption (&BootOption);
+
+ F7.Key.ScanCode = SCAN_F7;
+ F7.Key.UnicodeChar = CHAR_NULL;
+ F7.KeyState.KeyShiftState = EFI_SHIFT_STATE_VALID;
+ F7.KeyState.KeyToggleState = 0;
+ mBootMenuBoot = !EnterSetup;
+ RegisterBootOptionHotkey ((UINT16) mBootMenuOptionNumber, &F7.Key, mBootMenuBoot);
+
+}
+
+UINT8
+BootOptionType (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+ )
+{
+ EFI_DEVICE_PATH_PROTOCOL *Node;
+ EFI_DEVICE_PATH_PROTOCOL *NextNode;
+
+ for (Node = DevicePath; !IsDevicePathEndType (Node); Node = NextDevicePathNode (Node)) {
+ if (DevicePathType (Node) == MESSAGING_DEVICE_PATH) {
+ //
+ // Make sure the device path points to the driver device.
+ //
+ NextNode = NextDevicePathNode (Node);
+ if (DevicePathSubType(NextNode) == MSG_DEVICE_LOGICAL_UNIT_DP) {
+ //
+ // if the next node type is Device Logical Unit, which specify the Logical Unit Number (LUN),
+ // skip it
+ //
+ NextNode = NextDevicePathNode (NextNode);
+ }
+ if (IsDevicePathEndType (NextNode)) {
+ if ((DevicePathType (Node) == MESSAGING_DEVICE_PATH)) {
+ return DevicePathSubType (Node);
+ } else {
+ return MSG_SATA_DP;
+ }
+ }
+ }
+ }
+
+ return (UINT8) -1;
+}
+
+/**
+ Returns the priority number.
+ OptionType EFI
+ ------------------------------------
+ PXE 2
+ DVD 4
+ USB 6
+ NVME 7
+ HDD 8
+ EFI Shell 9
+ Others 100
+
+ @param BootOption
+**/
+UINTN
+BootOptionPriority (
+ CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOption
+ )
+{
+ //
+ // EFI boot options
+ //
+ switch (BootOptionType (BootOption->FilePath)) {
+ case MSG_MAC_ADDR_DP:
+ case MSG_VLAN_DP:
+ case MSG_IPv4_DP:
+ case MSG_IPv6_DP:
+ return 2;
+
+ case MSG_SATA_DP:
+ case MSG_ATAPI_DP:
+ case MSG_UFS_DP:
+ case MSG_NVME_NAMESPACE_DP:
+ return 4;
+
+ case MSG_USB_DP:
+ return 6;
+
+ }
+ if (StrCmp (BootOption->Description, INTERNAL_UEFI_SHELL_NAME) == 0) {
+ if (PcdGetBool (PcdBootToShellOnly)) {
+ return 0;
+ }
+ return 9;
+ }
+ if (StrCmp (BootOption->Description, UEFI_HARD_DRIVE_NAME) == 0) {
+ return 8;
+ }
+ return 100;
+}
+
+INTN
+EFIAPI
+CompareBootOption (
+ CONST VOID *Left,
+ CONST VOID *Right
+ )
+{
+ return BootOptionPriority ((EFI_BOOT_MANAGER_LOAD_OPTION *) Left) -
+ BootOptionPriority ((EFI_BOOT_MANAGER_LOAD_OPTION *) Right);
+}
+
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
deleted file mode 100644
index 4adca1b465..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
+++ /dev/null
@@ -1,3092 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- BdsPlatform.c
-
-Abstract:
-
- This file include all platform action which can be customized
- by IBV/OEM.
-
---*/
-
-#include "BdsPlatform.h"
-#include "SetupMode.h"
-#include <Guid/SetupVariable.h>
-#include <Library/TcgPhysicalPresenceLib.h>
-#include <Library/Tcg2PhysicalPresenceLib.h>
-#include <Protocol/I2cMasterMcg.h>
-#include <TianoApi.h>
-#include <PlatformBaseAddresses.h>
-#include <Protocol/GlobalNvsArea.h>
-#include <Library/DxeServicesTableLib.h>
-#include <Protocol/BlockIo.h>
-#include <PchRegs/PchRegsPcu.h>
-#include <Library/S3BootScriptLib.h>
-#include "PchAccess.h"
-#include "PchRegs/PchRegsSata.h"
-#include <Library/SerialPortLib.h>
-#include <Library/DebugLib.h>
-
-#include <Library/GenericBdsLib/InternalBdsLib.h>
-#include <Library/GenericBdsLib/String.h>
-#include <Library/NetLib.h>
-
-#include <Library/CapsuleLib.h>
-#include <Protocol/EsrtManagement.h>
-
-EFI_GUID *ConnectDriverTable[] = {
- &gEfiMmioDeviceProtocolGuid,
- &gEfiI2cMasterProtocolGuid,
- &gEfiI2cHostProtocolGuid
-};
-
-#define SHELL_ENVIRONMENT_INTERFACE_PROTOCOL \
- { \
- 0x47c7b221, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
- }
-VOID *mShellImageCallbackReg = NULL;
-
-
-
-EFI_USER_PROFILE_HANDLE mCurrentUser = NULL;
-EFI_EVENT mHotKeyTimerEvent = NULL;
-EFI_EVENT mHitHotkeyEvent = NULL;
-EFI_EVENT mUsbKeyboardConnectEvent = NULL;
-BOOLEAN mHotKeyPressed = FALSE;
-VOID *mHitHotkeyRegistration;
-#define KEYBOARD_TIMER_INTERVAL 20000 // 0.02s
-
-VOID
-ConnectUSBController (
- VOID
- );
-
-EFI_STATUS
-PlatformBdsConnectSimpleConsole (
- IN BDS_CONSOLE_CONNECT_ENTRY *PlatformConsole
-);
-
-VOID
-BootIntoFirmwareInterface(
- VOID
- );
-
-VOID
-EFIAPI
-PlatformBdsInitHotKeyEvent (
- VOID
- );
-
-VOID
-EFIAPI
-DisableAhciCtlr (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- UINT32 PmcDisableAddress;
- UINT8 SataStorageAmount;
- UINT32 SataBase;
- UINT16 SataPortStatus;
-
-
- DEBUG ((EFI_D_INFO, "Disable AHCI event is signalled\n"));
- SataStorageAmount = 0;
- SataBase = *(UINT32*) Context;
-
- //
- // BayTrail-M EDS chapter 16 ---- PCI IO Register Offset 92 (SATA Port Control and Status)
- //
- SataPortStatus = MmioRead16 (SataBase + R_PCH_SATA_PCS);
-
- //
- // Bit 8 EN: Port 0 Present
- //
- if ((SataPortStatus & 0x100) == 0x100) {
- SataStorageAmount++;
- }
-
- //
- // Bit 9 EN: Port 1 Present
- //
- if ((SataPortStatus & 0x200) == 0x200) {
- SataStorageAmount++;
- }
-
- //
- // Disable SATA controller when it sets to AHCI mode without carrying any devices
- // in order to prevent AHCI yellow bang under Win device manager.
- //
- if (SataStorageAmount == 0) {
- PmcDisableAddress = (MmioRead32 ((PCH_PCI_EXPRESS_BASE_ADDRESS + (UINT32) (31 << 15)) + R_PCH_LPC_PMC_BASE) & B_PCH_LPC_PMC_BASE_BAR) + R_PCH_PMC_FUNC_DIS;
- MmioOr32 (PmcDisableAddress, B_PCH_PMC_FUNC_DIS_SATA);
- S3BootScriptSaveMemWrite (
- EfiBootScriptWidthUint32,
- (UINTN) PmcDisableAddress,
- 1,
- (VOID *) (UINTN) PmcDisableAddress
- );
- }
-}
-
-VOID
-InstallReadyToLock (
- VOID
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE Handle;
- EFI_SMM_ACCESS2_PROTOCOL *SmmAccess;
- EFI_ACPI_S3_SAVE_PROTOCOL *AcpiS3Save;
-
- //
- // Install DxeSmmReadyToLock protocol prior to the processing of boot options
- //
- Status = gBS->LocateProtocol (
- &gEfiSmmAccess2ProtocolGuid,
- NULL,
- (VOID **) &SmmAccess
- );
- if (!EFI_ERROR (Status)) {
-
- //
- // Prepare S3 information, this MUST be done before DxeSmmReadyToLock
- //
- Status = gBS->LocateProtocol (
- &gEfiAcpiS3SaveProtocolGuid,
- NULL,
- (VOID **)&AcpiS3Save
- );
- if (!EFI_ERROR (Status)) {
- AcpiS3Save->S3Save (AcpiS3Save, NULL);
- }
-
- Handle = NULL;
- Status = gBS->InstallProtocolInterface (
- &Handle,
- &gExitPmAuthProtocolGuid,
- EFI_NATIVE_INTERFACE,
- NULL
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Signal EndOfDxe PI Event
- //
- EfiEventGroupSignal (&gEfiEndOfDxeEventGroupGuid);
-
- Handle = NULL;
- Status = gBS->InstallProtocolInterface (
- &Handle,
- &gEfiDxeSmmReadyToLockProtocolGuid,
- EFI_NATIVE_INTERFACE,
- NULL
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- return ;
-}
-
-VOID
-EFIAPI
-ShellImageCallback (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- BdsSetConsoleMode (TRUE);
- DEBUG ((EFI_D_INFO, "BdsEntry ShellImageCallback \n"));
-}
-
-//
-// BDS Platform Functions
-//
-/**
- Platform Bds init. Include the platform firmware vendor, revision
- and so crc check.
-
- @param VOID
-
- @retval None.
-
-**/
-VOID
-EFIAPI
-PlatformBdsInit (
- VOID
- )
-{
- EFI_STATUS Status;
- EFI_EVENT ShellImageEvent;
- EFI_GUID ShellEnvProtocol = SHELL_ENVIRONMENT_INTERFACE_PROTOCOL;
-
- #ifdef __GNUC__
- SerialPortWrite((UINT8 *)">>>>BdsEntry[GCC]\r\n", 19);
- #else
- SerialPortWrite((UINT8 *)">>>>BdsEntry\r\n", 14);
- #endif
- BdsLibSaveMemoryTypeInformation ();
-
- //
- // Before user authentication, the user identification devices need be connected
- // from the platform customized device paths
- //
- PlatformBdsConnectAuthDevice ();
-
- //
- // As console is not ready, the auto logon user will be identified.
- //
- BdsLibUserIdentify (&mCurrentUser);
-
- //
- // Change Gop mode when boot into Shell
- //
- if (mShellImageCallbackReg == NULL) {
- Status = gBS->CreateEvent (
- EFI_EVENT_NOTIFY_SIGNAL,
- EFI_TPL_CALLBACK,
- ShellImageCallback,
- NULL,
- &ShellImageEvent
- );
- if (!EFI_ERROR (Status)) {
- Status = gBS->RegisterProtocolNotify (
- &ShellEnvProtocol,
- ShellImageEvent,
- &mShellImageCallbackReg
- );
-
- DEBUG ((EFI_D_INFO, "BdsEntry ShellImageCallback \n"));
- }
- }
-}
-
-EFI_STATUS
-GetGopDevicePath (
- IN EFI_DEVICE_PATH_PROTOCOL *PciDevicePath,
- OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath
- )
-{
- UINTN Index;
- EFI_STATUS Status;
- EFI_HANDLE PciDeviceHandle;
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *TempPciDevicePath;
- UINTN GopHandleCount;
- EFI_HANDLE *GopHandleBuffer;
-
- UINTN VarSize;
- SYSTEM_CONFIGURATION mSystemConfiguration;
-
- if (PciDevicePath == NULL || GopDevicePath == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Initialize the GopDevicePath to be PciDevicePath
- //
- *GopDevicePath = PciDevicePath;
- TempPciDevicePath = PciDevicePath;
-
- Status = gBS->LocateDevicePath (
- &gEfiDevicePathProtocolGuid,
- &TempPciDevicePath,
- &PciDeviceHandle
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Try to connect this handle, so that GOP driver could start on this
- // device and create child handles with GraphicsOutput Protocol installed
- // on them, then we get device paths of these child handles and select
- // them as possible console device.
- //
-
- //
- // Select display devices
- //
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"Setup",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &mSystemConfiguration
- );
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"SetupRecovery",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &mSystemConfiguration
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- if(mSystemConfiguration.BootDisplayDevice != 0x0)
- {
- ACPI_ADR_DEVICE_PATH AcpiAdr;
- EFI_DEVICE_PATH_PROTOCOL *MyDevicePath = NULL;
-
- AcpiAdr.Header.Type = ACPI_DEVICE_PATH;
- AcpiAdr.Header.SubType = ACPI_ADR_DP;
-
- switch (mSystemConfiguration.BootDisplayDevice) {
- case 1:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, PORT_CRT, 0); //CRT Device
- break;
- case 2:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL, PORT_B_HDMI, 0); //HDMI Device Port B
- break;
- case 3:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL, PORT_B_DP, 0); //DP PortB
- break;
- case 4:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL, PORT_C_DP, 0); //DP PortC
- break;
- case 5:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL, PORT_C_DP, 0); //eDP Port C
- break;
- case 6:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL, PORT_MIPI_A, 0); //DSI Port A
- break;
- case 7:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL, PORT_MIPI_C, 0); //DSI Port C
- break;
- default:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, PORT_CRT, 0);
- break;
- }
-
- SetDevicePathNodeLength (&AcpiAdr.Header, sizeof (ACPI_ADR_DEVICE_PATH));
-
- MyDevicePath = AppendDevicePathNode(MyDevicePath, (EFI_DEVICE_PATH_PROTOCOL*)&AcpiAdr);
-
- gBS->ConnectController (
- PciDeviceHandle,
- NULL,
- MyDevicePath,
- FALSE
- );
-
- FreePool(MyDevicePath);
- }
- else
- {
- gBS->ConnectController (
- PciDeviceHandle,
- NULL,
- NULL,
- FALSE
- );
- }
-
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiGraphicsOutputProtocolGuid,
- NULL,
- &GopHandleCount,
- &GopHandleBuffer
- );
- if (!EFI_ERROR (Status)) {
- //
- // Add all the child handles as possible Console Device
- //
- for (Index = 0; Index < GopHandleCount; Index++) {
- Status = gBS->HandleProtocol (
- GopHandleBuffer[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID**)&TempDevicePath
- );
- if (EFI_ERROR (Status)) {
- continue;
- }
- if (CompareMem (
- PciDevicePath,
- TempDevicePath,
- GetDevicePathSize (PciDevicePath) - END_DEVICE_PATH_LENGTH
- ) == 0) {
- //
- // In current implementation, we only enable one of the child handles
- // as console device, i.e. sotre one of the child handle's device
- // path to variable "ConOut"
- // In future, we could select all child handles to be console device
- //
- *GopDevicePath = TempDevicePath;
- }
- }
- gBS->FreePool (GopHandleBuffer);
- }
-
- return EFI_SUCCESS;
-}
-
-/**
-
- Search out all the platform pci or agp video device. The function may will
- find multiple video device, and return all enabled device path.
-
- @param PlugInPciVgaDevicePath Return the platform plug in pci video device
- path if the system have plug in pci video device.
- @param OnboardPciVgaDevicePath Return the platform active agp video device path
- if the system have plug in agp video device or on
- chip agp device.
-
- @retval EFI_SUCCSS Get all platform active video device path.
- @retval EFI_STATUS Return the status of gBS->LocateDevicePath (),
- gBS->ConnectController (),
- and gBS->LocateHandleBuffer ().
-
-**/
-EFI_STATUS
-GetPlugInPciVgaDevicePath (
- IN OUT EFI_DEVICE_PATH_PROTOCOL **PlugInPciVgaDevicePath,
- IN OUT EFI_DEVICE_PATH_PROTOCOL **OnboardPciVgaDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE RootHandle;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- UINTN Index;
- UINTN Index1;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- BOOLEAN PlugInPciVga;
- EFI_PCI_IO_PROTOCOL *PciIo;
- PCI_TYPE00 Pci;
-
- DevicePath = NULL;
- PlugInPciVga = TRUE;
- HandleCount = 0;
- HandleBuffer = NULL;
-
- //
- // Make all the PCI_IO protocols on PCI Seg 0 show up
- //
- BdsLibConnectDevicePath (gPlatformRootBridges[0]);
-
- Status = gBS->LocateDevicePath (
- &gEfiDevicePathProtocolGuid,
- &gPlatformRootBridges[0],
- &RootHandle
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- Status = gBS->ConnectController (
- RootHandle,
- NULL,
- NULL,
- FALSE
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Start to check all the pci io to find all possible VGA device
- //
- HandleCount = 0;
- HandleBuffer = NULL;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiPciIoProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiPciIoProtocolGuid,
- (VOID**)&PciIo
- );
- if (!EFI_ERROR (Status)) {
-
- //
- // Check for all VGA device
- //
- Status = PciIo->Pci.Read (
- PciIo,
- EfiPciIoWidthUint32,
- 0,
- sizeof (Pci) / sizeof (UINT32),
- &Pci
- );
- if (EFI_ERROR (Status)) {
- continue;
- }
-
- //
- // Here we decide which VGA device to enable in PCI bus
- //
- // The first plugin PCI VGA card device will be present as PCI VGA
- // The onchip AGP or AGP card will be present as AGP VGA
- //
- if (!IS_PCI_VGA (&Pci)) {
- continue;
- }
-
- //
- // Set the device as the possible console out device,
- //
- // Below code will make every VGA device to be one
- // of the possibe console out device
- //
- PlugInPciVga = TRUE;
- gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID**)&DevicePath
- );
-
- Index1 = 0;
-
- while (gPlatformAllPossiblePciVgaConsole[Index1] != NULL) {
- if (CompareMem (
- DevicePath,
- gPlatformAllPossiblePciVgaConsole[Index1],
- GetDevicePathSize (gPlatformAllPossiblePciVgaConsole[Index1])
- ) == 0) {
-
- //
- // This device is an AGP device
- //
- *OnboardPciVgaDevicePath = DevicePath;
- PlugInPciVga = FALSE;
- break;
- }
-
- Index1 ++;
- }
-
- if (PlugInPciVga) {
- *PlugInPciVgaDevicePath = DevicePath;
- }
- }
- }
-
- FreePool (HandleBuffer);
-
- return EFI_SUCCESS;
-}
-
-/**
-
- Find the platform active vga, and base on the policy to enable the vga as
- the console out device. The policy is driven by one setup variable "VBIOS".
-
- None.
-
- @param EFI_UNSUPPORTED There is no active vga device
-
- @retval EFI_STATUS Return the status of BdsLibGetVariableAndSize ()
-
-**/
-EFI_STATUS
-PlatformBdsForceActiveVga (
- VOID
- )
-{
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *PlugInPciVgaDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *OnboardPciVgaDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *DevicePathFirst;
- EFI_DEVICE_PATH_PROTOCOL *DevicePathSecond;
- EFI_DEVICE_PATH_PROTOCOL *GopDevicePath;
- UINTN VarSize;
- SYSTEM_CONFIGURATION mSystemConfiguration;
-
- Status = EFI_SUCCESS;
- PlugInPciVgaDevicePath = NULL;
- OnboardPciVgaDevicePath = NULL;
-
- //
- // Check the policy which is the first enabled VGA
- //
- GetPlugInPciVgaDevicePath (&PlugInPciVgaDevicePath, &OnboardPciVgaDevicePath);
-
- if (PlugInPciVgaDevicePath == NULL && OnboardPciVgaDevicePath == NULL) {
- return EFI_UNSUPPORTED;
- }
-
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"Setup",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &mSystemConfiguration
- );
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"SetupRecovery",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &mSystemConfiguration
- );
- ASSERT_EFI_ERROR (Status);
- }
-
-
- if ((PlugInPciVgaDevicePath == NULL && OnboardPciVgaDevicePath != NULL) ) {
- DEBUG ((EFI_D_ERROR,"Update onboard PCI VGA ...\n"));
- DevicePathFirst = OnboardPciVgaDevicePath;
- DevicePathSecond = PlugInPciVgaDevicePath;
- goto UpdateConOut;
- }
- if(OnboardPciVgaDevicePath != NULL && mSystemConfiguration.PrimaryVideoAdaptor == 0) {
- DEBUG ((EFI_D_ERROR,"Update onboard PCI VGA When set primary!!!...\n"));
- DevicePathFirst = OnboardPciVgaDevicePath;
- DevicePathSecond = PlugInPciVgaDevicePath;
- goto UpdateConOut;
- }
-
- DEBUG ((EFI_D_ERROR,"Update plug in PCI VGA ...\n"));
- DevicePathFirst = PlugInPciVgaDevicePath;
- DevicePathSecond = OnboardPciVgaDevicePath;
-
-UpdateConOut:
- GetGopDevicePath (DevicePathFirst, &GopDevicePath);
- DevicePathFirst = GopDevicePath;
-
- Status = BdsLibUpdateConsoleVariable (
- L"ConOut",
- DevicePathFirst,
- DevicePathSecond
- );
-
- return Status;
-}
-
-VOID
-UpdateConsoleResolution(
- VOID
- )
-{
- UINT32 HorizontalResolution;
- UINT32 VerticalResolution;
- SYSTEM_CONFIGURATION SystemConfiguration;
- UINTN VarSize;
- EFI_STATUS Status;
-
-
- HorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);
- VerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);
-
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"Setup",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &SystemConfiguration
- );
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"SetupRecovery",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &SystemConfiguration
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- switch (SystemConfiguration.IgdFlatPanel) {
-
- case 0:
- //
- // Use the detault PCD values.
- //
- break;
-
- case 1:
- HorizontalResolution = 640;
- VerticalResolution = 480;
- break;
-
- case 2:
- HorizontalResolution = 800;
- VerticalResolution = 600;
- break;
-
- case 3:
- HorizontalResolution = 1024;
- VerticalResolution = 768;
- break;
-
- case 4:
- HorizontalResolution = 1280;
- VerticalResolution = 1024;
- break;
-
- case 5:
- HorizontalResolution = 1366;
- VerticalResolution = 768;
- break;
-
- case 6:
- HorizontalResolution = 1680;
- VerticalResolution = 1050;
- break;
-
- case 7:
- HorizontalResolution = 1920;
- VerticalResolution = 1200;
- break;
-
- case 8:
- HorizontalResolution = 1280;
- VerticalResolution = 800;
- break;
- }
-
- PcdSet32 (PcdSetupVideoHorizontalResolution, HorizontalResolution);
- PcdSet32 (PcdSetupVideoVerticalResolution, VerticalResolution);
- DEBUG ((EFI_D_ERROR, "HorizontalResolution = %x; VerticalResolution = %x", HorizontalResolution, VerticalResolution));
-
- return;
-}
-
-/**
- Connect the predefined platform default console device. Always try to find
- and enable the vga device if have.
-
- @param PlatformConsole Predefined platform default console device array.
-
- @retval EFI_SUCCESS Success connect at least one ConIn and ConOut
- device, there must have one ConOut device is
- active vga device.
-
- @retval EFI_STATUS Return the status of
- BdsLibConnectAllDefaultConsoles ()
-
-**/
-EFI_STATUS
-PlatformBdsConnectConsole (
- IN BDS_CONSOLE_CONNECT_ENTRY *PlatformConsole
-)
-{
- EFI_STATUS Status;
- UINTN Index;
- EFI_DEVICE_PATH_PROTOCOL *VarConout;
- EFI_DEVICE_PATH_PROTOCOL *VarConin;
- UINTN DevicePathSize;
-
- UpdateConsoleResolution();
-
- Index = 0;
- Status = EFI_SUCCESS;
- DevicePathSize = 0;
- VarConout = BdsLibGetVariableAndSize (
- L"ConOut",
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
- VarConin = BdsLibGetVariableAndSize (
- L"ConIn",
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
- if (VarConout == NULL || VarConin == NULL) {
- //
- // Have chance to connect the platform default console,
- // the platform default console is the minimum device group
- // the platform should support
- //
- while (PlatformConsole[Index].DevicePath != NULL) {
-
- //
- // Update the console variable with the connect type
- //
- if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) == CONSOLE_IN) {
- BdsLibUpdateConsoleVariable (L"ConIn", PlatformConsole[Index].DevicePath, NULL);
- }
-
- if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) == CONSOLE_OUT) {
- BdsLibUpdateConsoleVariable (L"ConOut", PlatformConsole[Index].DevicePath, NULL);
- }
-
- if ((PlatformConsole[Index].ConnectType & STD_ERROR) == STD_ERROR) {
- BdsLibUpdateConsoleVariable (L"ErrOut", PlatformConsole[Index].DevicePath, NULL);
- }
-
- Index ++;
- }
- }
-
- //
- // Make sure we have at least one active VGA, and have the right
- // active VGA in console variable
- //
- Status = PlatformBdsForceActiveVga ();
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- DEBUG ((EFI_D_INFO, "DISPLAY INIT DONE\n"));
-
- //
- // Connect the all the default console with current console variable
- //
- Status = BdsLibConnectAllDefaultConsoles ();
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Connect with predefined platform connect sequence,
- the OEM/IBV can customize with their own connect sequence.
-
- @param None.
-
- @retval None.
-
-**/
-VOID
-PlatformBdsConnectSequence (
- VOID
- )
-{
- UINTN Index;
-
- Index = 0;
-
- //
- // Here we can get the customized platform connect sequence
- // Notes: we can connect with new variable which record the
- // last time boots connect device path sequence
- //
- while (gPlatformConnectSequence[Index] != NULL) {
-
- //
- // Build the platform boot option
- //
- BdsLibConnectDevicePath (gPlatformConnectSequence[Index]);
- Index ++;
- }
-
- //
- // Just use the simple policy to connect all devices
- // There should be no difference between debug tip and release tip, or it will be extremely hard to debug.
- //
- // There is case that IdeController driver will write boot script in driver model Start() function. It will be rejected by boot script save.
- // It is only found when DEBUG disabled, because we are using BdsLibConnectAll() when DEBUG enabled.
- //
- // So we use BdsLibConnectAll() here to make sure IdeController.Start() is invoked before InstallReadyToLock().
- // We may also consider to connect SataController only later if needed.
- //
- BdsLibConnectAll ();
-}
-
-/**
-
- Load the predefined driver option, OEM/IBV can customize this
- to load their own drivers
-
- @param BdsDriverLists The header of the driver option link list.
-
- @retval None.
-
-**/
-VOID
-PlatformBdsGetDriverOption (
- IN OUT LIST_ENTRY *BdsDriverLists
- )
-{
- UINTN Index;
-
- Index = 0;
-
- //
- // Here we can get the customized platform driver option
- //
- while (gPlatformDriverOption[Index] != NULL) {
-
- //
- // Build the platform boot option
- //
- BdsLibRegisterNewOption (BdsDriverLists, gPlatformDriverOption[Index], NULL, L"DriverOrder");
- Index ++;
- }
-
-}
-
-/**
- This function is used for some critical time if the the system
- have no any boot option, and there is no time out for user to add
- the new boot option. This can also treat as the platform default
- boot option.
-
- @param BdsBootOptionList The header of the boot option link list.
-
- @retval None.
-
-**/
-VOID
-PlatformBdsPredictBootOption (
- IN OUT LIST_ENTRY *BdsBootOptionList
- )
-{
- UINTN Index;
-
- Index = 0;
-
- //
- // Here give chance to get platform boot option data
- //
- while (gPlatformBootOption[Index] != NULL) {
-
- //
- // Build the platform boot option
- //
- BdsLibRegisterNewOption (BdsBootOptionList, gPlatformBootOption[Index], NULL, L"BootOrder");
- Index ++;
- }
-}
-
-/**
- Perform the platform diagnostic, such like test memory. OEM/IBV also
- can customize this fuction to support specific platform diagnostic.
-
- @param MemoryTestLevel The memory test intensive level
- @param QuietBoot Indicate if need to enable the quiet boot
- @param BaseMemoryTest A pointer to BdsMemoryTest()
-
- @retval None.
-
-**/
-VOID
-PlatformBdsDiagnostics (
- IN EXTENDMEM_COVERAGE_LEVEL MemoryTestLevel,
- IN BOOLEAN QuietBoot,
- IN BASEM_MEMORY_TEST BaseMemoryTest
- )
-{
- EFI_STATUS Status;
-
- //
- // Here we can decide if we need to show
- // the diagnostics screen
- // Notes: this quiet boot code should be remove
- // from the graphic lib
- //
- if (QuietBoot) {
- EnableQuietBoot (PcdGetPtr(PcdLogoFile));
-
- //
- // Perform system diagnostic
- //
- Status = BaseMemoryTest (MemoryTestLevel);
- if (EFI_ERROR (Status)) {
- DisableQuietBoot ();
- }
-
- return;
- }
-
- //
- // Perform system diagnostic
- //
- Status = BaseMemoryTest (MemoryTestLevel);
-}
-
-
-/**
- For EFI boot option, BDS separate them as six types:
- 1. Network - The boot option points to the SimpleNetworkProtocol device.
- Bds will try to automatically create this type boot option when enumerate.
- 2. Shell - The boot option points to internal flash shell.
- Bds will try to automatically create this type boot option when enumerate.
- 3. Removable BlockIo - The boot option only points to the removable media
- device, like USB flash disk, DVD, Floppy etc.
- These device should contain a *removable* blockIo
- protocol in their device handle.
- Bds will try to automatically create this type boot option
- when enumerate.
- 4. Fixed BlockIo - The boot option only points to a Fixed blockIo device,
- like HardDisk.
- These device should contain a *fixed* blockIo
- protocol in their device handle.
- BDS will skip fixed blockIo devices, and NOT
- automatically create boot option for them. But BDS
- will help to delete those fixed blockIo boot option,
- whose description rule conflict with other auto-created
- boot options.
- 5. Non-BlockIo Simplefile - The boot option points to a device whose handle
- has SimpleFileSystem Protocol, but has no blockio
- protocol. These devices do not offer blockIo
- protocol, but BDS still can get the
- \EFI\BOOT\boot{machinename}.EFI by SimpleFileSystem
- Protocol.
- 6. File - The boot option points to a file. These boot options are usually
- created by user manually or OS loader. BDS will not delete or modify
- these boot options.
-
- This function will enumerate all possible boot device in the system, and
- automatically create boot options for Network, Shell, Removable BlockIo,
- and Non-BlockIo Simplefile devices.
- It will only execute once of every boot.
-
- @param BdsBootOptionList The header of the link list which indexed all
- current boot options
-
- @retval EFI_SUCCESS Finished all the boot device enumerate and create
- the boot option base on that boot device
-
- @retval EFI_OUT_OF_RESOURCES Failed to enumerate the boot device and create the boot option list
-**/
-EFI_STATUS
-EFIAPI
-PlatformBdsLibEnumerateAllBootOption (
- IN OUT LIST_ENTRY *BdsBootOptionList
- )
-{
- EFI_STATUS Status;
- UINT16 FloppyNumber;
- UINT16 HarddriveNumber;
- UINT16 CdromNumber;
- UINT16 UsbNumber;
- UINT16 MiscNumber;
- UINT16 ScsiNumber;
- UINT16 NonBlockNumber;
- UINTN NumberBlockIoHandles;
- EFI_HANDLE *BlockIoHandles;
- EFI_BLOCK_IO_PROTOCOL *BlkIo;
- BOOLEAN Removable[2];
- UINTN RemovableIndex;
- UINTN Index;
- UINTN NumOfLoadFileHandles;
- EFI_HANDLE *LoadFileHandles;
- UINTN FvHandleCount;
- EFI_HANDLE *FvHandleBuffer;
- EFI_FV_FILETYPE Type;
- UINTN Size;
- EFI_FV_FILE_ATTRIBUTES Attributes;
- UINT32 AuthenticationStatus;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- UINTN DevicePathType;
- CHAR16 Buffer[40];
- EFI_HANDLE *FileSystemHandles;
- UINTN NumberFileSystemHandles;
- BOOLEAN NeedDelete;
- EFI_IMAGE_DOS_HEADER DosHeader;
- CHAR8 *PlatLang;
- CHAR8 *LastLang;
- EFI_IMAGE_OPTIONAL_HEADER_UNION HdrData;
- EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;
- CHAR16 *MacStr;
- CHAR16 *IPverStr;
- EFI_HANDLE *NetworkHandles;
- UINTN BufferSize;
-
- FloppyNumber = 0;
- HarddriveNumber = 0;
- CdromNumber = 0;
- UsbNumber = 0;
- MiscNumber = 0;
- ScsiNumber = 0;
- PlatLang = NULL;
- LastLang = NULL;
- ZeroMem (Buffer, sizeof (Buffer));
-
- //
- // If the boot device enumerate happened, just get the boot
- // device from the boot order variable
- //
- if (mEnumBootDevice) {
- GetVariable2 (LAST_ENUM_LANGUAGE_VARIABLE_NAME, &gLastEnumLangGuid, (VOID**)&LastLang, NULL);
- GetEfiGlobalVariable2 (L"PlatformLang", (VOID**)&PlatLang, NULL);
- ASSERT (PlatLang != NULL);
- if ((LastLang != NULL) && (AsciiStrCmp (LastLang, PlatLang) == 0)) {
- Status = BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");
- FreePool (LastLang);
- FreePool (PlatLang);
- return Status;
- } else {
- Status = gRT->SetVariable (
- LAST_ENUM_LANGUAGE_VARIABLE_NAME,
- &gLastEnumLangGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- AsciiStrSize (PlatLang),
- PlatLang
- );
- //
- // Failure to set the variable only impacts the performance next time enumerating the boot options.
- //
-
- if (LastLang != NULL) {
- FreePool (LastLang);
- }
- FreePool (PlatLang);
- }
- }
-
- //
- // Notes: this dirty code is to get the legacy boot option from the
- // BBS table and create to variable as the EFI boot option, it should
- // be removed after the CSM can provide legacy boot option directly
- //
- REFRESH_LEGACY_BOOT_OPTIONS;
-
- //
- // Delete invalid boot option
- //
- BdsDeleteAllInvalidEfiBootOption ();
-
- //
- // Parse removable media followed by fixed media.
- // The Removable[] array is used by the for-loop below to create removable media boot options
- // at first, and then to create fixed media boot options.
- //
- Removable[0] = FALSE;
- Removable[1] = TRUE;
-
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiBlockIoProtocolGuid,
- NULL,
- &NumberBlockIoHandles,
- &BlockIoHandles
- );
-
- for (RemovableIndex = 0; RemovableIndex < 2; RemovableIndex++) {
- for (Index = 0; Index < NumberBlockIoHandles; Index++) {
- Status = gBS->HandleProtocol (
- BlockIoHandles[Index],
- &gEfiBlockIoProtocolGuid,
- (VOID **) &BlkIo
- );
- //
- // skip the logical partition
- //
- if (EFI_ERROR (Status) || BlkIo->Media->LogicalPartition) {
- continue;
- }
-
- //
- // firstly fixed block io then the removable block io
- //
- if (BlkIo->Media->RemovableMedia == Removable[RemovableIndex]) {
- continue;
- }
- DevicePath = DevicePathFromHandle (BlockIoHandles[Index]);
- DevicePathType = BdsGetBootTypeFromDevicePath (DevicePath);
-
- switch (DevicePathType) {
- case BDS_EFI_ACPI_FLOPPY_BOOT:
- if (FloppyNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY)), FloppyNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- FloppyNumber++;
- break;
-
- //
- // Assume a removable SATA device should be the DVD/CD device, a fixed SATA device should be the Hard Drive device.
- //
- case BDS_EFI_MESSAGE_ATAPI_BOOT:
- case BDS_EFI_MESSAGE_SATA_BOOT:
- if (BlkIo->Media->RemovableMedia) {
- if (CdromNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_CD_DVD)), CdromNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_CD_DVD)));
- }
- CdromNumber++;
- } else {
- if (HarddriveNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_HARDDRIVE)), HarddriveNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_HARDDRIVE)));
- }
- HarddriveNumber++;
- }
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Buffer: %S\n", Buffer));
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- break;
-
- case BDS_EFI_MESSAGE_USB_DEVICE_BOOT:
- if (UsbNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_USB)), UsbNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_USB)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- UsbNumber++;
- break;
-
- case BDS_EFI_MESSAGE_SCSI_BOOT:
- if (ScsiNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI)), ScsiNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- ScsiNumber++;
- break;
-
- case BDS_EFI_MESSAGE_MISC_BOOT:
- default:
- if (MiscNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC)), MiscNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- MiscNumber++;
- break;
- }
- }
- }
-
- if (NumberBlockIoHandles != 0) {
- FreePool (BlockIoHandles);
- }
-
- //
- // If there is simple file protocol which does not consume block Io protocol, create a boot option for it here.
- //
- NonBlockNumber = 0;
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiSimpleFileSystemProtocolGuid,
- NULL,
- &NumberFileSystemHandles,
- &FileSystemHandles
- );
- for (Index = 0; Index < NumberFileSystemHandles; Index++) {
- Status = gBS->HandleProtocol (
- FileSystemHandles[Index],
- &gEfiBlockIoProtocolGuid,
- (VOID **) &BlkIo
- );
- if (!EFI_ERROR (Status)) {
- //
- // Skip if the file system handle supports a BlkIo protocol,
- //
- continue;
- }
-
- //
- // Do the removable Media thing. \EFI\BOOT\boot{machinename}.EFI
- // machinename is ia32, ia64, x64, ...
- //
- Hdr.Union = &HdrData;
- NeedDelete = TRUE;
- Status = BdsLibGetImageHeader (
- FileSystemHandles[Index],
- EFI_REMOVABLE_MEDIA_FILE_NAME,
- &DosHeader,
- Hdr
- );
- if (!EFI_ERROR (Status) &&
- EFI_IMAGE_MACHINE_TYPE_SUPPORTED (Hdr.Pe32->FileHeader.Machine) &&
- Hdr.Pe32->OptionalHeader.Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {
- NeedDelete = FALSE;
- }
-
- if (NeedDelete) {
- //
- // No such file or the file is not a EFI application, delete this boot option
- //
- BdsLibDeleteOptionFromHandle (FileSystemHandles[Index]);
- } else {
- if (NonBlockNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NON_BLOCK)), NonBlockNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NON_BLOCK)));
- }
- BdsLibBuildOptionFromHandle (FileSystemHandles[Index], BdsBootOptionList, Buffer);
- NonBlockNumber++;
- }
- }
-
- if (NumberFileSystemHandles != 0) {
- FreePool (FileSystemHandles);
- }
-
- //
- // Check if we have on flash shell
- //
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &FvHandleCount,
- &FvHandleBuffer
- );
- for (Index = 0; Index < FvHandleCount; Index++) {
- gBS->HandleProtocol (
- FvHandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
-
- Status = Fv->ReadFile (
- Fv,
- &gUefiShellFileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (EFI_ERROR (Status)) {
- //
- // Skip if no shell file in the FV
- //
- continue;
- }
- //
- // Build the shell boot option
- //
- BdsLibBuildOptionFromShell (FvHandleBuffer[Index], BdsBootOptionList);
- }
-
- if (FvHandleCount != 0) {
- FreePool (FvHandleBuffer);
- }
-
- //
- // Parse Network Boot Device
- //
- NumOfLoadFileHandles = 0;
- //
- // Search Load File protocol for PXE boot option.
- //
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiLoadFileProtocolGuid,
- NULL,
- &NumOfLoadFileHandles,
- &LoadFileHandles
- );
-
- for (Index = 0; Index < NumOfLoadFileHandles; Index++) {
-
-//
-//Locate EFI_DEVICE_PATH_PROTOCOL to dynamically get IPv4/IPv6 protocol information.
-//
-
- Status = gBS->HandleProtocol (
- LoadFileHandles[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID **) &DevicePath
- );
-
- ASSERT_EFI_ERROR (Status);
-
- while (!IsDevicePathEnd (DevicePath)) {
- if ((DevicePath->Type == MESSAGING_DEVICE_PATH) &&
- (DevicePath->SubType == MSG_IPv4_DP)) {
-
- //
- //Get handle infomation
- //
- BufferSize = 0;
- NetworkHandles = NULL;
- Status = gBS->LocateHandle (
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
-
- if (Status == EFI_BUFFER_TOO_SMALL) {
- NetworkHandles = AllocateZeroPool(BufferSize);
- if (NetworkHandles == NULL) {
- return (EFI_OUT_OF_RESOURCES);
- }
- Status = gBS->LocateHandle(
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
- }
-
- //
- //Get the MAC string
- //
- Status = NetLibGetMacString (
- *NetworkHandles,
- NULL,
- &MacStr
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- IPverStr = L" IPv4";
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s%s%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK)),MacStr,IPverStr);
- break;
- }
- if((DevicePath->Type == MESSAGING_DEVICE_PATH) &&
- (DevicePath->SubType == MSG_IPv6_DP)) {
-
- //
- //Get handle infomation
- //
- BufferSize = 0;
- NetworkHandles = NULL;
- Status = gBS->LocateHandle (
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
-
- if (Status == EFI_BUFFER_TOO_SMALL) {
- NetworkHandles = AllocateZeroPool(BufferSize);
- if (NetworkHandles == NULL) {
- return (EFI_OUT_OF_RESOURCES);
- }
- Status = gBS->LocateHandle(
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
- }
-
- //
- //Get the MAC string
- //
- Status = NetLibGetMacString (
- *NetworkHandles,
- NULL,
- &MacStr
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- IPverStr = L" IPv6";
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s%s%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK)),MacStr,IPverStr);
- break;
- }
- DevicePath = NextDevicePathNode (DevicePath);
- }
-
- BdsLibBuildOptionFromHandle (LoadFileHandles[Index], BdsBootOptionList, Buffer);
- }
-
- if (NumOfLoadFileHandles != 0) {
- FreePool (LoadFileHandles);
- }
-
- //
- // Check if we have on flash shell
- //
- /* gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &FvHandleCount,
- &FvHandleBuffer
- );
- for (Index = 0; Index < FvHandleCount; Index++) {
- gBS->HandleProtocol (
- FvHandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
-
- Status = Fv->ReadFile (
- Fv,
- &gUefiShellFileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (EFI_ERROR (Status)) {
- //
- // Skip if no shell file in the FV
- //
- continue;
- }
- //
- // Build the shell boot option
- //
- BdsLibBuildOptionFromShell (FvHandleBuffer[Index], BdsBootOptionList);
- }
-
- if (FvHandleCount != 0) {
- FreePool (FvHandleBuffer);
- } */
-
- //
- // Make sure every boot only have one time
- // boot device enumerate
- //
- Status = BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");
- mEnumBootDevice = TRUE;
-
- return Status;
-}
-
-
-
-/**
-
- The function will execute with as the platform policy, current policy
- is driven by boot mode. IBV/OEM can customize this code for their specific
- policy action.
-
- @param DriverOptionList - The header of the driver option link list
- @param BootOptionList - The header of the boot option link list
- @param ProcessCapsules - A pointer to ProcessCapsules()
- @param BaseMemoryTest - A pointer to BaseMemoryTest()
-
- @retval None.
-
-**/
-VOID
-EFIAPI
-PlatformBdsPolicyBehavior (
- IN OUT LIST_ENTRY *DriverOptionList,
- IN OUT LIST_ENTRY *BootOptionList,
- IN PROCESS_CAPSULES BdsProcessCapsules,
- IN BASEM_MEMORY_TEST BaseMemoryTest
- )
-{
- EFI_STATUS Status;
- UINT16 Timeout;
- EFI_BOOT_MODE BootMode;
- BOOLEAN DeferredImageExist;
- UINTN Index;
- SYSTEM_CONFIGURATION SystemConfiguration;
- UINTN VarSize;
- PLATFORM_PCI_DEVICE_PATH *EmmcBootDevPath;
- EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsArea;
- EFI_HANDLE FvProtocolHandle;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- UINTN Index1;
- UINTN SataPciRegBase = 0;
- UINT16 SataModeSelect = 0;
- VOID *RegistrationExitPmAuth = NULL;
- EFI_EVENT Event;
- BOOLEAN IsFirstBoot;
- UINT16 *BootOrder;
- UINTN BootOrderSize;
- ESRT_MANAGEMENT_PROTOCOL *EsrtManagement;
-
- Timeout = PcdGet16 (PcdPlatformBootTimeOut);
- if (Timeout > 10 ) {
- //we think the Timeout variable is corrupted
- Timeout = 10;
- }
-
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- NORMAL_SETUP_NAME,
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &SystemConfiguration
- );
-
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"SetupRecovery",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &SystemConfiguration
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- //
- // Load the driver option as the driver option list
- //
- PlatformBdsGetDriverOption (DriverOptionList);
-
- //
- // Get current Boot Mode
- //
- BootMode = GetBootModeHob();
-
- //
- // No deferred images exist by default
- //
- DeferredImageExist = FALSE;
- if ((BootMode != BOOT_WITH_MINIMAL_CONFIGURATION) && (PcdGet32(PcdFlashFvShellSize) > 0)){
- gDS->ProcessFirmwareVolume (
- (VOID *)(UINTN)PcdGet32(PcdFlashFvShellBase),
- PcdGet32(PcdFlashFvShellSize),
- &FvProtocolHandle
- );
- }
-
- if (SystemConfiguration.FastBoot == 1) {
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- if ((BootOrder != NULL) && (BootMode != BOOT_ON_FLASH_UPDATE)) {
- //
- // BootOrder exist, it means system has boot before. We can do fast boot.
- //
- BootMode = BOOT_WITH_MINIMAL_CONFIGURATION;
- }
- }
-
-
- //
- // Use eMMC to boot OS and turn on AHCI, when SATA HDD is diconnected,
- // SATA AHCI CTLR device will show yellow bang, implement this solution to solve it.
- //
- SataPciRegBase = MmPciAddress (0, 0, PCI_DEVICE_NUMBER_PCH_SATA, 0, 0);
- SataModeSelect = MmioRead16 (SataPciRegBase + R_PCH_SATA_MAP) & B_PCH_SATA_MAP_SMS_MASK;
- Status = EFI_SUCCESS;
- if (SataModeSelect != V_PCH_SATA_MAP_SMS_IDE) {
- Status = gBS->CreateEvent (
- EVT_NOTIFY_SIGNAL,
- TPL_CALLBACK,
- DisableAhciCtlr,
- &SataPciRegBase,
- &Event
- );
- if (!EFI_ERROR (Status)) {
- Status = gBS->RegisterProtocolNotify (
- &gExitPmAuthProtocolGuid,
- Event,
- &RegistrationExitPmAuth
- );
- }
- }
-
- Status = gBS->LocateProtocol(&gEsrtManagementProtocolGuid, NULL, (VOID **)&EsrtManagement);
- if (EFI_ERROR(Status)) {
- EsrtManagement = NULL;
- }
-
- DEBUG ((DEBUG_INFO, "BDS: BootMode=%02x\n", BootMode));
-
- switch (BootMode) {
-
- case BOOT_WITH_MINIMAL_CONFIGURATION:
- PlatformBdsInitHotKeyEvent ();
- PlatformBdsConnectSimpleConsole (gPlatformSimpleConsole);
-
-
- //
- // Check to see if it's needed to dispatch more DXE drivers.
- //
- for (Index = 0; Index < sizeof(ConnectDriverTable)/sizeof(EFI_GUID *); Index++) {
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- ConnectDriverTable[Index],
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (!EFI_ERROR (Status)) {
- for (Index1 = 0; Index1 < HandleCount; Index1++) {
- gBS->ConnectController (
- HandleBuffer[Index1],
- NULL,
- NULL,
- TRUE
- );
- }
- }
-
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- }
-
- gDS->Dispatch ();
- }
-
- //
- // Locate the Global NVS Protocol.
- //
- Status = gBS->LocateProtocol (
- &gEfiGlobalNvsAreaProtocolGuid,
- NULL,
- (void **)&GlobalNvsArea
- );
- if (GlobalNvsArea->Area->emmcVersion == 0){
- EmmcBootDevPath = (PLATFORM_PCI_DEVICE_PATH *)gPlatformSimpleBootOption[0];
- EmmcBootDevPath->PciDevice.Device = 0x10;
- }
-
- //
- // Connect boot device here to give time to read keyboard.
- //
- BdsLibConnectDevicePath (gPlatformSimpleBootOption[0]);
-
- //
- // This is a workround for dectecting hotkey from USB keyboard.
- //
- gBS->Stall(KEYBOARD_TIMER_INTERVAL);
-
- if (mHotKeyTimerEvent != NULL) {
- gBS->SetTimer (
- mHotKeyTimerEvent,
- TimerCancel,
- 0
- );
- gBS->CloseEvent (mHotKeyTimerEvent);
- mHotKeyTimerEvent = NULL;
- }
- if (mHotKeyPressed) {
- //
- // Skip show progress count down
- //
- Timeout = 0xFFFF;
- goto FULL_CONFIGURATION;
- }
-
- EnableQuietBoot (PcdGetPtr(PcdLogoFile));
- if (!SystemConfiguration.QuietBoot) {
- PlatformBdsDiagnostics (IGNORE, FALSE, BaseMemoryTest);
- }
-
-
- #ifdef TPM_ENABLED
- TcgPhysicalPresenceLibProcessRequest();
- #endif
-
- if (EsrtManagement != NULL) {
- EsrtManagement->LockEsrtRepository();
- }
-
- //
- // Close boot script and install ready to lock
- //
- InstallReadyToLock ();
-
- //
- // Give one chance to enter the setup if we
- // select Gummiboot "Reboot Into Firmware Interface" and Fast Boot is enabled.
- //
- BootIntoFirmwareInterface();
- break;
-
- case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES:
-
- //
- // In no-configuration boot mode, we can connect the
- // console directly.
- //
- BdsLibConnectAllDefaultConsoles ();
- PlatformBdsDiagnostics (IGNORE, TRUE, BaseMemoryTest);
-
- //
- // Perform some platform specific connect sequence
- //
- PlatformBdsConnectSequence ();
-
- //
- // As console is ready, perform user identification again.
- //
- if (mCurrentUser == NULL) {
- PlatformBdsUserIdentify (&mCurrentUser, &DeferredImageExist);
- if (DeferredImageExist) {
- //
- // After user authentication, the deferred drivers was loaded again.
- // Here, need to ensure the deferred images are connected.
- //
- BdsLibConnectAllDefaultConsoles ();
- PlatformBdsConnectSequence ();
- }
- }
-
- if (EsrtManagement != NULL) {
- EsrtManagement->LockEsrtRepository();
- }
-
- //
- // Close boot script and install ready to lock
- //
- InstallReadyToLock ();
-
- //
- // Notes: current time out = 0 can not enter the
- // front page
- //
- PlatformBdsEnterFrontPageWithHotKey (Timeout, FALSE);
-
- //
- // Check the boot option with the boot option list
- //
- BdsLibBuildOptionFromVar (BootOptionList, L"BootOrder");
- break;
-
- case BOOT_ON_FLASH_UPDATE:
-
- //
- // Boot with the specific configuration
- //
- PlatformBdsConnectConsole (gPlatformConsole);
- PlatformBdsDiagnostics (EXTENSIVE, TRUE, BaseMemoryTest);
-
- DEBUG((DEBUG_INFO, "ProcessCapsules Before EndOfDxe......\n"));
- ProcessCapsules ();
- DEBUG((DEBUG_INFO, "ProcessCapsules Done\n"));
-
- //
- // Close boot script and install ready to lock
- //
- InstallReadyToLock ();
-
- BdsLibConnectAll ();
-
- //
- // Perform user identification
- //
- if (mCurrentUser == NULL) {
- PlatformBdsUserIdentify (&mCurrentUser, &DeferredImageExist);
- if (DeferredImageExist) {
- //
- // After user authentication, the deferred drivers was loaded again.
- // Here, need to ensure the deferred images are connected.
- //
- BdsLibConnectAll ();
- }
- }
-
- if (EsrtManagement != NULL) {
- EsrtManagement->SyncEsrtFmp();
- }
-
- DEBUG((DEBUG_INFO, "ProcessCapsules After ConnectAll......\n"));
- ProcessCapsules();
- DEBUG((DEBUG_INFO, "ProcessCapsules Done\n"));
- break;
-
- case BOOT_IN_RECOVERY_MODE:
-
- //
- // In recovery mode, just connect platform console
- // and show up the front page
- //
- PlatformBdsConnectConsole (gPlatformConsole);
- PlatformBdsDiagnostics (EXTENSIVE, FALSE, BaseMemoryTest);
- BdsLibConnectAll ();
-
- //
- // Perform user identification
- //
- if (mCurrentUser == NULL) {
- PlatformBdsUserIdentify (&mCurrentUser, &DeferredImageExist);
- if (DeferredImageExist) {
- //
- // After user authentication, the deferred drivers was loaded again.
- // Here, need to ensure the deferred drivers are connected.
- //
- BdsLibConnectAll ();
- }
- }
-
- //
- // Close boot script and install ready to lock
- //
- InstallReadyToLock ();
-
- //
- // In recovery boot mode, we still enter to the
- // frong page now
- //
- PlatformBdsEnterFrontPageWithHotKey (Timeout, FALSE);
- break;
-
-FULL_CONFIGURATION:
- case BOOT_WITH_FULL_CONFIGURATION:
- case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS:
- case BOOT_WITH_DEFAULT_SETTINGS:
- default:
-
- //
- // Connect platform console
- //
- Status = PlatformBdsConnectConsole (gPlatformConsole);
- if (EFI_ERROR (Status)) {
-
- //
- // Here OEM/IBV can customize with defined action
- //
- PlatformBdsNoConsoleAction ();
- }
-
- //
- // Chenyunh[TODO]: This is Workgroud to show the fs for uSDcard,
- // Need to root cause this issue.
- //
- DEBUG ((DEBUG_ERROR, "Start to reconnect all driver.\n"));
- BdsLibDisconnectAllEfi();
- BdsLibConnectAll ();
- DEBUG ((DEBUG_ERROR, "End to reconnect all driver.\n"));
-
- //
- // Perform some platform specific connect sequence
- //
- PlatformBdsConnectSequence ();
- EnableQuietBoot (PcdGetPtr(PcdLogoFile));
- if (!SystemConfiguration.QuietBoot) {
- PlatformBdsDiagnostics (IGNORE, FALSE, BaseMemoryTest);
- }
-
- //
- // Do a pre-delay so Hard Disk can spin up and see more logo.
- //
- gBS->Stall(SystemConfiguration.HddPredelay * 1000000);
-
- //
- // Perform user identification
- //
- if (mCurrentUser == NULL) {
- PlatformBdsUserIdentify (&mCurrentUser, &DeferredImageExist);
- if (DeferredImageExist) {
- //
- // After user authentication, the deferred drivers was loaded again.
- // Here, need to ensure the deferred drivers are connected.
- //
- Status = PlatformBdsConnectConsole (gPlatformConsole);
- if (EFI_ERROR (Status)) {
- PlatformBdsNoConsoleAction ();
- }
- PlatformBdsConnectSequence ();
- }
- }
- #ifdef TPM_ENABLED
- TcgPhysicalPresenceLibProcessRequest();
- #endif
-
- if (EsrtManagement != NULL) {
- EsrtManagement->SyncEsrtFmp();
- }
- //
- // Close boot script and install ready to lock
- //
- InstallReadyToLock ();
-
- //
- // Here we have enough time to do the enumeration of boot device
- //
- PlatformBdsLibEnumerateAllBootOption (BootOptionList);
-
- //
- // Give one chance to enter the setup if we
- // have the time out
- //
- PlatformBdsEnterFrontPageWithHotKey (Timeout, FALSE);
-
- //
- // Give one chance to enter the setup if we
- // select Gummiboot "Reboot Into Firmware Interface"
- //
- BootIntoFirmwareInterface();
-
- //
- // In default boot mode, always find all boot
- // option and do enumerate all the default boot option
- //
- if (Timeout == 0) {
- BdsLibBuildOptionFromVar (BootOptionList, L"BootOrder");
- if (IsListEmpty(BootOptionList)) {
- PlatformBdsPredictBootOption (BootOptionList);
- }
-
- return;
- }
-
-
- break;
- }
-
-
- IsFirstBoot = PcdGetBool(PcdBootState);
- if (IsFirstBoot) {
- PcdSetBool(PcdBootState, FALSE);
- }
- return;
-
-}
-
-/**
- Hook point after a boot attempt succeeds. We don't expect a boot option to
- return, so the UEFI 2.0 specification defines that you will default to an
- interactive mode and stop processing the BootOrder list in this case. This
- is alos a platform implementation and can be customized by IBV/OEM.
-
- @param Option Pointer to Boot Option that succeeded to boot.
-
- @retval None.
-
-**/
-VOID
-EFIAPI
-PlatformBdsBootSuccess (
- IN BDS_COMMON_OPTION *Option
- )
-{
- CHAR16 *TmpStr;
-
- //
- // If Boot returned with EFI_SUCCESS and there is not in the boot device
- // select loop then we need to pop up a UI and wait for user input.
- //
- TmpStr = Option->StatusString;
- if (TmpStr != NULL) {
- BdsLibOutputStrings (gST->ConOut, TmpStr, Option->Description, L"\n\r", NULL);
- FreePool(TmpStr);
- }
-}
-
-/**
- Hook point after a boot attempt fails.
-
- @param Option - Pointer to Boot Option that failed to boot.
- @param Status - Status returned from failed boot.
- @param ExitData - Exit data returned from failed boot.
- @param ExitDataSize - Exit data size returned from failed boot.
-
- @retval None.
-
-**/
-VOID
-EFIAPI
-PlatformBdsBootFail (
- IN BDS_COMMON_OPTION *Option,
- IN EFI_STATUS Status,
- IN CHAR16 *ExitData,
- IN UINTN ExitDataSize
- )
-{
- CHAR16 *TmpStr;
- EFI_HANDLE FvProtocolHandle;
-
- //
- // If Boot returned with failed status then we need to pop up a UI and wait
- // for user input.
- //
- TmpStr = Option->StatusString;
- if (TmpStr != NULL) {
- BdsLibOutputStrings (gST->ConOut, TmpStr, Option->Description, L"\n\r", NULL);
- FreePool(TmpStr);
- }
- if (PcdGet32(PcdFlashFvShellSize) > 0){
- gDS->ProcessFirmwareVolume (
- (VOID *)(UINTN)PcdGet32(PcdFlashFvShellBase),
- PcdGet32(PcdFlashFvShellSize),
- &FvProtocolHandle
- );
- }
- PlatformBdsConnectSequence ();
-}
-
-/**
- This function is remained for IBV/OEM to do some platform action,
- if there no console device can be connected.
-
- @param None.
-
- @retval EFI_SUCCESS Direct return success now.
-
-**/
-EFI_STATUS
-PlatformBdsNoConsoleAction (
- VOID
- )
-{
- return EFI_SUCCESS;
-}
-
-/**
- This function locks the block
-
- @param Base The base address flash region to be locked.
-
-**/
-VOID
-BdsLockFv (
- IN EFI_PHYSICAL_ADDRESS Base
- )
-{
- EFI_FV_BLOCK_MAP_ENTRY *BlockMap;
- EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
- EFI_PHYSICAL_ADDRESS BaseAddress;
- UINT32 BlockLength;
- UINTN Index;
-
- BaseAddress = Base - 0x400000 + 2;
- FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) (Base));
- BlockMap = &(FvHeader->BlockMap[0]);
-
- while ((BlockMap->NumBlocks != 0) && (BlockMap->Length != 0)) {
- BlockLength = BlockMap->Length;
- for (Index = 0; Index < BlockMap->NumBlocks; Index++) {
- MmioOr8 ((UINTN) BaseAddress, 0x03);
- BaseAddress += BlockLength;
- }
- BlockMap++;
- }
-}
-
-VOID
-EFIAPI
-PlatformBdsLockNonUpdatableFlash (
- VOID
- )
-{
- EFI_PHYSICAL_ADDRESS Base;
-
- Base = (EFI_PHYSICAL_ADDRESS) PcdGet32 (PcdFlashFvMainBase);
- if (Base > 0) {
- BdsLockFv (Base);
- }
-
- Base = (EFI_PHYSICAL_ADDRESS) PcdGet32 (PcdFlashFvRecoveryBase);
- if (Base > 0) {
- BdsLockFv (Base);
- }
-}
-
-/**
- Lock the ConsoleIn device in system table. All key
- presses will be ignored until the Password is typed in. The only way to
- disable the password is to type it in to a ConIn device.
-
- @param Password Password used to lock ConIn device.
-
- @retval EFI_SUCCESS lock the Console In Spliter virtual handle successfully.
- @retval EFI_UNSUPPORTED Password not found
-
-**/
-EFI_STATUS
-EFIAPI
-LockKeyboards (
- IN CHAR16 *Password
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-/**
- Connect the predefined platform default authentication devices.
-
- This function connects the predefined device path for authentication device,
- and if the predefined device path has child device path, the child handle will
- be connected too. But the child handle of the child will not be connected.
-
-**/
-VOID
-EFIAPI
-PlatformBdsConnectAuthDevice (
- VOID
- )
-{
- EFI_STATUS Status;
- UINTN Index;
- UINTN HandleIndex;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- EFI_DEVICE_PATH_PROTOCOL *ChildDevicePath;
- EFI_USER_MANAGER_PROTOCOL *Manager;
-
- Status = gBS->LocateProtocol (
- &gEfiUserManagerProtocolGuid,
- NULL,
- (VOID **) &Manager
- );
- if (EFI_ERROR (Status)) {
- //
- // As user manager protocol is not installed, the authentication devices
- // should not be connected.
- //
- return ;
- }
-
- Index = 0;
- while (gUserAuthenticationDevice[Index] != NULL) {
- //
- // Connect the platform customized device paths
- //
- BdsLibConnectDevicePath (gUserAuthenticationDevice[Index]);
- Index++;
- }
-
- //
- // Find and connect the child device paths of the platform customized device paths
- //
- HandleBuffer = NULL;
- for (Index = 0; gUserAuthenticationDevice[Index] != NULL; Index++) {
- HandleCount = 0;
- Status = gBS->LocateHandleBuffer (
- AllHandles,
- NULL,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- ASSERT (!EFI_ERROR (Status));
-
- //
- // Find and connect the child device paths of gUserIdentificationDevice[Index]
- //
- for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) {
- ChildDevicePath = NULL;
- Status = gBS->HandleProtocol (
- HandleBuffer[HandleIndex],
- &gEfiDevicePathProtocolGuid,
- (VOID **) &ChildDevicePath
- );
- if (EFI_ERROR (Status) || ChildDevicePath == NULL) {
- continue;
- }
-
- if (CompareMem (
- ChildDevicePath,
- gUserAuthenticationDevice[Index],
- (GetDevicePathSize (gUserAuthenticationDevice[Index]) - sizeof (EFI_DEVICE_PATH_PROTOCOL))
- ) != 0) {
- continue;
- }
- gBS->ConnectController (
- HandleBuffer[HandleIndex],
- NULL,
- NULL,
- TRUE
- );
- }
- }
-
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- }
-}
-
-/**
- This function is to identify a user, and return whether deferred images exist.
-
- @param[out] User Point to user profile handle.
- @param[out] DeferredImageExist On return, points to TRUE if the deferred image
- exist or FALSE if it did not exist.
-
-**/
-VOID
-EFIAPI
-PlatformBdsUserIdentify (
- OUT EFI_USER_PROFILE_HANDLE *User,
- OUT BOOLEAN *DeferredImageExist
- )
-{
- EFI_STATUS Status;
- EFI_DEFERRED_IMAGE_LOAD_PROTOCOL *DeferredImage;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuf;
- UINTN Index;
- UINTN DriverIndex;
- EFI_DEVICE_PATH_PROTOCOL *ImageDevicePath;
- VOID *DriverImage;
- UINTN ImageSize;
- BOOLEAN BootOption;
-
- //
- // Perform user identification
- //
- do {
- Status = BdsLibUserIdentify (User);
- } while (EFI_ERROR (Status));
-
- //
- // After user authentication now, try to find whether deferred image exists
- //
- HandleCount = 0;
- HandleBuf = NULL;
- *DeferredImageExist = FALSE;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiDeferredImageLoadProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuf
- );
- if (EFI_ERROR (Status)) {
- return ;
- }
-
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->HandleProtocol (
- HandleBuf[Index],
- &gEfiDeferredImageLoadProtocolGuid,
- (VOID **) &DeferredImage
- );
- if (!EFI_ERROR (Status)) {
- //
- // Find whether deferred image exists in this instance.
- //
- DriverIndex = 0;
- Status = DeferredImage->GetImageInfo(
- DeferredImage,
- DriverIndex,
- &ImageDevicePath,
- (VOID **) &DriverImage,
- &ImageSize,
- &BootOption
- );
- if (!EFI_ERROR (Status)) {
- //
- // The deferred image is found.
- //
- FreePool (HandleBuf);
- *DeferredImageExist = TRUE;
- return ;
- }
- }
- }
-
- FreePool (HandleBuf);
-}
-
-UINTN gHotKey = 0;
-
-
-EFI_STATUS
-ShowProgressHotKey (
- IN UINT16 TimeoutDefault
- )
-{
- CHAR16 *TmpStr;
- UINT16 TimeoutRemain;
- EFI_STATUS Status;
- EFI_INPUT_KEY Key;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL Color;
- UINT32 GpioValue;
- CHAR16 *TmpStr1;
- CHAR16 *TmpStr2;
- CHAR16 *TmpStr3;
- UINTN TmpStrSize;
- VOID *Buffer;
- UINTN Size;
-
- if (TimeoutDefault == 0) {
- return EFI_TIMEOUT;
- }
-
- gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));
-
- if (DebugAssertEnabled())
- {
- DEBUG ((EFI_D_INFO, "\n\nStart showing progress bar... Press any key to stop it, or press <F2> or <DEL> to enter setup page! ...Zzz....\n"));
- }
- else
- {
- #ifdef __GNUC__
- SerialPortWrite((UINT8 *)"\n\n>>>>Start boot option, Press <F2> or <DEL> to enter setup page(5 Sec)[GCC]", 76);
- #else
- SerialPortWrite((UINT8 *)"\n\n>>>>Start boot option, Press <F2> or <DEL> to enter setup page(5 Sec)", 71);
- #endif
- }
- SetMem (&Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);
- SetMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0x0);
- SetMem (&Color, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);
-
- TmpStr2 = NULL;
- TmpStr3 = NULL;
-
- //
- // Check if the platform is using test key.
- //
- Status = GetSectionFromAnyFv(
- PcdGetPtr(PcdEdkiiRsa2048Sha256TestPublicKeyFileGuid),
- EFI_SECTION_RAW,
- 0,
- &Buffer,
- &Size
- );
- if (!EFI_ERROR(Status)) {
- if ((Size == PcdGetSize(PcdRsa2048Sha256PublicKeyBuffer)) &&
- (CompareMem(Buffer, PcdGetPtr(PcdRsa2048Sha256PublicKeyBuffer), Size) == 0)) {
- TmpStr2 = L"WARNING: Recovery Test Key is used.\r\n";
- if (DebugAssertEnabled()) {
- DEBUG ((DEBUG_INFO, "\n\nWARNING: Recovery Test Key is used.\n"));
- } else {
- SerialPortWrite((UINT8 *)"\n\nWARNING: Recovery Test Key is used.", sizeof("\n\nWARNING: Recovery Test Key is used."));
- }
- PcdSetBoolS(PcdTestKeyUsed, TRUE);
- }
- FreePool(Buffer);
- }
- Status = GetSectionFromAnyFv(
- PcdGetPtr(PcdEdkiiPkcs7TestPublicKeyFileGuid),
- EFI_SECTION_RAW,
- 0,
- &Buffer,
- &Size
- );
- if (!EFI_ERROR(Status)) {
- if ((Size == PcdGetSize(PcdPkcs7CertBuffer)) &&
- (CompareMem(Buffer, PcdGetPtr(PcdPkcs7CertBuffer), Size) == 0)) {
- TmpStr3 = L"WARNING: Capsule Test Key is used.\r\n";
- if (DebugAssertEnabled()) {
- DEBUG ((DEBUG_INFO, "\n\nWARNING: Capsule Test Key is used.\r\n"));
- } else {
- SerialPortWrite((UINT8 *)"\n\nWARNING: Capsule Test Key is used.", sizeof("\n\nWARNING: Capsule Test Key is used."));
- }
- PcdSetBoolS(PcdTestKeyUsed, TRUE);
- }
- FreePool(Buffer);
- }
-
- //
- // Clear the progress status bar first
- //
- TmpStr1 = L"Start boot option, Press <F2> or <DEL> to enter setup page.\r\n";
- TmpStrSize = StrSize(TmpStr1);
- if (TmpStr2 != NULL) {
- TmpStrSize += StrSize(TmpStr2);
- }
- if (TmpStr3 != NULL) {
- TmpStrSize += StrSize(TmpStr3);
- }
- TmpStr = AllocatePool (TmpStrSize);
- if (TmpStr == NULL) {
- TmpStr = TmpStr1;
- } else {
- StrCpyS(TmpStr, TmpStrSize/sizeof(CHAR16), TmpStr1);
- if (TmpStr2 != NULL) {
- StrCatS(TmpStr, TmpStrSize/sizeof(CHAR16), TmpStr2);
- }
- if (TmpStr3 != NULL) {
- StrCatS(TmpStr, TmpStrSize/sizeof(CHAR16), TmpStr3);
- }
- }
- PlatformBdsShowProgress (Foreground, Background, TmpStr, Color, 0, 0);
-
- TimeoutRemain = TimeoutDefault;
- while (TimeoutRemain != 0) {
- if (DebugAssertEnabled())
- {
- DEBUG ((EFI_D_INFO, "Showing progress bar...Remaining %d second!\n", TimeoutRemain));
- }
- else
- {
- SerialPortWrite ((UINT8 *)".", 1);
- }
- Status = WaitForSingleEvent (gST->ConIn->WaitForKey, ONE_SECOND);
- if (Status != EFI_TIMEOUT) {
- break;
- }
- TimeoutRemain--;
-
- //
- // Show progress
- //
- if (TmpStr != NULL) {
- PlatformBdsShowProgress (
- Foreground,
- Background,
- TmpStr,
- Color,
- ((TimeoutDefault - TimeoutRemain) * 100 / TimeoutDefault),
- 0
- );
- }
- }
-
- //
- // Timeout expired
- //
- if (TimeoutRemain == 0) {
- if (DebugAssertEnabled())
- {
- }
- else
- {
- SerialPortWrite ((UINT8 *)"\r\n", 2);
- }
- return EFI_TIMEOUT;
- }
-
- //
- // User pressed some key
- //
- Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Check Volume Up Key to enter Setup
- //
- GpioValue = MmioRead32 (IO_BASE_ADDRESS + 0x0668); // The value of GPIOC_5
- if (((GpioValue & BIT0) == 0) && (Key.ScanCode == SCAN_UP)) {
- gHotKey = 0;
- return EFI_SUCCESS;
- }
-
- if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {
- //
- // User pressed enter, equivalent to select "continue"
- //
- return EFI_TIMEOUT;
- }
-
- //
- //F2 -- Front Page
- //F5 -- Device Manager
- //F7 -- Boot Manager
- // do not use F8. generally people assume it is windows safe mode key.
- //F9 -- Boot order
- //
- DEBUG ((EFI_D_INFO, "[Key Pressed]: ScanCode 0x%x\n", Key.ScanCode));
- switch(Key.ScanCode) {
- case SCAN_F2:
- gHotKey = 0;
- break;
-
- case SCAN_DELETE:
- gHotKey = 0;
- break;
-
- case SCAN_F5:
- gHotKey = FRONT_PAGE_KEY_DEVICE_MANAGER;
- break;
-
- case SCAN_F7:
- gHotKey = FRONT_PAGE_KEY_BOOT_MANAGER;
- break;
-
- case SCAN_F9:
- gHotKey = FRONT_PAGE_KEY_BOOT_MAINTAIN;
- break;
-
- default:
- //set gHotKey to continue so that flow will not go into CallFrontPage
- gHotKey = FRONT_PAGE_KEY_CONTINUE;
- return EFI_TIMEOUT;
- break;
- }
-
- return EFI_SUCCESS;
-}
-
-
-
-/**
- This function is the main entry of the platform setup entry.
- The function will present the main menu of the system setup,
- this is the platform reference part and can be customize.
-
-
- @param TimeoutDefault The fault time out value before the system
- continue to boot.
- @param ConnectAllHappened The indicater to check if the connect all have
- already happened.
-
-**/
-VOID
-PlatformBdsEnterFrontPageWithHotKey (
- IN UINT16 TimeoutDefault,
- IN BOOLEAN ConnectAllHappened
- )
-{
- EFI_STATUS Status;
-
- EFI_STATUS LogoStatus;
- EFI_BOOT_LOGO_PROTOCOL *BootLogo;
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut;
- UINTN BootTextColumn;
- UINTN BootTextRow;
-
- GraphicsOutput = NULL;
- SimpleTextOut = NULL;
-
- PERF_START (NULL, "BdsTimeOut", "BDS", 0);
-
- //
- // Indicate if we need connect all in the platform setup
- //
- if (ConnectAllHappened) {
- gConnectAllHappened = TRUE;
- }
-
- if (!mModeInitialized) {
- //
- // After the console is ready, get current video resolution
- // and text mode before launching setup at first time.
- //
- Status = gBS->HandleProtocol (
- gST->ConsoleOutHandle,
- &gEfiGraphicsOutputProtocolGuid,
- (VOID**)&GraphicsOutput
- );
- if (EFI_ERROR (Status)) {
- GraphicsOutput = NULL;
- }
-
- Status = gBS->HandleProtocol (
- gST->ConsoleOutHandle,
- &gEfiSimpleTextOutProtocolGuid,
- (VOID**)&SimpleTextOut
- );
- if (EFI_ERROR (Status)) {
- SimpleTextOut = NULL;
- }
-
- if (GraphicsOutput != NULL) {
- //
- // Get current video resolution and text mode.
- //
- mBootHorizontalResolution = GraphicsOutput->Mode->Info->HorizontalResolution;
- mBootVerticalResolution = GraphicsOutput->Mode->Info->VerticalResolution;
- }
-
- if (SimpleTextOut != NULL) {
- Status = SimpleTextOut->QueryMode (
- SimpleTextOut,
- SimpleTextOut->Mode->Mode,
- &BootTextColumn,
- &BootTextRow
- );
- mBootTextModeColumn = (UINT32)BootTextColumn;
- mBootTextModeRow = (UINT32)BootTextRow;
- }
-
- //
- // Get user defined text mode for setup.
- //
- mSetupHorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);
- mSetupVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);
- mSetupTextModeColumn = PcdGet32 (PcdSetupConOutColumn);
- mSetupTextModeRow = PcdGet32 (PcdSetupConOutRow);
-
- mModeInitialized = TRUE;
- }
-
- if (TimeoutDefault != 0xffff) {
- Status = ShowProgressHotKey (TimeoutDefault);
-
- //
- // Ensure screen is clear when switch Console from Graphics mode to Text mode
- //
- gST->ConOut->EnableCursor (gST->ConOut, TRUE);
- gST->ConOut->ClearScreen (gST->ConOut);
-
- //
- // Boot Logo is corrupted, report it using Boot Logo protocol.
- //
- LogoStatus = gBS->LocateProtocol (&gEfiBootLogoProtocolGuid, NULL, (VOID **) &BootLogo);
- if (!EFI_ERROR (LogoStatus) && (BootLogo != NULL)) {
- BootLogo->SetBootLogo (BootLogo, NULL, 0, 0, 0, 0);
- }
-
- if (EFI_ERROR (Status)) {
- //
- // Timeout or user press enter to continue
- //
- goto Exit;
- }
- }
-
- //
- // Install BM HiiPackages.
- // Keep BootMaint HiiPackage, so that it can be covered by global setting.
- //
- InitBMPackage ();
- do {
-
- BdsSetConsoleMode (TRUE);
-
- InitializeFrontPage (FALSE);
-
- //
- // Update Front Page strings
- //
- UpdateFrontPageStrings ();
-
- Status = EFI_SUCCESS;
- gCallbackKey = 0;
- if (gHotKey == 0) {
- Status = CallFrontPage ();
- } else {
- gCallbackKey = gHotKey;
- gHotKey = 0;
- }
-
- //
- // If gCallbackKey is greater than 1 and less or equal to 5,
- // it will launch configuration utilities.
- // 2 = set language
- // 3 = boot manager
- // 4 = device manager
- // 5 = boot maintenance manager
- //
- if (gCallbackKey != 0) {
- REPORT_STATUS_CODE (
- EFI_PROGRESS_CODE,
- (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_PC_USER_SETUP)
- );
- }
-
- //
- // Based on the key that was set, we can determine what to do
- //
- switch (gCallbackKey) {
- //
- // The first 4 entries in the Front Page are to be GUARANTEED to remain constant so IHV's can
- // describe to their customers in documentation how to find their setup information (namely
- // under the device manager and specific buckets)
- //
- // These entries consist of the Continue, Select language, Boot Manager, and Device Manager
- //
- case FRONT_PAGE_KEY_CONTINUE:
-
- //
- // User hit continue
- //
- break;
-
- case FRONT_PAGE_KEY_LANGUAGE:
-
- //
- // User made a language setting change - display front page again
- //
- break;
-
- case FRONT_PAGE_KEY_BOOT_MANAGER:
- //
- // Remove the installed BootMaint HiiPackages when exit.
- //
- FreeBMPackage ();
-
- //
- // User chose to run the Boot Manager
- //
- CallBootManager ();
-
- //
- // Reinstall BootMaint HiiPackages after exiting from Boot Manager.
- //
- InitBMPackage ();
- break;
-
- case FRONT_PAGE_KEY_DEVICE_MANAGER:
-
- //
- // Display the Device Manager
- //
- do {
- CallDeviceManager ();
- } while (gCallbackKey == FRONT_PAGE_KEY_DEVICE_MANAGER);
- break;
-
- case FRONT_PAGE_KEY_BOOT_MAINTAIN:
-
- //
- // Display the Boot Maintenance Manager
- //
- BdsStartBootMaint ();
- break;
- }
-
- } while (((UINTN)gCallbackKey) != FRONT_PAGE_KEY_CONTINUE);
-
- //
- //Will leave browser, check any reset required change is applied? if yes, reset system
- //
- SetupResetReminder ();
- //
- // Remove the installed BootMaint HiiPackages when exit.
- //
- FreeBMPackage ();
-
-Exit:
- //
- // Automatically load current entry
- // Note: The following lines of code only execute when Auto boot
- // takes affect
- //
- PERF_END (NULL, "BdsTimeOut", "BDS", 0);
-}
-
-
-VOID
-BootIntoFirmwareInterface(
-VOID
-)
-{
- EFI_STATUS Status;
- UINTN DataSize;
- UINT16 Timeout;
- UINT64 OsIndication;
-
-
- OsIndication = 0;
- DataSize = sizeof(UINT64);
- Status = gRT->GetVariable (
- L"OsIndications",
- &gEfiGlobalVariableGuid,
- NULL,
- &DataSize,
- &OsIndication
- );
-
- DEBUG ((EFI_D_INFO, "OSIndication Variable Value %d\n", OsIndication));
- //
- //Goto FrontPage directly when bit EFI_OS_INDICATIONS_BOOT_TO_FW_UI in OSIndication Variable is setted.
- //
- if (!EFI_ERROR(Status) && (OsIndication != 0)) {
- Timeout = 0xffff;
- PlatformBdsEnterFrontPage (Timeout, FALSE);
- }
-}
-
-
-EFI_STATUS
-PlatformBdsConnectSimpleConsole (
- IN BDS_CONSOLE_CONNECT_ENTRY *PlatformConsole
-)
-{
- EFI_STATUS Status;
- UINTN Index;
- EFI_DEVICE_PATH_PROTOCOL *VarConout;
- EFI_DEVICE_PATH_PROTOCOL *VarConin;
- UINTN DevicePathSize;
-
-
- Index = 0;
- Status = EFI_SUCCESS;
- DevicePathSize = 0;
- VarConout = BdsLibGetVariableAndSize (
- L"ConOut",
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
- VarConin = BdsLibGetVariableAndSize (
- L"ConIn",
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
- if (VarConout == NULL || VarConin == NULL) {
- //
- // Have chance to connect the platform default console,
- // the platform default console is the minimum device group
- // the platform should support
- //
- while (PlatformConsole[Index].DevicePath != NULL) {
-
- //
- // Update the console variable with the connect type
- //
- if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) == CONSOLE_IN) {
- BdsLibUpdateConsoleVariable (L"ConIn", PlatformConsole[Index].DevicePath, NULL);
- }
-
- if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) == CONSOLE_OUT) {
- BdsLibUpdateConsoleVariable (L"ConOut", PlatformConsole[Index].DevicePath, NULL);
- }
-
- if ((PlatformConsole[Index].ConnectType & STD_ERROR) == STD_ERROR) {
- BdsLibUpdateConsoleVariable (L"ErrOut", PlatformConsole[Index].DevicePath, NULL);
- }
-
- Index ++;
- }
- }
-
- //
- // Connect ConIn first to give keyboard time to parse hot key event.
- //
- Status = BdsLibConnectConsoleVariable (L"ConIn");
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Make sure we have at least one active VGA, and have the right
- // active VGA in console variable
- //
- Status = PlatformBdsForceActiveVga ();
-
- //
- // It seems impossible not to have any ConOut device on platform,
- // so we check the status here.
- //
- Status = BdsLibConnectConsoleVariable (L"ConOut");
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Timer handler to convert the key from USB.
-
- @param Event Indicates the event that invoke this function.
- @param Context Indicates the calling context.
-**/
-VOID
-EFIAPI
-HotKeyTimerHandler (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- EFI_STATUS Status;
- EFI_INPUT_KEY Key;
-
- Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
- if (EFI_ERROR (Status)) {
- return;
- }
-
- switch(Key.ScanCode) {
- case SCAN_F2:
- gHotKey = 0;
- mHotKeyPressed = TRUE;
- break;
-
- case SCAN_F5:
- gHotKey = FRONT_PAGE_KEY_DEVICE_MANAGER;
- mHotKeyPressed = TRUE;
- break;
-
- case SCAN_F7:
- gHotKey = FRONT_PAGE_KEY_BOOT_MANAGER;
- mHotKeyPressed = TRUE;
- break;
-
- case SCAN_F9:
- gHotKey = FRONT_PAGE_KEY_BOOT_MAINTAIN;
- mHotKeyPressed = TRUE;
- break;
- }
-
- if (mHotKeyPressed) {
- gBS->SetTimer (
- mHotKeyTimerEvent,
- TimerCancel,
- 0
- );
- gBS->CloseEvent (mHotKeyTimerEvent);
- mHotKeyTimerEvent = NULL;
- }
-
- return;
-}
-
-
-/**
- Callback function for SimpleTextInEx protocol install events
-
- @param Event the event that is signaled.
- @param Context not used here.
-
-**/
-VOID
-EFIAPI
-HitHotkeyEvent (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- EFI_STATUS Status;
-
- Status = gBS->CloseEvent(mHitHotkeyEvent);
- if (EFI_ERROR (Status)) {
- return;
- }
- Status = gBS->CreateEvent (
- EVT_TIMER | EVT_NOTIFY_SIGNAL,
- TPL_NOTIFY,
- HotKeyTimerHandler,
- NULL,
- &mHotKeyTimerEvent
- );
- if (EFI_ERROR (Status)) {
- return;
- }
- Status = gBS->SetTimer (
- mHotKeyTimerEvent,
- TimerPeriodic,
- KEYBOARD_TIMER_INTERVAL
- );
- if (EFI_ERROR (Status)) {
- return;
- }
-
- return;
-}
-
-
-VOID
-EFIAPI
-PlatformBdsInitHotKeyEvent (
- VOID
- )
-{
- EFI_STATUS Status;
-
- //
- // Register Protocol notify for Hotkey service
- //
- Status = gBS->CreateEvent (
- EVT_NOTIFY_SIGNAL,
- TPL_CALLBACK,
- HitHotkeyEvent,
- NULL,
- &mHitHotkeyEvent
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Register for protocol notifications on this event
- //
- Status = gBS->RegisterProtocolNotify (
- &gEfiSimpleTextInputExProtocolGuid,
- mHitHotkeyEvent,
- &mHitHotkeyRegistration
- );
- ASSERT_EFI_ERROR (Status);
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h
deleted file mode 100644
index b5bb519747..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h
+++ /dev/null
@@ -1,516 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- BdsPlatform.h
-
-Abstract:
-
- Head file for BDS Platform specific code
-
---*/
-
-#ifndef _BDS_PLATFORM_H
-#define _BDS_PLATFORM_H
-
-#include <FrameworkDxe.h>
-
-#include <Protocol/FirmwareVolume2.h>
-#include <Protocol/DevicePath.h>
-#include <Protocol/SimpleNetwork.h>
-#include <Protocol/PciRootBridgeIo.h>
-#include <Protocol/LoadFile.h>
-#include <Protocol/LegacyBios.h>
-#include <Protocol/PciIo.h>
-#include <Protocol/SmmAccess2.h>
-#include <Protocol/DxeSmmReadyToLock.h>
-#include <Protocol/UserManager.h>
-#include <Protocol/DeferredImageLoad.h>
-#include <Protocol/AcpiS3Save.h>
-#include <Protocol/ExitPmAuth.h>
-#include <Protocol/MmioDevice.h>
-#include <Protocol/I2cBusMcg.h>
-#include <Protocol/I2cHostMcg.h>
-#include <Guid/CapsuleVendor.h>
-#include <Guid/MemoryTypeInformation.h>
-#include <Guid/GlobalVariable.h>
-#include <Guid/DebugAgentGuid.h>
-
-
-#include <Library/DebugLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/BaseLib.h>
-#include <Library/PcdLib.h>
-#include <Library/IoLib.h>
-#include <Library/GenericBdsLib.h>
-#include <Library/PlatformBdsLib.h>
-#include <Library/DevicePathLib.h>
-#include <Library/UefiLib.h>
-#include <Library/HobLib.h>
-#include <Library/PrintLib.h>
-#include <Library/PerformanceLib.h>
-#include <Library/ReportStatusCodeLib.h>
-
-#include <IndustryStandard/Pci.h>
-
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformRootBridges [];
-extern BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole [];
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformAllPossiblePciVgaConsole [];
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence [];
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformDriverOption [];
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformBootOption [];
-extern EFI_DEVICE_PATH_PROTOCOL *gUserAuthenticationDevice[];
-extern BDS_CONSOLE_CONNECT_ENTRY gPlatformSimpleConsole [];
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformSimpleBootOption [];
-
-extern BOOLEAN mEnumBootDevice;
-
-
-//
-// the short form device path for Usb keyboard
-//
-#define CLASS_HID 3
-#define SUBCLASS_BOOT 1
-#define PROTOCOL_KEYBOARD 1
-
-#define PCI_DEVICE_PATH_NODE(Func, Dev) \
- { \
- HARDWARE_DEVICE_PATH, \
- HW_PCI_DP, \
- { \
- (UINT8) (sizeof (PCI_DEVICE_PATH)), \
- (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \
- }, \
- (Func), \
- (Dev) \
- }
-
-#define PNPID_DEVICE_PATH_NODE(PnpId) \
- { \
- { \
- ACPI_DEVICE_PATH, \
- ACPI_DP, \
- { \
- (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
- (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
- } \
- }, \
- EISA_PNP_ID((PnpId)), \
- 0 \
- }
-
-#define gUart(BaudRate, DataBits, Parity, StopBits) \
- { \
- { \
- MESSAGING_DEVICE_PATH, \
- MSG_UART_DP, \
- { \
- (UINT8) (sizeof (UART_DEVICE_PATH)), \
- (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \
- } \
- }, \
- 0, \
- (BaudRate), \
- (DataBits), \
- (Parity), \
- (StopBits) \
- }
-
-#define gPcAnsiTerminal \
- { \
- { \
- MESSAGING_DEVICE_PATH, \
- MSG_VENDOR_DP, \
- { \
- (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \
- (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \
- } \
- }, \
- DEVICE_PATH_MESSAGING_PC_ANSI \
- }
-
-#define gUsbKeyboardMouse \
- { \
- { \
- MESSAGING_DEVICE_PATH, \
- MSG_USB_CLASS_DP, \
- (UINT8) (sizeof (USB_CLASS_DEVICE_PATH)), \
- (UINT8) ((sizeof (USB_CLASS_DEVICE_PATH)) >> 8) \
- }, \
- 0xffff, \
- 0xffff, \
- CLASS_HID, \
- SUBCLASS_BOOT, \
- PROTOCOL_KEYBOARD \
- }
-
-#define gEndEntire \
- { \
- END_DEVICE_PATH_TYPE, \
- END_ENTIRE_DEVICE_PATH_SUBTYPE, \
- { \
- END_DEVICE_PATH_LENGTH, \
- 0 \
- } \
- }
-
-#define gPciRootBridge \
- PNPID_DEVICE_PATH_NODE(0x0A03)
-
-#define gPnpPs2Keyboard \
- PNPID_DEVICE_PATH_NODE(0x0303)
-
-#define gPnp16550ComPort \
- PNPID_DEVICE_PATH_NODE(0x0501)
-
-#define gPciePort0Bridge \
- PCI_DEVICE_PATH_NODE(0, 0x1C)
-
-#define gPciePort1Bridge \
- PCI_DEVICE_PATH_NODE(1, 0x1C)
-
-#define gPciePort2Bridge \
- PCI_DEVICE_PATH_NODE(2, 0x1C)
-
-#define gPciePort3Bridge \
- PCI_DEVICE_PATH_NODE(3, 0x1C)
-
-#define gPciIsaBridge \
- PCI_DEVICE_PATH_NODE(0, 0x1f)
-
-//
-// Platform Root Bridge
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_ROOT_BRIDGE_DEVICE_PATH;
-
-//
-// Below is the platform console device path
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH IsaBridge;
- ACPI_HID_DEVICE_PATH Keyboard;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_ISA_KEYBOARD_DEVICE_PATH;
-
-typedef struct {
- VENDOR_DEVICE_PATH VendorDevicePath;
- EFI_DEVICE_PATH_PROTOCOL End;
-} HII_VENDOR_DEVICE_PATH;
-
-typedef struct {
- USB_CLASS_DEVICE_PATH UsbClass;
- EFI_DEVICE_PATH_PROTOCOL End;
-} USB_CLASS_FORMAT_DEVICE_PATH;
-
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH OnboardVga;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_ONBOARD_VGA_DEVICE_PATH;
-
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH AgpBridge;
- PCI_DEVICE_PATH AgpDevice;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_OFFBOARD_VGA_DEVICE_PATH;
-
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH IsaBridge;
- ACPI_HID_DEVICE_PATH IsaSerial;
- UART_DEVICE_PATH Uart;
- VENDOR_DEVICE_PATH TerminalType;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_ISA_SERIAL_DEVICE_PATH;
-
-//
-// Below is the boot option device path
-//
-typedef struct {
- BBS_BBS_DEVICE_PATH LegacyHD;
- EFI_DEVICE_PATH_PROTOCOL End;
-} LEGACY_HD_DEVICE_PATH;
-
-//
-// Below is the platform IDE device path
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH IsaBridge;
- ATAPI_DEVICE_PATH Ide;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_IDE_DEVICE_PATH;
-
-//
-// Floppy device path definition
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH IsaBridge;
- ACPI_HID_DEVICE_PATH Floppy;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_FLOPPY_DEVICE_PATH;
-
-//
-// Below is the platform USB controller device path for
-// USB disk as user authentication device.
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH PciDevice;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_USB_DEVICE_PATH;
-
-//
-// Debug Agent UART Console device path definition
-//
-typedef struct {
- VENDOR_DEVICE_PATH VendorHardware;
- UART_DEVICE_PATH Uart;
- VENDOR_DEVICE_PATH TerminalType;
- EFI_DEVICE_PATH_PROTOCOL End;
-} VENDOR_UART_DEVICE_PATH;
-
-//
-// Below is the platform PCI device path
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH PciDevice;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_PCI_DEVICE_PATH;
-
-typedef enum {
- PMIC_Equal = 0, // = 0
- PMIC_Greater_Than, // > 1
- PMIC_Smaller_Than, // < 2
- PMIC_Greater_Equal, // >= 3
- PMIC_Smaller_Equal, // <= 4
- PMIC_Any // don't care 5
-} PMIC_Condition_list;
-
-typedef enum {
- PMIC_White_List = 0, //White list
- PMIC_Black_List = 1 //Black list
-} PMIC_Compliance_mode;
-
-typedef struct {
- UINT8 Cond_Choice; // PMIC_Condition_list
- UINT8 Cond_Number; // the number
-}PMIC_Condition_Item;
-
-typedef struct {
- PMIC_Condition_Item PMIC_BoardID;
- PMIC_Condition_Item PMIC_FabID;
- PMIC_Condition_Item Soc_Stepping;//define PMIC type, 1:Dialog , 2:Rohm
- PMIC_Condition_Item PMIC_VendID;
- PMIC_Condition_Item PMIC_RevID;
- PMIC_Compliance_mode mode; //if 1, blacklist; if 0, white list.
-} PMIC_Compliance_Item;
-
-//
-// Platform BDS Functions
-//
-VOID
-PlatformBdsGetDriverOption (
- IN LIST_ENTRY *BdsDriverLists
- );
-
-VOID
-PlatformBdsPredictBootOption (
- IN LIST_ENTRY *BdsBootOptionList
- );
-
-EFI_STATUS
-PlatformBdsShowProgress (
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground,
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground,
- CHAR16 *Title,
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor,
- UINTN Progress,
- UINTN PreviousValue
- );
-
-VOID
-PlatformBdsConnectSequence (
- VOID
- );
-
-EFI_STATUS
-PlatformBdsConnectConsole (
- IN BDS_CONSOLE_CONNECT_ENTRY *PlatformConsole
- );
-
-EFI_STATUS
-PlatformBdsNoConsoleAction (
- VOID
- );
-
-VOID
-PlatformBdsEnterFrontPage (
- IN UINT16 TimeoutDefault,
- IN BOOLEAN ConnectAllHappened
- );
-
-VOID
-EFIAPI
-PlatformBdsUserIdentify (
- OUT EFI_USER_PROFILE_HANDLE *User,
- OUT BOOLEAN *DeferredImage
- );
-
-VOID
-EFIAPI
-PlatformBdsConnectAuthDevice (
- VOID
- );
-
-VOID
-PlatformBdsEnterFrontPageWithHotKey (
- IN UINT16 TimeoutDefault,
- IN BOOLEAN ConnectAllHappened
- );
-
- EFI_STATUS
- ShowProgress (
- IN UINT16 TimeoutDefault
- );
-
- EFI_STATUS
- InitializeFrontPage (
- IN BOOLEAN InitializeHiiData
- );
-
- VOID
- UpdateFrontPageStrings (
- VOID
- );
-
-
- EFI_STATUS
- InitBMPackage (
- VOID
- );
-
-
- VOID
- FreeBMPackage (
- VOID
- );
-
-
- EFI_STATUS
- CallFrontPage (
- VOID
- );
-
-
- VOID
- CallBootManager (
- VOID
- );
-
-VOID
-CallDeviceManager (
- VOID
- );
-
-VOID
-BdsStartBootMaint (
- VOID
- );
-
-CHAR16 *
-GetStringById (
- IN EFI_STRING_ID Id
- );
-
-EFI_STATUS
-WaitForSingleEvent (
- IN EFI_EVENT Event,
- IN UINT64 Timeout OPTIONAL
- );
-
-EFI_STATUS
-BdsLibDeleteOptionFromHandle (
- IN EFI_HANDLE Handle
- );
-
-EFI_STATUS
-BdsDeleteAllInvalidEfiBootOption (
- VOID
- );
-
-
-#define ONE_SECOND 10000000
-#define FRONT_PAGE_KEY_CONTINUE 0x1000
-#define FRONT_PAGE_KEY_LANGUAGE 0x1234
-#define FRONT_PAGE_KEY_BOOT_MANAGER 0x1064
-#define FRONT_PAGE_KEY_DEVICE_MANAGER 0x8567
-#define FRONT_PAGE_KEY_BOOT_MAINTAIN 0x9876
-
-#define PORT_A_DVO 0 // ; DVO A
-#define PORT_B_DVO 1 // ; DVO B
-#define PORT_C_DVO 2 // ; DVO C
-#define PORT_D_DVO 3 // ; DVO D
-#define PORT_LVDS 4 // ; Integrated LVDS port
-#define PORT_ANALOG_TV 5 // ; Integrated TV port
-#define PORT_CRT 6 // ; integrated Analog port
-#define PORT_B_DP 7 // ; DisplayPort B
-#define PORT_C_DP 8 // ; DisplayPort C
-#define PORT_D_DP 9 // ; DisplayPort D
-#define PORT_A_DP 10 // ; DisplayPort A (for eDP on ILK)
-#define PORT_B_HDMI 11 // ; HDMI B
-#define PORT_C_HDMI 12 // ; HDMI C
-#define PORT_D_HDMI 13 // ; HDMI D
-#define PORT_B_DVI 14 // ; DVI B
-#define PORT_C_DVI 15 // ; DVI C
-#define PORT_D_DVI 16 // ; DVI D
-#define PORT_MIPI_A 21 // ; MIPI
-#define PORT_MIPI_B 22
-#define PORT_MIPI_C 23
-
-
-extern BOOLEAN gConnectAllHappened;
-extern UINTN gCallbackKey;
-
-VOID
-BdsBootDeviceSelect (
- VOID
-);
-VOID FastBoot(VOID);
-
-extern BOOLEAN mModeInitialized;
-
-//
-// Boot video resolution and text mode.
-//
-extern UINT32 mBootHorizontalResolution ;
-extern UINT32 mBootVerticalResolution ;
-extern UINT32 mBootTextModeColumn ;
-extern UINT32 mBootTextModeRow ;
-
-//
-// BIOS setup video resolution and text mode.
-//
-extern UINT32 mSetupTextModeColumn ;
-extern UINT32 mSetupTextModeRow ;
-extern UINT32 mSetupHorizontalResolution ;
-extern UINT32 mSetupVerticalResolution ;
-extern EFI_STATUS BdsSetConsoleMode (BOOLEAN);
-#endif // _BDS_PLATFORM_H
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf
deleted file mode 100644
index 66d11c6cda..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf
+++ /dev/null
@@ -1,128 +0,0 @@
-#/** @file
-# Component name for module PlatformBootManagerLib
-#
-# Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR>
-#
-
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-
-#
-#
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = PlatformBdsLib
- FILE_GUID = A6BC385D-59E5-4b77-87D7-200ABAA83C15
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = PlatformBootManagerLib|DXE_DRIVER
- EDK_RELEASE_VERSION = 0x00020000
- EFI_SPECIFICATION_VERSION = 0x0002000A
-
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- BdsPlatform.c
- BdsPlatform.h
- PlatformData.c
- PlatformBdsStrings.uni
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- ShellPkg/ShellPkg.dec
- CryptoPkg/CryptoPkg.dec
- SecurityPkg/SecurityPkg.dec
- SignedCapsulePkg/SignedCapsulePkg.dec
- SourceLevelDebugPkg/SourceLevelDebugPkg.dec
- NetworkPkg/NetworkPkg.dec
-
-[LibraryClasses]
- DxeServicesTableLib
- BaseLib
- MemoryAllocationLib
- UefiBootServicesTableLib
- UefiRuntimeServicesTableLib
- BaseMemoryLib
- DebugLib
- PcdLib
- GenericBdsLib
- DevicePathLib
- NetLib
- UefiLib
- HobLib
- PciLib
- PrintLib
- BaseCryptLib
-# TcgPhysicalPresenceLib
- Tcg2PhysicalPresenceLib
- FileHandleLib
- S3BootScriptLib
- SerialPortLib
- CapsuleLib
-
-[Protocols]
- gEfiFirmwareVolume2ProtocolGuid
- gEfiSimpleNetworkProtocolGuid
- gEfiLoadFileProtocolGuid
- gEfiPciIoProtocolGuid
- gEfiSmmAccess2ProtocolGuid
- gEfiDxeSmmReadyToLockProtocolGuid
- gEfiUserManagerProtocolGuid
- gEfiDeferredImageLoadProtocolGuid
- gEfiAcpiS3SaveProtocolGuid
- gEfiSpiProtocolGuid ## PROTOCOL CONSUMES
- gExitPmAuthProtocolGuid
- gEfiTdtOperationProtocolGuid
- gEfiGlobalNvsAreaProtocolGuid
- gEfiMmioDeviceProtocolGuid
- gEfiI2cMasterProtocolGuid
- gEfiI2cHostProtocolGuid
- gEsrtManagementProtocolGuid
-
-[Guids]
- gEfiMemoryTypeInformationGuid
- gEfiCapsuleVendorGuid
- gEfiGlobalVariableGuid
- gEfiNormalSetupGuid
- gEfiPartTypeSystemPartGuid
- gEfiEndOfDxeEventGroupGuid
- gUefiShellFileGuid
-
-[Pcd]
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiRsa2048Sha256TestPublicKeyFileGuid
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiPkcs7TestPublicKeyFileGuid
- gEfiSecurityPkgTokenSpaceGuid.PcdRsa2048Sha256PublicKeyBuffer
- gEfiSecurityPkgTokenSpaceGuid.PcdPkcs7CertBuffer
- gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed
- gPlatformModuleTokenSpaceGuid.PcdFlashFvRecovery2Base
- gPlatformModuleTokenSpaceGuid.PcdFlashFvMainBase
- gPlatformModuleTokenSpaceGuid.PcdFlashFvRecoveryBase
- gPlatformModuleTokenSpaceGuid.PcdFlashFvShellBase
- gPlatformModuleTokenSpaceGuid.PcdFlashFvShellSize
- gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile
- gPlatformModuleTokenSpaceGuid.PcdIFWISigBaseAddress
- gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow
- gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn
- gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution
- gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution
- gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
- gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutColumn
- gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutRow
- gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution
- gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootState
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsStrings.uni b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsStrings.uni
deleted file mode 100644
index 101106f9f4..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsStrings.uni
+++ /dev/null
@@ -1,30 +0,0 @@
-///** @file
-//
-// String definitions for Boot Option description.
-//
-// Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-//**/
-
-/=#
-
-#langdef en-US "English"
-#langdef fr-FR "Français"
-
-#string STR_DESCRIPTION_FLOPPY #language en-US "EFI Floppy"
- #language fr-FR "fr-FR: EFI Floppy"
-#string STR_DESCRIPTION_CD_DVD #language en-US "EFI DVD/CDROM"
- #language fr-FR "fr-FR: EFI DVD/CDROM"
-#string STR_DESCRIPTION_HARDDRIVE #language en-US "EFI Hard Drive"
- #language fr-FR "fr-FR: EFI Hard Drive"
-#string STR_DESCRIPTION_USB #language en-US "EFI USB Device"
- #language fr-FR "fr-FR: EFI USB Device"
-#string STR_DESCRIPTION_SCSI #language en-US "EFI SCSI Device"
- #language fr-FR "fr-FR: EFI SCSI Device"
-#string STR_DESCRIPTION_MISC #language en-US "EFI Misc Device"
- #language fr-FR "fr-FR: EFI Misc Device"
-#string STR_DESCRIPTION_NETWORK #language en-US "EFI Network"
- #language fr-FR "fr-FR: EFI Network"
-#string STR_DESCRIPTION_NON_BLOCK #language en-US "EFI Non-Block Boot Device"
- #language fr-FR "fr-FR: EFI Non-Block Boot Device"
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformData.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformData.c
deleted file mode 100644
index 9dff93f52b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformData.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- PlatformData.c
-
-Abstract:
-
- Defined the platform specific device path which will be used by
- platform Bbd to perform the platform policy connect.
-
---*/
-
-#include "BdsPlatform.h"
-
-//
-// Predefined platform default time out value
-//
-UINT16 gPlatformBootTimeOutDefault = 10;
-
-//
-// Predefined platform root bridge
-//
-PLATFORM_ROOT_BRIDGE_DEVICE_PATH gPlatformRootBridge0 = {
- gPciRootBridge,
- gEndEntire
-};
-
-EFI_DEVICE_PATH_PROTOCOL* gPlatformRootBridges [] = {
- (EFI_DEVICE_PATH_PROTOCOL*)&gPlatformRootBridge0,
- NULL
-};
-
-//
-// Platform specific ISA keyboard device path
-//
-PLATFORM_ISA_KEYBOARD_DEVICE_PATH gIsaKeyboardDevicePath = {
- gPciRootBridge,
- gPciIsaBridge,
- gPnpPs2Keyboard,
- gEndEntire
-};
-
-//
-// Platform specific on chip PCI VGA device path
-//
-PLATFORM_ONBOARD_VGA_DEVICE_PATH gOnChipPciVgaDevicePath = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(0, 0x2),
- gEndEntire
-};
-
-//
-// Platform specific plug in PCI VGA device path
-//
-PLATFORM_OFFBOARD_VGA_DEVICE_PATH gPlugInPciVgaDevicePath = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(0, 0x1),
- PCI_DEVICE_PATH_NODE(0, 0x0),
- gEndEntire
-};
-
-//
-// Platform specific ISA serial device path
-//
-PLATFORM_ISA_SERIAL_DEVICE_PATH gIsaSerialDevicePath = {
- gPciRootBridge,
- gPciIsaBridge,
- gPnp16550ComPort,
- gUart(115200, 8, 1, 1),
- gPcAnsiTerminal,
- gEndEntire
-};
-
-
-//
-// Platform specific Button Array device path
-//
-HII_VENDOR_DEVICE_PATH gHiiVendorDevicePath0 = {
- {
- {
- HARDWARE_DEVICE_PATH,
- HW_VENDOR_DP,
- {
- (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
- (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
- }
- },
-
- //
- // {C8752FDE-B5C8-4528-897D-6920FE771E38}
- //
- { 0xC8752FDE, 0xB5C8, 0x4528, { 0x89, 0x7D, 0x69, 0x20, 0xFE, 0x77, 0x1E, 0x38 } }
- },
- {
- END_DEVICE_PATH_TYPE,
- END_ENTIRE_DEVICE_PATH_SUBTYPE,
- {
- (UINT8) (END_DEVICE_PATH_LENGTH),
- (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)
- }
- }
-};
-
-USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath = {
- gUsbKeyboardMouse,
- gEndEntire
-};
-
-//
-// Debug Agent UART Console device path
-//
-VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = {
- {
- {
- HARDWARE_DEVICE_PATH,
- HW_VENDOR_DP,
- {
- (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
- (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
- }
- },
- EFI_DEBUG_AGENT_GUID,
- },
- {
- {
- MESSAGING_DEVICE_PATH,
- MSG_UART_DP,
- {
- (UINT8) (sizeof (UART_DEVICE_PATH)),
- (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8)
- }
- },
- 0, // Reserved
- 0, // BaudRate - Default
- 0, // DataBits - Default
- 0, // Parity - Default
- 0, // StopBits - Default
- },
- {
- {
- MESSAGING_DEVICE_PATH,
- MSG_VENDOR_DP,
- {
- (UINT8)(sizeof (VENDOR_DEVICE_PATH)),
- (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)
- }
- },
- DEVICE_PATH_MESSAGING_PC_ANSI
- },
- gEndEntire
-};
-
-//
-// Predefined platform default console device path
-//
-BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole [] = {
- {(EFI_DEVICE_PATH_PROTOCOL*)&gIsaSerialDevicePath, CONSOLE_ALL},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gHiiVendorDevicePath0, CONSOLE_IN},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gIsaKeyboardDevicePath, CONSOLE_IN},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gDebugAgentUartDevicePath, CONSOLE_ALL},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gUsbClassKeyboardDevicePath, CONSOLE_IN},
- {NULL, 0}
-};
-
-//
-// All the possible platform PCI VGA device path
-//
-EFI_DEVICE_PATH_PROTOCOL* gPlatformAllPossiblePciVgaConsole [] = {
- (EFI_DEVICE_PATH_PROTOCOL*)&gOnChipPciVgaDevicePath,
- (EFI_DEVICE_PATH_PROTOCOL*)&gPlugInPciVgaDevicePath,
- NULL
-};
-
-//
-// Legacy hard disk boot option
-//
-LEGACY_HD_DEVICE_PATH gLegacyHd = {
- {
- BBS_DEVICE_PATH,
- BBS_BBS_DP,
- (UINT8)(sizeof(BBS_BBS_DEVICE_PATH)),
- (UINT8)((sizeof(BBS_BBS_DEVICE_PATH)) >> 8),
- BBS_TYPE_HARDDRIVE,
- 0,
- 0
- },
- gEndEntire
-};
-
-//
-// Legacy cdrom boot option
-//
-LEGACY_HD_DEVICE_PATH gLegacyCdrom = {
- {
- BBS_DEVICE_PATH,
- BBS_BBS_DP,
- (UINT8)(sizeof(BBS_BBS_DEVICE_PATH)),
- (UINT8)((sizeof(BBS_BBS_DEVICE_PATH)) >> 8),
- BBS_TYPE_CDROM,
- 0,
- 0
- },
- gEndEntire
-};
-
-//
-// Predefined platform specific perdict boot option
-//
-EFI_DEVICE_PATH_PROTOCOL* gPlatformBootOption [] = {
- (EFI_DEVICE_PATH_PROTOCOL*)&gLegacyHd,
- (EFI_DEVICE_PATH_PROTOCOL*)&gLegacyCdrom,
- NULL
-};
-
-//
-// Predefined platform specific driver option
-//
-EFI_DEVICE_PATH_PROTOCOL* gPlatformDriverOption [] = {
- NULL
-};
-
-//
-// Predefined platform connect sequence
-//
-EFI_DEVICE_PATH_PROTOCOL* gPlatformConnectSequence [] = {
- (EFI_DEVICE_PATH_PROTOCOL *)&gPlatformRootBridge0, // Force PCI enumer before Legacy OpROM shadow
- NULL
-};
-
-//
-// Platform specific USB controller device path
-//
-PLATFORM_USB_DEVICE_PATH gUsbDevicePath0 = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(0, 0x1D),
- gEndEntire
-};
-
-PLATFORM_USB_DEVICE_PATH gUsbDevicePath1 = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(1, 0x1D),
- gEndEntire
-};
-
-PLATFORM_USB_DEVICE_PATH gUsbDevicePath2 = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(2, 0x1D),
- gEndEntire
-};
-
-PLATFORM_USB_DEVICE_PATH gUsbDevicePath3 = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(3, 0x1D),
- gEndEntire
-};
-
-//
-// Predefined platform device path for user authtication
-//
-EFI_DEVICE_PATH_PROTOCOL* gUserAuthenticationDevice[] = {
- //
- // Predefined device path for secure card (USB disk).
- //
- (EFI_DEVICE_PATH_PROTOCOL*)&gUsbDevicePath0,
- (EFI_DEVICE_PATH_PROTOCOL*)&gUsbDevicePath1,
- (EFI_DEVICE_PATH_PROTOCOL*)&gUsbDevicePath2,
- (EFI_DEVICE_PATH_PROTOCOL*)&gUsbDevicePath3,
- NULL
-};
-
-//
-// Predefined platform console device path
-//
-BDS_CONSOLE_CONNECT_ENTRY gPlatformSimpleConsole [] = {
- {(EFI_DEVICE_PATH_PROTOCOL*)&gOnChipPciVgaDevicePath, CONSOLE_OUT},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gIsaSerialDevicePath, CONSOLE_ALL},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gHiiVendorDevicePath0, CONSOLE_IN},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gDebugAgentUartDevicePath, CONSOLE_ALL},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gUsbClassKeyboardDevicePath, CONSOLE_IN},
- {NULL, 0}
-};
-
-//
-// eMMC device at BDF(0x0, 0x17, 0x0)
-//
-PLATFORM_PCI_DEVICE_PATH gEmmcBootDevPath0 = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE (0x00, 0x10),
- gEndEntire
-};
-
-//
-// Predefined platform specific perdict boot option
-//
-EFI_DEVICE_PATH_PROTOCOL* gPlatformSimpleBootOption [] = {
- (EFI_DEVICE_PATH_PROTOCOL*)&gEmmcBootDevPath0,
- NULL
-};
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c
deleted file mode 100644
index 3034853695..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c
+++ /dev/null
@@ -1,4490 +0,0 @@
-/** @file
- BDS Lib functions which relate with create or process the boot option.
-
-Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "InternalBdsLib.h"
-#include "String.h"
-#include <Library/NetLib.h>
-#include "Library/DebugLib.h"
-
-BOOLEAN mEnumBootDevice = FALSE;
-EFI_HII_HANDLE gBdsLibStringPackHandle = NULL;
-
-/**
-
- End Perf entry of BDS
-
- @param Event The triggered event.
- @param Context Context for this event.
-
-**/
-VOID
-EFIAPI
-BmEndOfBdsPerfCode (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- //
- // Record the performance data for End of BDS
- //
- PERF_END(NULL, "BDS", NULL, 0);
-
- return ;
-}
-
-/**
- The constructor function register UNI strings into imageHandle.
-
- It will ASSERT() if that operation fails and it will always return EFI_SUCCESS.
-
- @param ImageHandle The firmware allocated handle for the EFI image.
- @param SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The constructor successfully added string package.
- @retval Other value The constructor can't add string package.
-
-**/
-EFI_STATUS
-EFIAPI
-GenericBdsLibConstructor (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
-
- gBdsLibStringPackHandle = HiiAddPackages (
- &gBdsLibStringPackageGuid,
- ImageHandle,
- GenericBdsLibStrings,
- NULL
- );
-
- ASSERT (gBdsLibStringPackHandle != NULL);
-
- return EFI_SUCCESS;
-}
-
-/**
- Deletete the Boot Option from EFI Variable. The Boot Order Arrray
- is also updated.
-
- @param OptionNumber The number of Boot option want to be deleted.
- @param BootOrder The Boot Order array.
- @param BootOrderSize The size of the Boot Order Array.
-
- @retval EFI_SUCCESS The Boot Option Variable was found and removed
- @retval EFI_UNSUPPORTED The Boot Option Variable store was inaccessible
- @retval EFI_NOT_FOUND The Boot Option Variable was not found
-**/
-EFI_STATUS
-EFIAPI
-BdsDeleteBootOption (
- IN UINTN OptionNumber,
- IN OUT UINT16 *BootOrder,
- IN OUT UINTN *BootOrderSize
- )
-{
- CHAR16 BootOption[9];
- UINTN Index;
- EFI_STATUS Status;
-
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", OptionNumber);
- Status = gRT->SetVariable (
- BootOption,
- &gEfiGlobalVariableGuid,
- 0,
- 0,
- NULL
- );
- //
- // Deleting variable with existing variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
-
- //
- // adjust boot order array
- //
- for (Index = 0; Index < *BootOrderSize / sizeof (UINT16); Index++) {
- if (BootOrder[Index] == OptionNumber) {
- CopyMem (&BootOrder[Index], &BootOrder[Index+1], *BootOrderSize - (Index+1) * sizeof (UINT16));
- *BootOrderSize -= sizeof (UINT16);
- break;
- }
- }
-
- return Status;
-}
-/**
-
- Translate the first n characters of an Ascii string to
- Unicode characters. The count n is indicated by parameter
- Size. If Size is greater than the length of string, then
- the entire string is translated.
-
-
- @param AStr Pointer to input Ascii string.
- @param Size The number of characters to translate.
- @param UStr Pointer to output Unicode string buffer.
-
-**/
-VOID
-AsciiToUnicodeSize (
- IN UINT8 *AStr,
- IN UINTN Size,
- OUT UINT16 *UStr
- )
-{
- UINTN Idx;
-
- Idx = 0;
- while (AStr[Idx] != 0) {
- UStr[Idx] = (CHAR16) AStr[Idx];
- if (Idx == Size) {
- break;
- }
-
- Idx++;
- }
- UStr[Idx] = 0;
-}
-
-/**
- Build Legacy Device Name String according.
-
- @param CurBBSEntry BBS Table.
- @param Index Index.
- @param BufSize The buffer size.
- @param BootString The output string.
-
-**/
-VOID
-BdsBuildLegacyDevNameString (
- IN BBS_TABLE *CurBBSEntry,
- IN UINTN Index,
- IN UINTN BufSize,
- OUT CHAR16 *BootString
- )
-{
- CHAR16 *Fmt;
- CHAR16 *Type;
- UINT8 *StringDesc;
- CHAR16 Temp[80];
-
- switch (Index) {
- //
- // Primary Master
- //
- case 1:
- Fmt = L"Primary Master %s";
- break;
-
- //
- // Primary Slave
- //
- case 2:
- Fmt = L"Primary Slave %s";
- break;
-
- //
- // Secondary Master
- //
- case 3:
- Fmt = L"Secondary Master %s";
- break;
-
- //
- // Secondary Slave
- //
- case 4:
- Fmt = L"Secondary Slave %s";
- break;
-
- default:
- Fmt = L"%s";
- break;
- }
-
- switch (CurBBSEntry->DeviceType) {
- case BBS_FLOPPY:
- Type = L"Floppy";
- break;
-
- case BBS_HARDDISK:
- Type = L"Harddisk";
- break;
-
- case BBS_CDROM:
- Type = L"CDROM";
- break;
-
- case BBS_PCMCIA:
- Type = L"PCMCIAe";
- break;
-
- case BBS_USB:
- Type = L"USB";
- break;
-
- case BBS_EMBED_NETWORK:
- Type = L"Network";
- break;
-
- case BBS_BEV_DEVICE:
- Type = L"BEVe";
- break;
-
- case BBS_UNKNOWN:
- default:
- Type = L"Unknown";
- break;
- }
- //
- // If current BBS entry has its description then use it.
- //
- StringDesc = (UINT8 *) (UINTN) ((CurBBSEntry->DescStringSegment << 4) + CurBBSEntry->DescStringOffset);
- if (NULL != StringDesc) {
- //
- // Only get fisrt 32 characters, this is suggested by BBS spec
- //
- AsciiToUnicodeSize (StringDesc, 32, Temp);
- Fmt = L"%s";
- Type = Temp;
- }
-
- //
- // BbsTable 16 entries are for onboard IDE.
- // Set description string for SATA harddisks, Harddisk 0 ~ Harddisk 11
- //
- if (Index >= 5 && Index <= 16 && (CurBBSEntry->DeviceType == BBS_HARDDISK || CurBBSEntry->DeviceType == BBS_CDROM)) {
- Fmt = L"%s %d";
- UnicodeSPrint (BootString, BufSize, Fmt, Type, Index - 5);
- } else {
- UnicodeSPrint (BootString, BufSize, Fmt, Type);
- }
-}
-
-/**
-
- Create a legacy boot option for the specified entry of
- BBS table, save it as variable, and append it to the boot
- order list.
-
-
- @param CurrentBbsEntry Pointer to current BBS table.
- @param CurrentBbsDevPath Pointer to the Device Path Protocol instance of BBS
- @param Index Index of the specified entry in BBS table.
- @param BootOrderList On input, the original boot order list.
- On output, the new boot order list attached with the
- created node.
- @param BootOrderListSize On input, the original size of boot order list.
- On output, the size of new boot order list.
-
- @retval EFI_SUCCESS Boot Option successfully created.
- @retval EFI_OUT_OF_RESOURCES Fail to allocate necessary memory.
- @retval Other Error occurs while setting variable.
-
-**/
-EFI_STATUS
-BdsCreateLegacyBootOption (
- IN BBS_TABLE *CurrentBbsEntry,
- IN EFI_DEVICE_PATH_PROTOCOL *CurrentBbsDevPath,
- IN UINTN Index,
- IN OUT UINT16 **BootOrderList,
- IN OUT UINTN *BootOrderListSize
- )
-{
- EFI_STATUS Status;
- UINT16 CurrentBootOptionNo;
- UINT16 BootString[10];
- CHAR16 BootDesc[100];
- CHAR8 HelpString[100];
- UINT16 *NewBootOrderList;
- UINTN BufferSize;
- UINTN StringLen;
- VOID *Buffer;
- UINT8 *Ptr;
- UINT16 CurrentBbsDevPathSize;
- UINTN BootOrderIndex;
- UINTN BootOrderLastIndex;
- UINTN ArrayIndex;
- BOOLEAN IndexNotFound;
- BBS_BBS_DEVICE_PATH *NewBbsDevPathNode;
-
- if ((*BootOrderList) == NULL) {
- CurrentBootOptionNo = 0;
- } else {
- for (ArrayIndex = 0; ArrayIndex < (UINTN) (*BootOrderListSize / sizeof (UINT16)); ArrayIndex++) {
- IndexNotFound = TRUE;
- for (BootOrderIndex = 0; BootOrderIndex < (UINTN) (*BootOrderListSize / sizeof (UINT16)); BootOrderIndex++) {
- if ((*BootOrderList)[BootOrderIndex] == ArrayIndex) {
- IndexNotFound = FALSE;
- break;
- }
- }
-
- if (!IndexNotFound) {
- continue;
- } else {
- break;
- }
- }
-
- CurrentBootOptionNo = (UINT16) ArrayIndex;
- }
-
- UnicodeSPrint (
- BootString,
- sizeof (BootString),
- L"Boot%04x",
- CurrentBootOptionNo
- );
-
- BdsBuildLegacyDevNameString (CurrentBbsEntry, Index, sizeof (BootDesc), BootDesc);
-
- //
- // Create new BBS device path node with description string
- //
- UnicodeStrToAsciiStr (BootDesc, HelpString);
-
- StringLen = AsciiStrLen (HelpString);
- NewBbsDevPathNode = AllocateZeroPool (sizeof (BBS_BBS_DEVICE_PATH) + StringLen);
- if (NewBbsDevPathNode == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
- CopyMem (NewBbsDevPathNode, CurrentBbsDevPath, sizeof (BBS_BBS_DEVICE_PATH));
- CopyMem (NewBbsDevPathNode->String, HelpString, StringLen + 1);
- SetDevicePathNodeLength (&(NewBbsDevPathNode->Header), sizeof (BBS_BBS_DEVICE_PATH) + StringLen);
-
- //
- // Create entire new CurrentBbsDevPath with end node
- //
- CurrentBbsDevPath = AppendDevicePathNode (
- NULL,
- (EFI_DEVICE_PATH_PROTOCOL *) NewBbsDevPathNode
- );
- if (CurrentBbsDevPath == NULL) {
- FreePool (NewBbsDevPathNode);
- return EFI_OUT_OF_RESOURCES;
- }
-
- CurrentBbsDevPathSize = (UINT16) (GetDevicePathSize (CurrentBbsDevPath));
-
- BufferSize = sizeof (UINT32) +
- sizeof (UINT16) +
- StrSize (BootDesc) +
- CurrentBbsDevPathSize +
- sizeof (BBS_TABLE) +
- sizeof (UINT16);
-
- Buffer = AllocateZeroPool (BufferSize);
- if (Buffer == NULL) {
- FreePool (NewBbsDevPathNode);
- FreePool (CurrentBbsDevPath);
- return EFI_OUT_OF_RESOURCES;
- }
-
- Ptr = (UINT8 *) Buffer;
-
- *((UINT32 *) Ptr) = LOAD_OPTION_ACTIVE;
- Ptr += sizeof (UINT32);
-
- *((UINT16 *) Ptr) = CurrentBbsDevPathSize;
- Ptr += sizeof (UINT16);
-
- CopyMem (
- Ptr,
- BootDesc,
- StrSize (BootDesc)
- );
- Ptr += StrSize (BootDesc);
-
- CopyMem (
- Ptr,
- CurrentBbsDevPath,
- CurrentBbsDevPathSize
- );
- Ptr += CurrentBbsDevPathSize;
-
- CopyMem (
- Ptr,
- CurrentBbsEntry,
- sizeof (BBS_TABLE)
- );
-
- Ptr += sizeof (BBS_TABLE);
- *((UINT16 *) Ptr) = (UINT16) Index;
-
- Status = gRT->SetVariable (
- BootString,
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- BufferSize,
- Buffer
- );
-
- FreePool (Buffer);
-
- Buffer = NULL;
-
- NewBootOrderList = AllocateZeroPool (*BootOrderListSize + sizeof (UINT16));
- if (NULL == NewBootOrderList) {
- FreePool (NewBbsDevPathNode);
- FreePool (CurrentBbsDevPath);
- return EFI_OUT_OF_RESOURCES;
- }
-
- if (*BootOrderList != NULL) {
- CopyMem (NewBootOrderList, *BootOrderList, *BootOrderListSize);
- FreePool (*BootOrderList);
- }
-
- BootOrderLastIndex = (UINTN) (*BootOrderListSize / sizeof (UINT16));
- NewBootOrderList[BootOrderLastIndex] = CurrentBootOptionNo;
- *BootOrderListSize += sizeof (UINT16);
- *BootOrderList = NewBootOrderList;
-
- FreePool (NewBbsDevPathNode);
- FreePool (CurrentBbsDevPath);
- return Status;
-}
-
-/**
- Check if the boot option is a legacy one.
-
- @param BootOptionVar The boot option data payload.
- @param BbsEntry The BBS Table.
- @param BbsIndex The table index.
-
- @retval TRUE It is a legacy boot option.
- @retval FALSE It is not a legacy boot option.
-
-**/
-BOOLEAN
-BdsIsLegacyBootOption (
- IN UINT8 *BootOptionVar,
- OUT BBS_TABLE **BbsEntry,
- OUT UINT16 *BbsIndex
- )
-{
- UINT8 *Ptr;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- BOOLEAN Ret;
- UINT16 DevPathLen;
-
- Ptr = BootOptionVar;
- Ptr += sizeof (UINT32);
- DevPathLen = *(UINT16 *) Ptr;
- Ptr += sizeof (UINT16);
- Ptr += StrSize ((UINT16 *) Ptr);
- DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;
- if ((BBS_DEVICE_PATH == DevicePath->Type) && (BBS_BBS_DP == DevicePath->SubType)) {
- Ptr += DevPathLen;
- *BbsEntry = (BBS_TABLE *) Ptr;
- Ptr += sizeof (BBS_TABLE);
- *BbsIndex = *(UINT16 *) Ptr;
- Ret = TRUE;
- } else {
- *BbsEntry = NULL;
- Ret = FALSE;
- }
-
- return Ret;
-}
-
-/**
- Delete all the invalid legacy boot options.
-
- @retval EFI_SUCCESS All invalide legacy boot options are deleted.
- @retval EFI_OUT_OF_RESOURCES Fail to allocate necessary memory.
- @retval EFI_NOT_FOUND Fail to retrive variable of boot order.
-**/
-EFI_STATUS
-EFIAPI
-BdsDeleteAllInvalidLegacyBootOptions (
- VOID
- )
-{
- UINT16 *BootOrder;
- UINT8 *BootOptionVar;
- UINTN BootOrderSize;
- UINTN BootOptionSize;
- EFI_STATUS Status;
- UINT16 HddCount;
- UINT16 BbsCount;
- HDD_INFO *LocalHddInfo;
- BBS_TABLE *LocalBbsTable;
- BBS_TABLE *BbsEntry;
- UINT16 BbsIndex;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;
- UINTN Index;
- UINT16 BootOption[10];
- UINT16 BootDesc[100];
- BOOLEAN DescStringMatch;
-
- Status = EFI_SUCCESS;
- BootOrder = NULL;
- BootOrderSize = 0;
- HddCount = 0;
- BbsCount = 0;
- LocalHddInfo = NULL;
- LocalBbsTable = NULL;
- BbsEntry = NULL;
-
- Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- if (BootOrder == NULL) {
- return EFI_NOT_FOUND;
- }
-
- LegacyBios->GetBbsInfo (
- LegacyBios,
- &HddCount,
- &LocalHddInfo,
- &BbsCount,
- &LocalBbsTable
- );
-
- Index = 0;
- while (Index < BootOrderSize / sizeof (UINT16)) {
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);
- BootOptionVar = BdsLibGetVariableAndSize (
- BootOption,
- &gEfiGlobalVariableGuid,
- &BootOptionSize
- );
- if (NULL == BootOptionVar) {
- BootOptionSize = 0;
- Status = gRT->GetVariable (
- BootOption,
- &gEfiGlobalVariableGuid,
- NULL,
- &BootOptionSize,
- BootOptionVar
- );
- if (Status == EFI_NOT_FOUND) {
- //
- // Update BootOrder
- //
- BdsDeleteBootOption (
- BootOrder[Index],
- BootOrder,
- &BootOrderSize
- );
- continue;
- } else {
- FreePool (BootOrder);
- return EFI_OUT_OF_RESOURCES;
- }
- }
-
- //
- // Skip Non-Legacy boot option
- //
- if (!BdsIsLegacyBootOption (BootOptionVar, &BbsEntry, &BbsIndex)) {
- if (BootOptionVar!= NULL) {
- FreePool (BootOptionVar);
- }
- Index++;
- continue;
- }
-
- if (BbsIndex < BbsCount) {
- //
- // Check if BBS Description String is changed
- //
- DescStringMatch = FALSE;
- BdsBuildLegacyDevNameString (
- &LocalBbsTable[BbsIndex],
- BbsIndex,
- sizeof (BootDesc),
- BootDesc
- );
-
- if (StrCmp (BootDesc, (UINT16*)(BootOptionVar + sizeof (UINT32) + sizeof (UINT16))) == 0) {
- DescStringMatch = TRUE;
- }
-
- if (!((LocalBbsTable[BbsIndex].BootPriority == BBS_IGNORE_ENTRY) ||
- (LocalBbsTable[BbsIndex].BootPriority == BBS_DO_NOT_BOOT_FROM)) &&
- (LocalBbsTable[BbsIndex].DeviceType == BbsEntry->DeviceType) &&
- DescStringMatch) {
- Index++;
- continue;
- }
- }
-
- if (BootOptionVar != NULL) {
- FreePool (BootOptionVar);
- }
- //
- // should delete
- //
- BdsDeleteBootOption (
- BootOrder[Index],
- BootOrder,
- &BootOrderSize
- );
- }
-
- //
- // Adjust the number of boot options.
- //
- Status = gRT->SetVariable (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- BootOrderSize,
- BootOrder
- );
- //
- // Shrinking variable with existing variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
- FreePool (BootOrder);
-
- return Status;
-}
-
-/**
- Find all legacy boot option by device type.
-
- @param BootOrder The boot order array.
- @param BootOptionNum The number of boot option.
- @param DevType Device type.
- @param DevName Device name.
- @param Attribute The boot option attribute.
- @param BbsIndex The BBS table index.
- @param OptionNumber The boot option index.
-
- @retval TRUE The Legacy boot option is found.
- @retval FALSE The legacy boot option is not found.
-
-**/
-BOOLEAN
-BdsFindLegacyBootOptionByDevTypeAndName (
- IN UINT16 *BootOrder,
- IN UINTN BootOptionNum,
- IN UINT16 DevType,
- IN CHAR16 *DevName,
- OUT UINT32 *Attribute,
- OUT UINT16 *BbsIndex,
- OUT UINT16 *OptionNumber
- )
-{
- UINTN Index;
- CHAR16 BootOption[9];
- UINTN BootOptionSize;
- UINT8 *BootOptionVar;
- BBS_TABLE *BbsEntry;
- BOOLEAN Found;
-
- BbsEntry = NULL;
- Found = FALSE;
-
- if (NULL == BootOrder) {
- return Found;
- }
-
- //
- // Loop all boot option from variable
- //
- for (Index = 0; Index < BootOptionNum; Index++) {
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", (UINTN) BootOrder[Index]);
- BootOptionVar = BdsLibGetVariableAndSize (
- BootOption,
- &gEfiGlobalVariableGuid,
- &BootOptionSize
- );
- if (NULL == BootOptionVar) {
- continue;
- }
-
- //
- // Skip Non-legacy boot option
- //
- if (!BdsIsLegacyBootOption (BootOptionVar, &BbsEntry, BbsIndex)) {
- FreePool (BootOptionVar);
- continue;
- }
-
- if (
- (BbsEntry->DeviceType != DevType) ||
- (StrCmp (DevName, (CHAR16*)(BootOptionVar + sizeof (UINT32) + sizeof (UINT16))) != 0)
- ) {
- FreePool (BootOptionVar);
- continue;
- }
-
- *Attribute = *(UINT32 *) BootOptionVar;
- *OptionNumber = BootOrder[Index];
- Found = TRUE;
- FreePool (BootOptionVar);
- break;
- }
-
- return Found;
-}
-
-/**
- Create a legacy boot option.
-
- @param BbsItem The BBS Table entry.
- @param Index Index of the specified entry in BBS table.
- @param BootOrderList The boot order list.
- @param BootOrderListSize The size of boot order list.
-
- @retval EFI_OUT_OF_RESOURCE No enough memory.
- @retval EFI_SUCCESS The function complete successfully.
- @return Other value if the legacy boot option is not created.
-
-**/
-EFI_STATUS
-BdsCreateOneLegacyBootOption (
- IN BBS_TABLE *BbsItem,
- IN UINTN Index,
- IN OUT UINT16 **BootOrderList,
- IN OUT UINTN *BootOrderListSize
- )
-{
- BBS_BBS_DEVICE_PATH BbsDevPathNode;
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *DevPath;
-
- DevPath = NULL;
-
- //
- // Create device path node.
- //
- BbsDevPathNode.Header.Type = BBS_DEVICE_PATH;
- BbsDevPathNode.Header.SubType = BBS_BBS_DP;
- SetDevicePathNodeLength (&BbsDevPathNode.Header, sizeof (BBS_BBS_DEVICE_PATH));
- BbsDevPathNode.DeviceType = BbsItem->DeviceType;
- CopyMem (&BbsDevPathNode.StatusFlag, &BbsItem->StatusFlags, sizeof (UINT16));
-
- DevPath = AppendDevicePathNode (
- NULL,
- (EFI_DEVICE_PATH_PROTOCOL *) &BbsDevPathNode
- );
- if (NULL == DevPath) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- Status = BdsCreateLegacyBootOption (
- BbsItem,
- DevPath,
- Index,
- BootOrderList,
- BootOrderListSize
- );
- BbsItem->BootPriority = 0x00;
-
- FreePool (DevPath);
-
- return Status;
-}
-
-/**
- Add the legacy boot options from BBS table if they do not exist.
-
- @retval EFI_SUCCESS The boot options are added successfully
- or they are already in boot options.
- @retval EFI_NOT_FOUND No legacy boot options is found.
- @retval EFI_OUT_OF_RESOURCE No enough memory.
- @return Other value LegacyBoot options are not added.
-**/
-EFI_STATUS
-EFIAPI
-BdsAddNonExistingLegacyBootOptions (
- VOID
- )
-{
- UINT16 *BootOrder;
- UINTN BootOrderSize;
- EFI_STATUS Status;
- CHAR16 Desc[100];
- UINT16 HddCount;
- UINT16 BbsCount;
- HDD_INFO *LocalHddInfo;
- BBS_TABLE *LocalBbsTable;
- UINT16 BbsIndex;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;
- UINT16 Index;
- UINT32 Attribute;
- UINT16 OptionNumber;
- BOOLEAN Exist;
-
- HddCount = 0;
- BbsCount = 0;
- LocalHddInfo = NULL;
- LocalBbsTable = NULL;
-
- Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- LegacyBios->GetBbsInfo (
- LegacyBios,
- &HddCount,
- &LocalHddInfo,
- &BbsCount,
- &LocalBbsTable
- );
-
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- if (BootOrder == NULL) {
- BootOrderSize = 0;
- }
-
- for (Index = 0; Index < BbsCount; Index++) {
- if ((LocalBbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) ||
- (LocalBbsTable[Index].BootPriority == BBS_DO_NOT_BOOT_FROM)
- ) {
- continue;
- }
-
- BdsBuildLegacyDevNameString (&LocalBbsTable[Index], Index, sizeof (Desc), Desc);
-
- Exist = BdsFindLegacyBootOptionByDevTypeAndName (
- BootOrder,
- BootOrderSize / sizeof (UINT16),
- LocalBbsTable[Index].DeviceType,
- Desc,
- &Attribute,
- &BbsIndex,
- &OptionNumber
- );
- if (!Exist) {
- //
- // Not found such type of legacy device in boot options or we found but it's disabled
- // so we have to create one and put it to the tail of boot order list
- //
- Status = BdsCreateOneLegacyBootOption (
- &LocalBbsTable[Index],
- Index,
- &BootOrder,
- &BootOrderSize
- );
- if (!EFI_ERROR (Status)) {
- ASSERT (BootOrder != NULL);
- BbsIndex = Index;
- OptionNumber = BootOrder[BootOrderSize / sizeof (UINT16) - 1];
- }
- }
-
- ASSERT (BbsIndex == Index);
- }
-
- Status = gRT->SetVariable (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- BootOrderSize,
- BootOrder
- );
- if (BootOrder != NULL) {
- FreePool (BootOrder);
- }
-
- return Status;
-}
-
-/**
- Fill the device order buffer.
-
- @param BbsTable The BBS table.
- @param BbsType The BBS Type.
- @param BbsCount The BBS Count.
- @param Buf device order buffer.
-
- @return The device order buffer.
-
-**/
-UINT16 *
-BdsFillDevOrderBuf (
- IN BBS_TABLE *BbsTable,
- IN BBS_TYPE BbsType,
- IN UINTN BbsCount,
- OUT UINT16 *Buf
- )
-{
- UINTN Index;
-
- for (Index = 0; Index < BbsCount; Index++) {
- if (BbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) {
- continue;
- }
-
- if (BbsTable[Index].DeviceType != BbsType) {
- continue;
- }
-
- *Buf = (UINT16) (Index & 0xFF);
- Buf++;
- }
-
- return Buf;
-}
-
-/**
- Create the device order buffer.
-
- @param BbsTable The BBS table.
- @param BbsCount The BBS Count.
-
- @retval EFI_SUCCES The buffer is created and the EFI variable named
- VAR_LEGACY_DEV_ORDER and gEfiLegacyDevOrderVariableGuid is
- set correctly.
- @retval EFI_OUT_OF_RESOURCES Memmory or storage is not enough.
- @retval EFI_DEVICE_ERROR Fail to add the device order into EFI variable fail
- because of hardware error.
-**/
-EFI_STATUS
-BdsCreateDevOrder (
- IN BBS_TABLE *BbsTable,
- IN UINT16 BbsCount
- )
-{
- UINTN Index;
- UINTN FDCount;
- UINTN HDCount;
- UINTN CDCount;
- UINTN NETCount;
- UINTN BEVCount;
- UINTN TotalSize;
- UINTN HeaderSize;
- LEGACY_DEV_ORDER_ENTRY *DevOrder;
- LEGACY_DEV_ORDER_ENTRY *DevOrderPtr;
- EFI_STATUS Status;
-
- FDCount = 0;
- HDCount = 0;
- CDCount = 0;
- NETCount = 0;
- BEVCount = 0;
- TotalSize = 0;
- HeaderSize = sizeof (BBS_TYPE) + sizeof (UINT16);
- DevOrder = NULL;
- Status = EFI_SUCCESS;
-
- //
- // Count all boot devices
- //
- for (Index = 0; Index < BbsCount; Index++) {
- if (BbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) {
- continue;
- }
-
- switch (BbsTable[Index].DeviceType) {
- case BBS_FLOPPY:
- FDCount++;
- break;
-
- case BBS_HARDDISK:
- HDCount++;
- break;
-
- case BBS_CDROM:
- CDCount++;
- break;
-
- case BBS_EMBED_NETWORK:
- NETCount++;
- break;
-
- case BBS_BEV_DEVICE:
- BEVCount++;
- break;
-
- default:
- break;
- }
- }
-
- TotalSize += (HeaderSize + sizeof (UINT16) * FDCount);
- TotalSize += (HeaderSize + sizeof (UINT16) * HDCount);
- TotalSize += (HeaderSize + sizeof (UINT16) * CDCount);
- TotalSize += (HeaderSize + sizeof (UINT16) * NETCount);
- TotalSize += (HeaderSize + sizeof (UINT16) * BEVCount);
-
- //
- // Create buffer to hold all boot device order
- //
- DevOrder = AllocateZeroPool (TotalSize);
- if (NULL == DevOrder) {
- return EFI_OUT_OF_RESOURCES;
- }
- DevOrderPtr = DevOrder;
-
- DevOrderPtr->BbsType = BBS_FLOPPY;
- DevOrderPtr->Length = (UINT16) (sizeof (DevOrderPtr->Length) + FDCount * sizeof (UINT16));
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) BdsFillDevOrderBuf (BbsTable, BBS_FLOPPY, BbsCount, DevOrderPtr->Data);
-
- DevOrderPtr->BbsType = BBS_HARDDISK;
- DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + HDCount * sizeof (UINT16));
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) BdsFillDevOrderBuf (BbsTable, BBS_HARDDISK, BbsCount, DevOrderPtr->Data);
-
- DevOrderPtr->BbsType = BBS_CDROM;
- DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + CDCount * sizeof (UINT16));
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) BdsFillDevOrderBuf (BbsTable, BBS_CDROM, BbsCount, DevOrderPtr->Data);
-
- DevOrderPtr->BbsType = BBS_EMBED_NETWORK;
- DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + NETCount * sizeof (UINT16));
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) BdsFillDevOrderBuf (BbsTable, BBS_EMBED_NETWORK, BbsCount, DevOrderPtr->Data);
-
- DevOrderPtr->BbsType = BBS_BEV_DEVICE;
- DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + BEVCount * sizeof (UINT16));
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) BdsFillDevOrderBuf (BbsTable, BBS_BEV_DEVICE, BbsCount, DevOrderPtr->Data);
-
- ASSERT (TotalSize == (UINTN) ((UINT8 *) DevOrderPtr - (UINT8 *) DevOrder));
-
- //
- // Save device order for legacy boot device to variable.
- //
- Status = gRT->SetVariable (
- VAR_LEGACY_DEV_ORDER,
- &gEfiLegacyDevOrderVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- TotalSize,
- DevOrder
- );
- FreePool (DevOrder);
-
- return Status;
-}
-
-/**
- Add the legacy boot devices from BBS table into
- the legacy device boot order.
-
- @retval EFI_SUCCESS The boot devices are added successfully.
- @retval EFI_NOT_FOUND The legacy boot devices are not found.
- @retval EFI_OUT_OF_RESOURCES Memmory or storage is not enough.
- @retval EFI_DEVICE_ERROR Fail to add the legacy device boot order into EFI variable
- because of hardware error.
-**/
-EFI_STATUS
-EFIAPI
-BdsUpdateLegacyDevOrder (
- VOID
- )
-{
- LEGACY_DEV_ORDER_ENTRY *DevOrder;
- LEGACY_DEV_ORDER_ENTRY *NewDevOrder;
- LEGACY_DEV_ORDER_ENTRY *Ptr;
- LEGACY_DEV_ORDER_ENTRY *NewPtr;
- UINTN DevOrderSize;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;
- EFI_STATUS Status;
- UINT16 HddCount;
- UINT16 BbsCount;
- HDD_INFO *LocalHddInfo;
- BBS_TABLE *LocalBbsTable;
- UINTN Index;
- UINTN Index2;
- UINTN *Idx;
- UINTN FDCount;
- UINTN HDCount;
- UINTN CDCount;
- UINTN NETCount;
- UINTN BEVCount;
- UINTN TotalSize;
- UINTN HeaderSize;
- UINT16 *NewFDPtr;
- UINT16 *NewHDPtr;
- UINT16 *NewCDPtr;
- UINT16 *NewNETPtr;
- UINT16 *NewBEVPtr;
- UINT16 *NewDevPtr;
- UINTN FDIndex;
- UINTN HDIndex;
- UINTN CDIndex;
- UINTN NETIndex;
- UINTN BEVIndex;
-
- Idx = NULL;
- FDCount = 0;
- HDCount = 0;
- CDCount = 0;
- NETCount = 0;
- BEVCount = 0;
- TotalSize = 0;
- HeaderSize = sizeof (BBS_TYPE) + sizeof (UINT16);
- FDIndex = 0;
- HDIndex = 0;
- CDIndex = 0;
- NETIndex = 0;
- BEVIndex = 0;
- NewDevPtr = NULL;
-
- Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- Status = LegacyBios->GetBbsInfo (
- LegacyBios,
- &HddCount,
- &LocalHddInfo,
- &BbsCount,
- &LocalBbsTable
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- DevOrder = BdsLibGetVariableAndSize (
- VAR_LEGACY_DEV_ORDER,
- &gEfiLegacyDevOrderVariableGuid,
- &DevOrderSize
- );
- if (NULL == DevOrder) {
- return BdsCreateDevOrder (LocalBbsTable, BbsCount);
- }
- //
- // First we figure out how many boot devices with same device type respectively
- //
- for (Index = 0; Index < BbsCount; Index++) {
- if ((LocalBbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) ||
- (LocalBbsTable[Index].BootPriority == BBS_DO_NOT_BOOT_FROM)
- ) {
- continue;
- }
-
- switch (LocalBbsTable[Index].DeviceType) {
- case BBS_FLOPPY:
- FDCount++;
- break;
-
- case BBS_HARDDISK:
- HDCount++;
- break;
-
- case BBS_CDROM:
- CDCount++;
- break;
-
- case BBS_EMBED_NETWORK:
- NETCount++;
- break;
-
- case BBS_BEV_DEVICE:
- BEVCount++;
- break;
-
- default:
- break;
- }
- }
-
- TotalSize += (HeaderSize + FDCount * sizeof (UINT16));
- TotalSize += (HeaderSize + HDCount * sizeof (UINT16));
- TotalSize += (HeaderSize + CDCount * sizeof (UINT16));
- TotalSize += (HeaderSize + NETCount * sizeof (UINT16));
- TotalSize += (HeaderSize + BEVCount * sizeof (UINT16));
-
- NewDevOrder = AllocateZeroPool (TotalSize);
- if (NULL == NewDevOrder) {
- return EFI_OUT_OF_RESOURCES;
- }
-
-
-
- //
- // copy FD
- //
- Ptr = DevOrder;
- NewPtr = NewDevOrder;
- NewPtr->BbsType = Ptr->BbsType;
- NewPtr->Length = (UINT16) (sizeof (UINT16) + FDCount * sizeof (UINT16));
- for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) {
- if (LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_IGNORE_ENTRY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_DO_NOT_BOOT_FROM ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_FLOPPY
- ) {
- continue;
- }
-
- NewPtr->Data[FDIndex] = Ptr->Data[Index];
- FDIndex++;
- }
- NewFDPtr = NewPtr->Data;
-
- //
- // copy HD
- //
- Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]);
- NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]);
- NewPtr->BbsType = Ptr->BbsType;
- NewPtr->Length = (UINT16) (sizeof (UINT16) + HDCount * sizeof (UINT16));
- for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) {
- if (LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_IGNORE_ENTRY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_DO_NOT_BOOT_FROM ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_LOWEST_PRIORITY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_HARDDISK
- ) {
- continue;
- }
-
- NewPtr->Data[HDIndex] = Ptr->Data[Index];
- HDIndex++;
- }
- NewHDPtr = NewPtr->Data;
-
- //
- // copy CD
- //
- Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]);
- NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]);
- NewPtr->BbsType = Ptr->BbsType;
- NewPtr->Length = (UINT16) (sizeof (UINT16) + CDCount * sizeof (UINT16));
- for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) {
- if (LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_IGNORE_ENTRY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_DO_NOT_BOOT_FROM ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_LOWEST_PRIORITY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_CDROM
- ) {
- continue;
- }
-
- NewPtr->Data[CDIndex] = Ptr->Data[Index];
- CDIndex++;
- }
- NewCDPtr = NewPtr->Data;
-
- //
- // copy NET
- //
- Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]);
- NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]);
- NewPtr->BbsType = Ptr->BbsType;
- NewPtr->Length = (UINT16) (sizeof (UINT16) + NETCount * sizeof (UINT16));
- for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) {
- if (LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_IGNORE_ENTRY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_DO_NOT_BOOT_FROM ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_LOWEST_PRIORITY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_EMBED_NETWORK
- ) {
- continue;
- }
-
- NewPtr->Data[NETIndex] = Ptr->Data[Index];
- NETIndex++;
- }
- NewNETPtr = NewPtr->Data;
-
- //
- // copy BEV
- //
- Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]);
- NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]);
- NewPtr->BbsType = Ptr->BbsType;
- NewPtr->Length = (UINT16) (sizeof (UINT16) + BEVCount * sizeof (UINT16));
- for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) {
- if (LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_IGNORE_ENTRY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_DO_NOT_BOOT_FROM ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_LOWEST_PRIORITY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_BEV_DEVICE
- ) {
- continue;
- }
-
- NewPtr->Data[BEVIndex] = Ptr->Data[Index];
- BEVIndex++;
- }
- NewBEVPtr = NewPtr->Data;
-
- for (Index = 0; Index < BbsCount; Index++) {
- if ((LocalBbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) ||
- (LocalBbsTable[Index].BootPriority == BBS_DO_NOT_BOOT_FROM)
- ) {
- continue;
- }
-
- switch (LocalBbsTable[Index].DeviceType) {
- case BBS_FLOPPY:
- Idx = &FDIndex;
- NewDevPtr = NewFDPtr;
- break;
-
- case BBS_HARDDISK:
- Idx = &HDIndex;
- NewDevPtr = NewHDPtr;
- break;
-
- case BBS_CDROM:
- Idx = &CDIndex;
- NewDevPtr = NewCDPtr;
- break;
-
- case BBS_EMBED_NETWORK:
- Idx = &NETIndex;
- NewDevPtr = NewNETPtr;
- break;
-
- case BBS_BEV_DEVICE:
- Idx = &BEVIndex;
- NewDevPtr = NewBEVPtr;
- break;
-
- default:
- Idx = NULL;
- break;
- }
- //
- // at this point we have copied those valid indexes to new buffer
- // and we should check if there is any new appeared boot device
- //
- if (Idx != NULL) {
- for (Index2 = 0; Index2 < *Idx; Index2++) {
- if ((NewDevPtr[Index2] & 0xFF) == (UINT16) Index) {
- break;
- }
- }
-
- if (Index2 == *Idx) {
- //
- // Index2 == *Idx means we didn't find Index
- // so Index is a new appeared device's index in BBS table
- // insert it before disabled indexes.
- //
- for (Index2 = 0; Index2 < *Idx; Index2++) {
- if ((NewDevPtr[Index2] & 0xFF00) == 0xFF00) {
- break;
- }
- }
- CopyMem (&NewDevPtr[Index2 + 1], &NewDevPtr[Index2], (*Idx - Index2) * sizeof (UINT16));
- NewDevPtr[Index2] = (UINT16) (Index & 0xFF);
- (*Idx)++;
- }
- }
- }
-
- FreePool (DevOrder);
-
- Status = gRT->SetVariable (
- VAR_LEGACY_DEV_ORDER,
- &gEfiLegacyDevOrderVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- TotalSize,
- NewDevOrder
- );
- FreePool (NewDevOrder);
-
- return Status;
-}
-
-/**
- Set Boot Priority for specified device type.
-
- @param DeviceType The device type.
- @param BbsIndex The BBS index to set the highest priority. Ignore when -1.
- @param LocalBbsTable The BBS table.
- @param Priority The prority table.
-
- @retval EFI_SUCCESS The function completes successfully.
- @retval EFI_NOT_FOUND Failed to find device.
- @retval EFI_OUT_OF_RESOURCES Failed to get the efi variable of device order.
-
-**/
-EFI_STATUS
-BdsSetBootPriority4SameTypeDev (
- IN UINT16 DeviceType,
- IN UINTN BbsIndex,
- IN OUT BBS_TABLE *LocalBbsTable,
- IN OUT UINT16 *Priority
- )
-{
- LEGACY_DEV_ORDER_ENTRY *DevOrder;
- LEGACY_DEV_ORDER_ENTRY *DevOrderPtr;
- UINTN DevOrderSize;
- UINTN Index;
-
- DevOrder = BdsLibGetVariableAndSize (
- VAR_LEGACY_DEV_ORDER,
- &gEfiLegacyDevOrderVariableGuid,
- &DevOrderSize
- );
- if (NULL == DevOrder) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- DevOrderPtr = DevOrder;
- while ((UINT8 *) DevOrderPtr < (UINT8 *) DevOrder + DevOrderSize) {
- if (DevOrderPtr->BbsType == DeviceType) {
- break;
- }
-
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) ((UINTN) DevOrderPtr + sizeof (BBS_TYPE) + DevOrderPtr->Length);
- }
-
- if ((UINT8 *) DevOrderPtr >= (UINT8 *) DevOrder + DevOrderSize) {
- FreePool (DevOrder);
- return EFI_NOT_FOUND;
- }
-
- if (BbsIndex != (UINTN) -1) {
- LocalBbsTable[BbsIndex].BootPriority = *Priority;
- (*Priority)++;
- }
- //
- // If the high byte of the DevIndex is 0xFF, it indicates that this device has been disabled.
- //
- for (Index = 0; Index < DevOrderPtr->Length / sizeof (UINT16) - 1; Index++) {
- if ((DevOrderPtr->Data[Index] & 0xFF00) == 0xFF00) {
- //
- // LocalBbsTable[DevIndex[Index] & 0xFF].BootPriority = BBS_DISABLED_ENTRY;
- //
- } else if (DevOrderPtr->Data[Index] != BbsIndex) {
- LocalBbsTable[DevOrderPtr->Data[Index]].BootPriority = *Priority;
- (*Priority)++;
- }
- }
-
- FreePool (DevOrder);
- return EFI_SUCCESS;
-}
-
-/**
- Print the BBS Table.
-
- @param LocalBbsTable The BBS table.
- @param BbsCount The count of entry in BBS table.
-**/
-VOID
-PrintBbsTable (
- IN BBS_TABLE *LocalBbsTable,
- IN UINT16 BbsCount
- )
-{
- UINT16 Idx;
-
- DEBUG ((DEBUG_ERROR, "\n"));
- DEBUG ((DEBUG_ERROR, " NO Prio bb/dd/ff cl/sc Type Stat segm:offs\n"));
- DEBUG ((DEBUG_ERROR, "=============================================\n"));
- for (Idx = 0; Idx < BbsCount; Idx++) {
- if ((LocalBbsTable[Idx].BootPriority == BBS_IGNORE_ENTRY) ||
- (LocalBbsTable[Idx].BootPriority == BBS_DO_NOT_BOOT_FROM) ||
- (LocalBbsTable[Idx].BootPriority == BBS_LOWEST_PRIORITY)
- ) {
- continue;
- }
-
- DEBUG (
- (DEBUG_ERROR,
- " %02x: %04x %02x/%02x/%02x %02x/%02x %04x %04x %04x:%04x\n",
- (UINTN) Idx,
- (UINTN) LocalBbsTable[Idx].BootPriority,
- (UINTN) LocalBbsTable[Idx].Bus,
- (UINTN) LocalBbsTable[Idx].Device,
- (UINTN) LocalBbsTable[Idx].Function,
- (UINTN) LocalBbsTable[Idx].Class,
- (UINTN) LocalBbsTable[Idx].SubClass,
- (UINTN) LocalBbsTable[Idx].DeviceType,
- (UINTN) * (UINT16 *) &LocalBbsTable[Idx].StatusFlags,
- (UINTN) LocalBbsTable[Idx].BootHandlerSegment,
- (UINTN) LocalBbsTable[Idx].BootHandlerOffset,
- (UINTN) ((LocalBbsTable[Idx].MfgStringSegment << 4) + LocalBbsTable[Idx].MfgStringOffset),
- (UINTN) ((LocalBbsTable[Idx].DescStringSegment << 4) + LocalBbsTable[Idx].DescStringOffset))
- );
- }
-
- DEBUG ((DEBUG_ERROR, "\n"));
-}
-
-/**
- Set the boot priority for BBS entries based on boot option entry and boot order.
-
- @param Entry The boot option is to be checked for refresh BBS table.
-
- @retval EFI_SUCCESS The boot priority for BBS entries is refreshed successfully.
- @retval EFI_NOT_FOUND BBS entries can't be found.
- @retval EFI_OUT_OF_RESOURCES Failed to get the legacy device boot order.
-**/
-EFI_STATUS
-EFIAPI
-BdsRefreshBbsTableForBoot (
- IN BDS_COMMON_OPTION *Entry
- )
-{
- EFI_STATUS Status;
- UINT16 BbsIndex;
- UINT16 HddCount;
- UINT16 BbsCount;
- HDD_INFO *LocalHddInfo;
- BBS_TABLE *LocalBbsTable;
- UINT16 DevType;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;
- UINTN Index;
- UINT16 Priority;
- UINT16 *BootOrder;
- UINTN BootOrderSize;
- UINT8 *BootOptionVar;
- UINTN BootOptionSize;
- CHAR16 BootOption[9];
- UINT8 *Ptr;
- UINT16 DevPathLen;
- EFI_DEVICE_PATH_PROTOCOL *DevPath;
- UINT16 *DeviceType;
- UINTN DeviceTypeCount;
- UINTN DeviceTypeIndex;
-
- HddCount = 0;
- BbsCount = 0;
- LocalHddInfo = NULL;
- LocalBbsTable = NULL;
- DevType = BBS_UNKNOWN;
-
- Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- LegacyBios->GetBbsInfo (
- LegacyBios,
- &HddCount,
- &LocalHddInfo,
- &BbsCount,
- &LocalBbsTable
- );
- //
- // First, set all the present devices' boot priority to BBS_UNPRIORITIZED_ENTRY
- // We will set them according to the settings setup by user
- //
- for (Index = 0; Index < BbsCount; Index++) {
- if (!((BBS_IGNORE_ENTRY == LocalBbsTable[Index].BootPriority) ||
- (BBS_DO_NOT_BOOT_FROM == LocalBbsTable[Index].BootPriority) ||
- (BBS_LOWEST_PRIORITY == LocalBbsTable[Index].BootPriority))) {
- LocalBbsTable[Index].BootPriority = BBS_UNPRIORITIZED_ENTRY;
- }
- }
- //
- // boot priority always starts at 0
- //
- Priority = 0;
- if (Entry->LoadOptionsSize == sizeof (BBS_TABLE) + sizeof (UINT16)) {
- //
- // If Entry stands for a legacy boot option, we prioritize the devices with the same type first.
- //
- DevType = ((BBS_TABLE *) Entry->LoadOptions)->DeviceType;
- BbsIndex = *(UINT16 *) ((BBS_TABLE *) Entry->LoadOptions + 1);
- Status = BdsSetBootPriority4SameTypeDev (
- DevType,
- BbsIndex,
- LocalBbsTable,
- &Priority
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- }
- //
- // we have to set the boot priority for other BBS entries with different device types
- //
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- DeviceType = AllocatePool (BootOrderSize + sizeof (UINT16));
- ASSERT (DeviceType != NULL);
-
- DeviceType[0] = DevType;
- DeviceTypeCount = 1;
- for (Index = 0; ((BootOrder != NULL) && (Index < BootOrderSize / sizeof (UINT16))); Index++) {
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);
- BootOptionVar = BdsLibGetVariableAndSize (
- BootOption,
- &gEfiGlobalVariableGuid,
- &BootOptionSize
- );
- if (NULL == BootOptionVar) {
- continue;
- }
-
- Ptr = BootOptionVar;
-
- Ptr += sizeof (UINT32);
- DevPathLen = *(UINT16 *) Ptr;
- Ptr += sizeof (UINT16);
- Ptr += StrSize ((UINT16 *) Ptr);
- DevPath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;
- if (BBS_DEVICE_PATH != DevPath->Type || BBS_BBS_DP != DevPath->SubType) {
- FreePool (BootOptionVar);
- continue;
- }
-
- Ptr += DevPathLen;
- DevType = ((BBS_TABLE *) Ptr)->DeviceType;
- for (DeviceTypeIndex = 0; DeviceTypeIndex < DeviceTypeCount; DeviceTypeIndex++) {
- if (DeviceType[DeviceTypeIndex] == DevType) {
- break;
- }
- }
- if (DeviceTypeIndex < DeviceTypeCount) {
- //
- // We don't want to process twice for a device type
- //
- FreePool (BootOptionVar);
- continue;
- }
-
- DeviceType[DeviceTypeCount] = DevType;
- DeviceTypeCount++;
-
- Status = BdsSetBootPriority4SameTypeDev (
- DevType,
- (UINTN) -1,
- LocalBbsTable,
- &Priority
- );
- FreePool (BootOptionVar);
- if (EFI_ERROR (Status)) {
- break;
- }
- }
-
- FreePool (DeviceType);
-
- if (BootOrder != NULL) {
- FreePool (BootOrder);
- }
-
- DEBUG_CODE_BEGIN();
- PrintBbsTable (LocalBbsTable, BbsCount);
- DEBUG_CODE_END();
-
- return Status;
-}
-
-/**
- Boot the legacy system with the boot option
-
- @param Option The legacy boot option which have BBS device path
-
- @retval EFI_UNSUPPORTED There is no legacybios protocol, do not support
- legacy boot.
- @retval EFI_STATUS Return the status of LegacyBios->LegacyBoot ().
-
-**/
-EFI_STATUS
-BdsLibDoLegacyBoot (
- IN BDS_COMMON_OPTION *Option
- )
-{
- EFI_STATUS Status;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;
- EFI_EVENT LegacyBootEvent;
-
- Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios);
- if (EFI_ERROR (Status)) {
- //
- // If no LegacyBios protocol we do not support legacy boot
- //
- return EFI_UNSUPPORTED;
- }
- //
- // Notes: if we separate the int 19, then we don't need to refresh BBS
- //
- BdsRefreshBbsTableForBoot (Option);
-
- //
- // Write boot to OS performance data for legacy boot.
- //
- PERF_CODE (
- //
- // Create an event to be signalled when Legacy Boot occurs to write performance data.
- //
- Status = EfiCreateEventLegacyBootEx(
- TPL_NOTIFY,
- BmEndOfBdsPerfCode,
- NULL,
- &LegacyBootEvent
- );
- ASSERT_EFI_ERROR (Status);
- );
-
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Legacy Boot: %S\n", Option->Description));
- return LegacyBios->LegacyBoot (
- LegacyBios,
- (BBS_BBS_DEVICE_PATH *) Option->DevicePath,
- Option->LoadOptionsSize,
- Option->LoadOptions
- );
-}
-
-/**
- Internal function to check if the input boot option is a valid EFI NV Boot####.
-
- @param OptionToCheck Boot option to be checked.
-
- @retval TRUE This boot option matches a valid EFI NV Boot####.
- @retval FALSE If not.
-
-**/
-BOOLEAN
-IsBootOptionValidNVVarialbe (
- IN BDS_COMMON_OPTION *OptionToCheck
- )
-{
- LIST_ENTRY TempList;
- BDS_COMMON_OPTION *BootOption;
- BOOLEAN Valid;
- CHAR16 OptionName[20];
-
- Valid = FALSE;
-
- InitializeListHead (&TempList);
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", OptionToCheck->BootCurrent);
-
- BootOption = BdsLibVariableToOption (&TempList, OptionName);
- if (BootOption == NULL) {
- return FALSE;
- }
-
- //
- // If the Boot Option Number and Device Path matches, OptionToCheck matches a
- // valid EFI NV Boot####.
- //
- if ((OptionToCheck->BootCurrent == BootOption->BootCurrent) &&
- (CompareMem (OptionToCheck->DevicePath, BootOption->DevicePath, GetDevicePathSize (OptionToCheck->DevicePath)) == 0))
- {
- Valid = TRUE;
- }
-
- FreePool (BootOption);
-
- return Valid;
-}
-
-/**
- Check whether a USB device match the specified USB Class device path. This
- function follows "Load Option Processing" behavior in UEFI specification.
-
- @param UsbIo USB I/O protocol associated with the USB device.
- @param UsbClass The USB Class device path to match.
-
- @retval TRUE The USB device match the USB Class device path.
- @retval FALSE The USB device does not match the USB Class device path.
-
-**/
-BOOLEAN
-BdsMatchUsbClass (
- IN EFI_USB_IO_PROTOCOL *UsbIo,
- IN USB_CLASS_DEVICE_PATH *UsbClass
- )
-{
- EFI_STATUS Status;
- EFI_USB_DEVICE_DESCRIPTOR DevDesc;
- EFI_USB_INTERFACE_DESCRIPTOR IfDesc;
- UINT8 DeviceClass;
- UINT8 DeviceSubClass;
- UINT8 DeviceProtocol;
-
- if ((DevicePathType (UsbClass) != MESSAGING_DEVICE_PATH) ||
- (DevicePathSubType (UsbClass) != MSG_USB_CLASS_DP)){
- return FALSE;
- }
-
- //
- // Check Vendor Id and Product Id.
- //
- Status = UsbIo->UsbGetDeviceDescriptor (UsbIo, &DevDesc);
- if (EFI_ERROR (Status)) {
- return FALSE;
- }
-
- if ((UsbClass->VendorId != 0xffff) &&
- (UsbClass->VendorId != DevDesc.IdVendor)) {
- return FALSE;
- }
-
- if ((UsbClass->ProductId != 0xffff) &&
- (UsbClass->ProductId != DevDesc.IdProduct)) {
- return FALSE;
- }
-
- DeviceClass = DevDesc.DeviceClass;
- DeviceSubClass = DevDesc.DeviceSubClass;
- DeviceProtocol = DevDesc.DeviceProtocol;
- if (DeviceClass == 0) {
- //
- // If Class in Device Descriptor is set to 0, use the Class, SubClass and
- // Protocol in Interface Descriptor instead.
- //
- Status = UsbIo->UsbGetInterfaceDescriptor (UsbIo, &IfDesc);
- if (EFI_ERROR (Status)) {
- return FALSE;
- }
-
- DeviceClass = IfDesc.InterfaceClass;
- DeviceSubClass = IfDesc.InterfaceSubClass;
- DeviceProtocol = IfDesc.InterfaceProtocol;
- }
-
- //
- // Check Class, SubClass and Protocol.
- //
- if ((UsbClass->DeviceClass != 0xff) &&
- (UsbClass->DeviceClass != DeviceClass)) {
- return FALSE;
- }
-
- if ((UsbClass->DeviceSubClass != 0xff) &&
- (UsbClass->DeviceSubClass != DeviceSubClass)) {
- return FALSE;
- }
-
- if ((UsbClass->DeviceProtocol != 0xff) &&
- (UsbClass->DeviceProtocol != DeviceProtocol)) {
- return FALSE;
- }
-
- return TRUE;
-}
-
-/**
- Check whether a USB device match the specified USB WWID device path. This
- function follows "Load Option Processing" behavior in UEFI specification.
-
- @param UsbIo USB I/O protocol associated with the USB device.
- @param UsbWwid The USB WWID device path to match.
-
- @retval TRUE The USB device match the USB WWID device path.
- @retval FALSE The USB device does not match the USB WWID device path.
-
-**/
-BOOLEAN
-BdsMatchUsbWwid (
- IN EFI_USB_IO_PROTOCOL *UsbIo,
- IN USB_WWID_DEVICE_PATH *UsbWwid
- )
-{
- EFI_STATUS Status;
- EFI_USB_DEVICE_DESCRIPTOR DevDesc;
- EFI_USB_INTERFACE_DESCRIPTOR IfDesc;
- UINT16 *LangIdTable;
- UINT16 TableSize;
- UINT16 Index;
- CHAR16 *CompareStr;
- UINTN CompareLen;
- CHAR16 *SerialNumberStr;
- UINTN Length;
-
- if ((DevicePathType (UsbWwid) != MESSAGING_DEVICE_PATH) ||
- (DevicePathSubType (UsbWwid) != MSG_USB_WWID_DP )){
- return FALSE;
- }
-
- //
- // Check Vendor Id and Product Id.
- //
- Status = UsbIo->UsbGetDeviceDescriptor (UsbIo, &DevDesc);
- if (EFI_ERROR (Status)) {
- return FALSE;
- }
- if ((DevDesc.IdVendor != UsbWwid->VendorId) ||
- (DevDesc.IdProduct != UsbWwid->ProductId)) {
- return FALSE;
- }
-
- //
- // Check Interface Number.
- //
- Status = UsbIo->UsbGetInterfaceDescriptor (UsbIo, &IfDesc);
- if (EFI_ERROR (Status)) {
- return FALSE;
- }
- if (IfDesc.InterfaceNumber != UsbWwid->InterfaceNumber) {
- return FALSE;
- }
-
- //
- // Check Serial Number.
- //
- if (DevDesc.StrSerialNumber == 0) {
- return FALSE;
- }
-
- //
- // Get all supported languages.
- //
- TableSize = 0;
- LangIdTable = NULL;
- Status = UsbIo->UsbGetSupportedLanguages (UsbIo, &LangIdTable, &TableSize);
- if (EFI_ERROR (Status) || (TableSize == 0) || (LangIdTable == NULL)) {
- return FALSE;
- }
-
- //
- // Serial number in USB WWID device path is the last 64-or-less UTF-16 characters.
- //
- CompareStr = (CHAR16 *) (UINTN) (UsbWwid + 1);
- CompareLen = (DevicePathNodeLength (UsbWwid) - sizeof (USB_WWID_DEVICE_PATH)) / sizeof (CHAR16);
- if (CompareStr[CompareLen - 1] == L'\0') {
- CompareLen--;
- }
-
- //
- // Compare serial number in each supported language.
- //
- for (Index = 0; Index < TableSize / sizeof (UINT16); Index++) {
- SerialNumberStr = NULL;
- Status = UsbIo->UsbGetStringDescriptor (
- UsbIo,
- LangIdTable[Index],
- DevDesc.StrSerialNumber,
- &SerialNumberStr
- );
- if (EFI_ERROR (Status) || (SerialNumberStr == NULL)) {
- continue;
- }
-
- Length = StrLen (SerialNumberStr);
- if ((Length >= CompareLen) &&
- (CompareMem (SerialNumberStr + Length - CompareLen, CompareStr, CompareLen * sizeof (CHAR16)) == 0)) {
- FreePool (SerialNumberStr);
- return TRUE;
- }
-
- FreePool (SerialNumberStr);
- }
-
- return FALSE;
-}
-
-/**
- Find a USB device path which match the specified short-form device path start
- with USB Class or USB WWID device path and load the boot file then return the
- image handle. If ParentDevicePath is NULL, this function will search in all USB
- devices of the platform. If ParentDevicePath is not NULL,this function will only
- search in its child devices.
-
- @param ParentDevicePath The device path of the parent.
- @param ShortFormDevicePath The USB Class or USB WWID device path to match.
-
- @return The image Handle if find load file from specified short-form device path
- or NULL if not found.
-
-**/
-EFI_HANDLE *
-BdsFindUsbDevice (
- IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
- IN EFI_DEVICE_PATH_PROTOCOL *ShortFormDevicePath
- )
-{
- EFI_STATUS Status;
- UINTN UsbIoHandleCount;
- EFI_HANDLE *UsbIoHandleBuffer;
- EFI_DEVICE_PATH_PROTOCOL *UsbIoDevicePath;
- EFI_USB_IO_PROTOCOL *UsbIo;
- UINTN Index;
- UINTN ParentSize;
- UINTN Size;
- EFI_HANDLE ImageHandle;
- EFI_HANDLE Handle;
- EFI_DEVICE_PATH_PROTOCOL *FullDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *NextDevicePath;
-
- FullDevicePath = NULL;
- ImageHandle = NULL;
-
- //
- // Get all UsbIo Handles.
- //
- UsbIoHandleCount = 0;
- UsbIoHandleBuffer = NULL;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiUsbIoProtocolGuid,
- NULL,
- &UsbIoHandleCount,
- &UsbIoHandleBuffer
- );
- if (EFI_ERROR (Status) || (UsbIoHandleCount == 0) || (UsbIoHandleBuffer == NULL)) {
- return NULL;
- }
-
- ParentSize = (ParentDevicePath == NULL) ? 0 : GetDevicePathSize (ParentDevicePath);
- for (Index = 0; Index < UsbIoHandleCount; Index++) {
- //
- // Get the Usb IO interface.
- //
- Status = gBS->HandleProtocol(
- UsbIoHandleBuffer[Index],
- &gEfiUsbIoProtocolGuid,
- (VOID **) &UsbIo
- );
- if (EFI_ERROR (Status)) {
- continue;
- }
-
- UsbIoDevicePath = DevicePathFromHandle (UsbIoHandleBuffer[Index]);
- if (UsbIoDevicePath == NULL) {
- continue;
- }
-
- if (ParentDevicePath != NULL) {
- //
- // Compare starting part of UsbIoHandle's device path with ParentDevicePath.
- //
- Size = GetDevicePathSize (UsbIoDevicePath);
- if ((Size < ParentSize) ||
- (CompareMem (UsbIoDevicePath, ParentDevicePath, ParentSize - END_DEVICE_PATH_LENGTH) != 0)) {
- continue;
- }
- }
-
- if (BdsMatchUsbClass (UsbIo, (USB_CLASS_DEVICE_PATH *) ShortFormDevicePath) ||
- BdsMatchUsbWwid (UsbIo, (USB_WWID_DEVICE_PATH *) ShortFormDevicePath)) {
- //
- // Try to find if there is the boot file in this DevicePath
- //
- NextDevicePath = NextDevicePathNode (ShortFormDevicePath);
- if (!IsDevicePathEnd (NextDevicePath)) {
- FullDevicePath = AppendDevicePath (UsbIoDevicePath, NextDevicePath);
- //
- // Connect the full device path, so that Simple File System protocol
- // could be installed for this USB device.
- //
- BdsLibConnectDevicePath (FullDevicePath);
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));
- Status = gBS->LoadImage (
- TRUE,
- gImageHandle,
- FullDevicePath,
- NULL,
- 0,
- &ImageHandle
- );
- FreePool (FullDevicePath);
- } else {
- FullDevicePath = UsbIoDevicePath;
- Status = EFI_NOT_FOUND;
- }
-
- //
- // If we didn't find an image directly, we need to try as if it is a removable device boot option
- // and load the image according to the default boot behavior for removable device.
- //
- if (EFI_ERROR (Status)) {
- //
- // check if there is a bootable removable media could be found in this device path ,
- // and get the bootable media handle
- //
- Handle = BdsLibGetBootableHandle(UsbIoDevicePath);
- if (Handle == NULL) {
- continue;
- }
- //
- // Load the default boot file \EFI\BOOT\boot{machinename}.EFI from removable Media
- // machinename is ia32, ia64, x64, ...
- //
- FullDevicePath = FileDevicePath (Handle, EFI_REMOVABLE_MEDIA_FILE_NAME);
- if (FullDevicePath != NULL) {
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));
- Status = gBS->LoadImage (
- TRUE,
- gImageHandle,
- FullDevicePath,
- NULL,
- 0,
- &ImageHandle
- );
- if (EFI_ERROR (Status)) {
- //
- // The DevicePath failed, and it's not a valid
- // removable media device.
- //
- continue;
- }
- } else {
- continue;
- }
- }
- break;
- }
- }
-
- FreePool (UsbIoHandleBuffer);
- return ImageHandle;
-}
-
-/**
- Expand USB Class or USB WWID device path node to be full device path of a USB
- device in platform then load the boot file on this full device path and return the
- image handle.
-
- This function support following 4 cases:
- 1) Boot Option device path starts with a USB Class or USB WWID device path,
- and there is no Media FilePath device path in the end.
- In this case, it will follow Removable Media Boot Behavior.
- 2) Boot Option device path starts with a USB Class or USB WWID device path,
- and ended with Media FilePath device path.
- 3) Boot Option device path starts with a full device path to a USB Host Controller,
- contains a USB Class or USB WWID device path node, while not ended with Media
- FilePath device path. In this case, it will follow Removable Media Boot Behavior.
- 4) Boot Option device path starts with a full device path to a USB Host Controller,
- contains a USB Class or USB WWID device path node, and ended with Media
- FilePath device path.
-
- @param DevicePath The Boot Option device path.
-
- @return The image handle of boot file, or NULL if there is no boot file found in
- the specified USB Class or USB WWID device path.
-
-**/
-EFI_HANDLE *
-BdsExpandUsbShortFormDevicePath (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- )
-{
- EFI_HANDLE *ImageHandle;
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *ShortFormDevicePath;
-
- //
- // Search for USB Class or USB WWID device path node.
- //
- ShortFormDevicePath = NULL;
- ImageHandle = NULL;
- TempDevicePath = DevicePath;
- while (!IsDevicePathEnd (TempDevicePath)) {
- if ((DevicePathType (TempDevicePath) == MESSAGING_DEVICE_PATH) &&
- ((DevicePathSubType (TempDevicePath) == MSG_USB_CLASS_DP) ||
- (DevicePathSubType (TempDevicePath) == MSG_USB_WWID_DP))) {
- ShortFormDevicePath = TempDevicePath;
- break;
- }
- TempDevicePath = NextDevicePathNode (TempDevicePath);
- }
-
- if (ShortFormDevicePath == NULL) {
- //
- // No USB Class or USB WWID device path node found, do nothing.
- //
- return NULL;
- }
-
- if (ShortFormDevicePath == DevicePath) {
- //
- // Boot Option device path starts with USB Class or USB WWID device path.
- //
- ImageHandle = BdsFindUsbDevice (NULL, ShortFormDevicePath);
- if (ImageHandle == NULL) {
- //
- // Failed to find a match in existing devices, connect the short form USB
- // device path and try again.
- //
- BdsLibConnectUsbDevByShortFormDP (0xff, ShortFormDevicePath);
- ImageHandle = BdsFindUsbDevice (NULL, ShortFormDevicePath);
- }
- } else {
- //
- // Boot Option device path contains USB Class or USB WWID device path node.
- //
-
- //
- // Prepare the parent device path for search.
- //
- TempDevicePath = DuplicateDevicePath (DevicePath);
- ASSERT (TempDevicePath != NULL);
- SetDevicePathEndNode (((UINT8 *) TempDevicePath) + ((UINTN) ShortFormDevicePath - (UINTN) DevicePath));
-
- //
- // The USB Host Controller device path is already in Boot Option device path
- // and USB Bus driver already support RemainingDevicePath starts with USB
- // Class or USB WWID device path, so just search in existing USB devices and
- // doesn't perform ConnectController here.
- //
- ImageHandle = BdsFindUsbDevice (TempDevicePath, ShortFormDevicePath);
- FreePool (TempDevicePath);
- }
-
- return ImageHandle;
-}
-
-/**
- Process the boot option follow the UEFI specification and
- special treat the legacy boot option with BBS_DEVICE_PATH.
-
- @param Option The boot option need to be processed
- @param DevicePath The device path which describe where to load the
- boot image or the legacy BBS device path to boot
- the legacy OS
- @param ExitDataSize The size of exit data.
- @param ExitData Data returned when Boot image failed.
-
- @retval EFI_SUCCESS Boot from the input boot option successfully.
- @retval EFI_NOT_FOUND If the Device Path is not found in the system
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibBootViaBootOption (
- IN BDS_COMMON_OPTION *Option,
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- OUT UINTN *ExitDataSize,
- OUT CHAR16 **ExitData OPTIONAL
- )
-{
- EFI_STATUS Status;
- EFI_STATUS StatusLogo;
- EFI_HANDLE Handle;
- EFI_HANDLE ImageHandle;
- EFI_DEVICE_PATH_PROTOCOL *FilePath;
- EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;
- EFI_DEVICE_PATH_PROTOCOL *WorkingDevicePath;
- EFI_ACPI_S3_SAVE_PROTOCOL *AcpiS3Save;
- LIST_ENTRY TempBootLists;
- EFI_BOOT_LOGO_PROTOCOL *BootLogo;
-
- *ExitDataSize = 0;
- *ExitData = NULL;
-
- //
- // Notes: this code can be remove after the s3 script table
- // hook on the event EVT_SIGNAL_READY_TO_BOOT or
- // EVT_SIGNAL_LEGACY_BOOT
- //
- Status = gBS->LocateProtocol (&gEfiAcpiS3SaveProtocolGuid, NULL, (VOID **) &AcpiS3Save);
- if (!EFI_ERROR (Status)) {
- AcpiS3Save->S3Save (AcpiS3Save, NULL);
- }
- //
- // If it's Device Path that starts with a hard drive path, append it with the front part to compose a
- // full device path
- //
- WorkingDevicePath = NULL;
- if ((DevicePathType (DevicePath) == MEDIA_DEVICE_PATH) &&
- (DevicePathSubType (DevicePath) == MEDIA_HARDDRIVE_DP)) {
- WorkingDevicePath = BdsExpandPartitionPartialDevicePathToFull (
- (HARDDRIVE_DEVICE_PATH *)DevicePath
- );
- if (WorkingDevicePath != NULL) {
- DevicePath = WorkingDevicePath;
- }
- }
-
- //
- // Set Boot Current
- //
- if (IsBootOptionValidNVVarialbe (Option)) {
- //
- // For a temporary boot (i.e. a boot by selected a EFI Shell using "Boot From File"), Boot Current is actually not valid.
- // In this case, "BootCurrent" is not created.
- // Only create the BootCurrent variable when it points to a valid Boot#### variable.
- //
- SetVariableAndReportStatusCodeOnError (
- L"BootCurrent",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
- sizeof (UINT16),
- &Option->BootCurrent
- );
- }
-
- //
- // Report Status Code to indicate ReadyToBoot event will be signalled
- //
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT));
-
- //
- // Signal the EVT_SIGNAL_READY_TO_BOOT event
- //
- EfiSignalEventReadyToBoot();
-
- //
- // Expand USB Class or USB WWID device path node to be full device path of a USB
- // device in platform then load the boot file on this full device path and get the
- // image handle.
- //
- ImageHandle = BdsExpandUsbShortFormDevicePath (DevicePath);
-
- //
- // Adjust the different type memory page number just before booting
- // and save the updated info into the variable for next boot to use
- //
- BdsSetMemoryTypeInformationVariable ();
-
- //
- // By expanding the USB Class or WWID device path, the ImageHandle has returnned.
- // Here get the ImageHandle for the non USB class or WWID device path.
- //
- if (ImageHandle == NULL) {
- ASSERT (Option->DevicePath != NULL);
- if ((DevicePathType (Option->DevicePath) == BBS_DEVICE_PATH) &&
- (DevicePathSubType (Option->DevicePath) == BBS_BBS_DP)
- ) {
- //
- // Check to see if we should legacy BOOT. If yes then do the legacy boot
- //
- return BdsLibDoLegacyBoot (Option);
- }
-
- //
- // If the boot option point to Internal FV shell, make sure it is valid
- //
- Status = BdsLibUpdateFvFileDevicePath (&DevicePath, &gUefiShellFileGuid);
- if (!EFI_ERROR(Status)) {
- if (Option->DevicePath != NULL) {
- FreePool(Option->DevicePath);
- }
- Option->DevicePath = AllocateZeroPool (GetDevicePathSize (DevicePath));
- ASSERT(Option->DevicePath != NULL);
- CopyMem (Option->DevicePath, DevicePath, GetDevicePathSize (DevicePath));
- //
- // Update the shell boot option
- //
- InitializeListHead (&TempBootLists);
- BdsLibRegisterNewOption (&TempBootLists, DevicePath, L"EFI Internal Shell", L"BootOrder");
-
- //
- // free the temporary device path created by BdsLibUpdateFvFileDevicePath()
- //
- FreePool (DevicePath);
- DevicePath = Option->DevicePath;
- }
-
- DEBUG_CODE_BEGIN();
-
- if (Option->Description == NULL) {
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Booting from unknown device path\n"));
- } else {
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Booting %S\n", Option->Description));
- }
-
- DEBUG_CODE_END();
-
- //
- // Report status code for OS Loader LoadImage.
- //
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));
- Status = gBS->LoadImage (
- TRUE,
- gImageHandle,
- DevicePath,
- NULL,
- 0,
- &ImageHandle
- );
-
- //
- // If we didn't find an image directly, we need to try as if it is a removable device boot option
- // and load the image according to the default boot behavior for removable device.
- //
- if (EFI_ERROR (Status)) {
- //
- // check if there is a bootable removable media could be found in this device path ,
- // and get the bootable media handle
- //
- Handle = BdsLibGetBootableHandle(DevicePath);
- if (Handle != NULL) {
- //
- // Load the default boot file \EFI\BOOT\boot{machinename}.EFI from removable Media
- // machinename is ia32, ia64, x64, ...
- //
- FilePath = FileDevicePath (Handle, EFI_REMOVABLE_MEDIA_FILE_NAME);
- if (FilePath != NULL) {
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));
- Status = gBS->LoadImage (
- TRUE,
- gImageHandle,
- FilePath,
- NULL,
- 0,
- &ImageHandle
- );
- }
- }
- }
- }
- //
- // Provide the image with it's load options
- //
- if ((ImageHandle == NULL) || (EFI_ERROR(Status))) {
- //
- // Report Status Code to indicate that the failure to load boot option
- //
- REPORT_STATUS_CODE (
- EFI_ERROR_CODE | EFI_ERROR_MINOR,
- (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_BOOT_OPTION_LOAD_ERROR)
- );
- goto Done;
- }
-
- Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &ImageInfo);
- ASSERT_EFI_ERROR (Status);
-
- if (Option->LoadOptionsSize != 0) {
- ImageInfo->LoadOptionsSize = Option->LoadOptionsSize;
- ImageInfo->LoadOptions = Option->LoadOptions;
- }
-
- //
- // Clean to NULL because the image is loaded directly from the firmwares boot manager.
- //
- ImageInfo->ParentHandle = NULL;
-
- //
- // Before calling the image, enable the Watchdog Timer for
- // the 5 Minute period
- //
- gBS->SetWatchdogTimer (5 * 60, 0x0000, 0x00, NULL);
-
- //
- // Write boot to OS performance data for UEFI boot
- //
- PERF_CODE (
- BmEndOfBdsPerfCode (NULL, NULL);
- );
-
- //
- // Report status code for OS Loader StartImage.
- //
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderStart));
-
- Status = gBS->StartImage (ImageHandle, ExitDataSize, ExitData);
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Image Return Status = %r\n", Status));
- if (EFI_ERROR (Status)) {
- //
- // Report Status Code to indicate that boot failure
- //
- REPORT_STATUS_CODE (
- EFI_ERROR_CODE | EFI_ERROR_MINOR,
- (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_BOOT_OPTION_FAILED)
- );
- }
-
- //
- // Clear the Watchdog Timer after the image returns
- //
- gBS->SetWatchdogTimer (0x0000, 0x0000, 0x0000, NULL);
-
-Done:
- //
- // Set Logo status invalid after trying one boot option
- //
- BootLogo = NULL;
- StatusLogo = gBS->LocateProtocol (&gEfiBootLogoProtocolGuid, NULL, (VOID **) &BootLogo);
- if (!EFI_ERROR (StatusLogo) && (BootLogo != NULL)) {
- BootLogo->SetBootLogo (BootLogo, NULL, 0, 0, 0, 0);
- }
-
- //
- // Clear Boot Current
- // Deleting variable with current implementation shouldn't fail.
- //
- gRT->SetVariable (
- L"BootCurrent",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
- 0,
- NULL
- );
-
- return Status;
-}
-
-
-/**
- Expand a device path that starts with a hard drive media device path node to be a
- full device path that includes the full hardware path to the device. We need
- to do this so it can be booted. As an optimization the front match (the part point
- to the partition node. E.g. ACPI() /PCI()/ATA()/Partition() ) is saved in a variable
- so a connect all is not required on every boot. All successful history device path
- which point to partition node (the front part) will be saved.
-
- @param HardDriveDevicePath EFI Device Path to boot, if it starts with a hard
- drive media device path.
- @return A Pointer to the full device path or NULL if a valid Hard Drive devic path
- cannot be found.
-
-**/
-EFI_DEVICE_PATH_PROTOCOL *
-EFIAPI
-BdsExpandPartitionPartialDevicePathToFull (
- IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath
- )
-{
- EFI_STATUS Status;
- UINTN BlockIoHandleCount;
- EFI_HANDLE *BlockIoBuffer;
- EFI_DEVICE_PATH_PROTOCOL *FullDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *BlockIoDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- UINTN Index;
- UINTN InstanceNum;
- EFI_DEVICE_PATH_PROTOCOL *CachedDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *TempNewDevicePath;
- UINTN CachedDevicePathSize;
- BOOLEAN DeviceExist;
- BOOLEAN NeedAdjust;
- EFI_DEVICE_PATH_PROTOCOL *Instance;
- UINTN Size;
-
- FullDevicePath = NULL;
- //
- // Check if there is prestore HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable.
- // If exist, search the front path which point to partition node in the variable instants.
- // If fail to find or HD_BOOT_DEVICE_PATH_VARIABLE_NAME not exist, reconnect all and search in all system
- //
- GetVariable2 (
- HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
- &gHdBootDevicePathVariablGuid,
- (VOID **) &CachedDevicePath,
- &CachedDevicePathSize
- );
-
- //
- // Delete the invalid HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable.
- //
- if ((CachedDevicePath != NULL) && !IsDevicePathValid (CachedDevicePath, CachedDevicePathSize)) {
- FreePool (CachedDevicePath);
- CachedDevicePath = NULL;
- Status = gRT->SetVariable (
- HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
- &gHdBootDevicePathVariablGuid,
- 0,
- 0,
- NULL
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- if (CachedDevicePath != NULL) {
- TempNewDevicePath = CachedDevicePath;
- DeviceExist = FALSE;
- NeedAdjust = FALSE;
- do {
- //
- // Check every instance of the variable
- // First, check whether the instance contain the partition node, which is needed for distinguishing multi
- // partial partition boot option. Second, check whether the instance could be connected.
- //
- Instance = GetNextDevicePathInstance (&TempNewDevicePath, &Size);
- if (MatchPartitionDevicePathNode (Instance, HardDriveDevicePath)) {
- //
- // Connect the device path instance, the device path point to hard drive media device path node
- // e.g. ACPI() /PCI()/ATA()/Partition()
- //
- Status = BdsLibConnectDevicePath (Instance);
- if (!EFI_ERROR (Status)) {
- DeviceExist = TRUE;
- break;
- }
- }
- //
- // Come here means the first instance is not matched
- //
- NeedAdjust = TRUE;
- FreePool(Instance);
- } while (TempNewDevicePath != NULL);
-
- if (DeviceExist) {
- //
- // Find the matched device path.
- // Append the file path information from the boot option and return the fully expanded device path.
- //
- DevicePath = NextDevicePathNode ((EFI_DEVICE_PATH_PROTOCOL *) HardDriveDevicePath);
- FullDevicePath = AppendDevicePath (Instance, DevicePath);
-
- //
- // Adjust the HD_BOOT_DEVICE_PATH_VARIABLE_NAME instances sequence if the matched one is not first one.
- //
- if (NeedAdjust) {
- //
- // First delete the matched instance.
- //
- TempNewDevicePath = CachedDevicePath;
- CachedDevicePath = BdsLibDelPartMatchInstance (CachedDevicePath, Instance );
- FreePool (TempNewDevicePath);
-
- //
- // Second, append the remaining path after the matched instance
- //
- TempNewDevicePath = CachedDevicePath;
- CachedDevicePath = AppendDevicePathInstance (Instance, CachedDevicePath );
- FreePool (TempNewDevicePath);
- //
- // Save the matching Device Path so we don't need to do a connect all next time
- // Failure to set the variable only impacts the performance when next time expanding the short-form device path.
- //
- Status = gRT->SetVariable (
- HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
- &gHdBootDevicePathVariablGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- GetDevicePathSize (CachedDevicePath),
- CachedDevicePath
- );
- }
-
- FreePool (Instance);
- FreePool (CachedDevicePath);
- return FullDevicePath;
- }
- }
-
- //
- // If we get here we fail to find or HD_BOOT_DEVICE_PATH_VARIABLE_NAME not exist, and now we need
- // to search all devices in the system for a matched partition
- //
- BdsLibConnectAllDriversToAllControllers ();
- Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiBlockIoProtocolGuid, NULL, &BlockIoHandleCount, &BlockIoBuffer);
- if (EFI_ERROR (Status) || BlockIoHandleCount == 0 || BlockIoBuffer == NULL) {
- //
- // If there was an error or there are no device handles that support
- // the BLOCK_IO Protocol, then return.
- //
- return NULL;
- }
- //
- // Loop through all the device handles that support the BLOCK_IO Protocol
- //
- for (Index = 0; Index < BlockIoHandleCount; Index++) {
-
- Status = gBS->HandleProtocol (BlockIoBuffer[Index], &gEfiDevicePathProtocolGuid, (VOID *) &BlockIoDevicePath);
- if (EFI_ERROR (Status) || BlockIoDevicePath == NULL) {
- continue;
- }
-
- if (MatchPartitionDevicePathNode (BlockIoDevicePath, HardDriveDevicePath)) {
- //
- // Find the matched partition device path
- //
- DevicePath = NextDevicePathNode ((EFI_DEVICE_PATH_PROTOCOL *) HardDriveDevicePath);
- FullDevicePath = AppendDevicePath (BlockIoDevicePath, DevicePath);
-
- //
- // Save the matched partition device path in HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable
- //
- if (CachedDevicePath != NULL) {
- //
- // Save the matched partition device path as first instance of HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable
- //
- if (BdsLibMatchDevicePaths (CachedDevicePath, BlockIoDevicePath)) {
- TempNewDevicePath = CachedDevicePath;
- CachedDevicePath = BdsLibDelPartMatchInstance (CachedDevicePath, BlockIoDevicePath);
- FreePool(TempNewDevicePath);
- }
-
- if (CachedDevicePath != NULL) {
- TempNewDevicePath = CachedDevicePath;
- CachedDevicePath = AppendDevicePathInstance (BlockIoDevicePath, CachedDevicePath);
- FreePool(TempNewDevicePath);
- } else {
- CachedDevicePath = DuplicateDevicePath (BlockIoDevicePath);
- }
-
- //
- // Here limit the device path instance number to 12, which is max number for a system support 3 IDE controller
- // If the user try to boot many OS in different HDs or partitions, in theory,
- // the HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable maybe become larger and larger.
- //
- InstanceNum = 0;
- ASSERT (CachedDevicePath != NULL);
- TempNewDevicePath = CachedDevicePath;
- while (!IsDevicePathEnd (TempNewDevicePath)) {
- TempNewDevicePath = NextDevicePathNode (TempNewDevicePath);
- //
- // Parse one instance
- //
- while (!IsDevicePathEndType (TempNewDevicePath)) {
- TempNewDevicePath = NextDevicePathNode (TempNewDevicePath);
- }
- InstanceNum++;
- //
- // If the CachedDevicePath variable contain too much instance, only remain 12 instances.
- //
- if (InstanceNum >= 12) {
- SetDevicePathEndNode (TempNewDevicePath);
- break;
- }
- }
- } else {
- CachedDevicePath = DuplicateDevicePath (BlockIoDevicePath);
- }
-
- //
- // Save the matching Device Path so we don't need to do a connect all next time
- // Failure to set the variable only impacts the performance when next time expanding the short-form device path.
- //
- Status = gRT->SetVariable (
- HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
- &gHdBootDevicePathVariablGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- GetDevicePathSize (CachedDevicePath),
- CachedDevicePath
- );
-
- break;
- }
- }
-
- if (CachedDevicePath != NULL) {
- FreePool (CachedDevicePath);
- }
- if (BlockIoBuffer != NULL) {
- FreePool (BlockIoBuffer);
- }
- return FullDevicePath;
-}
-
-/**
- Check whether there is a instance in BlockIoDevicePath, which contain multi device path
- instances, has the same partition node with HardDriveDevicePath device path
-
- @param BlockIoDevicePath Multi device path instances which need to check
- @param HardDriveDevicePath A device path which starts with a hard drive media
- device path.
-
- @retval TRUE There is a matched device path instance.
- @retval FALSE There is no matched device path instance.
-
-**/
-BOOLEAN
-EFIAPI
-MatchPartitionDevicePathNode (
- IN EFI_DEVICE_PATH_PROTOCOL *BlockIoDevicePath,
- IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath
- )
-{
- HARDDRIVE_DEVICE_PATH *TmpHdPath;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- BOOLEAN Match;
- EFI_DEVICE_PATH_PROTOCOL *BlockIoHdDevicePathNode;
-
- if ((BlockIoDevicePath == NULL) || (HardDriveDevicePath == NULL)) {
- return FALSE;
- }
-
- //
- // Make PreviousDevicePath == the device path node before the end node
- //
- DevicePath = BlockIoDevicePath;
- BlockIoHdDevicePathNode = NULL;
-
- //
- // find the partition device path node
- //
- while (!IsDevicePathEnd (DevicePath)) {
- if ((DevicePathType (DevicePath) == MEDIA_DEVICE_PATH) &&
- (DevicePathSubType (DevicePath) == MEDIA_HARDDRIVE_DP)
- ) {
- BlockIoHdDevicePathNode = DevicePath;
- break;
- }
-
- DevicePath = NextDevicePathNode (DevicePath);
- }
-
- if (BlockIoHdDevicePathNode == NULL) {
- return FALSE;
- }
- //
- // See if the harddrive device path in blockio matches the orig Hard Drive Node
- //
- TmpHdPath = (HARDDRIVE_DEVICE_PATH *) BlockIoHdDevicePathNode;
- Match = FALSE;
-
- //
- // Check for the match
- //
- if ((TmpHdPath->MBRType == HardDriveDevicePath->MBRType) &&
- (TmpHdPath->SignatureType == HardDriveDevicePath->SignatureType)) {
- switch (TmpHdPath->SignatureType) {
- case SIGNATURE_TYPE_GUID:
- Match = CompareGuid ((EFI_GUID *)TmpHdPath->Signature, (EFI_GUID *)HardDriveDevicePath->Signature);
- break;
- case SIGNATURE_TYPE_MBR:
- Match = (BOOLEAN)(*((UINT32 *)(&(TmpHdPath->Signature[0]))) == ReadUnaligned32((UINT32 *)(&(HardDriveDevicePath->Signature[0]))));
- break;
- default:
- Match = FALSE;
- break;
- }
- }
-
- return Match;
-}
-
-/**
- Delete the boot option associated with the handle passed in.
-
- @param Handle The handle which present the device path to create
- boot option
-
- @retval EFI_SUCCESS Delete the boot option success
- @retval EFI_NOT_FOUND If the Device Path is not found in the system
- @retval EFI_OUT_OF_RESOURCES Lack of memory resource
- @retval Other Error return value from SetVariable()
-
-**/
-EFI_STATUS
-BdsLibDeleteOptionFromHandle (
- IN EFI_HANDLE Handle
- )
-{
- UINT16 *BootOrder;
- UINT8 *BootOptionVar;
- UINTN BootOrderSize;
- UINTN BootOptionSize;
- EFI_STATUS Status;
- UINTN Index;
- UINT16 BootOption[BOOT_OPTION_MAX_CHAR];
- UINTN DevicePathSize;
- UINTN OptionDevicePathSize;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath;
- UINT8 *TempPtr;
-
- Status = EFI_SUCCESS;
- BootOrder = NULL;
- BootOrderSize = 0;
-
- //
- // Check "BootOrder" variable, if no, means there is no any boot order.
- //
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- if (BootOrder == NULL) {
- return EFI_NOT_FOUND;
- }
-
- //
- // Convert device handle to device path protocol instance
- //
- DevicePath = DevicePathFromHandle (Handle);
- if (DevicePath == NULL) {
- return EFI_NOT_FOUND;
- }
- DevicePathSize = GetDevicePathSize (DevicePath);
-
- //
- // Loop all boot order variable and find the matching device path
- //
- Index = 0;
- while (Index < BootOrderSize / sizeof (UINT16)) {
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);
- BootOptionVar = BdsLibGetVariableAndSize (
- BootOption,
- &gEfiGlobalVariableGuid,
- &BootOptionSize
- );
-
- if (BootOptionVar == NULL) {
- FreePool (BootOrder);
- return EFI_OUT_OF_RESOURCES;
- }
-
- if (!ValidateOption(BootOptionVar, BootOptionSize)) {
- BdsDeleteBootOption (BootOrder[Index], BootOrder, &BootOrderSize);
- FreePool (BootOptionVar);
- Index++;
- continue;
- }
-
- TempPtr = BootOptionVar;
- TempPtr += sizeof (UINT32) + sizeof (UINT16);
- TempPtr += StrSize ((CHAR16 *) TempPtr);
- OptionDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;
- OptionDevicePathSize = GetDevicePathSize (OptionDevicePath);
-
- //
- // Check whether the device path match
- //
- if ((OptionDevicePathSize == DevicePathSize) &&
- (CompareMem (DevicePath, OptionDevicePath, DevicePathSize) == 0)) {
- BdsDeleteBootOption (BootOrder[Index], BootOrder, &BootOrderSize);
- FreePool (BootOptionVar);
- break;
- }
-
- FreePool (BootOptionVar);
- Index++;
- }
-
- //
- // Adjust number of boot option for "BootOrder" variable.
- //
- Status = gRT->SetVariable (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- BootOrderSize,
- BootOrder
- );
- //
- // Shrinking variable with existing variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
-
- FreePool (BootOrder);
-
- return Status;
-}
-
-
-/**
- Delete all invalid EFI boot options.
-
- @retval EFI_SUCCESS Delete all invalid boot option success
- @retval EFI_NOT_FOUND Variable "BootOrder" is not found
- @retval EFI_OUT_OF_RESOURCES Lack of memory resource
- @retval Other Error return value from SetVariable()
-
-**/
-EFI_STATUS
-BdsDeleteAllInvalidEfiBootOption (
- VOID
- )
-{
- UINT16 *BootOrder;
- UINT8 *BootOptionVar;
- UINTN BootOrderSize;
- UINTN BootOptionSize;
- EFI_STATUS Status;
- UINTN Index;
- UINTN Index2;
- UINT16 BootOption[BOOT_OPTION_MAX_CHAR];
- EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath;
- UINT8 *TempPtr;
- CHAR16 *Description;
- BOOLEAN Corrupted;
-
- Status = EFI_SUCCESS;
- BootOrder = NULL;
- Description = NULL;
- OptionDevicePath = NULL;
- BootOrderSize = 0;
- Corrupted = FALSE;
-
- //
- // Check "BootOrder" variable firstly, this variable hold the number of boot options
- //
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- if (NULL == BootOrder) {
- return EFI_NOT_FOUND;
- }
-
- Index = 0;
- while (Index < BootOrderSize / sizeof (UINT16)) {
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);
- BootOptionVar = BdsLibGetVariableAndSize (
- BootOption,
- &gEfiGlobalVariableGuid,
- &BootOptionSize
- );
- if (NULL == BootOptionVar) {
- FreePool (BootOrder);
- return EFI_OUT_OF_RESOURCES;
- }
-
- if (!ValidateOption(BootOptionVar, BootOptionSize)) {
- Corrupted = TRUE;
- } else {
- TempPtr = BootOptionVar;
- TempPtr += sizeof (UINT32) + sizeof (UINT16);
- Description = (CHAR16 *) TempPtr;
- TempPtr += StrSize ((CHAR16 *) TempPtr);
- OptionDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;
-
- //
- // Skip legacy boot option (BBS boot device)
- //
- if ((DevicePathType (OptionDevicePath) == BBS_DEVICE_PATH) &&
- (DevicePathSubType (OptionDevicePath) == BBS_BBS_DP)) {
- FreePool (BootOptionVar);
- Index++;
- continue;
- }
- }
-
- if (Corrupted || !BdsLibIsValidEFIBootOptDevicePathExt (OptionDevicePath, FALSE, Description)) {
- //
- // Delete this invalid boot option "Boot####"
- //
- Status = gRT->SetVariable (
- BootOption,
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- 0,
- NULL
- );
- //
- // Deleting variable with current variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
- //
- // Mark this boot option in boot order as deleted
- //
- BootOrder[Index] = 0xffff;
- Corrupted = FALSE;
- }
-
- FreePool (BootOptionVar);
- Index++;
- }
-
- //
- // Adjust boot order array
- //
- Index2 = 0;
- for (Index = 0; Index < BootOrderSize / sizeof (UINT16); Index++) {
- if (BootOrder[Index] != 0xffff) {
- BootOrder[Index2] = BootOrder[Index];
- Index2 ++;
- }
- }
- Status = gRT->SetVariable (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- Index2 * sizeof (UINT16),
- BootOrder
- );
- //
- // Shrinking variable with current variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
-
- FreePool (BootOrder);
-
- return Status;
-}
-
-
-/**
- For EFI boot option, BDS separate them as six types:
- 1. Network - The boot option points to the SimpleNetworkProtocol device.
- Bds will try to automatically create this type boot option when enumerate.
- 2. Shell - The boot option points to internal flash shell.
- Bds will try to automatically create this type boot option when enumerate.
- 3. Removable BlockIo - The boot option only points to the removable media
- device, like USB flash disk, DVD, Floppy etc.
- These device should contain a *removable* blockIo
- protocol in their device handle.
- Bds will try to automatically create this type boot option
- when enumerate.
- 4. Fixed BlockIo - The boot option only points to a Fixed blockIo device,
- like HardDisk.
- These device should contain a *fixed* blockIo
- protocol in their device handle.
- BDS will skip fixed blockIo devices, and NOT
- automatically create boot option for them. But BDS
- will help to delete those fixed blockIo boot option,
- whose description rule conflict with other auto-created
- boot options.
- 5. Non-BlockIo Simplefile - The boot option points to a device whose handle
- has SimpleFileSystem Protocol, but has no blockio
- protocol. These devices do not offer blockIo
- protocol, but BDS still can get the
- \EFI\BOOT\boot{machinename}.EFI by SimpleFileSystem
- Protocol.
- 6. File - The boot option points to a file. These boot options are usually
- created by user manually or OS loader. BDS will not delete or modify
- these boot options.
-
- This function will enumerate all possible boot device in the system, and
- automatically create boot options for Network, Shell, Removable BlockIo,
- and Non-BlockIo Simplefile devices.
- It will only execute once of every boot.
-
- @param BdsBootOptionList The header of the link list which indexed all
- current boot options
-
- @retval EFI_SUCCESS Finished all the boot device enumerate and create
- the boot option base on that boot device
-
- @retval EFI_OUT_OF_RESOURCES Failed to enumerate the boot device and create the boot option list
-**/
-EFI_STATUS
-EFIAPI
-BdsLibEnumerateAllBootOption (
- IN OUT LIST_ENTRY *BdsBootOptionList
- )
-{
- EFI_STATUS Status;
- UINT16 FloppyNumber;
- UINT16 HarddriveNumber;
- UINT16 CdromNumber;
- UINT16 UsbNumber;
- UINT16 MiscNumber;
- UINT16 ScsiNumber;
- UINT16 NonBlockNumber;
- UINTN NumberBlockIoHandles;
- EFI_HANDLE *BlockIoHandles;
- EFI_BLOCK_IO_PROTOCOL *BlkIo;
- BOOLEAN Removable[2];
- UINTN RemovableIndex;
- UINTN Index;
- UINTN NumOfLoadFileHandles;
- EFI_HANDLE *LoadFileHandles;
- UINTN FvHandleCount;
- EFI_HANDLE *FvHandleBuffer;
- EFI_FV_FILETYPE Type;
- UINTN Size;
- EFI_FV_FILE_ATTRIBUTES Attributes;
- UINT32 AuthenticationStatus;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- UINTN DevicePathType;
- CHAR16 Buffer[40];
- EFI_HANDLE *FileSystemHandles;
- UINTN NumberFileSystemHandles;
- BOOLEAN NeedDelete;
- EFI_IMAGE_DOS_HEADER DosHeader;
- CHAR8 *PlatLang;
- CHAR8 *LastLang;
- EFI_IMAGE_OPTIONAL_HEADER_UNION HdrData;
- EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;
- CHAR16 *MacStr;
- CHAR16 *IPverStr;
- EFI_HANDLE *NetworkHandles;
- UINTN BufferSize;
-
- FloppyNumber = 0;
- HarddriveNumber = 0;
- CdromNumber = 0;
- UsbNumber = 0;
- MiscNumber = 0;
- ScsiNumber = 0;
- PlatLang = NULL;
- LastLang = NULL;
- ZeroMem (Buffer, sizeof (Buffer));
-
- //
- // If the boot device enumerate happened, just get the boot
- // device from the boot order variable
- //
- if (mEnumBootDevice) {
- GetVariable2 (LAST_ENUM_LANGUAGE_VARIABLE_NAME, &gLastEnumLangGuid, (VOID**)&LastLang, NULL);
- GetEfiGlobalVariable2 (L"PlatformLang", (VOID**)&PlatLang, NULL);
- ASSERT (PlatLang != NULL);
- if ((LastLang != NULL) && (AsciiStrCmp (LastLang, PlatLang) == 0)) {
- Status = BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");
- FreePool (LastLang);
- FreePool (PlatLang);
- return Status;
- } else {
- Status = gRT->SetVariable (
- LAST_ENUM_LANGUAGE_VARIABLE_NAME,
- &gLastEnumLangGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- AsciiStrSize (PlatLang),
- PlatLang
- );
- //
- // Failure to set the variable only impacts the performance next time enumerating the boot options.
- //
-
- if (LastLang != NULL) {
- FreePool (LastLang);
- }
- FreePool (PlatLang);
- }
- }
-
- //
- // Notes: this dirty code is to get the legacy boot option from the
- // BBS table and create to variable as the EFI boot option, it should
- // be removed after the CSM can provide legacy boot option directly
- //
- REFRESH_LEGACY_BOOT_OPTIONS;
-
- //
- // Delete invalid boot option
- //
- BdsDeleteAllInvalidEfiBootOption ();
-
- //
- // Parse removable media followed by fixed media.
- // The Removable[] array is used by the for-loop below to create removable media boot options
- // at first, and then to create fixed media boot options.
- //
- Removable[0] = FALSE;
- Removable[1] = TRUE;
-
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiBlockIoProtocolGuid,
- NULL,
- &NumberBlockIoHandles,
- &BlockIoHandles
- );
-
- for (RemovableIndex = 0; RemovableIndex < 2; RemovableIndex++) {
- for (Index = 0; Index < NumberBlockIoHandles; Index++) {
- Status = gBS->HandleProtocol (
- BlockIoHandles[Index],
- &gEfiBlockIoProtocolGuid,
- (VOID **) &BlkIo
- );
- //
- // skip the logical partition
- //
- if (EFI_ERROR (Status) || BlkIo->Media->LogicalPartition) {
- continue;
- }
-
- //
- // firstly fixed block io then the removable block io
- //
- if (BlkIo->Media->RemovableMedia == Removable[RemovableIndex]) {
- continue;
- }
- DevicePath = DevicePathFromHandle (BlockIoHandles[Index]);
- DevicePathType = BdsGetBootTypeFromDevicePath (DevicePath);
-
- switch (DevicePathType) {
- case BDS_EFI_ACPI_FLOPPY_BOOT:
- if (FloppyNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY)), FloppyNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- FloppyNumber++;
- break;
-
- //
- // Assume a removable SATA device should be the DVD/CD device, a fixed SATA device should be the Hard Drive device.
- //
- case BDS_EFI_MESSAGE_ATAPI_BOOT:
- case BDS_EFI_MESSAGE_SATA_BOOT:
- if (BlkIo->Media->RemovableMedia) {
- if (CdromNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_CD_DVD)), CdromNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_CD_DVD)));
- }
- CdromNumber++;
- } else {
- if (HarddriveNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_HARDDRIVE)), HarddriveNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_HARDDRIVE)));
- }
- HarddriveNumber++;
- }
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Buffer: %S\n", Buffer));
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- break;
-
- case BDS_EFI_MESSAGE_USB_DEVICE_BOOT:
- if (UsbNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_USB)), UsbNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_USB)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- UsbNumber++;
- break;
-
- case BDS_EFI_MESSAGE_SCSI_BOOT:
- if (ScsiNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI)), ScsiNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- ScsiNumber++;
- break;
-
- case BDS_EFI_MESSAGE_MISC_BOOT:
- default:
- if (MiscNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC)), MiscNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- MiscNumber++;
- break;
- }
- }
- }
-
- if (NumberBlockIoHandles != 0) {
- FreePool (BlockIoHandles);
- }
-
- //
- // If there is simple file protocol which does not consume block Io protocol, create a boot option for it here.
- //
- NonBlockNumber = 0;
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiSimpleFileSystemProtocolGuid,
- NULL,
- &NumberFileSystemHandles,
- &FileSystemHandles
- );
- for (Index = 0; Index < NumberFileSystemHandles; Index++) {
- Status = gBS->HandleProtocol (
- FileSystemHandles[Index],
- &gEfiBlockIoProtocolGuid,
- (VOID **) &BlkIo
- );
- if (!EFI_ERROR (Status)) {
- //
- // Skip if the file system handle supports a BlkIo protocol,
- //
- continue;
- }
-
- //
- // Do the removable Media thing. \EFI\BOOT\boot{machinename}.EFI
- // machinename is ia32, ia64, x64, ...
- //
- Hdr.Union = &HdrData;
- NeedDelete = TRUE;
- Status = BdsLibGetImageHeader (
- FileSystemHandles[Index],
- EFI_REMOVABLE_MEDIA_FILE_NAME,
- &DosHeader,
- Hdr
- );
- if (!EFI_ERROR (Status) &&
- EFI_IMAGE_MACHINE_TYPE_SUPPORTED (Hdr.Pe32->FileHeader.Machine) &&
- Hdr.Pe32->OptionalHeader.Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {
- NeedDelete = FALSE;
- }
-
- if (NeedDelete) {
- //
- // No such file or the file is not a EFI application, delete this boot option
- //
- BdsLibDeleteOptionFromHandle (FileSystemHandles[Index]);
- } else {
- if (NonBlockNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NON_BLOCK)), NonBlockNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NON_BLOCK)));
- }
- BdsLibBuildOptionFromHandle (FileSystemHandles[Index], BdsBootOptionList, Buffer);
- NonBlockNumber++;
- }
- }
-
- if (NumberFileSystemHandles != 0) {
- FreePool (FileSystemHandles);
- }
-
- //
- // Parse Network Boot Device
- //
- NumOfLoadFileHandles = 0;
- //
- // Search Load File protocol for PXE boot option.
- //
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiLoadFileProtocolGuid,
- NULL,
- &NumOfLoadFileHandles,
- &LoadFileHandles
- );
-
- for (Index = 0; Index < NumOfLoadFileHandles; Index++) {
-
-//
-//Locate EFI_DEVICE_PATH_PROTOCOL to dynamically get IPv4/IPv6 protocol information.
-//
-
- Status = gBS->HandleProtocol (
- LoadFileHandles[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID **) &DevicePath
- );
-
- ASSERT_EFI_ERROR (Status);
-
- while (!IsDevicePathEnd (DevicePath)) {
- if ((DevicePath->Type == MESSAGING_DEVICE_PATH) &&
- (DevicePath->SubType == MSG_IPv4_DP)) {
-
- //
- //Get handle infomation
- //
- BufferSize = 0;
- NetworkHandles = NULL;
- Status = gBS->LocateHandle (
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
-
- if (Status == EFI_BUFFER_TOO_SMALL) {
- NetworkHandles = AllocateZeroPool(BufferSize);
- if (NetworkHandles == NULL) {
- return (EFI_OUT_OF_RESOURCES);
- }
- Status = gBS->LocateHandle(
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
- }
-
- //
- //Get the MAC string
- //
- Status = NetLibGetMacString (
- *NetworkHandles,
- NULL,
- &MacStr
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- IPverStr = L" IPv4";
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s%s%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK)),MacStr,IPverStr);
- break;
- }
- if((DevicePath->Type == MESSAGING_DEVICE_PATH) &&
- (DevicePath->SubType == MSG_IPv6_DP)) {
-
- //
- //Get handle infomation
- //
- BufferSize = 0;
- NetworkHandles = NULL;
- Status = gBS->LocateHandle (
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
-
- if (Status == EFI_BUFFER_TOO_SMALL) {
- NetworkHandles = AllocateZeroPool(BufferSize);
- if (NetworkHandles == NULL) {
- return (EFI_OUT_OF_RESOURCES);
- }
- Status = gBS->LocateHandle(
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
- }
-
- //
- //Get the MAC string
- //
- Status = NetLibGetMacString (
- *NetworkHandles,
- NULL,
- &MacStr
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- IPverStr = L" IPv6";
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s%s%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK)),MacStr,IPverStr);
- break;
- }
- DevicePath = NextDevicePathNode (DevicePath);
- }
-
- BdsLibBuildOptionFromHandle (LoadFileHandles[Index], BdsBootOptionList, Buffer);
- }
-
- if (NumOfLoadFileHandles != 0) {
- FreePool (LoadFileHandles);
- }
-
- //
- // Check if we have on flash shell
- //
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &FvHandleCount,
- &FvHandleBuffer
- );
- for (Index = 0; Index < FvHandleCount; Index++) {
- gBS->HandleProtocol (
- FvHandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
-
- Status = Fv->ReadFile (
- Fv,
- &gUefiShellFileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (EFI_ERROR (Status)) {
- //
- // Skip if no shell file in the FV
- //
- continue;
- }
- //
- // Build the shell boot option
- //
- BdsLibBuildOptionFromShell (FvHandleBuffer[Index], BdsBootOptionList);
- }
-
- if (FvHandleCount != 0) {
- FreePool (FvHandleBuffer);
- }
- //
- // Make sure every boot only have one time
- // boot device enumerate
- //
- Status = BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");
- mEnumBootDevice = TRUE;
-
- return Status;
-}
-
-/**
- Build the boot option with the handle parsed in
-
- @param Handle The handle which present the device path to create
- boot option
- @param BdsBootOptionList The header of the link list which indexed all
- current boot options
- @param String The description of the boot option.
-
-**/
-VOID
-EFIAPI
-BdsLibBuildOptionFromHandle (
- IN EFI_HANDLE Handle,
- IN LIST_ENTRY *BdsBootOptionList,
- IN CHAR16 *String
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
-
- DevicePath = DevicePathFromHandle (Handle);
-
- //
- // Create and register new boot option
- //
- BdsLibRegisterNewOption (BdsBootOptionList, DevicePath, String, L"BootOrder");
-}
-
-
-/**
- Build the on flash shell boot option with the handle parsed in.
-
- @param Handle The handle which present the device path to create
- on flash shell boot option
- @param BdsBootOptionList The header of the link list which indexed all
- current boot options
-
-**/
-VOID
-EFIAPI
-BdsLibBuildOptionFromShell (
- IN EFI_HANDLE Handle,
- IN OUT LIST_ENTRY *BdsBootOptionList
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- MEDIA_FW_VOL_FILEPATH_DEVICE_PATH ShellNode;
-
- DevicePath = DevicePathFromHandle (Handle);
-
- //
- // Build the shell device path
- //
- EfiInitializeFwVolDevicepathNode (&ShellNode, &gUefiShellFileGuid);
-
- DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *) &ShellNode);
-
- //
- // Create and register the shell boot option
- //
- BdsLibRegisterNewOption (BdsBootOptionList, DevicePath, L"EFI Internal Shell", L"BootOrder");
-
-}
-
-/**
- Boot from the UEFI spec defined "BootNext" variable.
-
-**/
-VOID
-EFIAPI
-BdsLibBootNext (
- VOID
- )
-{
- EFI_STATUS Status;
- UINT16 *BootNext;
- UINTN BootNextSize;
- CHAR16 Buffer[20];
- BDS_COMMON_OPTION *BootOption;
- LIST_ENTRY TempList;
- UINTN ExitDataSize;
- CHAR16 *ExitData;
-
- //
- // Init the boot option name buffer and temp link list
- //
- InitializeListHead (&TempList);
- ZeroMem (Buffer, sizeof (Buffer));
-
- BootNext = BdsLibGetVariableAndSize (
- L"BootNext",
- &gEfiGlobalVariableGuid,
- &BootNextSize
- );
-
- //
- // Clear the boot next variable first
- //
- if (BootNext != NULL) {
- Status = gRT->SetVariable (
- L"BootNext",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- 0,
- NULL
- );
- //
- // Deleting variable with current variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
-
- //
- // Start to build the boot option and try to boot
- //
- UnicodeSPrint (Buffer, sizeof (Buffer), L"Boot%04x", *BootNext);
- BootOption = BdsLibVariableToOption (&TempList, Buffer);
- ASSERT (BootOption != NULL);
- BdsLibConnectDevicePath (BootOption->DevicePath);
- BdsLibBootViaBootOption (BootOption, BootOption->DevicePath, &ExitDataSize, &ExitData);
- FreePool(BootOption);
- FreePool(BootNext);
- }
-
-}
-
-/**
- Return the bootable media handle.
- First, check the device is connected
- Second, check whether the device path point to a device which support SimpleFileSystemProtocol,
- Third, detect the the default boot file in the Media, and return the removable Media handle.
-
- @param DevicePath Device Path to a bootable device
-
- @return The bootable media handle. If the media on the DevicePath is not bootable, NULL will return.
-
-**/
-EFI_HANDLE
-EFIAPI
-BdsLibGetBootableHandle (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- )
-{
- EFI_STATUS Status;
- EFI_TPL OldTpl;
- EFI_DEVICE_PATH_PROTOCOL *UpdatedDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *DupDevicePath;
- EFI_HANDLE Handle;
- EFI_BLOCK_IO_PROTOCOL *BlockIo;
- VOID *Buffer;
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- UINTN Size;
- UINTN TempSize;
- EFI_HANDLE ReturnHandle;
- EFI_HANDLE *SimpleFileSystemHandles;
-
- UINTN NumberSimpleFileSystemHandles;
- UINTN Index;
- EFI_IMAGE_DOS_HEADER DosHeader;
- EFI_IMAGE_OPTIONAL_HEADER_UNION HdrData;
- EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;
-
- UpdatedDevicePath = DevicePath;
-
- //
- // Enter to critical section to protect the acquired BlockIo instance
- // from getting released due to the USB mass storage hotplug event
- //
- OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
-
- //
- // Check whether the device is connected
- //
- Status = gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, &UpdatedDevicePath, &Handle);
- if (EFI_ERROR (Status)) {
- //
- // Skip the case that the boot option point to a simple file protocol which does not consume block Io protocol,
- //
- Status = gBS->LocateDevicePath (&gEfiSimpleFileSystemProtocolGuid, &UpdatedDevicePath, &Handle);
- if (EFI_ERROR (Status)) {
- //
- // Fail to find the proper BlockIo and simple file protocol, maybe because device not present, we need to connect it firstly
- //
- UpdatedDevicePath = DevicePath;
- Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &UpdatedDevicePath, &Handle);
- gBS->ConnectController (Handle, NULL, NULL, TRUE);
- }
- } else {
- //
- // For removable device boot option, its contained device path only point to the removable device handle,
- // should make sure all its children handles (its child partion or media handles) are created and connected.
- //
- gBS->ConnectController (Handle, NULL, NULL, TRUE);
- //
- // Get BlockIo protocol and check removable attribute
- //
- Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo);
- ASSERT_EFI_ERROR (Status);
-
- //
- // Issue a dummy read to the device to check for media change.
- // When the removable media is changed, any Block IO read/write will
- // cause the BlockIo protocol be reinstalled and EFI_MEDIA_CHANGED is
- // returned. After the Block IO protocol is reinstalled, subsequent
- // Block IO read/write will success.
- //
- Buffer = AllocatePool (BlockIo->Media->BlockSize);
- if (Buffer != NULL) {
- BlockIo->ReadBlocks (
- BlockIo,
- BlockIo->Media->MediaId,
- 0,
- BlockIo->Media->BlockSize,
- Buffer
- );
- FreePool(Buffer);
- }
- }
-
- //
- // Detect the the default boot file from removable Media
- //
-
- //
- // If fail to get bootable handle specified by a USB boot option, the BDS should try to find other bootable device in the same USB bus
- // Try to locate the USB node device path first, if fail then use its previous PCI node to search
- //
- DupDevicePath = DuplicateDevicePath (DevicePath);
- ASSERT (DupDevicePath != NULL);
-
- UpdatedDevicePath = DupDevicePath;
- Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &UpdatedDevicePath, &Handle);
- //
- // if the resulting device path point to a usb node, and the usb node is a dummy node, should only let device path only point to the previous Pci node
- // Acpi()/Pci()/Usb() --> Acpi()/Pci()
- //
- if ((DevicePathType (UpdatedDevicePath) == MESSAGING_DEVICE_PATH) &&
- (DevicePathSubType (UpdatedDevicePath) == MSG_USB_DP)) {
- //
- // Remove the usb node, let the device path only point to PCI node
- //
- SetDevicePathEndNode (UpdatedDevicePath);
- UpdatedDevicePath = DupDevicePath;
- } else {
- UpdatedDevicePath = DevicePath;
- }
-
- //
- // Get the device path size of boot option
- //
- Size = GetDevicePathSize(UpdatedDevicePath) - sizeof (EFI_DEVICE_PATH_PROTOCOL); // minus the end node
- ReturnHandle = NULL;
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiSimpleFileSystemProtocolGuid,
- NULL,
- &NumberSimpleFileSystemHandles,
- &SimpleFileSystemHandles
- );
- for (Index = 0; Index < NumberSimpleFileSystemHandles; Index++) {
- //
- // Get the device path size of SimpleFileSystem handle
- //
- TempDevicePath = DevicePathFromHandle (SimpleFileSystemHandles[Index]);
- TempSize = GetDevicePathSize (TempDevicePath)- sizeof (EFI_DEVICE_PATH_PROTOCOL); // minus the end node
- //
- // Check whether the device path of boot option is part of the SimpleFileSystem handle's device path
- //
- if (Size <= TempSize && CompareMem (TempDevicePath, UpdatedDevicePath, Size)==0) {
- //
- // Load the default boot file \EFI\BOOT\boot{machinename}.EFI from removable Media
- // machinename is ia32, ia64, x64, ...
- //
- Hdr.Union = &HdrData;
- Status = BdsLibGetImageHeader (
- SimpleFileSystemHandles[Index],
- EFI_REMOVABLE_MEDIA_FILE_NAME,
- &DosHeader,
- Hdr
- );
- if (!EFI_ERROR (Status) &&
- EFI_IMAGE_MACHINE_TYPE_SUPPORTED (Hdr.Pe32->FileHeader.Machine) &&
- Hdr.Pe32->OptionalHeader.Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {
- ReturnHandle = SimpleFileSystemHandles[Index];
- break;
- }
- }
- }
-
- FreePool(DupDevicePath);
-
- if (SimpleFileSystemHandles != NULL) {
- FreePool(SimpleFileSystemHandles);
- }
-
- gBS->RestoreTPL (OldTpl);
-
- return ReturnHandle;
-}
-
-/**
- Check to see if the network cable is plugged in. If the DevicePath is not
- connected it will be connected.
-
- @param DevicePath Device Path to check
-
- @retval TRUE DevicePath points to an Network that is connected
- @retval FALSE DevicePath does not point to a bootable network
-
-**/
-BOOLEAN
-BdsLibNetworkBootWithMediaPresent (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- )
-{
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *UpdatedDevicePath;
- EFI_HANDLE Handle;
- EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
- BOOLEAN MediaPresent;
- UINT32 InterruptStatus;
-
- MediaPresent = FALSE;
-
- UpdatedDevicePath = DevicePath;
- //
- // Locate Load File Protocol for PXE boot option first
- //
- Status = gBS->LocateDevicePath (&gEfiLoadFileProtocolGuid, &UpdatedDevicePath, &Handle);
- if (EFI_ERROR (Status)) {
- //
- // Device not present so see if we need to connect it
- //
- Status = BdsLibConnectDevicePath (DevicePath);
- if (!EFI_ERROR (Status)) {
- //
- // This one should work after we did the connect
- //
- Status = gBS->LocateDevicePath (&gEfiLoadFileProtocolGuid, &UpdatedDevicePath, &Handle);
- }
- }
-
- if (!EFI_ERROR (Status)) {
- Status = gBS->HandleProtocol (Handle, &gEfiSimpleNetworkProtocolGuid, (VOID **)&Snp);
- if (EFI_ERROR (Status)) {
- //
- // Failed to open SNP from this handle, try to get SNP from parent handle
- //
- UpdatedDevicePath = DevicePathFromHandle (Handle);
- if (UpdatedDevicePath != NULL) {
- Status = gBS->LocateDevicePath (&gEfiSimpleNetworkProtocolGuid, &UpdatedDevicePath, &Handle);
- if (!EFI_ERROR (Status)) {
- //
- // SNP handle found, get SNP from it
- //
- Status = gBS->HandleProtocol (Handle, &gEfiSimpleNetworkProtocolGuid, (VOID **) &Snp);
- }
- }
- }
-
- if (!EFI_ERROR (Status)) {
- if (Snp->Mode->MediaPresentSupported) {
- if (Snp->Mode->State == EfiSimpleNetworkInitialized) {
- //
- // Invoke Snp->GetStatus() to refresh the media status
- //
- Snp->GetStatus (Snp, &InterruptStatus, NULL);
-
- //
- // In case some one else is using the SNP check to see if it's connected
- //
- MediaPresent = Snp->Mode->MediaPresent;
- } else {
- //
- // No one is using SNP so we need to Start and Initialize so
- // MediaPresent will be valid.
- //
- Status = Snp->Start (Snp);
- if (!EFI_ERROR (Status)) {
- Status = Snp->Initialize (Snp, 0, 0);
- if (!EFI_ERROR (Status)) {
- MediaPresent = Snp->Mode->MediaPresent;
- Snp->Shutdown (Snp);
- }
- Snp->Stop (Snp);
- }
- }
- } else {
- MediaPresent = TRUE;
- }
- }
- }
-
- return MediaPresent;
-}
-
-/**
- For a bootable Device path, return its boot type.
-
- @param DevicePath The bootable device Path to check
-
- @retval BDS_EFI_MEDIA_HD_BOOT If given device path contains MEDIA_DEVICE_PATH type device path node
- which subtype is MEDIA_HARDDRIVE_DP
- @retval BDS_EFI_MEDIA_CDROM_BOOT If given device path contains MEDIA_DEVICE_PATH type device path node
- which subtype is MEDIA_CDROM_DP
- @retval BDS_EFI_ACPI_FLOPPY_BOOT If given device path contains ACPI_DEVICE_PATH type device path node
- which HID is floppy device.
- @retval BDS_EFI_MESSAGE_ATAPI_BOOT If given device path contains MESSAGING_DEVICE_PATH type device path node
- and its last device path node's subtype is MSG_ATAPI_DP.
- @retval BDS_EFI_MESSAGE_SCSI_BOOT If given device path contains MESSAGING_DEVICE_PATH type device path node
- and its last device path node's subtype is MSG_SCSI_DP.
- @retval BDS_EFI_MESSAGE_USB_DEVICE_BOOT If given device path contains MESSAGING_DEVICE_PATH type device path node
- and its last device path node's subtype is MSG_USB_DP.
- @retval BDS_EFI_MESSAGE_MISC_BOOT If the device path not contains any media device path node, and
- its last device path node point to a message device path node.
- @retval BDS_LEGACY_BBS_BOOT If given device path contains BBS_DEVICE_PATH type device path node.
- @retval BDS_EFI_UNSUPPORT An EFI Removable BlockIO device path not point to a media and message device,
-
-**/
-UINT32
-EFIAPI
-BdsGetBootTypeFromDevicePath (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- )
-{
- ACPI_HID_DEVICE_PATH *Acpi;
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *LastDeviceNode;
- UINT32 BootType;
-
- if (NULL == DevicePath) {
- return BDS_EFI_UNSUPPORT;
- }
-
- TempDevicePath = DevicePath;
-
- while (!IsDevicePathEndType (TempDevicePath)) {
- switch (DevicePathType (TempDevicePath)) {
- case BBS_DEVICE_PATH:
- return BDS_LEGACY_BBS_BOOT;
- case MEDIA_DEVICE_PATH:
- if (DevicePathSubType (TempDevicePath) == MEDIA_HARDDRIVE_DP) {
- return BDS_EFI_MEDIA_HD_BOOT;
- } else if (DevicePathSubType (TempDevicePath) == MEDIA_CDROM_DP) {
- return BDS_EFI_MEDIA_CDROM_BOOT;
- }
- break;
- case ACPI_DEVICE_PATH:
- Acpi = (ACPI_HID_DEVICE_PATH *) TempDevicePath;
- if (EISA_ID_TO_NUM (Acpi->HID) == 0x0604) {
- return BDS_EFI_ACPI_FLOPPY_BOOT;
- }
- break;
- case MESSAGING_DEVICE_PATH:
- //
- // Get the last device path node
- //
- LastDeviceNode = NextDevicePathNode (TempDevicePath);
- if (DevicePathSubType(LastDeviceNode) == MSG_DEVICE_LOGICAL_UNIT_DP) {
- //
- // if the next node type is Device Logical Unit, which specify the Logical Unit Number (LUN),
- // skip it
- //
- LastDeviceNode = NextDevicePathNode (LastDeviceNode);
- }
- //
- // if the device path not only point to driver device, it is not a messaging device path,
- //
- if (!IsDevicePathEndType (LastDeviceNode)) {
- break;
- }
-
- switch (DevicePathSubType (TempDevicePath)) {
- case MSG_ATAPI_DP:
- BootType = BDS_EFI_MESSAGE_ATAPI_BOOT;
- break;
-
- case MSG_USB_DP:
- BootType = BDS_EFI_MESSAGE_USB_DEVICE_BOOT;
- break;
-
- case MSG_SCSI_DP:
- BootType = BDS_EFI_MESSAGE_SCSI_BOOT;
- break;
-
- case MSG_SATA_DP:
- BootType = BDS_EFI_MESSAGE_SATA_BOOT;
- break;
-
- case MSG_MAC_ADDR_DP:
- case MSG_VLAN_DP:
- case MSG_IPv4_DP:
- case MSG_IPv6_DP:
- BootType = BDS_EFI_MESSAGE_MAC_BOOT;
- break;
-
- default:
- BootType = BDS_EFI_MESSAGE_MISC_BOOT;
- break;
- }
- return BootType;
-
- default:
- break;
- }
- TempDevicePath = NextDevicePathNode (TempDevicePath);
- }
-
- return BDS_EFI_UNSUPPORT;
-}
-
-/**
- Check whether the Device path in a boot option point to a valid bootable device,
- And if CheckMedia is true, check the device is ready to boot now.
-
- @param DevPath the Device path in a boot option
- @param CheckMedia if true, check the device is ready to boot now.
-
- @retval TRUE the Device path is valid
- @retval FALSE the Device path is invalid .
-
-**/
-BOOLEAN
-EFIAPI
-BdsLibIsValidEFIBootOptDevicePath (
- IN EFI_DEVICE_PATH_PROTOCOL *DevPath,
- IN BOOLEAN CheckMedia
- )
-{
- return BdsLibIsValidEFIBootOptDevicePathExt (DevPath, CheckMedia, NULL);
-}
-
-/**
- Check whether the Device path in a boot option point to a valid bootable device,
- And if CheckMedia is true, check the device is ready to boot now.
- If Description is not NULL and the device path point to a fixed BlockIo
- device, check the description whether conflict with other auto-created
- boot options.
-
- @param DevPath the Device path in a boot option
- @param CheckMedia if true, check the device is ready to boot now.
- @param Description the description in a boot option
-
- @retval TRUE the Device path is valid
- @retval FALSE the Device path is invalid .
-
-**/
-BOOLEAN
-EFIAPI
-BdsLibIsValidEFIBootOptDevicePathExt (
- IN EFI_DEVICE_PATH_PROTOCOL *DevPath,
- IN BOOLEAN CheckMedia,
- IN CHAR16 *Description
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE Handle;
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *LastDeviceNode;
- EFI_BLOCK_IO_PROTOCOL *BlockIo;
-
- TempDevicePath = DevPath;
- LastDeviceNode = DevPath;
-
- //
- // Check if it's a valid boot option for network boot device.
- // Check if there is EfiLoadFileProtocol installed.
- // If yes, that means there is a boot option for network.
- //
- Status = gBS->LocateDevicePath (
- &gEfiLoadFileProtocolGuid,
- &TempDevicePath,
- &Handle
- );
- if (EFI_ERROR (Status)) {
- //
- // Device not present so see if we need to connect it
- //
- TempDevicePath = DevPath;
- BdsLibConnectDevicePath (TempDevicePath);
- Status = gBS->LocateDevicePath (
- &gEfiLoadFileProtocolGuid,
- &TempDevicePath,
- &Handle
- );
- }
-
- if (!EFI_ERROR (Status)) {
- if (!IsDevicePathEnd (TempDevicePath)) {
- //
- // LoadFile protocol is not installed on handle with exactly the same DevPath
- //
- return FALSE;
- }
-
- if (CheckMedia) {
- //
- // Test if it is ready to boot now
- //
- if (BdsLibNetworkBootWithMediaPresent(DevPath)) {
- return TRUE;
- }
- } else {
- return TRUE;
- }
- }
-
- //
- // If the boot option point to a file, it is a valid EFI boot option,
- // and assume it is ready to boot now
- //
- while (!IsDevicePathEnd (TempDevicePath)) {
- //
- // If there is USB Class or USB WWID device path node, treat it as valid EFI
- // Boot Option. BdsExpandUsbShortFormDevicePath () will be used to expand it
- // to full device path.
- //
- if ((DevicePathType (TempDevicePath) == MESSAGING_DEVICE_PATH) &&
- ((DevicePathSubType (TempDevicePath) == MSG_USB_CLASS_DP) ||
- (DevicePathSubType (TempDevicePath) == MSG_USB_WWID_DP))) {
- return TRUE;
- }
-
- LastDeviceNode = TempDevicePath;
- TempDevicePath = NextDevicePathNode (TempDevicePath);
- }
- if ((DevicePathType (LastDeviceNode) == MEDIA_DEVICE_PATH) &&
- (DevicePathSubType (LastDeviceNode) == MEDIA_FILEPATH_DP)) {
- return TRUE;
- }
-
- //
- // Check if it's a valid boot option for internal FV application
- //
- if (EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode) != NULL) {
- //
- // If the boot option point to internal FV application, make sure it is valid
- //
- TempDevicePath = DevPath;
- Status = BdsLibUpdateFvFileDevicePath (
- &TempDevicePath,
- EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode)
- );
- if (Status == EFI_ALREADY_STARTED) {
- return TRUE;
- } else {
- if (Status == EFI_SUCCESS) {
- FreePool (TempDevicePath);
- }
- return FALSE;
- }
- }
-
- //
- // If the boot option point to a blockIO device:
- // if it is a removable blockIo device, it is valid.
- // if it is a fixed blockIo device, check its description confliction.
- //
- TempDevicePath = DevPath;
- Status = gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, &TempDevicePath, &Handle);
- if (EFI_ERROR (Status)) {
- //
- // Device not present so see if we need to connect it
- //
- Status = BdsLibConnectDevicePath (DevPath);
- if (!EFI_ERROR (Status)) {
- //
- // Try again to get the Block Io protocol after we did the connect
- //
- TempDevicePath = DevPath;
- Status = gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, &TempDevicePath, &Handle);
- }
- }
-
- if (!EFI_ERROR (Status)) {
- Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo);
- if (!EFI_ERROR (Status)) {
- if (CheckMedia) {
- //
- // Test if it is ready to boot now
- //
- if (BdsLibGetBootableHandle (DevPath) != NULL) {
- return TRUE;
- }
- } else {
- return TRUE;
- }
- }
- } else {
- //
- // if the boot option point to a simple file protocol which does not consume block Io protocol, it is also a valid EFI boot option,
- //
- Status = gBS->LocateDevicePath (&gEfiSimpleFileSystemProtocolGuid, &TempDevicePath, &Handle);
- if (!EFI_ERROR (Status)) {
- if (CheckMedia) {
- //
- // Test if it is ready to boot now
- //
- if (BdsLibGetBootableHandle (DevPath) != NULL) {
- return TRUE;
- }
- } else {
- return TRUE;
- }
- }
- }
-
- return FALSE;
-}
-
-
-/**
- According to a file guild, check a Fv file device path is valid. If it is invalid,
- try to return the valid device path.
- FV address maybe changes for memory layout adjust from time to time, use this function
- could promise the Fv file device path is right.
-
- @param DevicePath on input, the Fv file device path need to check on
- output, the updated valid Fv file device path
- @param FileGuid the Fv file guild
-
- @retval EFI_INVALID_PARAMETER the input DevicePath or FileGuid is invalid
- parameter
- @retval EFI_UNSUPPORTED the input DevicePath does not contain Fv file
- guild at all
- @retval EFI_ALREADY_STARTED the input DevicePath has pointed to Fv file, it is
- valid
- @retval EFI_SUCCESS has successfully updated the invalid DevicePath,
- and return the updated device path in DevicePath
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibUpdateFvFileDevicePath (
- IN OUT EFI_DEVICE_PATH_PROTOCOL ** DevicePath,
- IN EFI_GUID *FileGuid
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *LastDeviceNode;
- EFI_STATUS Status;
- EFI_GUID *GuidPoint;
- UINTN Index;
- UINTN FvHandleCount;
- EFI_HANDLE *FvHandleBuffer;
- EFI_FV_FILETYPE Type;
- UINTN Size;
- EFI_FV_FILE_ATTRIBUTES Attributes;
- UINT32 AuthenticationStatus;
- BOOLEAN FindFvFile;
- EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
- MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FvFileNode;
- EFI_HANDLE FoundFvHandle;
- EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
-
- if ((DevicePath == NULL) || (*DevicePath == NULL)) {
- return EFI_INVALID_PARAMETER;
- }
- if (FileGuid == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Check whether the device path point to the default the input Fv file
- //
- TempDevicePath = *DevicePath;
- LastDeviceNode = TempDevicePath;
- while (!IsDevicePathEnd (TempDevicePath)) {
- LastDeviceNode = TempDevicePath;
- TempDevicePath = NextDevicePathNode (TempDevicePath);
- }
- GuidPoint = EfiGetNameGuidFromFwVolDevicePathNode (
- (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode
- );
- if (GuidPoint == NULL) {
- //
- // if this option does not points to a Fv file, just return EFI_UNSUPPORTED
- //
- return EFI_UNSUPPORTED;
- }
- if (!CompareGuid (GuidPoint, FileGuid)) {
- //
- // If the Fv file is not the input file guid, just return EFI_UNSUPPORTED
- //
- return EFI_UNSUPPORTED;
- }
-
- //
- // Check whether the input Fv file device path is valid
- //
- TempDevicePath = *DevicePath;
- FoundFvHandle = NULL;
- Status = gBS->LocateDevicePath (
- &gEfiFirmwareVolume2ProtocolGuid,
- &TempDevicePath,
- &FoundFvHandle
- );
- if (!EFI_ERROR (Status)) {
- Status = gBS->HandleProtocol (
- FoundFvHandle,
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
- if (!EFI_ERROR (Status)) {
- //
- // Set FV ReadFile Buffer as NULL, only need to check whether input Fv file exist there
- //
- Status = Fv->ReadFile (
- Fv,
- FileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (!EFI_ERROR (Status)) {
- return EFI_ALREADY_STARTED;
- }
- }
- }
-
- //
- // Look for the input wanted FV file in current FV
- // First, try to look for in Bds own FV. Bds and input wanted FV file usually are in the same FV
- //
- FindFvFile = FALSE;
- FoundFvHandle = NULL;
- Status = gBS->HandleProtocol (
- gImageHandle,
- &gEfiLoadedImageProtocolGuid,
- (VOID **) &LoadedImage
- );
- if (!EFI_ERROR (Status)) {
- Status = gBS->HandleProtocol (
- LoadedImage->DeviceHandle,
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
- if (!EFI_ERROR (Status)) {
- Status = Fv->ReadFile (
- Fv,
- FileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (!EFI_ERROR (Status)) {
- FindFvFile = TRUE;
- FoundFvHandle = LoadedImage->DeviceHandle;
- }
- }
- }
- //
- // Second, if fail to find, try to enumerate all FV
- //
- if (!FindFvFile) {
- FvHandleBuffer = NULL;
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &FvHandleCount,
- &FvHandleBuffer
- );
- for (Index = 0; Index < FvHandleCount; Index++) {
- gBS->HandleProtocol (
- FvHandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
-
- Status = Fv->ReadFile (
- Fv,
- FileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (EFI_ERROR (Status)) {
- //
- // Skip if input Fv file not in the FV
- //
- continue;
- }
- FindFvFile = TRUE;
- FoundFvHandle = FvHandleBuffer[Index];
- break;
- }
-
- if (FvHandleBuffer != NULL) {
- FreePool (FvHandleBuffer);
- }
- }
-
- if (FindFvFile) {
- //
- // Build the shell device path
- //
- NewDevicePath = DevicePathFromHandle (FoundFvHandle);
- EfiInitializeFwVolDevicepathNode (&FvFileNode, FileGuid);
- NewDevicePath = AppendDevicePathNode (NewDevicePath, (EFI_DEVICE_PATH_PROTOCOL *) &FvFileNode);
- ASSERT (NewDevicePath != NULL);
- *DevicePath = NewDevicePath;
- return EFI_SUCCESS;
- }
- return EFI_NOT_FOUND;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConnect.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConnect.c
deleted file mode 100644
index dfeefc01b8..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConnect.c
+++ /dev/null
@@ -1,429 +0,0 @@
-/** @file
- BDS Lib functions which relate with connect the device
-
-Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "InternalBdsLib.h"
-
-
-/**
- This function will connect all the system driver to controller
- first, and then special connect the default console, this make
- sure all the system controller available and the platform default
- console connected.
-
-**/
-VOID
-EFIAPI
-BdsLibConnectAll (
- VOID
- )
-{
- //
- // Connect the platform console first
- //
- BdsLibConnectAllDefaultConsoles ();
-
- //
- // Generic way to connect all the drivers
- //
- BdsLibConnectAllDriversToAllControllers ();
-
- //
- // Here we have the assumption that we have already had
- // platform default console
- //
- BdsLibConnectAllDefaultConsoles ();
-}
-
-
-/**
- This function will connect all the system drivers to all controllers
- first, and then connect all the console devices the system current
- have. After this we should get all the device work and console available
- if the system have console device.
-
-**/
-VOID
-BdsLibGenericConnectAll (
- VOID
- )
-{
- //
- // Most generic way to connect all the drivers
- //
- BdsLibConnectAllDriversToAllControllers ();
- BdsLibConnectAllConsoles ();
-}
-
-/**
- This function will create all handles associate with every device
- path node. If the handle associate with one device path node can not
- be created successfully, then still give chance to do the dispatch,
- which load the missing drivers if possible.
-
- @param DevicePathToConnect The device path which will be connected, it can be
- a multi-instance device path
-
- @retval EFI_SUCCESS All handles associate with every device path node
- have been created
- @retval EFI_OUT_OF_RESOURCES There is no resource to create new handles
- @retval EFI_NOT_FOUND Create the handle associate with one device path
- node failed
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectDevicePath (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePathToConnect
- )
-{
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- EFI_DEVICE_PATH_PROTOCOL *CopyOfDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *Instance;
- EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *Next;
- EFI_HANDLE Handle;
- EFI_HANDLE PreviousHandle;
- UINTN Size;
- EFI_TPL CurrentTpl;
-
- if (DevicePathToConnect == NULL) {
- return EFI_SUCCESS;
- }
-
- CurrentTpl = EfiGetCurrentTpl ();
-
- DevicePath = DuplicateDevicePath (DevicePathToConnect);
- if (DevicePath == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
- CopyOfDevicePath = DevicePath;
-
- do {
- //
- // The outer loop handles multi instance device paths.
- // Only console variables contain multiple instance device paths.
- //
- // After this call DevicePath points to the next Instance
- //
- Instance = GetNextDevicePathInstance (&DevicePath, &Size);
- if (Instance == NULL) {
- FreePool (CopyOfDevicePath);
- return EFI_OUT_OF_RESOURCES;
- }
-
- Next = Instance;
- while (!IsDevicePathEndType (Next)) {
- Next = NextDevicePathNode (Next);
- }
-
- SetDevicePathEndNode (Next);
-
- //
- // Start the real work of connect with RemainingDevicePath
- //
- PreviousHandle = NULL;
- do {
- //
- // Find the handle that best matches the Device Path. If it is only a
- // partial match the remaining part of the device path is returned in
- // RemainingDevicePath.
- //
- RemainingDevicePath = Instance;
- Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &Handle);
-
- if (!EFI_ERROR (Status)) {
- if (Handle == PreviousHandle) {
- //
- // If no forward progress is made try invoking the Dispatcher.
- // A new FV may have been added to the system an new drivers
- // may now be found.
- // Status == EFI_SUCCESS means a driver was dispatched
- // Status == EFI_NOT_FOUND means no new drivers were dispatched
- //
- if (CurrentTpl == TPL_APPLICATION) {
- //
- // Dispatch calls LoadImage/StartImage which cannot run at TPL > TPL_APPLICATION
- //
- Status = gDS->Dispatch ();
- } else {
- //
- // Always return EFI_NOT_FOUND here
- // to prevent dead loop when control handle is found but connection failded case
- //
- Status = EFI_NOT_FOUND;
- }
- }
-
- if (!EFI_ERROR (Status)) {
- PreviousHandle = Handle;
- //
- // Connect all drivers that apply to Handle and RemainingDevicePath,
- // the Recursive flag is FALSE so only one level will be expanded.
- //
- // Do not check the connect status here, if the connect controller fail,
- // then still give the chance to do dispatch, because partial
- // RemainingDevicepath may be in the new FV
- //
- // 1. If the connect fail, RemainingDevicepath and handle will not
- // change, so next time will do the dispatch, then dispatch's status
- // will take effect
- // 2. If the connect success, the RemainingDevicepath and handle will
- // change, then avoid the dispatch, we have chance to continue the
- // next connection
- //
- gBS->ConnectController (Handle, NULL, RemainingDevicePath, FALSE);
- }
- }
- //
- // Loop until RemainingDevicePath is an empty device path
- //
- } while (!EFI_ERROR (Status) && !IsDevicePathEnd (RemainingDevicePath));
-
- } while (DevicePath != NULL);
-
- if (CopyOfDevicePath != NULL) {
- FreePool (CopyOfDevicePath);
- }
- //
- // All handle with DevicePath exists in the handle database
- //
- return Status;
-}
-
-/**
- This function will connect all current system handles recursively.
-
- gBS->ConnectController() service is invoked for each handle exist in system handler buffer.
- If the handle is bus type handler, all childrens also will be connected recursively
- by gBS->ConnectController().
-
- @retval EFI_SUCCESS All handles and it's child handle have been connected
- @retval EFI_STATUS Error status returned by of gBS->LocateHandleBuffer().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectAllEfi (
- VOID
- )
-{
- EFI_STATUS Status;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- UINTN Index;
-
- Status = gBS->LocateHandleBuffer (
- AllHandles,
- NULL,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
- }
-
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- This function will disconnect all current system handles.
-
- gBS->DisconnectController() is invoked for each handle exists in system handle buffer.
- If handle is a bus type handle, all childrens also are disconnected recursively by
- gBS->DisconnectController().
-
- @retval EFI_SUCCESS All handles have been disconnected
- @retval EFI_STATUS Error status returned by of gBS->LocateHandleBuffer().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibDisconnectAllEfi (
- VOID
- )
-{
- EFI_STATUS Status;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- UINTN Index;
-
- //
- // Disconnect all
- //
- Status = gBS->LocateHandleBuffer (
- AllHandles,
- NULL,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->DisconnectController (HandleBuffer[Index], NULL, NULL);
- }
-
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Connects all drivers to all controllers.
- This function make sure all the current system driver will manage
- the correspoinding controllers if have. And at the same time, make
- sure all the system controllers have driver to manage it if have.
-
-**/
-VOID
-EFIAPI
-BdsLibConnectAllDriversToAllControllers (
- VOID
- )
-{
- EFI_STATUS Status;
-
- do {
- //
- // Connect All EFI 1.10 drivers following EFI 1.10 algorithm
- //
- BdsLibConnectAllEfi ();
-
- //
- // Check to see if it's possible to dispatch an more DXE drivers.
- // The BdsLibConnectAllEfi () may have made new DXE drivers show up.
- // If anything is Dispatched Status == EFI_SUCCESS and we will try
- // the connect again.
- //
- Status = gDS->Dispatch ();
-
- } while (!EFI_ERROR (Status));
-
-}
-
-
-/**
- Connect the specific Usb device which match the short form device path,
- and whose bus is determined by Host Controller (Uhci or Ehci).
-
- @param HostControllerPI Uhci (0x00) or Ehci (0x20) or Both uhci and ehci
- (0xFF)
- @param RemainingDevicePath a short-form device path that starts with the first
- element being a USB WWID or a USB Class device
- path
-
- @return EFI_INVALID_PARAMETER RemainingDevicePath is NULL pointer.
- RemainingDevicePath is not a USB device path.
- Invalid HostControllerPI type.
- @return EFI_SUCCESS Success to connect USB device
- @return EFI_NOT_FOUND Fail to find handle for USB controller to connect.
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectUsbDevByShortFormDP(
- IN UINT8 HostControllerPI,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE *HandleArray;
- UINTN HandleArrayCount;
- UINTN Index;
- EFI_PCI_IO_PROTOCOL *PciIo;
- UINT8 Class[3];
- BOOLEAN AtLeastOneConnected;
-
- //
- // Check the passed in parameters
- //
- if (RemainingDevicePath == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- if ((DevicePathType (RemainingDevicePath) != MESSAGING_DEVICE_PATH) ||
- ((DevicePathSubType (RemainingDevicePath) != MSG_USB_CLASS_DP)
- && (DevicePathSubType (RemainingDevicePath) != MSG_USB_WWID_DP)
- )) {
- return EFI_INVALID_PARAMETER;
- }
-
- if (HostControllerPI != 0xFF &&
- HostControllerPI != 0x00 &&
- HostControllerPI != 0x20) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Find the usb host controller firstly, then connect with the remaining device path
- //
- AtLeastOneConnected = FALSE;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiPciIoProtocolGuid,
- NULL,
- &HandleArrayCount,
- &HandleArray
- );
- if (!EFI_ERROR (Status)) {
- for (Index = 0; Index < HandleArrayCount; Index++) {
- Status = gBS->HandleProtocol (
- HandleArray[Index],
- &gEfiPciIoProtocolGuid,
- (VOID **)&PciIo
- );
- if (!EFI_ERROR (Status)) {
- //
- // Check whether the Pci device is the wanted usb host controller
- //
- Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, 0x09, 3, &Class);
- if (!EFI_ERROR (Status)) {
- if ((PCI_CLASS_SERIAL == Class[2]) &&
- (PCI_CLASS_SERIAL_USB == Class[1])) {
- if (HostControllerPI == Class[0] || HostControllerPI == 0xFF) {
- Status = gBS->ConnectController (
- HandleArray[Index],
- NULL,
- RemainingDevicePath,
- FALSE
- );
- if (!EFI_ERROR(Status)) {
- AtLeastOneConnected = TRUE;
- }
- }
- }
- }
- }
- }
-
- if (HandleArray != NULL) {
- FreePool (HandleArray);
- }
-
- if (AtLeastOneConnected) {
- return EFI_SUCCESS;
- }
- }
-
- return EFI_NOT_FOUND;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConsole.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConsole.c
deleted file mode 100644
index 2fffd9e4bc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConsole.c
+++ /dev/null
@@ -1,1061 +0,0 @@
-/** @file
- BDS Lib functions which contain all the code to connect console device
-
-Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "InternalBdsLib.h"
-
-
-/**
- Check if we need to save the EFI variable with "ConVarName" as name
- as NV type
- If ConVarName is NULL, then ASSERT().
-
- @param ConVarName The name of the EFI variable.
-
- @retval TRUE Set the EFI variable as NV type.
- @retval FALSE EFI variable as NV type can be set NonNV.
-**/
-BOOLEAN
-IsNvNeed (
- IN CHAR16 *ConVarName
- )
-{
- CHAR16 *Ptr;
-
- ASSERT (ConVarName != NULL);
-
- Ptr = ConVarName;
-
- //
- // If the variable includes "Dev" at last, we consider
- // it does not support NV attribute.
- //
- while (*Ptr != L'\0') {
- Ptr++;
- }
-
- if (((INTN)((UINTN)Ptr - (UINTN)ConVarName) / sizeof (CHAR16)) <= 3) {
- return TRUE;
- }
-
- if ((*(Ptr - 3) == 'D') && (*(Ptr - 2) == 'e') && (*(Ptr - 1) == 'v')) {
- return FALSE;
- } else {
- return TRUE;
- }
-}
-
-/**
- Fill console handle in System Table if there are no valid console handle in.
-
- Firstly, check the validation of console handle in System Table. If it is invalid,
- update it by the first console device handle from EFI console variable.
-
- @param VarName The name of the EFI console variable.
- @param ConsoleGuid Specified Console protocol GUID.
- @param ConsoleHandle On IN, console handle in System Table to be checked.
- On OUT, new console handle in system table.
- @param ProtocolInterface On IN, console protocol on console handle in System Table to be checked.
- On OUT, new console protocol on new console handle in system table.
-
- @retval TRUE System Table has been updated.
- @retval FALSE System Table hasn't been updated.
-
-**/
-BOOLEAN
-UpdateSystemTableConsole (
- IN CHAR16 *VarName,
- IN EFI_GUID *ConsoleGuid,
- IN OUT EFI_HANDLE *ConsoleHandle,
- IN OUT VOID **ProtocolInterface
- )
-{
- EFI_STATUS Status;
- UINTN DevicePathSize;
- EFI_DEVICE_PATH_PROTOCOL *FullDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *VarConsole;
- EFI_DEVICE_PATH_PROTOCOL *Instance;
- VOID *Interface;
- EFI_HANDLE NewHandle;
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;
-
- ASSERT (VarName != NULL);
- ASSERT (ConsoleHandle != NULL);
- ASSERT (ConsoleGuid != NULL);
- ASSERT (ProtocolInterface != NULL);
-
- if (*ConsoleHandle != NULL) {
- Status = gBS->HandleProtocol (
- *ConsoleHandle,
- ConsoleGuid,
- &Interface
- );
- if (Status == EFI_SUCCESS && Interface == *ProtocolInterface) {
- //
- // If ConsoleHandle is valid and console protocol on this handle also
- // also matched, just return.
- //
- return FALSE;
- }
- }
-
- //
- // Get all possible consoles device path from EFI variable
- //
- VarConsole = BdsLibGetVariableAndSize (
- VarName,
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
- if (VarConsole == NULL) {
- //
- // If there is no any console device, just return.
- //
- return FALSE;
- }
-
- FullDevicePath = VarConsole;
-
- do {
- //
- // Check every instance of the console variable
- //
- Instance = GetNextDevicePathInstance (&VarConsole, &DevicePathSize);
- if (Instance == NULL) {
- FreePool (FullDevicePath);
- ASSERT (FALSE);
- }
-
- //
- // Find console device handle by device path instance
- //
- Status = gBS->LocateDevicePath (
- ConsoleGuid,
- &Instance,
- &NewHandle
- );
- if (!EFI_ERROR (Status)) {
- //
- // Get the console protocol on this console device handle
- //
- Status = gBS->HandleProtocol (
- NewHandle,
- ConsoleGuid,
- &Interface
- );
- if (!EFI_ERROR (Status)) {
- //
- // Update new console handle in System Table.
- //
- *ConsoleHandle = NewHandle;
- *ProtocolInterface = Interface;
- if (CompareGuid (ConsoleGuid, &gEfiSimpleTextOutProtocolGuid)) {
- //
- // If it is console out device, set console mode 80x25 if current mode is invalid.
- //
- TextOut = (EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *) Interface;
- if (TextOut->Mode->Mode == -1) {
- TextOut->SetMode (TextOut, 0);
- }
- }
- return TRUE;
- }
- }
-
- } while (Instance != NULL);
-
- //
- // No any available console devcie found.
- //
- return FALSE;
-}
-
-/**
- This function update console variable based on ConVarName, it can
- add or remove one specific console device path from the variable
-
- @param ConVarName Console related variable name, ConIn, ConOut,
- ErrOut.
- @param CustomizedConDevicePath The console device path which will be added to
- the console variable ConVarName, this parameter
- can not be multi-instance.
- @param ExclusiveDevicePath The console device path which will be removed
- from the console variable ConVarName, this
- parameter can not be multi-instance.
-
- @retval EFI_UNSUPPORTED The added device path is same to the removed one.
- @retval EFI_SUCCESS Success add or remove the device path from the
- console variable.
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibUpdateConsoleVariable (
- IN CHAR16 *ConVarName,
- IN EFI_DEVICE_PATH_PROTOCOL *CustomizedConDevicePath,
- IN EFI_DEVICE_PATH_PROTOCOL *ExclusiveDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *VarConsole;
- UINTN DevicePathSize;
- EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *TempNewDevicePath;
- UINT32 Attributes;
-
- VarConsole = NULL;
- DevicePathSize = 0;
-
- //
- // Notes: check the device path point, here should check
- // with compare memory
- //
- if (CustomizedConDevicePath == ExclusiveDevicePath) {
- return EFI_UNSUPPORTED;
- }
- //
- // Delete the ExclusiveDevicePath from current default console
- //
- VarConsole = BdsLibGetVariableAndSize (
- ConVarName,
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
-
- //
- // Initialize NewDevicePath
- //
- NewDevicePath = VarConsole;
-
- //
- // If ExclusiveDevicePath is even the part of the instance in VarConsole, delete it.
- // In the end, NewDevicePath is the final device path.
- //
- if (ExclusiveDevicePath != NULL && VarConsole != NULL) {
- NewDevicePath = BdsLibDelPartMatchInstance (VarConsole, ExclusiveDevicePath);
- }
- //
- // Try to append customized device path to NewDevicePath.
- //
- if (CustomizedConDevicePath != NULL) {
- if (!BdsLibMatchDevicePaths (NewDevicePath, CustomizedConDevicePath)) {
- //
- // Check if there is part of CustomizedConDevicePath in NewDevicePath, delete it.
- //
- NewDevicePath = BdsLibDelPartMatchInstance (NewDevicePath, CustomizedConDevicePath);
- //
- // In the first check, the default console variable will be _ModuleEntryPoint,
- // just append current customized device path
- //
- TempNewDevicePath = NewDevicePath;
- NewDevicePath = AppendDevicePathInstance (NewDevicePath, CustomizedConDevicePath);
- if (TempNewDevicePath != NULL) {
- FreePool(TempNewDevicePath);
- }
- }
- }
-
- //
- // The attribute for ConInDev, ConOutDev and ErrOutDev does not include NV.
- //
- if (IsNvNeed(ConVarName)) {
- //
- // ConVarName has NV attribute.
- //
- Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE;
- } else {
- //
- // ConVarName does not have NV attribute.
- //
- Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS;
- }
-
- //
- // Finally, Update the variable of the default console by NewDevicePath
- //
- DevicePathSize = GetDevicePathSize (NewDevicePath);
- Status = SetVariableAndReportStatusCodeOnError (
- ConVarName,
- &gEfiGlobalVariableGuid,
- Attributes,
- DevicePathSize,
- NewDevicePath
- );
- if ((DevicePathSize == 0) && (Status == EFI_NOT_FOUND)) {
- Status = EFI_SUCCESS;
- }
-
- if (VarConsole == NewDevicePath) {
- if (VarConsole != NULL) {
- FreePool(VarConsole);
- }
- } else {
- if (VarConsole != NULL) {
- FreePool(VarConsole);
- }
- if (NewDevicePath != NULL) {
- FreePool(NewDevicePath);
- }
- }
-
- return Status;
-
-}
-
-
-/**
- Connect the console device base on the variable ConVarName, if
- device path of the ConVarName is multi-instance device path and
- anyone of the instances is connected success, then this function
- will return success.
- If the handle associate with one device path node can not
- be created successfully, then still give chance to do the dispatch,
- which load the missing drivers if possible..
-
- @param ConVarName Console related variable name, ConIn, ConOut,
- ErrOut.
-
- @retval EFI_NOT_FOUND There is not any console devices connected
- success
- @retval EFI_SUCCESS Success connect any one instance of the console
- device path base on the variable ConVarName.
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectConsoleVariable (
- IN CHAR16 *ConVarName
- )
-{
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *StartDevicePath;
- UINTN VariableSize;
- EFI_DEVICE_PATH_PROTOCOL *Instance;
- EFI_DEVICE_PATH_PROTOCOL *Next;
- EFI_DEVICE_PATH_PROTOCOL *CopyOfDevicePath;
- UINTN Size;
- BOOLEAN DeviceExist;
-
- Status = EFI_SUCCESS;
- DeviceExist = FALSE;
-
- //
- // Check if the console variable exist
- //
- StartDevicePath = BdsLibGetVariableAndSize (
- ConVarName,
- &gEfiGlobalVariableGuid,
- &VariableSize
- );
- if (StartDevicePath == NULL) {
- return EFI_UNSUPPORTED;
- }
-
- CopyOfDevicePath = StartDevicePath;
- do {
- //
- // Check every instance of the console variable
- //
- Instance = GetNextDevicePathInstance (&CopyOfDevicePath, &Size);
- if (Instance == NULL) {
- FreePool (StartDevicePath);
- return EFI_UNSUPPORTED;
- }
-
- Next = Instance;
- while (!IsDevicePathEndType (Next)) {
- Next = NextDevicePathNode (Next);
- }
-
- SetDevicePathEndNode (Next);
- //
- // Connect the USB console
- // USB console device path is a short-form device path that
- // starts with the first element being a USB WWID
- // or a USB Class device path
- //
- if ((DevicePathType (Instance) == MESSAGING_DEVICE_PATH) &&
- ((DevicePathSubType (Instance) == MSG_USB_CLASS_DP)
- || (DevicePathSubType (Instance) == MSG_USB_WWID_DP)
- )) {
- Status = BdsLibConnectUsbDevByShortFormDP (0xFF, Instance);
- if (!EFI_ERROR (Status)) {
- DeviceExist = TRUE;
- }
- } else {
- //
- // Connect the instance device path
- //
- Status = BdsLibConnectDevicePath (Instance);
-
- if (EFI_ERROR (Status)) {
- //
- // Delete the instance from the console varialbe
- //
- BdsLibUpdateConsoleVariable (ConVarName, NULL, Instance);
- } else {
- DeviceExist = TRUE;
- }
- }
- FreePool(Instance);
- } while (CopyOfDevicePath != NULL);
-
- FreePool (StartDevicePath);
-
- if (!DeviceExist) {
- return EFI_NOT_FOUND;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- This function will search every simpletext device in current system,
- and make every simpletext device as pertantial console device.
-
-**/
-VOID
-EFIAPI
-BdsLibConnectAllConsoles (
- VOID
- )
-{
- UINTN Index;
- EFI_DEVICE_PATH_PROTOCOL *ConDevicePath;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
-
- Index = 0;
- HandleCount = 0;
- HandleBuffer = NULL;
- ConDevicePath = NULL;
-
- //
- // Update all the console variables
- //
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiSimpleTextInProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
-
- for (Index = 0; Index < HandleCount; Index++) {
- gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID **) &ConDevicePath
- );
- BdsLibUpdateConsoleVariable (L"ConIn", ConDevicePath, NULL);
- }
-
- if (HandleBuffer != NULL) {
- FreePool(HandleBuffer);
- HandleBuffer = NULL;
- }
-
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiSimpleTextOutProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- for (Index = 0; Index < HandleCount; Index++) {
- gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID **) &ConDevicePath
- );
- BdsLibUpdateConsoleVariable (L"ConOut", ConDevicePath, NULL);
- BdsLibUpdateConsoleVariable (L"ErrOut", ConDevicePath, NULL);
- }
-
- if (HandleBuffer != NULL) {
- FreePool(HandleBuffer);
- }
-
- //
- // Connect all console variables
- //
- BdsLibConnectAllDefaultConsoles ();
-
-}
-
-/**
- This function will connect console device base on the console
- device variable ConIn, ConOut and ErrOut.
-
- @retval EFI_SUCCESS At least one of the ConIn and ConOut device have
- been connected success.
- @retval EFI_STATUS Return the status of BdsLibConnectConsoleVariable ().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectAllDefaultConsoles (
- VOID
- )
-{
- EFI_STATUS Status;
- BOOLEAN SystemTableUpdated;
-
- //
- // Connect all default console variables
- //
-
- //
- // It seems impossible not to have any ConOut device on platform,
- // so we check the status here.
- //
- Status = BdsLibConnectConsoleVariable (L"ConOut");
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Insert the performance probe for Console Out
- //
- PERF_START (NULL, "ConOut", "BDS", 1);
- PERF_END (NULL, "ConOut", "BDS", 0);
-
- //
- // Because possibly the platform is legacy free, in such case,
- // ConIn devices (Serial Port and PS2 Keyboard ) does not exist,
- // so we need not check the status.
- //
- BdsLibConnectConsoleVariable (L"ConIn");
-
- //
- // The _ModuleEntryPoint err out var is legal.
- //
- BdsLibConnectConsoleVariable (L"ErrOut");
-
- SystemTableUpdated = FALSE;
- //
- // Fill console handles in System Table if no console device assignd.
- //
- if (UpdateSystemTableConsole (L"ConIn", &gEfiSimpleTextInProtocolGuid, &gST->ConsoleInHandle, (VOID **) &gST->ConIn)) {
- SystemTableUpdated = TRUE;
- }
- if (UpdateSystemTableConsole (L"ConOut", &gEfiSimpleTextOutProtocolGuid, &gST->ConsoleOutHandle, (VOID **) &gST->ConOut)) {
- SystemTableUpdated = TRUE;
- }
- if (UpdateSystemTableConsole (L"ErrOut", &gEfiSimpleTextOutProtocolGuid, &gST->StandardErrorHandle, (VOID **) &gST->StdErr)) {
- SystemTableUpdated = TRUE;
- }
-
- if (SystemTableUpdated) {
- //
- // Update the CRC32 in the EFI System Table header
- //
- gST->Hdr.CRC32 = 0;
- gBS->CalculateCrc32 (
- (UINT8 *) &gST->Hdr,
- gST->Hdr.HeaderSize,
- &gST->Hdr.CRC32
- );
- }
-
- //
- // If any component set PcdTestKeyUsed to TRUE because use of a test key
- // was detected, then display a warning message on the debug log and the console
- //
- if (PcdGetBool (PcdTestKeyUsed) == TRUE) {
- DEBUG ((DEBUG_ERROR, "**********************************\n"));
- DEBUG ((DEBUG_ERROR, "** WARNING: Test Key is used. **\n"));
- DEBUG ((DEBUG_ERROR, "**********************************\n"));
- Print (L"** WARNING: Test Key is used. **\n");
- }
-
- return EFI_SUCCESS;
-
-}
-
-/**
- This function will connect console device except ConIn base on the console
- device variable ConOut and ErrOut.
-
- @retval EFI_SUCCESS At least one of the ConOut device have
- been connected success.
- @retval EFI_STATUS Return the status of BdsLibConnectConsoleVariable ().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectAllDefaultConsolesWithOutConIn (
- VOID
- )
-{
- EFI_STATUS Status;
- BOOLEAN SystemTableUpdated;
-
- //
- // Connect all default console variables except ConIn
- //
-
- //
- // It seems impossible not to have any ConOut device on platform,
- // so we check the status here.
- //
- Status = BdsLibConnectConsoleVariable (L"ConOut");
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Insert the performance probe for Console Out
- //
- PERF_START (NULL, "ConOut", "BDS", 1);
- PERF_END (NULL, "ConOut", "BDS", 0);
-
- //
- // The _ModuleEntryPoint err out var is legal.
- //
- BdsLibConnectConsoleVariable (L"ErrOut");
-
- SystemTableUpdated = FALSE;
- //
- // Fill console handles in System Table if no console device assignd.
- //
- if (UpdateSystemTableConsole (L"ConOut", &gEfiSimpleTextOutProtocolGuid, &gST->ConsoleOutHandle, (VOID **) &gST->ConOut)) {
- SystemTableUpdated = TRUE;
- }
- if (UpdateSystemTableConsole (L"ErrOut", &gEfiSimpleTextOutProtocolGuid, &gST->StandardErrorHandle, (VOID **) &gST->StdErr)) {
- SystemTableUpdated = TRUE;
- }
-
- if (SystemTableUpdated) {
- //
- // Update the CRC32 in the EFI System Table header
- //
- gST->Hdr.CRC32 = 0;
- gBS->CalculateCrc32 (
- (UINT8 *) &gST->Hdr,
- gST->Hdr.HeaderSize,
- &gST->Hdr.CRC32
- );
- }
-
- return EFI_SUCCESS;
-
-}
-
-/**
- Use SystemTable Conout to stop video based Simple Text Out consoles from going
- to the video device. Put up LogoFile on every video device that is a console.
-
- @param[in] LogoFile File name of logo to display on the center of the screen.
-
- @retval EFI_SUCCESS ConsoleControl has been flipped to graphics and logo displayed.
- @retval EFI_UNSUPPORTED Logo not found
-
-**/
-EFI_STATUS
-EFIAPI
-EnableQuietBoot (
- IN EFI_GUID *LogoFile
- )
-{
- EFI_STATUS Status;
- EFI_OEM_BADGING_PROTOCOL *Badging;
- UINT32 SizeOfX;
- UINT32 SizeOfY;
- INTN DestX;
- INTN DestY;
- UINT8 *ImageData;
- UINTN ImageSize;
- UINTN BltSize;
- UINT32 Instance;
- EFI_BADGING_FORMAT Format;
- EFI_BADGING_DISPLAY_ATTRIBUTE Attribute;
- UINTN CoordinateX;
- UINTN CoordinateY;
- UINTN Height;
- UINTN Width;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
- EFI_UGA_DRAW_PROTOCOL *UgaDraw;
- UINT32 ColorDepth;
- UINT32 RefreshRate;
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
- EFI_BOOT_LOGO_PROTOCOL *BootLogo;
- UINTN NumberOfLogos;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL *LogoBlt;
- UINTN LogoDestX;
- UINTN LogoDestY;
- UINTN LogoHeight;
- UINTN LogoWidth;
- UINTN NewDestX;
- UINTN NewDestY;
- UINTN NewHeight;
- UINTN NewWidth;
- UINT64 BufferSize;
-
- UgaDraw = NULL;
- //
- // Try to open GOP first
- //
- Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, (VOID **) &GraphicsOutput);
- if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {
- GraphicsOutput = NULL;
- //
- // Open GOP failed, try to open UGA
- //
- Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawProtocolGuid, (VOID **) &UgaDraw);
- }
- if (EFI_ERROR (Status)) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Try to open Boot Logo Protocol.
- //
- BootLogo = NULL;
- gBS->LocateProtocol (&gEfiBootLogoProtocolGuid, NULL, (VOID **) &BootLogo);
-
- //
- // Erase Cursor from screen
- //
- gST->ConOut->EnableCursor (gST->ConOut, FALSE);
-
- Badging = NULL;
- Status = gBS->LocateProtocol (&gEfiOEMBadgingProtocolGuid, NULL, (VOID **) &Badging);
-
- if (GraphicsOutput != NULL) {
- SizeOfX = GraphicsOutput->Mode->Info->HorizontalResolution;
- SizeOfY = GraphicsOutput->Mode->Info->VerticalResolution;
-
- } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
- Status = UgaDraw->GetMode (UgaDraw, &SizeOfX, &SizeOfY, &ColorDepth, &RefreshRate);
- if (EFI_ERROR (Status)) {
- return EFI_UNSUPPORTED;
- }
- } else {
- return EFI_UNSUPPORTED;
- }
-
- Blt = NULL;
- NumberOfLogos = 0;
- LogoDestX = 0;
- LogoDestY = 0;
- LogoHeight = 0;
- LogoWidth = 0;
- NewDestX = 0;
- NewDestY = 0;
- NewHeight = 0;
- NewWidth = 0;
- Instance = 0;
- while (1) {
- ImageData = NULL;
- ImageSize = 0;
-
- if (Badging != NULL) {
- //
- // Get image from OEMBadging protocol.
- //
- Status = Badging->GetImage (
- Badging,
- &Instance,
- &Format,
- &ImageData,
- &ImageSize,
- &Attribute,
- &CoordinateX,
- &CoordinateY
- );
- if (EFI_ERROR (Status)) {
- goto Done;
- }
-
- //
- // Currently only support BMP format.
- //
- if (Format != EfiBadgingFormatBMP) {
- if (ImageData != NULL) {
- FreePool (ImageData);
- }
- continue;
- }
- } else {
- //
- // Get the specified image from FV.
- //
- Status = GetSectionFromAnyFv (LogoFile, EFI_SECTION_RAW, 0, (VOID **) &ImageData, &ImageSize);
- if (EFI_ERROR (Status)) {
- return EFI_UNSUPPORTED;
- }
-
- CoordinateX = 0;
- CoordinateY = 0;
- if (!FeaturePcdGet(PcdBootlogoOnlyEnable)) {
- Attribute = EfiBadgingDisplayAttributeCenter;
- } else {
- Attribute = EfiBadgingDisplayAttributeCustomized;
- }
- }
-
- if (Blt != NULL) {
- FreePool (Blt);
- }
- Blt = NULL;
- Status = TranslateBmpToGopBlt (
- ImageData,
- ImageSize,
- &Blt,
- &BltSize,
- &Height,
- &Width
- );
- if (EFI_ERROR (Status)) {
- FreePool (ImageData);
-
- if (Badging == NULL) {
- return Status;
- } else {
- continue;
- }
- }
-
- //
- // Calculate the display position according to Attribute.
- //
- switch (Attribute) {
- case EfiBadgingDisplayAttributeLeftTop:
- DestX = CoordinateX;
- DestY = CoordinateY;
- break;
-
- case EfiBadgingDisplayAttributeCenterTop:
- DestX = (SizeOfX - Width) / 2;
- DestY = CoordinateY;
- break;
-
- case EfiBadgingDisplayAttributeRightTop:
- DestX = (SizeOfX - Width - CoordinateX);
- DestY = CoordinateY;;
- break;
-
- case EfiBadgingDisplayAttributeCenterRight:
- DestX = (SizeOfX - Width - CoordinateX);
- DestY = (SizeOfY - Height) / 2;
- break;
-
- case EfiBadgingDisplayAttributeRightBottom:
- DestX = (SizeOfX - Width - CoordinateX);
- DestY = (SizeOfY - Height - CoordinateY);
- break;
-
- case EfiBadgingDisplayAttributeCenterBottom:
- DestX = (SizeOfX - Width) / 2;
- DestY = (SizeOfY - Height - CoordinateY);
- break;
-
- case EfiBadgingDisplayAttributeLeftBottom:
- DestX = CoordinateX;
- DestY = (SizeOfY - Height - CoordinateY);
- break;
-
- case EfiBadgingDisplayAttributeCenterLeft:
- DestX = CoordinateX;
- DestY = (SizeOfY - Height) / 2;
- break;
-
- case EfiBadgingDisplayAttributeCenter:
- DestX = (SizeOfX - Width) / 2;
- DestY = (SizeOfY - Height) / 2;
- break;
-
- case EfiBadgingDisplayAttributeCustomized:
- DestX = (SizeOfX - Width) / 2;
- DestY = ((SizeOfY * 382) / 1000) - Height / 2;
- break;
-
- default:
- DestX = CoordinateX;
- DestY = CoordinateY;
- break;
- }
-
- if ((DestX >= 0) && (DestY >= 0)) {
- if (GraphicsOutput != NULL) {
- Status = GraphicsOutput->Blt (
- GraphicsOutput,
- Blt,
- EfiBltBufferToVideo,
- 0,
- 0,
- (UINTN) DestX,
- (UINTN) DestY,
- Width,
- Height,
- Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
- );
- } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
- Status = UgaDraw->Blt (
- UgaDraw,
- (EFI_UGA_PIXEL *) Blt,
- EfiUgaBltBufferToVideo,
- 0,
- 0,
- (UINTN) DestX,
- (UINTN) DestY,
- Width,
- Height,
- Width * sizeof (EFI_UGA_PIXEL)
- );
- } else {
- Status = EFI_UNSUPPORTED;
- }
-
- //
- // Report displayed Logo information.
- //
- if (!EFI_ERROR (Status)) {
- NumberOfLogos++;
-
- if (LogoWidth == 0) {
- //
- // The first Logo.
- //
- LogoDestX = (UINTN) DestX;
- LogoDestY = (UINTN) DestY;
- LogoWidth = Width;
- LogoHeight = Height;
- } else {
- //
- // Merge new logo with old one.
- //
- NewDestX = MIN ((UINTN) DestX, LogoDestX);
- NewDestY = MIN ((UINTN) DestY, LogoDestY);
- NewWidth = MAX ((UINTN) DestX + Width, LogoDestX + LogoWidth) - NewDestX;
- NewHeight = MAX ((UINTN) DestY + Height, LogoDestY + LogoHeight) - NewDestY;
-
- LogoDestX = NewDestX;
- LogoDestY = NewDestY;
- LogoWidth = NewWidth;
- LogoHeight = NewHeight;
- }
- }
- }
-
- FreePool (ImageData);
-
- if (Badging == NULL) {
- break;
- }
- }
-
-Done:
- if (BootLogo == NULL || NumberOfLogos == 0) {
- //
- // No logo displayed.
- //
- if (Blt != NULL) {
- FreePool (Blt);
- }
-
- return Status;
- }
-
- //
- // Advertise displayed Logo information.
- //
- if (NumberOfLogos == 1) {
- //
- // Only one logo displayed, use its Blt buffer directly for BootLogo protocol.
- //
- LogoBlt = Blt;
- Status = EFI_SUCCESS;
- } else {
- //
- // More than one Logo displayed, get merged BltBuffer using VideoToBuffer operation.
- //
- if (Blt != NULL) {
- FreePool (Blt);
- }
-
- //
- // Ensure the LogoHeight * LogoWidth doesn't overflow
- //
- if (LogoHeight > DivU64x64Remainder ((UINTN) ~0, LogoWidth, NULL)) {
- return EFI_UNSUPPORTED;
- }
- BufferSize = MultU64x64 (LogoWidth, LogoHeight);
-
- //
- // Ensure the BufferSize * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) doesn't overflow
- //
- if (BufferSize > DivU64x32 ((UINTN) ~0, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL))) {
- return EFI_UNSUPPORTED;
- }
-
- LogoBlt = AllocateZeroPool ((UINTN)BufferSize * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
- if (LogoBlt == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- if (GraphicsOutput != NULL) {
- Status = GraphicsOutput->Blt (
- GraphicsOutput,
- LogoBlt,
- EfiBltVideoToBltBuffer,
- LogoDestX,
- LogoDestY,
- 0,
- 0,
- LogoWidth,
- LogoHeight,
- LogoWidth * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
- );
- } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
- Status = UgaDraw->Blt (
- UgaDraw,
- (EFI_UGA_PIXEL *) LogoBlt,
- EfiUgaVideoToBltBuffer,
- LogoDestX,
- LogoDestY,
- 0,
- 0,
- LogoWidth,
- LogoHeight,
- LogoWidth * sizeof (EFI_UGA_PIXEL)
- );
- } else {
- Status = EFI_UNSUPPORTED;
- }
- }
-
- if (!EFI_ERROR (Status)) {
- BootLogo->SetBootLogo (BootLogo, LogoBlt, LogoDestX, LogoDestY, LogoWidth, LogoHeight);
- }
- FreePool (LogoBlt);
-
- return Status;
-}
-
-/**
- Use SystemTable Conout to turn on video based Simple Text Out consoles. The
- Simple Text Out screens will now be synced up with all non video output devices
-
- @retval EFI_SUCCESS UGA devices are back in text mode and synced up.
-
-**/
-EFI_STATUS
-EFIAPI
-DisableQuietBoot (
- VOID
- )
-{
-
- //
- // Enable Cursor on Screen
- //
- gST->ConOut->EnableCursor (gST->ConOut, TRUE);
- return EFI_SUCCESS;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c
deleted file mode 100644
index 313a1ea9f6..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c
+++ /dev/null
@@ -1,1575 +0,0 @@
-/** @file
- Misc BDS library function
-
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "InternalBdsLib.h"
-
-
-#define MAX_STRING_LEN 200
-
-BOOLEAN mFeaturerSwitch = TRUE;
-BOOLEAN mResetRequired = FALSE;
-
-extern UINT16 gPlatformBootTimeOutDefault;
-
-/**
- The function will go through the driver option link list, load and start
- every driver the driver option device path point to.
-
- @param BdsDriverLists The header of the current driver option link list
-
-**/
-VOID
-EFIAPI
-BdsLibLoadDrivers (
- IN LIST_ENTRY *BdsDriverLists
- )
-{
- EFI_STATUS Status;
- LIST_ENTRY *Link;
- BDS_COMMON_OPTION *Option;
- EFI_HANDLE ImageHandle;
- EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;
- UINTN ExitDataSize;
- CHAR16 *ExitData;
- BOOLEAN ReconnectAll;
-
- ReconnectAll = FALSE;
-
- //
- // Process the driver option
- //
- for (Link = BdsDriverLists->ForwardLink; Link != BdsDriverLists; Link = Link->ForwardLink) {
- Option = CR (Link, BDS_COMMON_OPTION, Link, BDS_LOAD_OPTION_SIGNATURE);
-
- //
- // If a load option is not marked as LOAD_OPTION_ACTIVE,
- // the boot manager will not automatically load the option.
- //
- if (!IS_LOAD_OPTION_TYPE (Option->Attribute, LOAD_OPTION_ACTIVE)) {
- continue;
- }
-
- //
- // If a driver load option is marked as LOAD_OPTION_FORCE_RECONNECT,
- // then all of the EFI drivers in the system will be disconnected and
- // reconnected after the last driver load option is processed.
- //
- if (IS_LOAD_OPTION_TYPE (Option->Attribute, LOAD_OPTION_FORCE_RECONNECT)) {
- ReconnectAll = TRUE;
- }
-
- //
- // Make sure the driver path is connected.
- //
- BdsLibConnectDevicePath (Option->DevicePath);
-
- //
- // Load and start the image that Driver#### describes
- //
- Status = gBS->LoadImage (
- FALSE,
- gImageHandle,
- Option->DevicePath,
- NULL,
- 0,
- &ImageHandle
- );
-
- if (!EFI_ERROR (Status)) {
- gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &ImageInfo);
-
- //
- // Verify whether this image is a driver, if not,
- // exit it and continue to parse next load option
- //
- if (ImageInfo->ImageCodeType != EfiBootServicesCode && ImageInfo->ImageCodeType != EfiRuntimeServicesCode) {
- gBS->Exit (ImageHandle, EFI_INVALID_PARAMETER, 0, NULL);
- continue;
- }
-
- if (Option->LoadOptionsSize != 0) {
- ImageInfo->LoadOptionsSize = Option->LoadOptionsSize;
- ImageInfo->LoadOptions = Option->LoadOptions;
- }
- //
- // Before calling the image, enable the Watchdog Timer for
- // the 5 Minute period
- //
- gBS->SetWatchdogTimer (5 * 60, 0x0000, 0x00, NULL);
-
- Status = gBS->StartImage (ImageHandle, &ExitDataSize, &ExitData);
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Driver Return Status = %r\n", Status));
-
- //
- // Clear the Watchdog Timer after the image returns
- //
- gBS->SetWatchdogTimer (0x0000, 0x0000, 0x0000, NULL);
- }
- }
-
- //
- // Process the LOAD_OPTION_FORCE_RECONNECT driver option
- //
- if (ReconnectAll) {
- BdsLibDisconnectAllEfi ();
- BdsLibConnectAll ();
- }
-
-}
-
-/**
- Get the Option Number that does not used.
- Try to locate the specific option variable one by one utile find a free number.
-
- @param VariableName Indicate if the boot#### or driver#### option
-
- @return The Minimal Free Option Number
-
-**/
-UINT16
-BdsLibGetFreeOptionNumber (
- IN CHAR16 *VariableName
- )
-{
- UINTN Index;
- CHAR16 StrTemp[10];
- UINT16 *OptionBuffer;
- UINTN OptionSize;
-
- //
- // Try to find the minimum free number from 0, 1, 2, 3....
- //
- Index = 0;
- do {
- if (*VariableName == 'B') {
- UnicodeSPrint (StrTemp, sizeof (StrTemp), L"Boot%04x", Index);
- } else {
- UnicodeSPrint (StrTemp, sizeof (StrTemp), L"Driver%04x", Index);
- }
- //
- // try if the option number is used
- //
- OptionBuffer = BdsLibGetVariableAndSize (
- StrTemp,
- &gEfiGlobalVariableGuid,
- &OptionSize
- );
- if (OptionBuffer == NULL) {
- break;
- }
- FreePool(OptionBuffer);
- Index++;
- } while (TRUE);
-
- return ((UINT16) Index);
-}
-
-
-/**
- This function will register the new boot#### or driver#### option base on
- the VariableName. The new registered boot#### or driver#### will be linked
- to BdsOptionList and also update to the VariableName. After the boot#### or
- driver#### updated, the BootOrder or DriverOrder will also be updated.
-
- @param BdsOptionList The header of the boot#### or driver#### link list
- @param DevicePath The device path which the boot#### or driver####
- option present
- @param String The description of the boot#### or driver####
- @param VariableName Indicate if the boot#### or driver#### option
-
- @retval EFI_SUCCESS The boot#### or driver#### have been success
- registered
- @retval EFI_STATUS Return the status of gRT->SetVariable ().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibRegisterNewOption (
- IN LIST_ENTRY *BdsOptionList,
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- IN CHAR16 *String,
- IN CHAR16 *VariableName
- )
-{
- EFI_STATUS Status;
- UINTN Index;
- UINT16 RegisterOptionNumber;
- UINT16 *TempOptionPtr;
- UINTN TempOptionSize;
- UINT16 *OptionOrderPtr;
- VOID *OptionPtr;
- UINTN OptionSize;
- UINT8 *TempPtr;
- EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath;
- CHAR16 *Description;
- CHAR16 OptionName[10];
- BOOLEAN UpdateDescription;
- UINT16 BootOrderEntry;
- UINTN OrderItemNum;
-
- if (DevicePath == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- OptionPtr = NULL;
- OptionSize = 0;
- TempPtr = NULL;
- OptionDevicePath = NULL;
- Description = NULL;
- OptionOrderPtr = NULL;
- UpdateDescription = FALSE;
- Status = EFI_SUCCESS;
- ZeroMem (OptionName, sizeof (OptionName));
-
- TempOptionSize = 0;
- TempOptionPtr = BdsLibGetVariableAndSize (
- VariableName,
- &gEfiGlobalVariableGuid,
- &TempOptionSize
- );
- //
- // Compare with current option variable if the previous option is set in global variable.
- //
- for (Index = 0; Index < TempOptionSize / sizeof (UINT16); Index++) {
- //
- // TempOptionPtr must not be NULL if we have non-zero TempOptionSize.
- //
- ASSERT (TempOptionPtr != NULL);
-
- if (*VariableName == 'B') {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", TempOptionPtr[Index]);
- } else {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", TempOptionPtr[Index]);
- }
-
- OptionPtr = BdsLibGetVariableAndSize (
- OptionName,
- &gEfiGlobalVariableGuid,
- &OptionSize
- );
- if (OptionPtr == NULL) {
- continue;
- }
-
- //
- // Validate the variable.
- //
- if (!ValidateOption(OptionPtr, OptionSize)) {
- FreePool(OptionPtr);
- continue;
- }
-
- TempPtr = OptionPtr;
- TempPtr += sizeof (UINT32) + sizeof (UINT16);
- Description = (CHAR16 *) TempPtr;
- TempPtr += StrSize ((CHAR16 *) TempPtr);
- OptionDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;
-
- //
- // Notes: the description may will change base on the GetStringToken
- //
- if (CompareMem (OptionDevicePath, DevicePath, GetDevicePathSize (OptionDevicePath)) == 0) {
- if (CompareMem (Description, String, StrSize (Description)) == 0) {
- //
- // Got the option, so just return
- //
- FreePool (OptionPtr);
- FreePool (TempOptionPtr);
- return EFI_SUCCESS;
- } else {
- //
- // Option description changed, need update.
- //
- UpdateDescription = TRUE;
- FreePool (OptionPtr);
- break;
- }
- }
-
- FreePool (OptionPtr);
- }
-
- OptionSize = sizeof (UINT32) + sizeof (UINT16) + StrSize (String);
- OptionSize += GetDevicePathSize (DevicePath);
- OptionPtr = AllocateZeroPool (OptionSize);
- ASSERT (OptionPtr != NULL);
-
- TempPtr = OptionPtr;
- *(UINT32 *) TempPtr = LOAD_OPTION_ACTIVE;
- TempPtr += sizeof (UINT32);
- *(UINT16 *) TempPtr = (UINT16) GetDevicePathSize (DevicePath);
- TempPtr += sizeof (UINT16);
- CopyMem (TempPtr, String, StrSize (String));
- TempPtr += StrSize (String);
- CopyMem (TempPtr, DevicePath, GetDevicePathSize (DevicePath));
-
- if (UpdateDescription) {
- //
- // The number in option#### to be updated.
- // In this case, we must have non-NULL TempOptionPtr.
- //
- ASSERT (TempOptionPtr != NULL);
- RegisterOptionNumber = TempOptionPtr[Index];
- } else {
- //
- // The new option#### number
- //
- RegisterOptionNumber = BdsLibGetFreeOptionNumber(VariableName);
- }
-
- if (*VariableName == 'B') {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", RegisterOptionNumber);
- } else {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", RegisterOptionNumber);
- }
-
- Status = gRT->SetVariable (
- OptionName,
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- OptionSize,
- OptionPtr
- );
- //
- // Return if only need to update a changed description or fail to set option.
- //
- if (EFI_ERROR (Status) || UpdateDescription) {
- FreePool (OptionPtr);
- if (TempOptionPtr != NULL) {
- FreePool (TempOptionPtr);
- }
- return Status;
- }
-
- FreePool (OptionPtr);
-
- //
- // Update the option order variable
- //
-
- //
- // If no option order
- //
- if (TempOptionSize == 0) {
- BootOrderEntry = 0;
- Status = gRT->SetVariable (
- VariableName,
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- sizeof (UINT16),
- &BootOrderEntry
- );
- if (TempOptionPtr != NULL) {
- FreePool (TempOptionPtr);
- }
- return Status;
- }
-
- //
- // TempOptionPtr must not be NULL if TempOptionSize is not zero.
- //
- ASSERT (TempOptionPtr != NULL);
- //
- // Append the new option number to the original option order
- //
- OrderItemNum = (TempOptionSize / sizeof (UINT16)) + 1 ;
- OptionOrderPtr = AllocateZeroPool ( OrderItemNum * sizeof (UINT16));
- ASSERT (OptionOrderPtr!= NULL);
- CopyMem (OptionOrderPtr, TempOptionPtr, (OrderItemNum - 1) * sizeof (UINT16));
-
- OptionOrderPtr[Index] = RegisterOptionNumber;
-
- Status = gRT->SetVariable (
- VariableName,
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- OrderItemNum * sizeof (UINT16),
- OptionOrderPtr
- );
- FreePool (TempOptionPtr);
- FreePool (OptionOrderPtr);
-
- return Status;
-}
-
-/**
- Returns the size of a device path in bytes.
-
- This function returns the size, in bytes, of the device path data structure
- specified by DevicePath including the end of device path node. If DevicePath
- is NULL, then 0 is returned. If the length of the device path is bigger than
- MaxSize, also return 0 to indicate this is an invalidate device path.
-
- @param DevicePath A pointer to a device path data structure.
- @param MaxSize Max valid device path size. If big than this size,
- return error.
-
- @retval 0 An invalid device path.
- @retval Others The size of a device path in bytes.
-
-**/
-UINTN
-GetDevicePathSizeEx (
- IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- IN UINTN MaxSize
- )
-{
- UINTN Size;
- UINTN NodeSize;
-
- if (DevicePath == NULL) {
- return 0;
- }
-
- //
- // Search for the end of the device path structure
- //
- Size = 0;
- while (!IsDevicePathEnd (DevicePath)) {
- NodeSize = DevicePathNodeLength (DevicePath);
- if (NodeSize < END_DEVICE_PATH_LENGTH) {
- return 0;
- }
- Size += NodeSize;
- if (Size > MaxSize) {
- return 0;
- }
- DevicePath = NextDevicePathNode (DevicePath);
- }
- Size += DevicePathNodeLength (DevicePath);
- if (Size > MaxSize) {
- return 0;
- }
-
- return Size;
-}
-
-/**
- Returns the length of a Null-terminated Unicode string. If the length is
- bigger than MaxStringLen, return length 0 to indicate that this is an
- invalidate string.
-
- This function returns the byte length of Unicode characters in the Null-terminated
- Unicode string specified by String.
-
- If String is NULL, then ASSERT().
- If String is not aligned on a 16-bit boundary, then ASSERT().
-
- @param String A pointer to a Null-terminated Unicode string.
- @param MaxStringLen Max string len in this string.
-
- @retval 0 An invalid string.
- @retval Others The length of String.
-
-**/
-UINTN
-StrSizeEx (
- IN CONST CHAR16 *String,
- IN UINTN MaxStringLen
- )
-{
- UINTN Length;
-
- ASSERT (String != NULL && MaxStringLen != 0);
- ASSERT (((UINTN) String & BIT0) == 0);
-
- for (Length = 0; *String != L'\0' && MaxStringLen != Length; String++, Length+=2);
-
- if (*String != L'\0' && MaxStringLen == Length) {
- return 0;
- }
-
- return Length + 2;
-}
-
-/**
- Validate the EFI Boot#### variable (VendorGuid/Name)
-
- @param Variable Boot#### variable data.
- @param VariableSize Returns the size of the EFI variable that was read
-
- @retval TRUE The variable data is correct.
- @retval FALSE The variable data is corrupted.
-
-**/
-BOOLEAN
-ValidateOption (
- UINT8 *Variable,
- UINTN VariableSize
- )
-{
- UINT16 FilePathSize;
- UINT8 *TempPtr;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- UINTN TempSize;
-
- if (VariableSize <= sizeof (UINT16) + sizeof (UINT32)) {
- return FALSE;
- }
-
- //
- // Skip the option attribute
- //
- TempPtr = Variable;
- TempPtr += sizeof (UINT32);
-
- //
- // Get the option's device path size
- //
- FilePathSize = *(UINT16 *) TempPtr;
- TempPtr += sizeof (UINT16);
-
- //
- // Get the option's description string size
- //
- TempSize = StrSizeEx ((CHAR16 *) TempPtr, VariableSize - sizeof (UINT16) - sizeof (UINT32));
- TempPtr += TempSize;
-
- //
- // Get the option's device path
- //
- DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;
- TempPtr += FilePathSize;
-
- //
- // Validation boot option variable.
- //
- if ((FilePathSize == 0) || (TempSize == 0)) {
- return FALSE;
- }
-
- if (TempSize + FilePathSize + sizeof (UINT16) + sizeof (UINT32) > VariableSize) {
- return FALSE;
- }
-
- return (BOOLEAN) (GetDevicePathSizeEx (DevicePath, FilePathSize) != 0);
-}
-
-/**
- Convert a single character to number.
- It assumes the input Char is in the scope of L'0' ~ L'9' and L'A' ~ L'F'
-
- @param Char The input char which need to change to a hex number.
-
-**/
-UINTN
-CharToUint (
- IN CHAR16 Char
- )
-{
- if ((Char >= L'0') && (Char <= L'9')) {
- return (UINTN) (Char - L'0');
- }
-
- if ((Char >= L'A') && (Char <= L'F')) {
- return (UINTN) (Char - L'A' + 0xA);
- }
-
- ASSERT (FALSE);
- return 0;
-}
-
-/**
- Build the boot#### or driver#### option from the VariableName, the
- build boot#### or driver#### will also be linked to BdsCommonOptionList.
-
- @param BdsCommonOptionList The header of the boot#### or driver#### option
- link list
- @param VariableName EFI Variable name indicate if it is boot#### or
- driver####
-
- @retval BDS_COMMON_OPTION Get the option just been created
- @retval NULL Failed to get the new option
-
-**/
-BDS_COMMON_OPTION *
-EFIAPI
-BdsLibVariableToOption (
- IN OUT LIST_ENTRY *BdsCommonOptionList,
- IN CHAR16 *VariableName
- )
-{
- UINT32 Attribute;
- UINT16 FilePathSize;
- UINT8 *Variable;
- UINT8 *TempPtr;
- UINTN VariableSize;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- BDS_COMMON_OPTION *Option;
- VOID *LoadOptions;
- UINT32 LoadOptionsSize;
- CHAR16 *Description;
- UINT8 NumOff;
-
- //
- // Read the variable. We will never free this data.
- //
- Variable = BdsLibGetVariableAndSize (
- VariableName,
- &gEfiGlobalVariableGuid,
- &VariableSize
- );
- if (Variable == NULL) {
- return NULL;
- }
-
- //
- // Validate Boot#### variable data.
- //
- if (!ValidateOption(Variable, VariableSize)) {
- FreePool (Variable);
- return NULL;
- }
-
- //
- // Notes: careful defined the variable of Boot#### or
- // Driver####, consider use some macro to abstract the code
- //
- //
- // Get the option attribute
- //
- TempPtr = Variable;
- Attribute = *(UINT32 *) Variable;
- TempPtr += sizeof (UINT32);
-
- //
- // Get the option's device path size
- //
- FilePathSize = *(UINT16 *) TempPtr;
- TempPtr += sizeof (UINT16);
-
- //
- // Get the option's description string
- //
- Description = (CHAR16 *) TempPtr;
-
- //
- // Get the option's description string size
- //
- TempPtr += StrSize((CHAR16 *) TempPtr);
-
- //
- // Get the option's device path
- //
- DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;
- TempPtr += FilePathSize;
-
- //
- // Get load opion data.
- //
- LoadOptions = TempPtr;
- LoadOptionsSize = (UINT32) (VariableSize - (UINTN) (TempPtr - Variable));
-
- //
- // The Console variables may have multiple device paths, so make
- // an Entry for each one.
- //
- Option = AllocateZeroPool (sizeof (BDS_COMMON_OPTION));
- if (Option == NULL) {
- FreePool (Variable);
- return NULL;
- }
-
- Option->Signature = BDS_LOAD_OPTION_SIGNATURE;
- Option->DevicePath = AllocateZeroPool (GetDevicePathSize (DevicePath));
- ASSERT(Option->DevicePath != NULL);
- CopyMem (Option->DevicePath, DevicePath, GetDevicePathSize (DevicePath));
-
- Option->Attribute = Attribute;
- Option->Description = AllocateZeroPool (StrSize (Description));
- ASSERT(Option->Description != NULL);
- CopyMem (Option->Description, Description, StrSize (Description));
-
- Option->LoadOptions = AllocateZeroPool (LoadOptionsSize);
- ASSERT(Option->LoadOptions != NULL);
- CopyMem (Option->LoadOptions, LoadOptions, LoadOptionsSize);
- Option->LoadOptionsSize = LoadOptionsSize;
-
- //
- // Get the value from VariableName Unicode string
- // since the ISO standard assumes ASCII equivalent abbreviations, we can be safe in converting this
- // Unicode stream to ASCII without any loss in meaning.
- //
- if (*VariableName == 'B') {
- NumOff = (UINT8) (sizeof (L"Boot") / sizeof (CHAR16) - 1);
- Option->BootCurrent = (UINT16) (CharToUint (VariableName[NumOff+0]) * 0x1000)
- + (UINT16) (CharToUint (VariableName[NumOff+1]) * 0x100)
- + (UINT16) (CharToUint (VariableName[NumOff+2]) * 0x10)
- + (UINT16) (CharToUint (VariableName[NumOff+3]) * 0x1);
- }
- InsertTailList (BdsCommonOptionList, &Option->Link);
- FreePool (Variable);
- return Option;
-}
-
-/**
- Process BootOrder, or DriverOrder variables, by calling
- BdsLibVariableToOption () for each UINT16 in the variables.
-
- @param BdsCommonOptionList The header of the option list base on variable
- VariableName
- @param VariableName EFI Variable name indicate the BootOrder or
- DriverOrder
-
- @retval EFI_SUCCESS Success create the boot option or driver option
- list
- @retval EFI_OUT_OF_RESOURCES Failed to get the boot option or driver option list
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibBuildOptionFromVar (
- IN LIST_ENTRY *BdsCommonOptionList,
- IN CHAR16 *VariableName
- )
-{
- UINT16 *OptionOrder;
- UINTN OptionOrderSize;
- UINTN Index;
- BDS_COMMON_OPTION *Option;
- CHAR16 OptionName[20];
-
- //
- // Zero Buffer in order to get all BOOT#### variables
- //
- ZeroMem (OptionName, sizeof (OptionName));
-
- //
- // Read the BootOrder, or DriverOrder variable.
- //
- OptionOrder = BdsLibGetVariableAndSize (
- VariableName,
- &gEfiGlobalVariableGuid,
- &OptionOrderSize
- );
- if (OptionOrder == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- for (Index = 0; Index < OptionOrderSize / sizeof (UINT16); Index++) {
- if (*VariableName == 'B') {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", OptionOrder[Index]);
- } else {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", OptionOrder[Index]);
- }
-
- Option = BdsLibVariableToOption (BdsCommonOptionList, OptionName);
- if (Option != NULL) {
- Option->BootCurrent = OptionOrder[Index];
- }
- }
-
- FreePool (OptionOrder);
-
- return EFI_SUCCESS;
-}
-
-/**
- Get boot mode by looking up configuration table and parsing HOB list
-
- @param BootMode Boot mode from PEI handoff HOB.
-
- @retval EFI_SUCCESS Successfully get boot mode
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibGetBootMode (
- OUT EFI_BOOT_MODE *BootMode
- )
-{
- *BootMode = GetBootModeHob ();
-
- return EFI_SUCCESS;
-}
-
-/**
- Read the EFI variable (VendorGuid/Name) and return a dynamically allocated
- buffer, and the size of the buffer. If failure return NULL.
-
- @param Name String part of EFI variable name
- @param VendorGuid GUID part of EFI variable name
- @param VariableSize Returns the size of the EFI variable that was read
-
- @return Dynamically allocated memory that contains a copy of the EFI variable
- Caller is responsible freeing the buffer.
- @retval NULL Variable was not read
-
-**/
-VOID *
-EFIAPI
-BdsLibGetVariableAndSize (
- IN CHAR16 *Name,
- IN EFI_GUID *VendorGuid,
- OUT UINTN *VariableSize
- )
-{
- EFI_STATUS Status;
- UINTN BufferSize;
- VOID *Buffer;
-
- Buffer = NULL;
-
- //
- // Pass in a zero size buffer to find the required buffer size.
- //
- BufferSize = 0;
- Status = gRT->GetVariable (Name, VendorGuid, NULL, &BufferSize, Buffer);
- if (Status == EFI_BUFFER_TOO_SMALL) {
- //
- // Allocate the buffer to return
- //
- Buffer = AllocateZeroPool (BufferSize);
- if (Buffer == NULL) {
- *VariableSize = 0;
- return NULL;
- }
- //
- // Read variable into the allocated buffer.
- //
- Status = gRT->GetVariable (Name, VendorGuid, NULL, &BufferSize, Buffer);
- if (EFI_ERROR (Status)) {
- FreePool (Buffer);
- BufferSize = 0;
- Buffer = NULL;
- }
- }
-
- ASSERT (((Buffer == NULL) && (BufferSize == 0)) ||
- ((Buffer != NULL) && (BufferSize != 0))
- );
- *VariableSize = BufferSize;
- return Buffer;
-}
-
-/**
- Delete the instance in Multi which matches partly with Single instance
-
- @param Multi A pointer to a multi-instance device path data
- structure.
- @param Single A pointer to a single-instance device path data
- structure.
-
- @return This function will remove the device path instances in Multi which partly
- match with the Single, and return the result device path. If there is no
- remaining device path as a result, this function will return NULL.
-
-**/
-EFI_DEVICE_PATH_PROTOCOL *
-EFIAPI
-BdsLibDelPartMatchInstance (
- IN EFI_DEVICE_PATH_PROTOCOL *Multi,
- IN EFI_DEVICE_PATH_PROTOCOL *Single
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *Instance;
- EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *TempNewDevicePath;
- UINTN InstanceSize;
- UINTN SingleDpSize;
- UINTN Size;
-
- NewDevicePath = NULL;
- TempNewDevicePath = NULL;
-
- if (Multi == NULL || Single == NULL) {
- return Multi;
- }
-
- Instance = GetNextDevicePathInstance (&Multi, &InstanceSize);
- SingleDpSize = GetDevicePathSize (Single) - END_DEVICE_PATH_LENGTH;
- InstanceSize -= END_DEVICE_PATH_LENGTH;
-
- while (Instance != NULL) {
-
- Size = (SingleDpSize < InstanceSize) ? SingleDpSize : InstanceSize;
-
- if ((CompareMem (Instance, Single, Size) != 0)) {
- //
- // Append the device path instance which does not match with Single
- //
- TempNewDevicePath = NewDevicePath;
- NewDevicePath = AppendDevicePathInstance (NewDevicePath, Instance);
- if (TempNewDevicePath != NULL) {
- FreePool(TempNewDevicePath);
- }
- }
- FreePool(Instance);
- Instance = GetNextDevicePathInstance (&Multi, &InstanceSize);
- InstanceSize -= END_DEVICE_PATH_LENGTH;
- }
-
- return NewDevicePath;
-}
-
-/**
- Function compares a device path data structure to that of all the nodes of a
- second device path instance.
-
- @param Multi A pointer to a multi-instance device path data
- structure.
- @param Single A pointer to a single-instance device path data
- structure.
-
- @retval TRUE If the Single device path is contained within Multi device path.
- @retval FALSE The Single device path is not match within Multi device path.
-
-**/
-BOOLEAN
-EFIAPI
-BdsLibMatchDevicePaths (
- IN EFI_DEVICE_PATH_PROTOCOL *Multi,
- IN EFI_DEVICE_PATH_PROTOCOL *Single
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- EFI_DEVICE_PATH_PROTOCOL *DevicePathInst;
- UINTN Size;
-
- if (Multi == NULL || Single == NULL) {
- return FALSE;
- }
-
- DevicePath = Multi;
- DevicePathInst = GetNextDevicePathInstance (&DevicePath, &Size);
-
- //
- // Search for the match of 'Single' in 'Multi'
- //
- while (DevicePathInst != NULL) {
- //
- // If the single device path is found in multiple device paths,
- // return success
- //
- if (CompareMem (Single, DevicePathInst, Size) == 0) {
- FreePool (DevicePathInst);
- return TRUE;
- }
-
- FreePool (DevicePathInst);
- DevicePathInst = GetNextDevicePathInstance (&DevicePath, &Size);
- }
-
- return FALSE;
-}
-
-/**
- This function prints a series of strings.
-
- @param ConOut Pointer to EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
- @param ... A variable argument list containing series of
- strings, the last string must be NULL.
-
- @retval EFI_SUCCESS Success print out the string using ConOut.
- @retval EFI_STATUS Return the status of the ConOut->OutputString ().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibOutputStrings (
- IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut,
- ...
- )
-{
- VA_LIST Args;
- EFI_STATUS Status;
- CHAR16 *String;
-
- Status = EFI_SUCCESS;
- VA_START (Args, ConOut);
-
- while (!EFI_ERROR (Status)) {
- //
- // If String is NULL, then it's the end of the list
- //
- String = VA_ARG (Args, CHAR16 *);
- if (String == NULL) {
- break;
- }
-
- Status = ConOut->OutputString (ConOut, String);
-
- if (EFI_ERROR (Status)) {
- break;
- }
- }
-
- VA_END(Args);
- return Status;
-}
-
-//
-// Following are BDS Lib functions which contain all the code about setup browser reset reminder feature.
-// Setup Browser reset reminder feature is that an reset reminder will be given before user leaves the setup browser if
-// user change any option setting which needs a reset to be effective, and the reset will be applied according to the user selection.
-//
-
-
-/**
- Enable the setup browser reset reminder feature.
- This routine is used in platform tip. If the platform policy need the feature, use the routine to enable it.
-
-**/
-VOID
-EFIAPI
-EnableResetReminderFeature (
- VOID
- )
-{
- mFeaturerSwitch = TRUE;
-}
-
-
-/**
- Disable the setup browser reset reminder feature.
- This routine is used in platform tip. If the platform policy do not want the feature, use the routine to disable it.
-
-**/
-VOID
-EFIAPI
-DisableResetReminderFeature (
- VOID
- )
-{
- mFeaturerSwitch = FALSE;
-}
-
-
-/**
- Record the info that a reset is required.
- A module boolean variable is used to record whether a reset is required.
-
-**/
-VOID
-EFIAPI
-EnableResetRequired (
- VOID
- )
-{
- mResetRequired = TRUE;
-}
-
-
-/**
- Record the info that no reset is required.
- A module boolean variable is used to record whether a reset is required.
-
-**/
-VOID
-EFIAPI
-DisableResetRequired (
- VOID
- )
-{
- mResetRequired = FALSE;
-}
-
-
-/**
- Check whether platform policy enable the reset reminder feature. The default is enabled.
-
-**/
-BOOLEAN
-EFIAPI
-IsResetReminderFeatureEnable (
- VOID
- )
-{
- return mFeaturerSwitch;
-}
-
-
-/**
- Check if user changed any option setting which needs a system reset to be effective.
-
-**/
-BOOLEAN
-EFIAPI
-IsResetRequired (
- VOID
- )
-{
- return mResetRequired;
-}
-
-
-/**
- Check whether a reset is needed, and finish the reset reminder feature.
- If a reset is needed, Popup a menu to notice user, and finish the feature
- according to the user selection.
-
-**/
-VOID
-EFIAPI
-SetupResetReminder (
- VOID
- )
-{
- EFI_INPUT_KEY Key;
- CHAR16 *StringBuffer1;
- CHAR16 *StringBuffer2;
-
-
- //
- //check any reset required change is applied? if yes, reset system
- //
- if (IsResetReminderFeatureEnable ()) {
- if (IsResetRequired ()) {
-
- StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));
- ASSERT (StringBuffer1 != NULL);
- StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));
- ASSERT (StringBuffer2 != NULL);
- StrCpy (StringBuffer1, L"Configuration changed. Reset to apply it Now.");
- StrCpy (StringBuffer2, L"Press ENTER to reset");
- //
- // Popup a menu to notice user
- //
- do {
- CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, StringBuffer1, StringBuffer2, NULL);
- } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);
-
- FreePool (StringBuffer1);
- FreePool (StringBuffer2);
-
- gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);
- }
- }
-}
-
-/**
- Get the headers (dos, image, optional header) from an image
-
- @param Device SimpleFileSystem device handle
- @param FileName File name for the image
- @param DosHeader Pointer to dos header
- @param Hdr The buffer in which to return the PE32, PE32+, or TE header.
-
- @retval EFI_SUCCESS Successfully get the machine type.
- @retval EFI_NOT_FOUND The file is not found.
- @retval EFI_LOAD_ERROR File is not a valid image file.
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibGetImageHeader (
- IN EFI_HANDLE Device,
- IN CHAR16 *FileName,
- OUT EFI_IMAGE_DOS_HEADER *DosHeader,
- OUT EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr
- )
-{
- EFI_STATUS Status;
- EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Volume;
- EFI_FILE_HANDLE Root;
- EFI_FILE_HANDLE ThisFile;
- UINTN BufferSize;
- UINT64 FileSize;
- EFI_FILE_INFO *Info;
-
- Root = NULL;
- ThisFile = NULL;
- //
- // Handle the file system interface to the device
- //
- Status = gBS->HandleProtocol (
- Device,
- &gEfiSimpleFileSystemProtocolGuid,
- (VOID *) &Volume
- );
- if (EFI_ERROR (Status)) {
- goto Done;
- }
-
- Status = Volume->OpenVolume (
- Volume,
- &Root
- );
- if (EFI_ERROR (Status)) {
- Root = NULL;
- goto Done;
- }
- ASSERT (Root != NULL);
- Status = Root->Open (Root, &ThisFile, FileName, EFI_FILE_MODE_READ, 0);
- if (EFI_ERROR (Status)) {
- goto Done;
- }
- ASSERT (ThisFile != NULL);
-
- //
- // Get file size
- //
- BufferSize = SIZE_OF_EFI_FILE_INFO + 200;
- do {
- Info = NULL;
- Status = gBS->AllocatePool (EfiBootServicesData, BufferSize, (VOID **) &Info);
- if (EFI_ERROR (Status)) {
- goto Done;
- }
- Status = ThisFile->GetInfo (
- ThisFile,
- &gEfiFileInfoGuid,
- &BufferSize,
- Info
- );
- if (!EFI_ERROR (Status)) {
- break;
- }
- if (Status != EFI_BUFFER_TOO_SMALL) {
- FreePool (Info);
- goto Done;
- }
- FreePool (Info);
- } while (TRUE);
-
- FileSize = Info->FileSize;
- FreePool (Info);
-
- //
- // Read dos header
- //
- BufferSize = sizeof (EFI_IMAGE_DOS_HEADER);
- Status = ThisFile->Read (ThisFile, &BufferSize, DosHeader);
- if (EFI_ERROR (Status) ||
- BufferSize < sizeof (EFI_IMAGE_DOS_HEADER) ||
- FileSize <= DosHeader->e_lfanew ||
- DosHeader->e_magic != EFI_IMAGE_DOS_SIGNATURE) {
- Status = EFI_LOAD_ERROR;
- goto Done;
- }
-
- //
- // Move to PE signature
- //
- Status = ThisFile->SetPosition (ThisFile, DosHeader->e_lfanew);
- if (EFI_ERROR (Status)) {
- Status = EFI_LOAD_ERROR;
- goto Done;
- }
-
- //
- // Read and check PE signature
- //
- BufferSize = sizeof (EFI_IMAGE_OPTIONAL_HEADER_UNION);
- Status = ThisFile->Read (ThisFile, &BufferSize, Hdr.Pe32);
- if (EFI_ERROR (Status) ||
- BufferSize < sizeof (EFI_IMAGE_OPTIONAL_HEADER_UNION) ||
- Hdr.Pe32->Signature != EFI_IMAGE_NT_SIGNATURE) {
- Status = EFI_LOAD_ERROR;
- goto Done;
- }
-
- //
- // Check PE32 or PE32+ magic
- //
- if (Hdr.Pe32->OptionalHeader.Magic != EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC &&
- Hdr.Pe32->OptionalHeader.Magic != EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) {
- Status = EFI_LOAD_ERROR;
- goto Done;
- }
-
- Done:
- if (ThisFile != NULL) {
- ThisFile->Close (ThisFile);
- }
- if (Root != NULL) {
- Root->Close (Root);
- }
- return Status;
-}
-
-/**
- This routine adjust the memory information for different memory type and
- save them into the variables for next boot.
-**/
-VOID
-BdsSetMemoryTypeInformationVariable (
- VOID
- )
-{
- EFI_STATUS Status;
- EFI_MEMORY_TYPE_INFORMATION *PreviousMemoryTypeInformation;
- EFI_MEMORY_TYPE_INFORMATION *CurrentMemoryTypeInformation;
- UINTN VariableSize;
- UINTN Index;
- UINTN Index1;
- UINT32 Previous;
- UINT32 Current;
- UINT32 Next;
- EFI_HOB_GUID_TYPE *GuidHob;
- BOOLEAN MemoryTypeInformationModified;
- BOOLEAN MemoryTypeInformationVariableExists;
- EFI_BOOT_MODE BootMode;
-
- MemoryTypeInformationModified = FALSE;
- MemoryTypeInformationVariableExists = FALSE;
-
-
- BootMode = GetBootModeHob ();
- //
- // In BOOT_IN_RECOVERY_MODE, Variable region is not reliable.
- //
- if (BootMode == BOOT_IN_RECOVERY_MODE) {
- return;
- }
-
- //
- // Only check the the Memory Type Information variable in the boot mode
- // other than BOOT_WITH_DEFAULT_SETTINGS because the Memory Type
- // Information is not valid in this boot mode.
- //
- if (BootMode != BOOT_WITH_DEFAULT_SETTINGS) {
- VariableSize = 0;
- Status = gRT->GetVariable (
- EFI_MEMORY_TYPE_INFORMATION_VARIABLE_NAME,
- &gEfiMemoryTypeInformationGuid,
- NULL,
- &VariableSize,
- NULL
- );
- if (Status == EFI_BUFFER_TOO_SMALL) {
- MemoryTypeInformationVariableExists = TRUE;
- }
- }
-
- //
- // Retrieve the current memory usage statistics. If they are not found, then
- // no adjustments can be made to the Memory Type Information variable.
- //
- Status = EfiGetSystemConfigurationTable (
- &gEfiMemoryTypeInformationGuid,
- (VOID **) &CurrentMemoryTypeInformation
- );
- if (EFI_ERROR (Status) || CurrentMemoryTypeInformation == NULL) {
- return;
- }
-
- //
- // Get the Memory Type Information settings from Hob if they exist,
- // PEI is responsible for getting them from variable and build a Hob to save them.
- // If the previous Memory Type Information is not available, then set defaults
- //
- GuidHob = GetFirstGuidHob (&gEfiMemoryTypeInformationGuid);
- if (GuidHob == NULL) {
- //
- // If Platform has not built Memory Type Info into the Hob, just return.
- //
- return;
- }
- PreviousMemoryTypeInformation = GET_GUID_HOB_DATA (GuidHob);
- VariableSize = GET_GUID_HOB_DATA_SIZE (GuidHob);
-
- //
- // Use a heuristic to adjust the Memory Type Information for the next boot
- //
- DEBUG ((EFI_D_INFO, "Memory Previous Current Next \n"));
- DEBUG ((EFI_D_INFO, " Type Pages Pages Pages \n"));
- DEBUG ((EFI_D_INFO, "====== ======== ======== ========\n"));
-
- for (Index = 0; PreviousMemoryTypeInformation[Index].Type != EfiMaxMemoryType; Index++) {
-
- for (Index1 = 0; CurrentMemoryTypeInformation[Index1].Type != EfiMaxMemoryType; Index1++) {
- if (PreviousMemoryTypeInformation[Index].Type == CurrentMemoryTypeInformation[Index1].Type) {
- break;
- }
- }
- if (CurrentMemoryTypeInformation[Index1].Type == EfiMaxMemoryType) {
- continue;
- }
-
- //
- // Previous is the number of pages pre-allocated
- // Current is the number of pages actually needed
- //
- Previous = PreviousMemoryTypeInformation[Index].NumberOfPages;
- Current = CurrentMemoryTypeInformation[Index1].NumberOfPages;
- Next = Previous;
-
- //
- // Inconsistent Memory Reserved across bootings may lead to S4 fail
- // Write next varible to 125% * current when the pre-allocated memory is:
- // 1. More than 150% of needed memory and boot mode is BOOT_WITH_DEFAULT_SETTING
- // 2. Less than the needed memory
- //
- if ((Current + (Current >> 1)) < Previous) {
- if (BootMode == BOOT_WITH_DEFAULT_SETTINGS) {
- Next = Current + (Current >> 2);
- }
- } else if (Current > Previous) {
- Next = Current + (Current >> 2);
- }
- if (Next > 0 && Next < 4) {
- Next = 4;
- }
-
- if (Next != Previous) {
- PreviousMemoryTypeInformation[Index].NumberOfPages = Next;
- MemoryTypeInformationModified = TRUE;
- }
-
- DEBUG ((EFI_D_INFO, " %02x %08x %08x %08x\n", PreviousMemoryTypeInformation[Index].Type, Previous, Current, Next));
- }
-
- //
- // If any changes were made to the Memory Type Information settings, then set the new variable value;
- // Or create the variable in first boot.
- //
- if (MemoryTypeInformationModified || !MemoryTypeInformationVariableExists) {
- Status = SetVariableAndReportStatusCodeOnError (
- EFI_MEMORY_TYPE_INFORMATION_VARIABLE_NAME,
- &gEfiMemoryTypeInformationGuid,
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
- VariableSize,
- PreviousMemoryTypeInformation
- );
-
- if (!EFI_ERROR (Status)) {
- //
- // If the Memory Type Information settings have been modified, then reset the platform
- // so the new Memory Type Information setting will be used to guarantee that an S4
- // entry/resume cycle will not fail.
- //
- if (MemoryTypeInformationModified && PcdGetBool (PcdResetOnMemoryTypeInformationChange)) {
- DEBUG ((EFI_D_INFO, "Memory Type Information settings change. Warm Reset!!!\n"));
- gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);
- }
- } else {
- DEBUG ((EFI_D_ERROR, "Memory Type Information settings cannot be saved. OS S4 may fail!\n"));
- }
- }
-}
-
-/**
- This routine is kept for backward compatibility.
-**/
-VOID
-EFIAPI
-BdsLibSaveMemoryTypeInformation (
- VOID
- )
-{
-}
-
-
-/**
- Identify a user and, if authenticated, returns the current user profile handle.
-
- @param[out] User Point to user profile handle.
-
- @retval EFI_SUCCESS User is successfully identified, or user identification
- is not supported.
- @retval EFI_ACCESS_DENIED User is not successfully identified
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibUserIdentify (
- OUT EFI_USER_PROFILE_HANDLE *User
- )
-{
- EFI_STATUS Status;
- EFI_USER_MANAGER_PROTOCOL *Manager;
-
- Status = gBS->LocateProtocol (
- &gEfiUserManagerProtocolGuid,
- NULL,
- (VOID **) &Manager
- );
- if (EFI_ERROR (Status)) {
- return EFI_SUCCESS;
- }
-
- return Manager->Identify (Manager, User);
-}
-
-/**
- Set the variable and report the error through status code upon failure.
-
- @param VariableName A Null-terminated string that is the name of the vendor's variable.
- Each VariableName is unique for each VendorGuid. VariableName must
- contain 1 or more characters. If VariableName is an empty string,
- then EFI_INVALID_PARAMETER is returned.
- @param VendorGuid A unique identifier for the vendor.
- @param Attributes Attributes bitmask to set for the variable.
- @param DataSize The size in bytes of the Data buffer. Unless the EFI_VARIABLE_APPEND_WRITE,
- EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, or
- EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute is set, a size of zero
- causes the variable to be deleted. When the EFI_VARIABLE_APPEND_WRITE attribute is
- set, then a SetVariable() call with a DataSize of zero will not cause any change to
- the variable value (the timestamp associated with the variable may be updated however
- even if no new data value is provided,see the description of the
- EFI_VARIABLE_AUTHENTICATION_2 descriptor below. In this case the DataSize will not
- be zero since the EFI_VARIABLE_AUTHENTICATION_2 descriptor will be populated).
- @param Data The contents for the variable.
-
- @retval EFI_SUCCESS The firmware has successfully stored the variable and its data as
- defined by the Attributes.
- @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits, name, and GUID was supplied, or the
- DataSize exceeds the maximum allowed.
- @retval EFI_INVALID_PARAMETER VariableName is an empty string.
- @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data.
- @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.
- @retval EFI_WRITE_PROTECTED The variable in question is read-only.
- @retval EFI_WRITE_PROTECTED The variable in question cannot be deleted.
- @retval EFI_SECURITY_VIOLATION The variable could not be written due to EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS
- or EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACESS being set, but the AuthInfo
- does NOT pass the validation check carried out by the firmware.
-
- @retval EFI_NOT_FOUND The variable trying to be updated or deleted was not found.
-**/
-EFI_STATUS
-SetVariableAndReportStatusCodeOnError (
- IN CHAR16 *VariableName,
- IN EFI_GUID *VendorGuid,
- IN UINT32 Attributes,
- IN UINTN DataSize,
- IN VOID *Data
- )
-{
- EFI_STATUS Status;
- EDKII_SET_VARIABLE_STATUS *SetVariableStatus;
- UINTN NameSize;
-
- Status = gRT->SetVariable (
- VariableName,
- VendorGuid,
- Attributes,
- DataSize,
- Data
- );
- if (EFI_ERROR (Status)) {
- NameSize = StrSize (VariableName);
- SetVariableStatus = AllocatePool (sizeof (EDKII_SET_VARIABLE_STATUS) + NameSize + DataSize);
- if (SetVariableStatus != NULL) {
- CopyGuid (&SetVariableStatus->Guid, VendorGuid);
- SetVariableStatus->NameSize = NameSize;
- SetVariableStatus->DataSize = DataSize;
- SetVariableStatus->SetStatus = Status;
- SetVariableStatus->Attributes = Attributes;
- CopyMem (SetVariableStatus + 1, VariableName, NameSize);
- if ((Data != NULL) && (DataSize != 0)) {
- CopyMem (((UINT8 *) (SetVariableStatus + 1)) + NameSize, Data, DataSize);
- }
-
- REPORT_STATUS_CODE_EX (
- EFI_ERROR_CODE,
- PcdGet32 (PcdErrorCodeSetVariable),
- 0,
- NULL,
- &gEdkiiStatusCodeDataTypeVariableGuid,
- SetVariableStatus,
- sizeof (EDKII_SET_VARIABLE_STATUS) + NameSize + DataSize
- );
-
- FreePool (SetVariableStatus);
- }
- }
-
- return Status;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/DevicePath.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/DevicePath.c
deleted file mode 100644
index a0b9da880d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/DevicePath.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/** @file
- BDS internal function define the default device path string, it can be
- replaced by platform device path.
-
-Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "InternalBdsLib.h"
-
-/**
- This function converts an input device structure to a Unicode string.
-
- @param DevPath A pointer to the device path structure.
-
- @return A new allocated Unicode string that represents the device path.
-
-**/
-CHAR16 *
-EFIAPI
-DevicePathToStr (
- IN EFI_DEVICE_PATH_PROTOCOL *DevPath
- )
-{
- return ConvertDevicePathToText (DevPath, TRUE, TRUE);
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
deleted file mode 100644
index 795a9de4b8..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
+++ /dev/null
@@ -1,143 +0,0 @@
-## @file
-# General BDS library.
-#
-# General BDS defines and produce general interfaces for platform BDS driver including:
-# 1) BDS boot policy interface;
-# 2) BDS boot device connect interface;
-# 3) BDS Misc interfaces for mainting boot variable, ouput string, etc.
-#
-# Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = GenericBdsLib
- MODULE_UNI_FILE = GenericBdsLib.uni
- FILE_GUID = e405ec31-ccaa-4dd4-83e8-0aec01703f7e
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = GenericBdsLib|DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION
- CONSTRUCTOR = GenericBdsLibConstructor
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- DevicePath.c
- BdsConnect.c
- BdsMisc.c
- BdsConsole.c
- BdsBoot.c
- InternalBdsLib.h
- String.h
- String.c
- GenericBdsStrings.uni
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
- ShellPkg/ShellPkg.dec
- NetworkPkg/NetworkPkg.dec
-
-[LibraryClasses]
- DevicePathLib
- PeCoffGetEntryPointLib
- BaseLib
- HobLib
- UefiRuntimeServicesTableLib
- DxeServicesTableLib
- MemoryAllocationLib
- UefiLib
- UefiBootServicesTableLib
- BaseMemoryLib
- DebugLib
- PrintLib
- PcdLib
- PerformanceLib
- TimerLib
- DxeServicesLib
- HiiLib
- ReportStatusCodeLib
- NetLib
- BmpSupportLib
-
-[Guids]
- ## SOMETIMES_CONSUMES ## HOB # The hob holding memory type information
- ## SOMETIMES_CONSUMES ## SystemTable # The identifier of memory type information type in system table
- ## SOMETIMES_CONSUMES ## Variable:L"MemoryTypeInformation"
- ## SOMETIMES_PRODUCES ## Variable:L"MemoryTypeInformation"
- gEfiMemoryTypeInformationGuid
- ## SOMETIMES_CONSUMES ## Variable:L"BootXXXX" # Boot option variable
- ## SOMETIMES_PRODUCES ## Variable:L"BootXXXX" # Boot option variable
- ## SOMETIMES_CONSUMES ## Variable:L"DriverXXXX" # Driver load option.
- ## SOMETIMES_PRODUCES ## Variable:L"DriverXXXX" # Driver load option.
- ## SOMETIMES_CONSUMES ## Variable:L"BootNext" # Next Boot Option
- ## SOMETIMES_PRODUCES ## Variable:L"BootNext" # Next Boot Option
- ## SOMETIMES_CONSUMES ## Variable:L"BootOrder" # The boot option array
- ## SOMETIMES_PRODUCES ## Variable:L"BootOrder" # The boot option array
- ## SOMETIMES_CONSUMES ## Variable:L"DriverOrder" # The driver order list
- ## SOMETIMES_CONSUMES ## Variable:L"ConIn" # The device path of console in device
- ## SOMETIMES_PRODUCES ## Variable:L"ConIn" # The device path of console in device
- ## SOMETIMES_CONSUMES ## Variable:L"ConOut" # The device path of console out device
- ## SOMETIMES_PRODUCES ## Variable:L"ConOut" # The device path of console out device
- ## SOMETIMES_CONSUMES ## Variable:L"ErrOut" # The device path of error out device
- ## SOMETIMES_PRODUCES ## Variable:L"ErrOut" # The device path of error out device
- ## SOMETIMES_PRODUCES ## Variable:L"BootCurrent" # The boot option of current boot
- ## SOMETIMES_PRODUCES ## Variable:L"BootNext" # The number of next boot option
- gEfiGlobalVariableGuid
- gEfiFileInfoGuid ## SOMETIMES_CONSUMES ## GUID
- gLastEnumLangGuid ## SOMETIMES_PRODUCES ## Variable:L"LastEnumLang" # Platform language at last time enumeration.
- gHdBootDevicePathVariablGuid ## SOMETIMES_PRODUCES ## Variable:L"HDDP" # The device path of Boot file on Hard device.
- gBdsLibStringPackageGuid ## CONSUMES ## HII # HII String PackageList Guid
- ## SOMETIMES_PRODUCES ## Variable:L"LegacyDevOrder"
- ## SOMETIMES_CONSUMES ## Variable:L"LegacyDevOrder"
- gEfiLegacyDevOrderVariableGuid
- gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID
- gUefiShellFileGuid
-
-[Protocols]
- gEfiSimpleFileSystemProtocolGuid ## SOMETIMES_CONSUMES
- gEfiLoadFileProtocolGuid ## SOMETIMES_CONSUMES
- gEfiSimpleTextOutProtocolGuid ## CONSUMES
- gEfiPciIoProtocolGuid ## SOMETIMES_CONSUMES
- gEfiLoadedImageProtocolGuid ## SOMETIMES_CONSUMES
- gEfiSimpleNetworkProtocolGuid ## SOMETIMES_CONSUMES
- gEfiDebugPortProtocolGuid ## SOMETIMES_CONSUMES
- gEfiSimpleTextInProtocolGuid ## CONSUMES
- gEfiBlockIoProtocolGuid ## SOMETIMES_CONSUMES
- gEfiFirmwareVolume2ProtocolGuid ## SOMETIMES_CONSUMES
- gEfiLegacyBiosProtocolGuid ## SOMETIMES_CONSUMES
- gEfiCpuArchProtocolGuid ## CONSUMES
- gEfiDevicePathProtocolGuid ## CONSUMES
- gEfiAcpiS3SaveProtocolGuid ## SOMETIMES_CONSUMES
- gEfiGraphicsOutputProtocolGuid ## SOMETIMES_CONSUMES
- gEfiUgaDrawProtocolGuid |gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport ## SOMETIMES_CONSUMES
- gEfiOEMBadgingProtocolGuid ## SOMETIMES_CONSUMES
- gEfiHiiFontProtocolGuid ## CONSUMES
- gEfiUserManagerProtocolGuid ## SOMETIMES_CONSUMES
- gEfiUsbIoProtocolGuid ## SOMETIMES_CONSUMES
- gEfiBootLogoProtocolGuid ## SOMETIMES_CONSUMES
-
-[FeaturePcd]
- gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport ## CONSUMES
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootlogoOnlyEnable ## CONSUMES
-
-[Pcd]
- gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange ## SOMETIMES_CONSUMES
- gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeOsLoaderLoad ## SOMETIMES_CONSUMES
- gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeOsLoaderStart ## SOMETIMES_CONSUMES
- gEfiMdeModulePkgTokenSpaceGuid.PcdErrorCodeSetVariable ## CONSUMES
- gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed ## CONSUMES
-
-#
-# [BootMode]
-# RECOVERY_FULL ## SOMETIMES_CONSUMES # Memory Type Information variable
-#
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.uni b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.uni
deleted file mode 100644
index c853d3409e..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.uni
+++ /dev/null
@@ -1,19 +0,0 @@
-// /** @file
-// General BDS library.
-//
-// General BDS defines and produce general interfaces for platform BDS driver including:
-// 1) BDS boot policy interface;
-// 2) BDS boot device connect interface;
-// 3) BDS Misc interfaces for mainting boot variable, ouput string, etc.
-//
-// Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT #language en-US "General BDS library"
-
-#string STR_MODULE_DESCRIPTION #language en-US "General BDS defines and produces general interfaces for a platform BDS driver including: 1) BDS boot policy interface; 2) BDS boot device connect interface; 3) BDS Misc interfaces for maintaining boot variable, output string, etc."
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsStrings.uni b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsStrings.uni
deleted file mode 100644
index 59a75e548b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsStrings.uni
+++ /dev/null
@@ -1,30 +0,0 @@
-///** @file
-//
-// String definitions for Boot Option description.
-//
-// Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-//**/
-
-/=#
-
-#langdef en-US "English"
-#langdef fr-FR "Français"
-
-#string STR_DESCRIPTION_FLOPPY #language en-US "EFI Floppy"
- #language fr-FR "fr-FR: EFI Floppy"
-#string STR_DESCRIPTION_CD_DVD #language en-US "EFI DVD/CDROM"
- #language fr-FR "fr-FR: EFI DVD/CDROM"
-#string STR_DESCRIPTION_HARDDRIVE #language en-US "EFI Hard Drive"
- #language fr-FR "fr-FR: EFI Hard Drive"
-#string STR_DESCRIPTION_USB #language en-US "EFI USB Device"
- #language fr-FR "fr-FR: EFI USB Device"
-#string STR_DESCRIPTION_SCSI #language en-US "EFI SCSI Device"
- #language fr-FR "fr-FR: EFI SCSI Device"
-#string STR_DESCRIPTION_MISC #language en-US "EFI Misc Device"
- #language fr-FR "fr-FR: EFI Misc Device"
-#string STR_DESCRIPTION_NETWORK #language en-US "EFI Network "
- #language fr-FR "fr-FR: EFI Network "
-#string STR_DESCRIPTION_NON_BLOCK #language en-US "EFI Non-Block Boot Device"
- #language fr-FR "fr-FR: EFI Non-Block Boot Device"
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h
deleted file mode 100644
index 025f06572b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/** @file
- BDS library definition, include the file and data structure
-
-Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef _INTERNAL_BDS_LIB_H_
-#define _INTERNAL_BDS_LIB_H_
-
-#include <FrameworkDxe.h>
-
-#include <IndustryStandard/Pci.h>
-#include <IndustryStandard/PeImage.h>
-
-#include <Protocol/BlockIo.h>
-#include <Protocol/LoadedImage.h>
-#include <Protocol/Cpu.h>
-#include <Protocol/SimpleFileSystem.h>
-#include <Protocol/LoadFile.h>
-#include <Protocol/DebugPort.h>
-#include <Protocol/DevicePath.h>
-#include <Protocol/SimpleTextIn.h>
-#include <Protocol/LegacyBios.h>
-#include <Protocol/SimpleTextOut.h>
-#include <Protocol/SimpleNetwork.h>
-#include <Protocol/FirmwareVolume2.h>
-#include <Protocol/PciIo.h>
-#include <Protocol/AcpiS3Save.h>
-#include <Protocol/OEMBadging.h>
-#include <Protocol/GraphicsOutput.h>
-#include <Protocol/UgaDraw.h>
-#include <Protocol/HiiFont.h>
-#include <Protocol/HiiImage.h>
-#include <Protocol/UsbIo.h>
-#include <Protocol/BootLogo.h>
-
-#include <Guid/MemoryTypeInformation.h>
-#include <Guid/FileInfo.h>
-#include <Guid/GlobalVariable.h>
-#include <Guid/PcAnsi.h>
-#include <Guid/BdsLibHii.h>
-#include <Guid/HdBootVariable.h>
-#include <Guid/LastEnumLang.h>
-#include <Guid/LegacyDevOrder.h>
-#include <Guid/StatusCodeDataTypeVariable.h>
-
-#include <Library/PrintLib.h>
-#include <Library/DebugLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/DxeServicesTableLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/HobLib.h>
-#include <Library/BaseLib.h>
-#include <Library/DevicePathLib.h>
-#include <Library/PerformanceLib.h>
-#include <Library/PcdLib.h>
-#include <Library/PeCoffGetEntryPointLib.h>
-#include <Library/GenericBdsLib.h>
-#include <Library/TimerLib.h>
-#include <Library/PcdLib.h>
-#include <Library/DxeServicesLib.h>
-#include <Library/ReportStatusCodeLib.h>
-#include <Library/BmpSupportLib.h>
-
-#if !defined (EFI_REMOVABLE_MEDIA_FILE_NAME)
- #if defined (MDE_CPU_EBC)
- //
- // Uefi specification only defines the default boot file name for IA32, X64
- // and IPF processor, so need define boot file name for EBC architecture here.
- //
- #define EFI_REMOVABLE_MEDIA_FILE_NAME L"\\EFI\\BOOT\\BOOTEBC.EFI"
- #else
- #error "Can not determine the default boot file name for unknown processor type!"
- #endif
-#endif
-
-/**
- Get the headers (dos, image, optional header) from an image
-
- @param Device SimpleFileSystem device handle
- @param FileName File name for the image
- @param DosHeader Pointer to dos header
- @param Hdr The buffer in which to return the PE32, PE32+, or TE header.
-
- @retval EFI_SUCCESS Successfully get the machine type.
- @retval EFI_NOT_FOUND The file is not found.
- @retval EFI_LOAD_ERROR File is not a valid image file.
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibGetImageHeader (
- IN EFI_HANDLE Device,
- IN CHAR16 *FileName,
- OUT EFI_IMAGE_DOS_HEADER *DosHeader,
- OUT EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr
- );
-
-/**
- This routine adjust the memory information for different memory type and
- save them into the variables for next boot.
-**/
-VOID
-BdsSetMemoryTypeInformationVariable (
- VOID
- );
-
-/**
- Validate the EFI Boot#### or Driver#### variable (VendorGuid/Name)
-
- @param Variable Boot#### variable data.
- @param VariableSize Returns the size of the EFI variable that was read
-
- @retval TRUE The variable data is correct.
- @retval FALSE The variable data is corrupted.
-
-**/
-BOOLEAN
-ValidateOption (
- UINT8 *Variable,
- UINTN VariableSize
- );
-
-/**
- Set the variable and report the error through status code upon failure.
-
- @param VariableName A Null-terminated string that is the name of the vendor's variable.
- Each VariableName is unique for each VendorGuid. VariableName must
- contain 1 or more characters. If VariableName is an empty string,
- then EFI_INVALID_PARAMETER is returned.
- @param VendorGuid A unique identifier for the vendor.
- @param Attributes Attributes bitmask to set for the variable.
- @param DataSize The size in bytes of the Data buffer. Unless the EFI_VARIABLE_APPEND_WRITE,
- EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, or
- EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute is set, a size of zero
- causes the variable to be deleted. When the EFI_VARIABLE_APPEND_WRITE attribute is
- set, then a SetVariable() call with a DataSize of zero will not cause any change to
- the variable value (the timestamp associated with the variable may be updated however
- even if no new data value is provided,see the description of the
- EFI_VARIABLE_AUTHENTICATION_2 descriptor below. In this case the DataSize will not
- be zero since the EFI_VARIABLE_AUTHENTICATION_2 descriptor will be populated).
- @param Data The contents for the variable.
-
- @retval EFI_SUCCESS The firmware has successfully stored the variable and its data as
- defined by the Attributes.
- @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits, name, and GUID was supplied, or the
- DataSize exceeds the maximum allowed.
- @retval EFI_INVALID_PARAMETER VariableName is an empty string.
- @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data.
- @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.
- @retval EFI_WRITE_PROTECTED The variable in question is read-only.
- @retval EFI_WRITE_PROTECTED The variable in question cannot be deleted.
- @retval EFI_SECURITY_VIOLATION The variable could not be written due to EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS
- or EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACESS being set, but the AuthInfo
- does NOT pass the validation check carried out by the firmware.
-
- @retval EFI_NOT_FOUND The variable trying to be updated or deleted was not found.
-**/
-EFI_STATUS
-SetVariableAndReportStatusCodeOnError (
- IN CHAR16 *VariableName,
- IN EFI_GUID *VendorGuid,
- IN UINT32 Attributes,
- IN UINTN DataSize,
- IN VOID *Data
- );
-
-#endif // _BDS_LIB_H_
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.c
deleted file mode 100644
index f36860d5a1..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/** @file
- String support
-
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-#include "String.h"
-
-/**
- Get string by string id from HII Interface
-
-
- @param Id String ID.
-
- @retval CHAR16 * String from ID.
- @retval NULL If error occurs.
-
-**/
-CHAR16 *
-BdsLibGetStringById (
- IN EFI_STRING_ID Id
- )
-{
- return HiiGetString (gBdsLibStringPackHandle, Id, NULL);
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.h b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.h
deleted file mode 100644
index 53cabe64a9..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/** @file
- String support
-
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef _STRING_H_
-#define _STRING_H_
-
-#include <Library/HiiLib.h>
-#include <Library/DebugLib.h>
-#include <Library/DevicePathLib.h>
-#include <Library/UefiLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-
-extern EFI_HII_HANDLE gBdsLibStringPackHandle;
-
-//
-// This is the VFR compiler generated header file which defines the
-// string identifiers.
-//
-
-extern UINT8 GenericBdsLibStrings[];
-
-/**
- Get string by string id from HII Interface
-
-
- @param Id String ID.
-
- @retval CHAR16 * String from ID.
- @retval NULL If error occurs.
-
-**/
-CHAR16 *
-BdsLibGetStringById (
- IN EFI_STRING_ID Id
- );
-
-#endif // _STRING_H_
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index 15a4251cf8..b0fbbdb9cb 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -9,12 +9,10 @@
#**/
[Defines]
-DEFINE FLASH_BASE = 0xFF800000 #The base address of the 4Mb FLASH Device.
-DEFINE FLASH_SIZE = 0x00800000 #The flash size in bytes of the 4Mb FLASH Device.
-DEFINE FLASH_BLOCK_SIZE = 0x1000 #The block size in bytes of the 4Mb FLASH Device.
-DEFINE FLASH_NUM_BLOCKS = 0x800 #The number of blocks in 4Mb FLASH Device.
-DEFINE FLASH_AREA_BASE_ADDRESS = 0xFF800000
-DEFINE FLASH_AREA_SIZE = 0x00800000
+DEFINE FLASH_BASE = 0xFF800000 #The base address of the 8Mb FLASH Device.
+DEFINE FLASH_SIZE = 0x00800000 #The flash size in bytes of the 8Mb FLASH Device.
+DEFINE FLASH_BLOCK_SIZE = 0x1000 #The block size in bytes of the 8Mb FLASH Device.
+DEFINE FLASH_NUM_BLOCKS = 0x800 #The number of blocks in 8Mb FLASH Device.
DEFINE FLASH_REGION_VLVMICROCODE_OFFSET = 0x00400000
DEFINE FLASH_REGION_VLVMICROCODE_SIZE = 0x00040000
@@ -62,8 +60,11 @@ [FD.Vlv]
#
#Flash location override based on actual flash map
#
-SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaBaseAddress = $(FLASH_AREA_BASE_ADDRESS)
-SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaSize = $(FLASH_AREA_SIZE)
+SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaBaseAddress = $(FLASH_BASE)
+SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaSize = $(FLASH_SIZE)
+
+SET gPlatformModuleTokenSpaceGuid.PcdBiosRomBase = $(FLASH_BASE)
+SET gPlatformModuleTokenSpaceGuid.PcdBiosRomSize = $(FLASH_SIZE)
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE) + 0x60
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE) - 0x60
@@ -401,12 +402,9 @@ [FV.FVMAIN]
INF UefiCpuPkg/CpuDxe/CpuDxe.inf
INF UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
INF MdeModulePkg/Universal/Metronome/Metronome.inf
-INF IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
-!if $(ARCH) == IA32
-INF USE=IA32 MdeModulePkg/Logo/Logo.inf
-!else
-INF USE=X64 MdeModulePkg/Logo/Logo.inf
-!endif
+INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
+INF MdeModulePkg/Logo/LogoDxe.inf
+INF MdeModulePkg/Application/UiApp/UiApp.inf
INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index b8ac61d710..107c160b76 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -9,34 +9,32 @@
#**/
[Defines]
-DEFINE FLASH_BASE = 0xFFC00000 #The base address of the 4Mb FLASH Device.
-DEFINE FLASH_SIZE = 0x00400000 #The flash size in bytes of the 4Mb FLASH Device.
-DEFINE FLASH_BLOCK_SIZE = 0x1000 #The block size in bytes of the 4Mb FLASH Device.
-DEFINE FLASH_NUM_BLOCKS = 0x400 #The number of blocks in 4Mb FLASH Device.
-DEFINE FLASH_AREA_BASE_ADDRESS = 0xFF800000
-DEFINE FLASH_AREA_SIZE = 0x00800000
+DEFINE FLASH_BASE = 0xFF800000 #The base address of the 8Mb FLASH Device.
+DEFINE FLASH_SIZE = 0x00800000 #The flash size in bytes of the 8Mb FLASH Device.
+DEFINE FLASH_BLOCK_SIZE = 0x1000 #The block size in bytes of the 8Mb FLASH Device.
+DEFINE FLASH_NUM_BLOCKS = 0x800 #The number of blocks in 8Mb FLASH Device.
-DEFINE FLASH_REGION_VLVMICROCODE_OFFSET = 0x00000000
+DEFINE FLASH_REGION_VLVMICROCODE_OFFSET = 0x00400000
DEFINE FLASH_REGION_VLVMICROCODE_SIZE = 0x00040000
DEFINE FLASH_REGION_VLVMICROCODE_BASE = 0xFFC00000
-DEFINE FLASH_REGION_VPD_OFFSET = 0x00040000
+DEFINE FLASH_REGION_VPD_OFFSET = 0x00440000
DEFINE FLASH_REGION_VPD_SIZE = 0x0003E000
-DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_OFFSET = 0x0007E000
+DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_OFFSET = 0x0047E000
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_SIZE = 0x00002000
-DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET = 0x00080000
+DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET = 0x00480000
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_SIZE = 0x00040000
-DEFINE FLASH_REGION_FVMAIN_OFFSET = 0x00110000
-DEFINE FLASH_REGION_FVMAIN_SIZE = 0x00215000
+DEFINE FLASH_REGION_FVMAIN_OFFSET = 0x00510000
+DEFINE FLASH_REGION_FVMAIN_SIZE = 0x00210000
-DEFINE FLASH_REGION_FV_RECOVERY2_OFFSET = 0x00325000
-DEFINE FLASH_REGION_FV_RECOVERY2_SIZE = 0x0006B000
+DEFINE FLASH_REGION_FV_RECOVERY2_OFFSET = 0x00720000
+DEFINE FLASH_REGION_FV_RECOVERY2_SIZE = 0x00070000
-DEFINE FLASH_REGION_FV_RECOVERY_OFFSET = 0x00390000
+DEFINE FLASH_REGION_FV_RECOVERY_OFFSET = 0x00790000
DEFINE FLASH_REGION_FV_RECOVERY_SIZE = 0x00070000
################################################################################
@@ -62,8 +60,11 @@ [FD.Vlv]
#
#Flash location override based on actual flash map
#
-SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaBaseAddress = $(FLASH_AREA_BASE_ADDRESS)
-SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaSize = $(FLASH_AREA_SIZE)
+SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaBaseAddress = $(FLASH_BASE)
+SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaSize = $(FLASH_SIZE)
+
+SET gPlatformModuleTokenSpaceGuid.PcdBiosRomBase = $(FLASH_BASE)
+SET gPlatformModuleTokenSpaceGuid.PcdBiosRomSize = $(FLASH_SIZE)
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE) + 0x60
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE) - 0x60
@@ -84,9 +85,12 @@ [FD.Vlv]
# Fv Size can be adjusted; FVMAIN_COMPACT can be reduced to 0x120000, and FV_RECOVERY can be enlarged to 0x80000
#
################################################################################
-# Since the Fce tool don't have gcc version, we can't handle default variable in Linux,
-# so we hardcode the default value of variable here.
-# Please note that we MUST update the binary once the default value is changed.
+
+ #
+ # IFWI Header
+ #
+0x0000|0x1000
+FILE=Vlv2TbltDevicePkg/Stitch/IFWIHeader/IFWI_HEADER.bin
#
# CPU Microcodes
@@ -347,12 +351,9 @@ [FV.FVMAIN]
INF UefiCpuPkg/CpuDxe/CpuDxe.inf
INF UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
INF MdeModulePkg/Universal/Metronome/Metronome.inf
-INF IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
-!if $(ARCH) == IA32
-INF USE=IA32 MdeModulePkg/Logo/Logo.inf
-!else
-INF USE=X64 MdeModulePkg/Logo/Logo.inf
-!endif
+INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
+INF MdeModulePkg/Logo/LogoDxe.inf
+INF MdeModulePkg/Application/UiApp/UiApp.inf
INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index 3910281c49..e4c6750c70 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -118,7 +118,6 @@ [LibraryClasses.common]
DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
UefiCpuLib|UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib.inf
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
- GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
@@ -523,6 +522,8 @@ [PcdsFixedAtBuild.common]
#
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmStackSize|0x4000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
+
#
# Clear unused single certificate PCD
#
@@ -933,19 +934,18 @@ [Components.X64]
}
MdeModulePkg/Universal/Metronome/Metronome.inf
- IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
+ MdeModulePkg/Universal/BdsDxe/BdsDxe.inf {
<LibraryClasses>
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
+ PlatformBootManagerLib|Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
}
-
- $(PLATFORM_PACKAGE)/UiApp/UiApp.inf
+ MdeModulePkg/Logo/LogoDxe.inf
+ MdeModulePkg/Application/UiApp/UiApp.inf {
+ <LibraryClasses>
+ NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
+ }
MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index 2ae594e5be..f5795e5ab0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -116,7 +116,6 @@ [LibraryClasses.common]
DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
UefiCpuLib|UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib.inf
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
- GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
@@ -520,6 +519,8 @@ [PcdsFixedAtBuild.common]
#
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmStackSize|0x4000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
+
#
# Clear unused single certificate PCD
#
@@ -917,19 +918,18 @@ [Components.IA32]
}
MdeModulePkg/Universal/Metronome/Metronome.inf
- IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
+ MdeModulePkg/Universal/BdsDxe/BdsDxe.inf {
<LibraryClasses>
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
+ PlatformBootManagerLib|Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
}
-
- $(PLATFORM_PACKAGE)/UiApp/UiApp.inf
+ MdeModulePkg/Logo/LogoDxe.inf
+ MdeModulePkg/Application/UiApp/UiApp.inf {
+ <LibraryClasses>
+ NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
+ }
MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index 5cdc9bebc8..a930a85a35 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -118,7 +118,6 @@ [LibraryClasses.common]
DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
UefiCpuLib|UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib.inf
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
- GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
@@ -522,6 +521,8 @@ [PcdsFixedAtBuild.common]
#
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmStackSize|0x4000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
+
#
# Clear unused single certificate PCD
#
@@ -932,19 +933,18 @@ [Components.X64]
}
MdeModulePkg/Universal/Metronome/Metronome.inf
- IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
+ MdeModulePkg/Universal/BdsDxe/BdsDxe.inf {
<LibraryClasses>
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
+ PlatformBootManagerLib|Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
}
-
- $(PLATFORM_PACKAGE)/UiApp/UiApp.inf
+ MdeModulePkg/Logo/LogoDxe.inf
+ MdeModulePkg/Application/UiApp/UiApp.inf {
+ <LibraryClasses>
+ NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
+ }
MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c b/Platform/Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c
deleted file mode 100644
index 3e58a6d22a..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-
-**/
-
-/**
- The user Entry Point for Application. The user code starts with this function
- as the real entry point for the image goes into a library that calls this
- function.
-
- @param[in] ImageHandle The firmware allocated handle for the EFI image.
- @param[in] SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The entry point is executed successfully.
- @retval other Some error occurs when executing this entry point.
-
-**/
-EFI_STATUS
-EFIAPI
-InitializeUserInterface (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf b/Platform/Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf
deleted file mode 100644
index f7a0a83b80..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-#
-# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = UiApp
- FILE_GUID = 462CAA21-7614-4503-836E-8AB6F4662331
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- ENTRY_POINT = InitializeUserInterface
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- FrontPage.c
-
-[Packages]
- MdePkg/MdePkg.dec
-
-[LibraryClasses]
- UefiApplicationEntryPoint
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-platforms Patch 10/14] Vlv2TbltDevicePkg: Switch to MdeModulePkg BdsDxe
2019-07-01 2:55 ` [edk2-platforms Patch 10/14] Vlv2TbltDevicePkg: Switch to MdeModulePkg BdsDxe Michael D Kinney
@ 2019-07-01 4:08 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:08 UTC (permalink / raw)
To: Kinney, Michael D, devel@edk2.groups.io; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: Kinney, Michael D
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-platforms Patch 10/14] Vlv2TbltDevicePkg: Switch to MdeModulePkg BdsDxe
Switch from Intel Framework BDS module and libraries to the
MdeModulePkg BdsDxe module and libraries.
Update FLASH map for full 8MB FLASH size
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Library/FmpDeviceLib/FmpDeviceLib.c | 12 +-
.../DxePlatformBootManagerLib/BdsPlatform.c | 1409 ++++++
.../DxePlatformBootManagerLib/BdsPlatform.h | 253 +
.../DxePlatformBootManagerLib.inf | 95 +
.../DxePlatformBootManagerLib/MemoryTest.c | 83 +
.../PlatformBootOption.c | 559 ++
.../Library/PlatformBdsLib/BdsPlatform.c | 3092 ------------
.../Library/PlatformBdsLib/BdsPlatform.h | 516 --
.../Library/PlatformBdsLib/PlatformBdsLib.inf | 128 -
.../PlatformBdsLib/PlatformBdsStrings.uni | 30 -
.../Library/PlatformBdsLib/PlatformData.c | 306 --
.../Library/GenericBdsLib/BdsBoot.c | 4490 -----------------
.../Library/GenericBdsLib/BdsConnect.c | 429 --
.../Library/GenericBdsLib/BdsConsole.c | 1061 ----
.../Library/GenericBdsLib/BdsMisc.c | 1575 ------
.../Library/GenericBdsLib/DevicePath.c | 27 -
.../Library/GenericBdsLib/GenericBdsLib.inf | 143 -
.../Library/GenericBdsLib/GenericBdsLib.uni | 19 -
.../GenericBdsLib/GenericBdsStrings.uni | 30 -
.../Library/GenericBdsLib/InternalBdsLib.h | 173 -
.../Library/GenericBdsLib/String.c | 26 -
.../Library/GenericBdsLib/String.h | 42 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 26 +-
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 53 +-
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 22 +-
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 22 +-
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 22 +-
.../Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c | 33 -
.../Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf | 32 -
29 files changed, 2477 insertions(+), 12231 deletions(-)
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.h
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/MemoryTest.c
create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/PlatformBootOption.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsStrings.uni
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformData.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConnect.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConsole.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/DevicePath.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.uni
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsStrings.uni
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.h
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c
delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib/FmpDeviceLib.c b/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib/FmpDeviceLib.c
index a863d69381..57185d8d09 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib/FmpDeviceLib.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Feature/Capsule/Library/FmpDeviceLib/FmpDeviceLib.c
@@ -32,11 +32,11 @@ typedef struct {
} UPDATE_CONFIG_DATA;
UPDATE_CONFIG_DATA mUpdateConfigData[] = {
- { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00000000, 0x00040000, 0x00000000 },
- { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x000C0000, 0x00050000, 0x000C0000 },
- { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00110000, 0x00210000, 0x00110000 },
- { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00320000, 0x00070000, 0x00320000 },
- { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00390000, 0x00070000, 0x00390000 }
+ { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00400000, 0x00040000, 0x00400000 },
+ { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x004C0000, 0x00050000, 0x004C0000 },
+ { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00510000, 0x00210000, 0x00510000 },
+ { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00720000, 0x00070000, 0x00720000 },
+ { PlatformFirmwareTypeSystemFirmware, FlashAddressTypeRelativeAddress, 0x00790000, 0x00070000, 0x00790000 }
};
/**
@@ -95,7 +95,7 @@ FmpDeviceGetSize (
if (Size == NULL) {
return EFI_INVALID_PARAMETER;
}
- *Size = PcdGet32 (PcdBiosRomBase);
+ *Size = PcdGet32 (PcdBiosRomSize);
return EFI_SUCCESS;
}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
new file mode 100644
index 0000000000..4dd3827a6e
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
@@ -0,0 +1,1409 @@
+/** @file
+ This file include all platform action which can be customized by IBV/OEM.
+
+Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "BdsPlatform.h"
+#include <Guid/EventGroup.h>
+#include <Protocol/DxeSmmReadyToLock.h>
+#include <Protocol/FirmwareVolume2.h>
+#include <Protocol/PciRootBridgeIo.h>
+
+#include <Protocol/BlockIo.h>
+#include <Protocol/PciIo.h>
+#include <Library/IoLib.h>
+#include <Library/PciLib.h>
+#include <Guid/EventGroup.h>
+
+#include <Library/Tcg2PhysicalPresenceLib.h>
+
+#include <Library/HobLib.h>
+#include <Protocol/UsbIo.h>
+#include <Library/BootLogoLib.h>
+
+#include <Library/UefiBootManagerLib.h>
+
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_BOOT_MODE gBootMode;
+
+BOOLEAN gPPRequireUIConfirm;
+
+extern UINTN mBootMenuOptionNumber;
+
+GLOBAL_REMOVE_IF_UNREFERENCED USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath = {
+ {
+ {
+ MESSAGING_DEVICE_PATH,
+ MSG_USB_CLASS_DP,
+ {
+ (UINT8) (sizeof (USB_CLASS_DEVICE_PATH)),
+ (UINT8) ((sizeof (USB_CLASS_DEVICE_PATH)) >> 8)
+ }
+ },
+ 0xffff, // VendorId
+ 0xffff, // ProductId
+ CLASS_HID, // DeviceClass
+ SUBCLASS_BOOT, // DeviceSubClass
+ PROTOCOL_KEYBOARD // DeviceProtocol
+ },
+ gEndEntire
+};
+
+//
+// Platform specific ISA serial device path
+//
+GLOBAL_REMOVE_IF_UNREFERENCED PLATFORM_ISA_SERIAL_DEVICE_PATH gIsaSerialDevicePath = {
+ gPciRootBridge,
+ gPciIsaBridge,
+ gPnp16550ComPort,
+ gUart(115200, 8, 1, 1),
+ gPcAnsiTerminal,
+ gEndEntire
+};
+
+//
+// Internal shell mode
+//
+GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mShellModeColumn;
+GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mShellModeRow;
+GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mShellHorizontalResolution;
+GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mShellVerticalResolution;
+//
+// BDS Platform Functions
+//
+
+BOOLEAN
+IsMorBitSet (
+ VOID
+ )
+{
+ UINTN MorControl;
+ EFI_STATUS Status;
+ UINTN DataSize;
+
+ //
+ // Check if the MOR bit is set.
+ //
+ DataSize = sizeof (MorControl);
+ Status = gRT->GetVariable (
+ MEMORY_OVERWRITE_REQUEST_VARIABLE_NAME,
+ &gEfiMemoryOverwriteControlDataGuid,
+ NULL,
+ &DataSize,
+ &MorControl
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_INFO, " PlatformBootMangerLib: gEfiMemoryOverwriteControlDataGuid doesn't exist!!***\n"));
+ MorControl = 0;
+ } else {
+ DEBUG ((DEBUG_INFO, " PlatformBootMangerLib: Get the gEfiMemoryOverwriteControlDataGuid = %x!!***\n", MorControl));
+ }
+
+ return (BOOLEAN) (MorControl & 0x01);
+}
+
+VOID
+DumpDevicePath (
+ IN CHAR16 *Name,
+ IN EFI_DEVICE_PATH *DevicePath
+ )
+{
+ CHAR16 *Str;
+
+ Str = ConvertDevicePathToText(DevicePath, TRUE, TRUE);
+ DEBUG ((DEBUG_INFO, "%s: %s\n", Name, Str));
+ if (Str != NULL) {
+ FreePool (Str);
+ }
+}
+
+/**
+ An empty function to pass error checking of CreateEventEx ().
+
+ This empty function ensures that EVT_NOTIFY_SIGNAL_ALL is error
+ checked correctly since it is now mapped into CreateEventEx() in UEFI 2.0.
+
+ @param Event Event whose notification function is being invoked.
+ @param Context The pointer to the notification function's context,
+ which is implementation-dependent.
+**/
+VOID
+EFIAPI
+InternalBdsEmptyCallbackFuntion (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ return;
+}
+
+VOID
+ExitPmAuth (
+ VOID
+ )
+{
+ EFI_HANDLE Handle;
+ EFI_STATUS Status;
+ EFI_EVENT EndOfDxeEvent;
+
+ DEBUG((DEBUG_INFO,"ExitPmAuth ()- Start\n"));
+ //
+ // Prepare S3 information, this MUST be done before ExitPmAuth/EndOfDxe
+ //
+ //
+ // Since PI1.2.1, we need signal EndOfDxe as ExitPmAuth
+ //
+ Status = gBS->CreateEventEx (
+ EVT_NOTIFY_SIGNAL,
+ TPL_CALLBACK,
+ InternalBdsEmptyCallbackFuntion,
+ NULL,
+ &gEfiEndOfDxeEventGroupGuid,
+ &EndOfDxeEvent
+ );
+ ASSERT_EFI_ERROR (Status);
+ gBS->SignalEvent (EndOfDxeEvent);
+ gBS->CloseEvent (EndOfDxeEvent);
+ DEBUG((DEBUG_INFO,"All EndOfDxe callbacks have returned successfully\n"));
+
+ //
+ // NOTE: We need install DxeSmmReadyToLock directly here because many boot script is added via ExitPmAuth/EndOfDxe callback.
+ // If we install them at same callback, these boot script will be rejected because BootScript Driver runs first to lock them done.
+ // So we seperate them to be 2 different events, ExitPmAuth is last chance to let platform add boot script. DxeSmmReadyToLock will
+ // make boot script save driver lock down the interface.
+ //
+ Handle = NULL;
+ Status = gBS->InstallProtocolInterface (
+ &Handle,
+ &gEfiDxeSmmReadyToLockProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+ DEBUG((DEBUG_INFO,"ExitPmAuth ()- End\n"));
+}
+
+VOID
+ConnectRootBridge (
+ BOOLEAN Recursive
+ )
+{
+ UINTN RootBridgeHandleCount;
+ EFI_HANDLE *RootBridgeHandleBuffer;
+ UINTN RootBridgeIndex;
+
+ RootBridgeHandleCount = 0;
+ gBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiPciRootBridgeIoProtocolGuid,
+ NULL,
+ &RootBridgeHandleCount,
+ &RootBridgeHandleBuffer
+ );
+ for (RootBridgeIndex = 0; RootBridgeIndex < RootBridgeHandleCount; RootBridgeIndex++) {
+ gBS->ConnectController (RootBridgeHandleBuffer[RootBridgeIndex], NULL, NULL, Recursive);
+ }
+}
+
+
+/**
+ Return whether the device is trusted console.
+
+ @param Device The device to be tested.
+
+ @retval TRUE The device can be trusted.
+ @retval FALSE The device cannot be trusted.
+**/
+BOOLEAN
+IsTrustedConsole (
+ IN CONSOLE_TYPE ConsoleType,
+ IN EFI_DEVICE_PATH_PROTOCOL *Device
+ )
+{
+ VOID *TrustedConsoleDevicepath;
+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *Instance;
+ UINTN Size;
+ EFI_DEVICE_PATH_PROTOCOL *ConsoleDevice;
+
+ if (Device == NULL) {
+ return FALSE;
+ }
+
+ ConsoleDevice = DuplicateDevicePath(Device);
+
+ TrustedConsoleDevicepath = NULL;
+
+ switch (ConsoleType) {
+ case ConIn:
+ TrustedConsoleDevicepath = PcdGetPtr (PcdTrustedConsoleInputDevicePath);
+ break;
+ case ConOut:
+ //
+ // Check GOP and remove last node
+ //
+ TempDevicePath = ConsoleDevice;
+ while (!IsDevicePathEndType (TempDevicePath)) {
+ if (DevicePathType (TempDevicePath) == ACPI_DEVICE_PATH &&
+ DevicePathSubType (TempDevicePath) == ACPI_ADR_DP) {
+ SetDevicePathEndNode (TempDevicePath);
+ break;
+ }
+ TempDevicePath = NextDevicePathNode (TempDevicePath);
+ }
+
+ TrustedConsoleDevicepath = PcdGetPtr (PcdTrustedConsoleOutputDevicePath);
+ break;
+ default:
+ ASSERT(FALSE);
+ break;
+ }
+
+ TempDevicePath = TrustedConsoleDevicepath;
+ do {
+ Instance = GetNextDevicePathInstance (&TempDevicePath, &Size);
+ if (Instance == NULL) {
+ break;
+ }
+
+ if (CompareMem (ConsoleDevice, Instance, Size - END_DEVICE_PATH_LENGTH) == 0) {
+ FreePool (Instance);
+ FreePool (ConsoleDevice);
+ return TRUE;
+ }
+
+ FreePool (Instance);
+ } while (TempDevicePath != NULL);
+
+ FreePool (ConsoleDevice);
+
+ return FALSE;
+}
+
+BOOLEAN
+IsUsbShortForm (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+ )
+{
+ if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) &&
+ ((DevicePathSubType (DevicePath) == MSG_USB_CLASS_DP) || (DevicePathSubType (DevicePath) == MSG_USB_WWID_DP)) ) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ Connect the USB short form device path.
+
+ @param DevicePath USB short form device path
+
+ @retval EFI_SUCCESS Successfully connected the USB device
+ @retval EFI_NOT_FOUND Cannot connect the USB device
+ @retval EFI_INVALID_PARAMETER The device path is invalid.
+**/
+EFI_STATUS
+ConnectUsbShortFormDevicePath (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+ )
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *Handles;
+ UINTN HandleCount;
+ UINTN Index;
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ UINT8 Class[3];
+ BOOLEAN AtLeastOneConnected;
+
+ //
+ // Check the passed in parameters
+ //
+ if (DevicePath == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (!IsUsbShortForm (DevicePath)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // Find the usb host controller firstly, then connect with the remaining device path
+ //
+ AtLeastOneConnected = FALSE;
+ Status = gBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiPciIoProtocolGuid,
+ NULL,
+ &HandleCount,
+ &Handles
+ );
+ for (Index = 0; Index < HandleCount; Index++) {
+ Status = gBS->HandleProtocol (
+ Handles[Index],
+ &gEfiPciIoProtocolGuid,
+ (VOID **) &PciIo
+ );
+ if (!EFI_ERROR (Status)) {
+ //
+ // Check whether the Pci device is the wanted usb host controller
+ //
+ Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, 0x09, 3, &Class);
+ if (!EFI_ERROR (Status) &&
+ ((PCI_CLASS_SERIAL == Class[2]) && (PCI_CLASS_SERIAL_USB == Class[1]))
+ ) {
+ Status = gBS->ConnectController (
+ Handles[Index],
+ NULL,
+ DevicePath,
+ FALSE
+ );
+ if (!EFI_ERROR(Status)) {
+ AtLeastOneConnected = TRUE;
+ }
+ }
+ }
+ }
+
+ return AtLeastOneConnected ? EFI_SUCCESS : EFI_NOT_FOUND;
+}
+
+/**
+ Update the ConIn/ConOut variable with ISA Serial device path,if its not already exists in ConIn/ConOut
+**/
+VOID
+EnumIsaSerial (
+ VOID
+ )
+{
+ DEBUG ((DEBUG_INFO, "[EnumIsaSerial]\n"));
+ EfiBootManagerUpdateConsoleVariable (ConIn, (EFI_DEVICE_PATH_PROTOCOL *) &gIsaSerialDevicePath, NULL);
+ EfiBootManagerUpdateConsoleVariable (ConOut, (EFI_DEVICE_PATH_PROTOCOL *) &gIsaSerialDevicePath, NULL);
+
+ //
+ // Append ISA Serial DevicePath to "ConInDev" and "ConOutDev"
+ //
+ EfiBootManagerUpdateConsoleVariable (ConInDev, (EFI_DEVICE_PATH_PROTOCOL *) &gIsaSerialDevicePath, NULL);
+ EfiBootManagerUpdateConsoleVariable (ConOutDev, (EFI_DEVICE_PATH_PROTOCOL *) &gIsaSerialDevicePath, NULL);
+}
+
+/**
+ Update the ConIn variable with USB Keyboard device path,if its not already exists in ConIn
+**/
+VOID
+EnumUsbKeyboard (
+ VOID
+ )
+{
+ DEBUG ((DEBUG_INFO, "[EnumUsbKeyboard]\n"));
+ EfiBootManagerUpdateConsoleVariable (ConIn, (EFI_DEVICE_PATH_PROTOCOL *) &gUsbClassKeyboardDevicePath, NULL);
+
+ //
+ // Append Usb Keyboard short form DevicePath into "ConInDev"
+ //
+ EfiBootManagerUpdateConsoleVariable (ConInDev, (EFI_DEVICE_PATH_PROTOCOL *) &gUsbClassKeyboardDevicePath, NULL);
+}
+
+BOOLEAN
+IsVgaHandle (
+ IN EFI_HANDLE Handle
+ )
+{
+ EFI_PCI_IO_PROTOCOL *PciIo;
+ PCI_TYPE00 Pci;
+ EFI_STATUS Status;
+
+ Status = gBS->HandleProtocol (
+ Handle,
+ &gEfiPciIoProtocolGuid,
+ (VOID **)&PciIo
+ );
+ if (!EFI_ERROR (Status)) {
+ Status = PciIo->Pci.Read (
+ PciIo,
+ EfiPciIoWidthUint32,
+ 0,
+ sizeof (Pci) / sizeof (UINT32),
+ &Pci
+ );
+ if (!EFI_ERROR (Status)) {
+ if (IS_PCI_VGA (&Pci) || IS_PCI_OLD_VGA (&Pci)) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+EFI_HANDLE
+IsVideoController (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+ )
+{
+ EFI_DEVICE_PATH_PROTOCOL *DupDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
+ EFI_STATUS Status;
+ EFI_HANDLE DeviceHandle;
+
+ DupDevicePath = DuplicateDevicePath (DevicePath);
+ ASSERT (DupDevicePath != NULL);
+ if (DupDevicePath == NULL) {
+ return NULL;
+ }
+
+ TempDevicePath = DupDevicePath;
+ Status = gBS->LocateDevicePath (
+ &gEfiDevicePathProtocolGuid,
+ &TempDevicePath,
+ &DeviceHandle
+ );
+ FreePool (DupDevicePath);
+ if (EFI_ERROR (Status)) {
+ return NULL;
+ }
+
+ if (IsVgaHandle (DeviceHandle)) {
+ return DeviceHandle;
+ } else {
+ return NULL;
+ }
+}
+
+BOOLEAN
+IsGopDevicePath (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+ )
+{
+ while (!IsDevicePathEndType (DevicePath)) {
+ if (DevicePathType (DevicePath) == ACPI_DEVICE_PATH &&
+ DevicePathSubType (DevicePath) == ACPI_ADR_DP) {
+ return TRUE;
+ }
+ DevicePath = NextDevicePathNode (DevicePath);
+ }
+ return FALSE;
+}
+
+/**
+ Remove all GOP device path instance from DevicePath and add the Gop to the DevicePath.
+**/
+EFI_DEVICE_PATH_PROTOCOL *
+UpdateGopDevicePath (
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath,
+ EFI_DEVICE_PATH_PROTOCOL *Gop
+ )
+{
+ UINTN Size;
+ UINTN GopSize;
+ EFI_DEVICE_PATH_PROTOCOL *Temp;
+ EFI_DEVICE_PATH_PROTOCOL *Return;
+ EFI_DEVICE_PATH_PROTOCOL *Instance;
+ BOOLEAN Exist;
+
+ Exist = FALSE;
+ Return = NULL;
+ GopSize = GetDevicePathSize (Gop);
+ do {
+ Instance = GetNextDevicePathInstance (&DevicePath, &Size);
+ if (Instance == NULL) {
+ break;
+ }
+ if (!IsGopDevicePath (Instance) ||
+ (Size == GopSize && CompareMem (Instance, Gop, GopSize) == 0)
+ ) {
+ if (Size == GopSize && CompareMem (Instance, Gop, GopSize) == 0) {
+ Exist = TRUE;
+ }
+ Temp = Return;
+ Return = AppendDevicePathInstance (Return, Instance);
+ if (Temp != NULL) {
+ FreePool (Temp);
+ }
+ }
+ FreePool (Instance);
+ } while (DevicePath != NULL);
+
+ if (!Exist) {
+ Temp = Return;
+ Return = AppendDevicePathInstance (Return, Gop);
+ if (Temp != NULL) {
+ FreePool (Temp);
+ }
+ }
+ return Return;
+}
+
+/**
+ Get Graphics Controller Handle.
+
+ @retval GraphicsController Successfully located
+ @retval NULL Failed to locate
+**/
+EFI_HANDLE
+EFIAPI
+GetGraphicsController (
+ IN BOOLEAN NeedTrustedConsole
+ )
+{
+ EFI_STATUS Status;
+ UINTN Index;
+ EFI_HANDLE *PciHandles;
+ UINTN PciHandlesSize;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+
+ Status = gBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiPciIoProtocolGuid,
+ NULL,
+ &PciHandlesSize,
+ &PciHandles
+ );
+ if (EFI_ERROR (Status)) {
+ return NULL;
+ }
+
+ for (Index = 0; Index < PciHandlesSize; Index++) {
+ Status = gBS->HandleProtocol (
+ PciHandles[Index],
+ &gEfiDevicePathProtocolGuid,
+ (VOID **) &DevicePath
+ );
+ if (EFI_ERROR(Status)) {
+ continue;
+ }
+ if (!IsVgaHandle (PciHandles[Index])) {
+ continue;
+ }
+ if ((NeedTrustedConsole && IsTrustedConsole (ConOut, DevicePath)) ||
+ ((!NeedTrustedConsole) && (!IsTrustedConsole (ConOut, DevicePath)))) {
+ return PciHandles[Index];
+ }
+ }
+
+ return NULL;
+}
+
+VOID
+UpdateGraphicConOut (
+ IN BOOLEAN NeedTrustedConsole
+ )
+{
+ EFI_HANDLE GraphicsControllerHandle;
+ EFI_DEVICE_PATH_PROTOCOL *GopDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *ConOutDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *UpdatedConOutDevicePath;
+
+ //
+ // Update ConOut variable
+ //
+ GraphicsControllerHandle = GetGraphicsController (NeedTrustedConsole);
+ if (GraphicsControllerHandle != NULL) {
+ //
+ // Connect the GOP driver
+ //
+ gBS->ConnectController (GraphicsControllerHandle, NULL, NULL, TRUE);
+
+ //
+ // Get the GOP device path
+ // NOTE: We may get a device path that contains Controller node in it.
+ //
+ GopDevicePath = EfiBootManagerGetGopDevicePath (GraphicsControllerHandle);
+ if (GopDevicePath != NULL) {
+ GetEfiGlobalVariable2 (L"ConOut", (VOID **)&ConOutDevicePath, NULL);
+ UpdatedConOutDevicePath = UpdateGopDevicePath (ConOutDevicePath, GopDevicePath);
+ if (ConOutDevicePath != NULL) {
+ FreePool (ConOutDevicePath);
+ }
+ FreePool (GopDevicePath);
+ gRT->SetVariable (
+ L"ConOut",
+ &gEfiGlobalVariableGuid,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ GetDevicePathSize (UpdatedConOutDevicePath),
+ UpdatedConOutDevicePath
+ );
+ }
+ }
+}
+
+VOID
+AddConsoleVariable (
+ IN CONSOLE_TYPE ConsoleType,
+ IN EFI_DEVICE_PATH *ConsoleDevicePath
+ )
+{
+ EFI_DEVICE_PATH *TempDevicePath;
+ EFI_DEVICE_PATH *Instance;
+ UINTN Size;
+ EFI_HANDLE GraphicsControllerHandle;
+ EFI_DEVICE_PATH *GopDevicePath;
+
+ TempDevicePath = ConsoleDevicePath;
+ do {
+ Instance = GetNextDevicePathInstance (&TempDevicePath, &Size);
+ if (Instance == NULL) {
+ break;
+ }
+
+ switch (ConsoleType) {
+ case ConIn:
+ if (IsUsbShortForm (Instance)) {
+ //
+ // Append Usb Keyboard short form DevicePath into "ConInDev"
+ //
+ EfiBootManagerUpdateConsoleVariable (ConInDev, Instance, NULL);
+ }
+ EfiBootManagerUpdateConsoleVariable (ConsoleType, Instance, NULL);
+ break;
+ case ConOut:
+ GraphicsControllerHandle = IsVideoController (Instance);
+ if (GraphicsControllerHandle == NULL) {
+ EfiBootManagerUpdateConsoleVariable (ConsoleType, Instance, NULL);
+ } else {
+ //
+ // Connect the GOP driver
+ //
+ gBS->ConnectController (GraphicsControllerHandle, NULL, NULL, TRUE);
+ //
+ // Get the GOP device path
+ // NOTE: We may get a device path that contains Controller node in it.
+ //
+ GopDevicePath = EfiBootManagerGetGopDevicePath (GraphicsControllerHandle);
+ if (GopDevicePath != NULL) {
+ EfiBootManagerUpdateConsoleVariable (ConsoleType, GopDevicePath, NULL);
+ }
+ }
+ break;
+ default:
+ ASSERT(FALSE);
+ break;
+ }
+
+ FreePool (Instance);
+ } while (TempDevicePath != NULL);
+}
+
+/**
+ The function connects the trusted consoles.
+**/
+VOID
+ConnectTrustedConsole (
+ VOID
+ )
+{
+ EFI_DEVICE_PATH_PROTOCOL *Consoles;
+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *Instance;
+ EFI_DEVICE_PATH_PROTOCOL *Next;
+ UINTN Size;
+ UINTN Index;
+ EFI_HANDLE Handle;
+ EFI_STATUS Status;
+ CHAR16 *ConsoleVar[] = {L"ConIn", L"ConOut"};
+ VOID *TrustedConsoleDevicepath;
+
+ TrustedConsoleDevicepath = PcdGetPtr (PcdTrustedConsoleInputDevicePath);
+ DumpDevicePath (L"TrustedConsoleIn", TrustedConsoleDevicepath);
+ TrustedConsoleDevicepath = PcdGetPtr (PcdTrustedConsoleOutputDevicePath);
+ DumpDevicePath (L"TrustedConsoleOut", TrustedConsoleDevicepath);
+
+ for (Index = 0; Index < sizeof (ConsoleVar) / sizeof (ConsoleVar[0]); Index++) {
+
+ GetEfiGlobalVariable2 (ConsoleVar[Index], (VOID **)&Consoles, NULL);
+
+ TempDevicePath = Consoles;
+ do {
+ Instance = GetNextDevicePathInstance (&TempDevicePath, &Size);
+ if (Instance == NULL) {
+ break;
+ }
+ if (IsTrustedConsole (Index, Instance)) {
+ if (IsUsbShortForm (Instance)) {
+ ConnectUsbShortFormDevicePath (Instance);
+ } else {
+ for (Next = Instance; !IsDevicePathEnd (Next); Next = NextDevicePathNode (Next)) {
+ if (DevicePathType (Next) == ACPI_DEVICE_PATH && DevicePathSubType (Next) == ACPI_ADR_DP) {
+ break;
+ } else if (DevicePathType (Next) == HARDWARE_DEVICE_PATH &&
+ DevicePathSubType (Next) == HW_CONTROLLER_DP &&
+ DevicePathType (NextDevicePathNode (Next)) == ACPI_DEVICE_PATH &&
+ DevicePathSubType (NextDevicePathNode (Next)) == ACPI_ADR_DP
+ ) {
+ break;
+ }
+ }
+ if (!IsDevicePathEnd (Next)) {
+ SetDevicePathEndNode (Next);
+ Status = EfiBootManagerConnectDevicePath (Instance, &Handle);
+ if (!EFI_ERROR (Status)) {
+ gBS->ConnectController (Handle, NULL, NULL, TRUE);
+ }
+ } else {
+ EfiBootManagerConnectDevicePath (Instance, NULL);
+ }
+ }
+ }
+ FreePool (Instance);
+ } while (TempDevicePath != NULL);
+
+ if (Consoles != NULL) {
+ FreePool (Consoles);
+ }
+ }
+}
+
+/**
+ The function connects the trusted Storages.
+**/
+VOID
+ConnectTrustedStorage (
+ VOID
+ )
+{
+ VOID *TrustedStorageDevicepath;
+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *Instance;
+ UINTN Size;
+ EFI_DEVICE_PATH_PROTOCOL *TempStorageDevicePath;
+ EFI_STATUS Status;
+ EFI_HANDLE DeviceHandle;
+
+ TrustedStorageDevicepath = PcdGetPtr (PcdTrustedStorageDevicePath);
+ DumpDevicePath (L"TrustedStorage", TrustedStorageDevicepath);
+
+ TempDevicePath = TrustedStorageDevicepath;
+ do {
+ Instance = GetNextDevicePathInstance (&TempDevicePath, &Size);
+ if (Instance == NULL) {
+ break;
+ }
+
+ EfiBootManagerConnectDevicePath (Instance, NULL);
+
+ TempStorageDevicePath = Instance;
+
+ Status = gBS->LocateDevicePath (
+ &gEfiDevicePathProtocolGuid,
+ &TempStorageDevicePath,
+ &DeviceHandle
+ );
+ if (!EFI_ERROR (Status)) {
+ gBS->ConnectController (DeviceHandle, NULL, NULL, FALSE);
+ }
+
+ FreePool (Instance);
+ } while (TempDevicePath != NULL);
+}
+
+/**
+ The function connects the trusted consoles and then call the PP processing library interface.
+**/
+VOID
+ProcessTcgPp (
+ VOID
+ )
+{
+ gPPRequireUIConfirm |= Tcg2PhysicalPresenceLibNeedUserConfirm();
+
+ if (gPPRequireUIConfirm) {
+ ConnectTrustedConsole ();
+ }
+
+ Tcg2PhysicalPresenceLibProcessRequest (NULL);
+}
+
+/**
+ The function connects the trusted storage to perform TPerReset.
+**/
+VOID
+ProcessTcgMor (
+ VOID
+ )
+{
+ if (IsMorBitSet ()) {
+ ConnectTrustedConsole();
+ ConnectTrustedStorage();
+ }
+}
+
+/**
+ Check if current BootCurrent variable is internal shell boot option.
+
+ @retval TRUE BootCurrent is internal shell.
+ @retval FALSE BootCurrent is not internal shell.
+**/
+BOOLEAN
+BootCurrentIsInternalShell (
+ VOID
+ )
+{
+ UINTN VarSize;
+ UINT16 BootCurrent;
+ CHAR16 BootOptionName[16];
+ UINT8 *BootOption;
+ UINT8 *Ptr;
+ BOOLEAN Result;
+ EFI_STATUS Status;
+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *LastDeviceNode;
+ EFI_GUID *GuidPoint;
+
+ BootOption = NULL;
+ Result = FALSE;
+
+ //
+ // Get BootCurrent variable
+ //
+ VarSize = sizeof (UINT16);
+ Status = gRT->GetVariable (
+ L"BootCurrent",
+ &gEfiGlobalVariableGuid,
+ NULL,
+ &VarSize,
+ &BootCurrent
+ );
+ if (EFI_ERROR (Status)) {
+ return FALSE;
+ }
+
+ //
+ // Create boot option Bootxxxx from BootCurrent
+ //
+ UnicodeSPrint (BootOptionName, sizeof(BootOptionName), L"Boot%04X", BootCurrent);
+
+ GetEfiGlobalVariable2 (BootOptionName, (VOID **) &BootOption, &VarSize);
+ if (BootOption == NULL || VarSize == 0) {
+ return FALSE;
+ }
+
+ Ptr = BootOption;
+ Ptr += sizeof (UINT32);
+ Ptr += sizeof (UINT16);
+ Ptr += StrSize ((CHAR16 *) Ptr);
+ TempDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;
+ LastDeviceNode = TempDevicePath;
+ while (!IsDevicePathEnd (TempDevicePath)) {
+ LastDeviceNode = TempDevicePath;
+ TempDevicePath = NextDevicePathNode (TempDevicePath);
+ }
+ GuidPoint = EfiGetNameGuidFromFwVolDevicePathNode (
+ (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode
+ );
+ if ((GuidPoint != NULL) &&
+ ((CompareGuid (GuidPoint, &gUefiShellFileGuid)))
+ ) {
+ //
+ // if this option is internal shell, return TRUE
+ //
+ Result = TRUE;
+ }
+
+ if (BootOption != NULL) {
+ FreePool (BootOption);
+ BootOption = NULL;
+ }
+
+ return Result;
+}
+
+/**
+ This function will change video resolution and text mode
+ for internl shell when internal shell is launched.
+
+ @param None.
+
+ @retval EFI_SUCCESS Mode is changed successfully.
+ @retval Others Mode failed to changed.
+**/
+EFI_STATUS
+EFIAPI
+ChangeModeForInternalShell (
+ VOID
+ )
+{
+ EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
+ EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut;
+ UINTN SizeOfInfo;
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
+ UINT32 MaxGopMode;
+ UINT32 MaxTextMode;
+ UINT32 ModeNumber;
+ UINTN HandleCount;
+ EFI_HANDLE *HandleBuffer;
+ EFI_STATUS Status;
+ UINTN Index;
+ UINTN CurrentColumn;
+ UINTN CurrentRow;
+
+ Status = gBS->HandleProtocol (
+ gST->ConsoleOutHandle,
+ &gEfiGraphicsOutputProtocolGuid,
+ (VOID**)&GraphicsOutput
+ );
+ if (EFI_ERROR (Status)) {
+ GraphicsOutput = NULL;
+ }
+
+ Status = gBS->HandleProtocol (
+ gST->ConsoleOutHandle,
+ &gEfiSimpleTextOutProtocolGuid,
+ (VOID**)&SimpleTextOut
+ );
+ if (EFI_ERROR (Status)) {
+ SimpleTextOut = NULL;
+ }
+
+ if ((GraphicsOutput == NULL) || (SimpleTextOut == NULL)) {
+ return EFI_UNSUPPORTED;
+ }
+
+ MaxGopMode = GraphicsOutput->Mode->MaxMode;
+ MaxTextMode = SimpleTextOut->Mode->MaxMode;
+
+ //
+ // 1. If current video resolution is same with new video resolution,
+ // video resolution need not be changed.
+ // 1.1. If current text mode is same with new text mode, text mode need not be change.
+ // 1.2. If current text mode is different with new text mode, text mode need be change to new text mode.
+ // 2. If current video resolution is different with new video resolution, we need restart whole console drivers.
+ //
+ for (ModeNumber = 0; ModeNumber < MaxGopMode; ModeNumber++) {
+ Status = GraphicsOutput->QueryMode (
+ GraphicsOutput,
+ ModeNumber,
+ &SizeOfInfo,
+ &Info
+ );
+ if (!EFI_ERROR (Status)) {
+ if ((Info->HorizontalResolution == mShellHorizontalResolution) &&
+ (Info->VerticalResolution == mShellVerticalResolution)) {
+ if ((GraphicsOutput->Mode->Info->HorizontalResolution == mShellHorizontalResolution) &&
+ (GraphicsOutput->Mode->Info->VerticalResolution == mShellVerticalResolution)) {
+ //
+ // If current video resolution is same with new resolution,
+ // then check if current text mode is same with new text mode.
+ //
+ Status = SimpleTextOut->QueryMode (SimpleTextOut, SimpleTextOut->Mode->Mode, &CurrentColumn, &CurrentRow);
+ ASSERT_EFI_ERROR (Status);
+ if (CurrentColumn == mShellModeColumn && CurrentRow == mShellModeRow) {
+ //
+ // Current text mode is same with new text mode, text mode need not be change.
+ //
+ FreePool (Info);
+ return EFI_SUCCESS;
+ } else {
+ //
+ // Current text mode is different with new text mode, text mode need be change to new text mode.
+ //
+ for (Index = 0; Index < MaxTextMode; Index++) {
+ Status = SimpleTextOut->QueryMode (SimpleTextOut, Index, &CurrentColumn, &CurrentRow);
+ if (!EFI_ERROR(Status)) {
+ if ((CurrentColumn == mShellModeColumn) && (CurrentRow == mShellModeRow)) {
+ //
+ // New text mode is supported, set it.
+ //
+ Status = SimpleTextOut->SetMode (SimpleTextOut, Index);
+ ASSERT_EFI_ERROR (Status);
+ //
+ // Update text mode PCD.
+ //
+ Status = PcdSet32S (PcdConOutColumn, mShellModeColumn);
+ ASSERT_EFI_ERROR (Status);
+
+ Status = PcdSet32S (PcdConOutRow, mShellModeRow);
+ ASSERT_EFI_ERROR (Status);
+
+ FreePool (Info);
+ return EFI_SUCCESS;
+ }
+ }
+ }
+ if (Index == MaxTextMode) {
+ //
+ // If new text mode is not supported, return error.
+ //
+ FreePool (Info);
+ return EFI_UNSUPPORTED;
+ }
+ }
+ } else {
+ FreePool (Info);
+ //
+ // If current video resolution is not same with the new one, set new video resolution.
+ // In this case, the driver which produces simple text out need be restarted.
+ //
+ Status = GraphicsOutput->SetMode (GraphicsOutput, ModeNumber);
+ if (!EFI_ERROR (Status)) {
+ //
+ // Set PCD to restart GraphicsConsole and Consplitter to change video resolution
+ // and produce new text mode based on new resolution.
+ //
+ Status = PcdSet32S (PcdVideoHorizontalResolution, mShellHorizontalResolution);
+ ASSERT_EFI_ERROR (Status);
+
+ Status = PcdSet32S (PcdVideoVerticalResolution, mShellVerticalResolution);
+ ASSERT_EFI_ERROR (Status);
+
+ Status = PcdSet32S (PcdConOutColumn, mShellModeColumn);
+ ASSERT_EFI_ERROR (Status);
+
+ Status = PcdSet32S (PcdConOutRow, mShellModeRow);
+ ASSERT_EFI_ERROR (Status);
+
+ Status = gBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiSimpleTextOutProtocolGuid,
+ NULL,
+ &HandleCount,
+ &HandleBuffer
+ );
+ if (!EFI_ERROR (Status)) {
+ for (Index = 0; Index < HandleCount; Index++) {
+ gBS->DisconnectController (HandleBuffer[Index], NULL, NULL);
+ }
+ for (Index = 0; Index < HandleCount; Index++) {
+ gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
+ }
+ if (HandleBuffer != NULL) {
+ FreePool (HandleBuffer);
+ }
+ break;
+ }
+ }
+ }
+ }
+ FreePool (Info);
+ }
+ }
+
+ if (ModeNumber == MaxGopMode) {
+ //
+ // If the new resolution is not supported, return error.
+ //
+ return EFI_UNSUPPORTED;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ ReadyToBoot callback to set video and text mode for internal shell boot.
+ That will not connect USB controller while CSM and FastBoot are disabled, we need to connect them
+ before booting to Shell for showing USB devices in Shell.
+
+ When FastBoot is enabled and Windows Console is the chosen Console behavior, input devices will not be connected
+ by default. Hence, when booting to EFI shell, connecting input consoles are required.
+
+ @param Event Pointer to this event
+ @param Context Event hanlder private data
+
+ @retval None.
+**/
+VOID
+EFIAPI
+OnReadyToBootCallBack (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ DEBUG ((DEBUG_INFO, "OnReadyToBootCallBack\n"));
+
+ if (BootCurrentIsInternalShell ()) {
+
+ ChangeModeForInternalShell ();
+ EfiBootManagerConnectAllDefaultConsoles();
+ gDS->Dispatch ();
+ }
+}
+
+/**
+ Platform Bds init. Incude the platform firmware vendor, revision
+ and so crc check.
+**/
+VOID
+EFIAPI
+PlatformBootManagerBeforeConsole (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_DEVICE_PATH_PROTOCOL *VarConOut;
+ EFI_DEVICE_PATH_PROTOCOL *VarConIn;
+ EFI_EVENT Event;
+
+ DEBUG ((DEBUG_INFO, "PlatformBootManagerBeforeConsole\n"));
+
+ Status = EFI_SUCCESS;
+
+ //
+ // Get user defined text mode for internal shell only once.
+ //
+ mShellHorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);
+ mShellVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);
+ mShellModeColumn = PcdGet32 (PcdSetupConOutColumn);
+ mShellModeRow = PcdGet32 (PcdSetupConOutRow);
+
+ //
+ // Create event to set proper video resolution and text mode for internal shell.
+ //
+ Status = EfiCreateEventReadyToBootEx (
+ TPL_CALLBACK,
+ OnReadyToBootCallBack,
+ NULL,
+ &Event
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Connect Root Bridge to make PCI BAR resource allocated and all PciIo created
+ //
+ ConnectRootBridge (FALSE);
+
+ //
+ // Fill ConIn/ConOut in Full Configuration boot mode
+ //
+ gBootMode = GetBootModeHob();
+ DEBUG ((DEBUG_INFO, "PlatformBootManagerInit - %x\n", gBootMode));
+
+ if (gBootMode == BOOT_WITH_FULL_CONFIGURATION ||
+ gBootMode == BOOT_WITH_DEFAULT_SETTINGS ||
+ gBootMode == BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS ||
+ gBootMode == BOOT_IN_RECOVERY_MODE) {
+
+ GetEfiGlobalVariable2 (L"ConOut", (VOID **)&VarConOut, NULL); if (VarConOut != NULL) { FreePool (VarConOut); }
+ GetEfiGlobalVariable2 (L"ConIn", (VOID **)&VarConIn, NULL); if (VarConIn != NULL) { FreePool (VarConIn); }
+
+ //
+ // Only fill ConIn/ConOut when ConIn/ConOut is empty because we may drop to Full Configuration boot mode in non-first boot
+ //
+ if (VarConOut == NULL || VarConIn == NULL) {
+ if (PcdGetSize (PcdTrustedConsoleOutputDevicePath) >= sizeof(EFI_DEVICE_PATH_PROTOCOL)) {
+ AddConsoleVariable (ConOut, PcdGetPtr (PcdTrustedConsoleOutputDevicePath));
+ }
+ if (PcdGetSize (PcdTrustedConsoleInputDevicePath) >= sizeof(EFI_DEVICE_PATH_PROTOCOL)) {
+ AddConsoleVariable (ConIn, PcdGetPtr (PcdTrustedConsoleInputDevicePath));
+ }
+ }
+ }
+
+ EnumIsaSerial ();
+
+ EnumUsbKeyboard ();
+ //
+ // For trusted console it must be handled here.
+ //
+ UpdateGraphicConOut (TRUE);
+
+ if (gBootMode == BOOT_ON_FLASH_UPDATE) {
+ //
+ // Logo show
+ //
+ BootLogoEnableLogo ();
+
+ DEBUG((DEBUG_INFO, "ProcessCapsules Before EndOfDxe......\n"));
+ ProcessCapsules ();
+ DEBUG((DEBUG_INFO, "ProcessCapsules Done\n"));
+ }
+
+ //
+ // Dynamically register hot key: F2/F7/Enter
+ //
+ RegisterDefaultBootOption ();
+ RegisterStaticHotkey ();
+
+ PERF_START_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7010);
+ if (PcdGetBool (PcdTpm2Enable)) {
+ ProcessTcgPp ();
+ ProcessTcgMor ();
+ }
+ PERF_END_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7011);
+
+ //
+ // We should make all UEFI memory and GCD information populated before ExitPmAuth.
+ // SMM may consume these information.
+ //
+ MemoryTest((EXTENDMEM_COVERAGE_LEVEL) PcdGet32 (PcdPlatformMemoryCheckLevel));
+
+ PERF_START_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7020);
+ ExitPmAuth ();
+ PERF_END_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7021);
+
+ //
+ // Dispatch the deferred 3rd party images.
+ //
+ EfiBootManagerDispatchDeferredImages ();
+
+ //
+ // For non-trusted console it must be handled here.
+ //
+ UpdateGraphicConOut (FALSE);
+
+ if (gBootMode == BOOT_ON_FLASH_UPDATE) {
+ //
+ // Logo show
+ //
+ BootLogoEnableLogo ();
+
+ DEBUG((DEBUG_INFO, "ProcessCapsules After ConnectAll......\n"));
+ ProcessCapsules();
+ DEBUG((DEBUG_INFO, "ProcessCapsules Done\n"));
+ }
+}
+
+
+/**
+ Connect with predeined platform connect sequence,
+ the OEM/IBV can customize with their own connect sequence.
+
+ @param[in] BootMode Boot mode of this boot.
+**/
+VOID
+ConnectSequence (
+ IN EFI_BOOT_MODE BootMode
+ )
+{
+ EfiBootManagerConnectAll ();
+}
+
+/**
+ The function is to consider the boot order which is not in our expectation.
+ In the case that we need to re-sort the boot option.
+
+ @retval TRUE Need to sort Boot Option.
+ @retval FALSE Don't need to sort Boot Option.
+**/
+BOOLEAN
+IsNeedSortBootOption (
+ VOID
+ )
+{
+ EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
+ UINTN BootOptionCount;
+
+ BootOptions = EfiBootManagerGetLoadOptions (&BootOptionCount, LoadOptionTypeBoot);
+
+ //
+ // If setup is the first priority in boot option, we need to sort boot option.
+ //
+ if ((BootOptionCount > 1) &&
+ (((StrnCmp (BootOptions->Description, L"Enter Setup", StrLen (L"Enter Setup"))) == 0) ||
+ ((StrnCmp (BootOptions->Description, L"BootManagerMenuApp", StrLen (L"BootManagerMenuApp"))) == 0))) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ The function will excute with as the platform policy, current policy
+ is driven by boot mode. IBV/OEM can customize this code for their specific
+ policy action.
+
+ @param DriverOptionList - The header of the driver option link list
+ @param BootOptionList - The header of the boot option link list
+ @param ProcessCapsules - A pointer to ProcessCapsules()
+ @param BaseMemoryTest - A pointer to BaseMemoryTest()
+**/
+VOID
+EFIAPI
+PlatformBootManagerAfterConsole (
+ VOID
+ )
+{
+ EFI_BOOT_MODE LocalBootMode;
+
+ DEBUG ((DEBUG_INFO, "PlatformBootManagerAfterConsole\n"));
+
+ //
+ // Get current Boot Mode
+ //
+ LocalBootMode = gBootMode;
+ DEBUG ((DEBUG_INFO, "Current local bootmode - %x\n", LocalBootMode));
+
+ //
+ // Logo show
+ //
+ BootLogoEnableLogo ();
+
+ //
+ // Go the different platform policy with different boot mode
+ // Notes: this part code can be change with the table policy
+ //
+ switch (LocalBootMode) {
+
+
+ case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES:
+ case BOOT_WITH_MINIMAL_CONFIGURATION:
+ case BOOT_ON_S4_RESUME:
+ //
+ // Perform some platform specific connect sequence
+ //
+ PERF_START_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7050);
+ ConnectSequence (LocalBootMode);
+ PERF_END_EX(NULL,"EventRec", NULL, AsmReadTsc(), 0x7051);
+
+ break;
+
+ case BOOT_WITH_FULL_CONFIGURATION:
+ case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS:
+ case BOOT_WITH_DEFAULT_SETTINGS:
+ default:
+ //
+ // Perform some platform specific connect sequence
+ //
+ ConnectSequence (LocalBootMode);
+
+ //
+ // Only in Full Configuration boot mode we do the enumeration of boot device
+ //
+ //
+ // Dispatch all but Storage Oprom explicitly, because we assume Int13Thunk driver is there.
+ //
+ EfiBootManagerRefreshAllBootOption ();
+
+ if (IsNeedSortBootOption()) {
+ EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, CompareBootOption);
+ }
+ //
+ // PXE boot option may appear after boot option enumeration
+ //
+
+ break;
+ }
+
+ Print (L"Press F7 for BootMenu!\n");
+
+ EfiBootManagerRefreshAllBootOption ();
+ EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, CompareBootOption);
+}
+
+/**
+ The function is called when no boot option could be launched,
+ including platform recovery options and options pointing to applications
+ built into firmware volumes.
+
+ If this function returns, BDS attempts to enter an infinite loop.
+**/
+VOID
+EFIAPI
+PlatformBootManagerUnableToBoot (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_BOOT_MANAGER_LOAD_OPTION BootDeviceList;
+ CHAR16 OptionName[sizeof ("Boot####")];
+
+ if (mBootMenuOptionNumber == LoadOptionNumberUnassigned) {
+ return;
+ }
+ UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", mBootMenuOptionNumber);
+ Status = EfiBootManagerVariableToLoadOption (OptionName, &BootDeviceList);
+ if (EFI_ERROR (Status)) {
+ return;
+ }
+ for (;;) {
+ EfiBootManagerBoot (&BootDeviceList);
+ }
+}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.h
new file mode 100644
index 0000000000..0bdc11bdd8
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.h
@@ -0,0 +1,253 @@
+/** @file
+ Header file for BDS Platform specific code
+
+Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef _BDS_PLATFORM_H
+#define _BDS_PLATFORM_H
+
+#include <PiDxe.h>
+#include <Protocol/DevicePath.h>
+#include <Protocol/SimpleNetwork.h>
+#include <Protocol/PciRootBridgeIo.h>
+#include <Protocol/LoadFile.h>
+#include <Protocol/PciIo.h>
+#include <Protocol/CpuIo2.h>
+#include <Protocol/LoadedImage.h>
+#include <Protocol/DiskInfo.h>
+#include <Protocol/GraphicsOutput.h>
+#include <Protocol/UgaDraw.h>
+#include <Protocol/GenericMemoryTest.h>
+#include <Protocol/DevicePathToText.h>
+#include <Protocol/FirmwareVolume2.h>
+#include <Protocol/SimpleFileSystem.h>
+
+#include <Guid/CapsuleVendor.h>
+#include <Guid/MemoryTypeInformation.h>
+#include <Guid/GlobalVariable.h>
+#include <Guid/MemoryOverwriteControl.h>
+#include <Guid/FileInfo.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/BaseLib.h>
+#include <Library/PcdLib.h>
+#include <Library/PlatformBootManagerLib.h>
+#include <Library/DevicePathLib.h>
+#include <Library/UefiLib.h>
+#include <Library/HobLib.h>
+#include <Library/DxeServicesLib.h>
+#include <Library/DxeServicesTableLib.h>
+#include <Library/PrintLib.h>
+#include <Library/HiiLib.h>
+#include <Library/CapsuleLib.h>
+#include <Library/PerformanceLib.h>
+
+#include <IndustryStandard/Pci30.h>
+#include <IndustryStandard/PciCodeId.h>
+
+///
+/// ConnectType
+///
+#define CONSOLE_OUT 0x00000001
+#define STD_ERROR 0x00000002
+#define CONSOLE_IN 0x00000004
+#define CONSOLE_ALL (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)
+
+extern EFI_GUID gUefiShellFileGuid;
+extern EFI_BOOT_MODE gBootMode;
+
+#define PCI_DEVICE_PATH_NODE(Func, Dev) \
+ { \
+ HARDWARE_DEVICE_PATH, \
+ HW_PCI_DP, \
+ { \
+ (UINT8) (sizeof (PCI_DEVICE_PATH)), \
+ (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \
+ }, \
+ (Func), \
+ (Dev) \
+ }
+
+#define PNPID_DEVICE_PATH_NODE(PnpId) \
+ { \
+ { \
+ ACPI_DEVICE_PATH, \
+ ACPI_DP, \
+ { \
+ (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
+ (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
+ } \
+ }, \
+ EISA_PNP_ID((PnpId)), \
+ 0 \
+ }
+
+#define gPciRootBridge \
+ { \
+ { \
+ ACPI_DEVICE_PATH, \
+ ACPI_DP, \
+ { \
+ (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
+ (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
+ }, \
+ }, \
+ EISA_PNP_ID (0x0A03), \
+ 0 \
+ }
+
+#define gPciIsaBridge \
+ PCI_DEVICE_PATH_NODE(0, 0x1f)
+
+#define gPnp16550ComPort \
+ PNPID_DEVICE_PATH_NODE(0x0501)
+
+#define gUart(BaudRate, DataBits, Parity, StopBits) \
+ { \
+ { \
+ MESSAGING_DEVICE_PATH, \
+ MSG_UART_DP, \
+ { \
+ (UINT8) (sizeof (UART_DEVICE_PATH)), \
+ (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \
+ } \
+ }, \
+ 0, \
+ (BaudRate), \
+ (DataBits), \
+ (Parity), \
+ (StopBits) \
+ }
+
+#define gPcAnsiTerminal \
+ { \
+ { \
+ MESSAGING_DEVICE_PATH, \
+ MSG_VENDOR_DP, \
+ { \
+ (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \
+ (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \
+ } \
+ }, \
+ DEVICE_PATH_MESSAGING_PC_ANSI \
+ }
+
+#define gEndEntire \
+ { \
+ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { END_DEVICE_PATH_LENGTH, 0 } \
+ }
+
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ UINTN ConnectType;
+} BDS_CONSOLE_CONNECT_ENTRY;
+
+//
+// Platform Root Bridge
+//
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_ROOT_BRIDGE_DEVICE_PATH;
+
+//
+// Below is the platform console device path
+//
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ PCI_DEVICE_PATH IsaBridge;
+ ACPI_HID_DEVICE_PATH Keyboard;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_KEYBOARD_DEVICE_PATH;
+
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ PCI_DEVICE_PATH PciDevice;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_ONBOARD_CONTROLLER_DEVICE_PATH;
+
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ PCI_DEVICE_PATH Pci0Device;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_PEG_ROOT_CONTROLLER_DEVICE_PATH;
+
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ PCI_DEVICE_PATH PciBridge;
+ PCI_DEVICE_PATH PciDevice;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_PCI_CONTROLLER_DEVICE_PATH;
+
+//
+// Below is the boot option device path
+//
+
+#define CLASS_HID 3
+#define SUBCLASS_BOOT 1
+#define PROTOCOL_KEYBOARD 1
+
+typedef struct {
+ USB_CLASS_DEVICE_PATH UsbClass;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} USB_CLASS_FORMAT_DEVICE_PATH;
+
+typedef struct {
+ ACPI_HID_DEVICE_PATH PciRootBridge;
+ PCI_DEVICE_PATH IsaBridge;
+ ACPI_HID_DEVICE_PATH IsaSerial;
+ UART_DEVICE_PATH Uart;
+ VENDOR_DEVICE_PATH TerminalType;
+ EFI_DEVICE_PATH_PROTOCOL End;
+} PLATFORM_ISA_SERIAL_DEVICE_PATH;
+
+//
+// Platform BDS Functions
+//
+
+
+/**
+ Perform the memory test base on the memory test intensive level,
+ and update the memory resource.
+
+ @param Level The memory test intensive level.
+
+ @retval EFI_STATUS Success test all the system memory and update
+ the memory resource
+
+**/
+EFI_STATUS
+MemoryTest (
+ IN EXTENDMEM_COVERAGE_LEVEL Level
+ );
+
+VOID
+ConnectSequence (
+ IN EFI_BOOT_MODE BootMode
+ );
+
+
+INTN
+EFIAPI
+CompareBootOption (
+ CONST VOID *Left,
+ CONST VOID *Right
+ );
+
+
+VOID
+RegisterStaticHotkey (
+ VOID
+ );
+VOID
+RegisterDefaultBootOption (
+ VOID
+ );
+
+#endif
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
new file mode 100644
index 0000000000..b04169ad33
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
@@ -0,0 +1,95 @@
+### @file
+# Component name for module DxePlatformBootManagerLib
+#
+# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+###
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = DxePlatformBootManagerLib
+ FILE_GUID = A6BC385D-59E5-4B77-87D7-200ABAA83C15
+ VERSION_STRING = 1.0
+ MODULE_TYPE = DXE_DRIVER
+ UEFI_SPECIFICATION_VERSION = 2.10
+ LIBRARY_CLASS = PlatformBootManagerLib|DXE_DRIVER
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 EBC
+#
+
+[LibraryClasses]
+ BaseLib
+ MemoryAllocationLib
+ UefiBootServicesTableLib
+ UefiRuntimeServicesTableLib
+ BaseMemoryLib
+ DebugLib
+ PcdLib
+ PrintLib
+ DevicePathLib
+ UefiLib
+ HobLib
+ DxeServicesLib
+ DxeServicesTableLib
+ HiiLib
+ UefiBootManagerLib
+ PerformanceLib
+ TimerLib
+ Tcg2PhysicalPresenceLib
+ CapsuleLib
+ BootLogoLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ SecurityPkg/SecurityPkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+
+[Pcd]
+ gMinPlatformPkgTokenSpaceGuid.PcdTpm2Enable ## CONSUMES
+ gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut ## PRODUCES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution ## PRODUCES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution ## PRODUCES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow ## PRODUCES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn ## PRODUCES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutColumn ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutRow ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution ## CONSUMES
+ gEfiMdeModulePkgTokenSpaceGuid.PcdConInConnectOnDemand ## PRODUCES
+ gMinPlatformPkgTokenSpaceGuid.PcdPlatformMemoryCheckLevel ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdTrustedConsoleInputDevicePath ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdTrustedConsoleOutputDevicePath ## CONSUMES
+ gMinPlatformPkgTokenSpaceGuid.PcdTrustedStorageDevicePath ## CONSUMES
+
+[Sources]
+ BdsPlatform.c
+ BdsPlatform.h
+ PlatformBootOption.c
+ MemoryTest.c
+
+[Protocols]
+ gEfiPciRootBridgeIoProtocolGuid ## CONSUMES
+ gEfiPciIoProtocolGuid ## CONSUMES
+ gEfiCpuIo2ProtocolGuid ## CONSUMES
+ gEfiDxeSmmReadyToLockProtocolGuid ## PRODUCES
+ gEfiGenericMemTestProtocolGuid ## CONSUMES
+ gEfiDiskInfoProtocolGuid ## CONSUMES
+ gEfiDevicePathToTextProtocolGuid ## CONSUMES
+ gEfiSimpleTextInputExProtocolGuid ## CONSUMES
+ gEfiFirmwareVolume2ProtocolGuid ## CONSUMES
+ gEfiFormBrowser2ProtocolGuid ## CONSUMES
+ gEfiGenericMemTestProtocolGuid ## CONSUMES
+
+[Guids]
+ gEfiGlobalVariableGuid ## PRODUCES
+ gEfiMemoryOverwriteControlDataGuid ## PRODUCES
+ gEfiEndOfDxeEventGroupGuid ## CONSUMES
+
+[Depex.common.DXE_DRIVER]
+ gEfiVariableArchProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/MemoryTest.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/MemoryTest.c
new file mode 100644
index 0000000000..654845349a
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/MemoryTest.c
@@ -0,0 +1,83 @@
+/** @file
+ Perform the platform memory test
+
+Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "BdsPlatform.h"
+#include <Protocol/GenericMemoryTest.h>
+
+/**
+ Perform the memory test base on the memory test intensive level,
+ and update the memory resource.
+
+ @param Level The memory test intensive level.
+
+ @retval EFI_STATUS Success test all the system memory and update
+ the memory resource
+
+**/
+EFI_STATUS
+MemoryTest (
+ IN EXTENDMEM_COVERAGE_LEVEL Level
+ )
+{
+ EFI_STATUS Status;
+ BOOLEAN RequireSoftECCInit;
+ EFI_GENERIC_MEMORY_TEST_PROTOCOL *GenMemoryTest;
+ UINT64 TestedMemorySize;
+ UINT64 TotalMemorySize;
+ BOOLEAN ErrorOut;
+ BOOLEAN TestAbort;
+
+ TestedMemorySize = 0;
+ TotalMemorySize = 0;
+ ErrorOut = FALSE;
+ TestAbort = FALSE;
+
+ RequireSoftECCInit = FALSE;
+
+ Status = gBS->LocateProtocol (
+ &gEfiGenericMemTestProtocolGuid,
+ NULL,
+ (VOID **) &GenMemoryTest
+ );
+ if (EFI_ERROR (Status)) {
+ return EFI_SUCCESS;
+ }
+
+ Status = GenMemoryTest->MemoryTestInit (
+ GenMemoryTest,
+ Level,
+ &RequireSoftECCInit
+ );
+ if (Status == EFI_NO_MEDIA) {
+ //
+ // The PEI codes also have the relevant memory test code to check the memory,
+ // it can select to test some range of the memory or all of them. If PEI code
+ // checks all the memory, this BDS memory test will has no not-test memory to
+ // do the test, and then the status of EFI_NO_MEDIA will be returned by
+ // "MemoryTestInit". So it does not need to test memory again, just return.
+ //
+ return EFI_SUCCESS;
+ }
+
+ do {
+ Status = GenMemoryTest->PerformMemoryTest (
+ GenMemoryTest,
+ &TestedMemorySize,
+ &TotalMemorySize,
+ &ErrorOut,
+ TestAbort
+ );
+ if (ErrorOut && (Status == EFI_DEVICE_ERROR)) {
+ ASSERT (0);
+ }
+ } while (Status != EFI_NOT_FOUND);
+
+ Status = GenMemoryTest->Finished (GenMemoryTest);
+
+ return EFI_SUCCESS;
+}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/PlatformBootOption.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/PlatformBootOption.c
new file mode 100644
index 0000000000..84aa097d58
--- /dev/null
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/PlatformBootOption.c
@@ -0,0 +1,559 @@
+/** @file
+ Driver for Platform Boot Options support.
+
+Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "BdsPlatform.h"
+
+#include <Library/PcdLib.h>
+
+BOOLEAN mContinueBoot = FALSE;
+BOOLEAN mBootMenuBoot = FALSE;
+BOOLEAN mPxeBoot = FALSE;
+BOOLEAN mHotKeypressed = FALSE;
+EFI_EVENT HotKeyEvent = NULL;
+
+UINTN mBootMenuOptionNumber;
+
+EFI_DEVICE_PATH_PROTOCOL *
+BdsCreateShellDevicePath (
+ VOID
+ )
+/*++
+
+Routine Description:
+
+ This function will create a SHELL BootOption to boot.
+
+Arguments:
+
+ None.
+
+Returns:
+
+ Shell Device path for booting.
+
+--*/
+{
+ UINTN FvHandleCount;
+ EFI_HANDLE *FvHandleBuffer;
+ UINTN Index;
+ EFI_STATUS Status;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
+ UINTN Size;
+ UINT32 AuthenticationStatus;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ VOID *Buffer;
+
+ DevicePath = NULL;
+ Status = EFI_SUCCESS;
+
+ DEBUG ((DEBUG_INFO, "BdsCreateShellDevicePath\n"));
+ gBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiFirmwareVolume2ProtocolGuid,
+ NULL,
+ &FvHandleCount,
+ &FvHandleBuffer
+ );
+
+ for (Index = 0; Index < FvHandleCount; Index++) {
+ gBS->HandleProtocol (
+ FvHandleBuffer[Index],
+ &gEfiFirmwareVolume2ProtocolGuid,
+ (VOID **) &Fv
+ );
+
+ Buffer = NULL;
+ Size = 0;
+ Status = Fv->ReadSection (
+ Fv,
+ &gUefiShellFileGuid,
+ EFI_SECTION_PE32,
+ 0,
+ &Buffer,
+ &Size,
+ &AuthenticationStatus
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // Skip if no shell file in the FV
+ //
+ continue;
+ } else {
+ //
+ // Found the shell
+ //
+ break;
+ }
+ }
+
+ if (EFI_ERROR (Status)) {
+ //
+ // No shell present
+ //
+ if (FvHandleCount) {
+ FreePool (FvHandleBuffer);
+ }
+ return NULL;
+ }
+ //
+ // Build the shell boot option
+ //
+ DevicePath = DevicePathFromHandle (FvHandleBuffer[Index]);
+
+ if (FvHandleCount) {
+ FreePool (FvHandleBuffer);
+ }
+
+ return DevicePath;
+}
+
+
+EFI_STATUS
+CreateFvBootOption (
+ EFI_GUID *FileGuid,
+ CHAR16 *Description,
+ EFI_BOOT_MANAGER_LOAD_OPTION *BootOption,
+ UINT32 Attributes,
+ UINT8 *OptionalData, OPTIONAL
+ UINT32 OptionalDataSize
+ )
+{
+ EFI_STATUS Status;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
+ MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
+ UINT32 AuthenticationStatus;
+ VOID *Buffer;
+ UINTN Size;
+
+ if ((BootOption == NULL) || (FileGuid == NULL) || (Description == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ EfiInitializeFwVolDevicepathNode (&FileNode, FileGuid);
+
+ if (!CompareGuid (&gUefiShellFileGuid, FileGuid)) {
+ Status = gBS->HandleProtocol (
+ gImageHandle,
+ &gEfiLoadedImageProtocolGuid,
+ (VOID **) &LoadedImage
+ );
+ if (!EFI_ERROR (Status)) {
+ Status = gBS->HandleProtocol (
+ LoadedImage->DeviceHandle,
+ &gEfiFirmwareVolume2ProtocolGuid,
+ (VOID **) &Fv
+ );
+ if (!EFI_ERROR (Status)) {
+ Buffer = NULL;
+ Size = 0;
+ Status = Fv->ReadSection (
+ Fv,
+ FileGuid,
+ EFI_SECTION_PE32,
+ 0,
+ &Buffer,
+ &Size,
+ &AuthenticationStatus
+ );
+ if (Buffer != NULL) {
+ FreePool (Buffer);
+ }
+ }
+ }
+ if (EFI_ERROR (Status)) {
+ return EFI_NOT_FOUND;
+ }
+
+ DevicePath = AppendDevicePathNode (
+ DevicePathFromHandle (LoadedImage->DeviceHandle),
+ (EFI_DEVICE_PATH_PROTOCOL *) &FileNode
+ );
+ } else {
+ DevicePath = AppendDevicePathNode (
+ BdsCreateShellDevicePath (),
+ (EFI_DEVICE_PATH_PROTOCOL *) &FileNode
+ );
+ }
+
+ Status = EfiBootManagerInitializeLoadOption (
+ BootOption,
+ LoadOptionNumberUnassigned,
+ LoadOptionTypeBoot,
+ Attributes,
+ Description,
+ DevicePath,
+ OptionalData,
+ OptionalDataSize
+ );
+ FreePool (DevicePath);
+ return Status;
+}
+
+EFI_GUID mUiFile = {
+ 0x462CAA21, 0x7614, 0x4503, { 0x83, 0x6E, 0x8A, 0xB6, 0xF4, 0x66, 0x23, 0x31 }
+};
+EFI_GUID mBootMenuFile = {
+ 0xEEC25BDC, 0x67F2, 0x4D95, { 0xB1, 0xD5, 0xF8, 0x1B, 0x20, 0x39, 0xD1, 0x1D }
+};
+
+
+/**
+ Return the index of the load option in the load option array.
+
+ The function consider two load options are equal when the
+ OptionType, Attributes, Description, FilePath and OptionalData are equal.
+
+ @param Key Pointer to the load option to be found.
+ @param Array Pointer to the array of load options to be found.
+ @param Count Number of entries in the Array.
+
+ @retval -1 Key wasn't found in the Array.
+ @retval 0 ~ Count-1 The index of the Key in the Array.
+**/
+INTN
+PlatformFindLoadOption (
+ IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Key,
+ IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Array,
+ IN UINTN Count
+ )
+{
+ UINTN Index;
+
+ for (Index = 0; Index < Count; Index++) {
+ if ((Key->OptionType == Array[Index].OptionType) &&
+ (Key->Attributes == Array[Index].Attributes) &&
+ (StrCmp (Key->Description, Array[Index].Description) == 0) &&
+ (CompareMem (Key->FilePath, Array[Index].FilePath, GetDevicePathSize (Key->FilePath)) == 0) &&
+ (Key->OptionalDataSize == Array[Index].OptionalDataSize) &&
+ (CompareMem (Key->OptionalData, Array[Index].OptionalData, Key->OptionalDataSize) == 0)) {
+ return (INTN) Index;
+ }
+ }
+
+ return -1;
+}
+
+UINTN
+RegisterFvBootOption (
+ EFI_GUID *FileGuid,
+ CHAR16 *Description,
+ UINTN Position,
+ UINT32 Attributes,
+ UINT8 *OptionalData, OPTIONAL
+ UINT32 OptionalDataSize
+ )
+{
+ EFI_STATUS Status;
+ UINTN OptionIndex;
+ EFI_BOOT_MANAGER_LOAD_OPTION NewOption;
+ EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
+ UINTN BootOptionCount;
+
+ NewOption.OptionNumber = LoadOptionNumberUnassigned;
+ Status = CreateFvBootOption (FileGuid, Description, &NewOption, Attributes, OptionalData, OptionalDataSize);
+ if (!EFI_ERROR (Status)) {
+ BootOptions = EfiBootManagerGetLoadOptions (&BootOptionCount, LoadOptionTypeBoot);
+
+ OptionIndex = PlatformFindLoadOption (&NewOption, BootOptions, BootOptionCount);
+
+ if (OptionIndex == -1) {
+ Status = EfiBootManagerAddLoadOptionVariable (&NewOption, Position);
+ ASSERT_EFI_ERROR (Status);
+ } else {
+ NewOption.OptionNumber = BootOptions[OptionIndex].OptionNumber;
+ }
+ EfiBootManagerFreeLoadOption (&NewOption);
+ EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
+ }
+
+ return NewOption.OptionNumber;
+}
+
+
+
+VOID
+EFIAPI
+PlatformBootManagerWaitCallback (
+ UINT16 TimeoutRemain
+ )
+{
+ EFI_STATUS Status;
+ EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TxtInEx;
+ EFI_KEY_DATA KeyData;
+ BOOLEAN PausePressed;
+
+ //
+ // Pause on PAUSE key
+ //
+ Status = gBS->HandleProtocol (gST->ConsoleInHandle, &gEfiSimpleTextInputExProtocolGuid, (VOID **) &TxtInEx);
+ ASSERT_EFI_ERROR (Status);
+
+ PausePressed = FALSE;
+
+ while (TRUE) {
+ Status = TxtInEx->ReadKeyStrokeEx (TxtInEx, &KeyData);
+ if (EFI_ERROR (Status)) {
+ break;
+ }
+
+ if (KeyData.Key.ScanCode == SCAN_PAUSE) {
+ PausePressed = TRUE;
+ break;
+ }
+ }
+
+ //
+ // Loop until non-PAUSE key pressed
+ //
+ while (PausePressed) {
+ Status = TxtInEx->ReadKeyStrokeEx (TxtInEx, &KeyData);
+ if (!EFI_ERROR (Status)) {
+ DEBUG ((
+ DEBUG_INFO, "[PauseCallback] %x/%x %x/%x\n",
+ KeyData.Key.ScanCode, KeyData.Key.UnicodeChar,
+ KeyData.KeyState.KeyShiftState, KeyData.KeyState.KeyToggleState
+ ));
+ PausePressed = (BOOLEAN) (KeyData.Key.ScanCode == SCAN_PAUSE);
+ }
+ }
+}
+
+
+EFI_GUID gUefiShellFileGuid = { 0x7C04A583, 0x9E3E, 0x4f1c, { 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 0xB4, 0xD1 } };
+
+#define INTERNAL_UEFI_SHELL_NAME L"Internal UEFI Shell 2.0"
+#define UEFI_HARD_DRIVE_NAME L"UEFI Hard Drive"
+
+VOID
+RegisterDefaultBootOption (
+ VOID
+ )
+{
+#if 0
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
+ MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode;
+#endif
+ UINT16 *ShellData;
+ UINT32 ShellDataSize;
+
+ ShellData = NULL;
+ ShellDataSize = 0;
+ RegisterFvBootOption (&gUefiShellFileGuid, INTERNAL_UEFI_SHELL_NAME, (UINTN) -1, LOAD_OPTION_ACTIVE, (UINT8 *)ShellData, ShellDataSize);
+
+ //
+ // Boot Menu
+ //
+ mBootMenuOptionNumber = RegisterFvBootOption (&mBootMenuFile, L"Boot Device List", (UINTN) -1, LOAD_OPTION_CATEGORY_APP | LOAD_OPTION_ACTIVE | LOAD_OPTION_HIDDEN, NULL, 0);
+
+ if (mBootMenuOptionNumber == LoadOptionNumberUnassigned) {
+ DEBUG ((DEBUG_INFO, "BootMenuOptionNumber (%d) should not be same to LoadOptionNumberUnassigned(%d).\n", mBootMenuOptionNumber, LoadOptionNumberUnassigned));
+ }
+#if 0
+ //
+ // Boot Manager Menu
+ //
+ EfiInitializeFwVolDevicepathNode (&FileNode, &mUiFile);
+
+ gBS->HandleProtocol (
+ gImageHandle,
+ &gEfiLoadedImageProtocolGuid,
+ (VOID **) &LoadedImage
+ );
+ DevicePath = AppendDevicePathNode (DevicePathFromHandle (LoadedImage->DeviceHandle), (EFI_DEVICE_PATH_PROTOCOL *) &FileNode);
+#endif
+
+}
+
+VOID
+RegisterBootOptionHotkey (
+ UINT16 OptionNumber,
+ EFI_INPUT_KEY *Key,
+ BOOLEAN Add
+ )
+{
+ EFI_STATUS Status;
+
+ if (!Add) {
+ //
+ // No enter hotkey when force to setup or there is no boot option
+ //
+ Status = EfiBootManagerDeleteKeyOptionVariable (NULL, 0, Key, NULL);
+ ASSERT (Status == EFI_SUCCESS || Status == EFI_NOT_FOUND);
+ } else {
+ //
+ // Register enter hotkey for the first boot option
+ //
+ Status = EfiBootManagerAddKeyOptionVariable (NULL, OptionNumber, 0, Key,NULL);
+ ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);
+ }
+}
+
+EFI_STATUS
+EFIAPI
+DetectKeypressCallback (
+ IN EFI_KEY_DATA *KeyData
+)
+{
+ mHotKeypressed = TRUE;
+
+ if (HotKeyEvent != NULL) {
+ gBS->SignalEvent(HotKeyEvent);
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This function is called after all the boot options are enumerated and ordered properly.
+**/
+VOID
+RegisterStaticHotkey (
+ VOID
+ )
+{
+
+ EFI_INPUT_KEY Enter;
+ EFI_KEY_DATA F2;
+ EFI_KEY_DATA F7;
+ BOOLEAN EnterSetup;
+ EFI_STATUS Status;
+ EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
+
+ EnterSetup = FALSE;
+
+ //
+ // [Enter]
+ //
+ mContinueBoot = !EnterSetup;
+ if (mContinueBoot) {
+ Enter.ScanCode = SCAN_NULL;
+ Enter.UnicodeChar = CHAR_CARRIAGE_RETURN;
+ EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL);
+ }
+
+
+ //
+ // [F2]/[F7]
+ //
+ F2.Key.ScanCode = SCAN_F2;
+ F2.Key.UnicodeChar = CHAR_NULL;
+ F2.KeyState.KeyShiftState = EFI_SHIFT_STATE_VALID;
+ F2.KeyState.KeyToggleState = 0;
+ Status = EfiBootManagerGetBootManagerMenu (&BootOption);
+ ASSERT_EFI_ERROR (Status);
+ RegisterBootOptionHotkey ((UINT16) BootOption.OptionNumber, &F2.Key, TRUE);
+ EfiBootManagerFreeLoadOption (&BootOption);
+
+ F7.Key.ScanCode = SCAN_F7;
+ F7.Key.UnicodeChar = CHAR_NULL;
+ F7.KeyState.KeyShiftState = EFI_SHIFT_STATE_VALID;
+ F7.KeyState.KeyToggleState = 0;
+ mBootMenuBoot = !EnterSetup;
+ RegisterBootOptionHotkey ((UINT16) mBootMenuOptionNumber, &F7.Key, mBootMenuBoot);
+
+}
+
+UINT8
+BootOptionType (
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
+ )
+{
+ EFI_DEVICE_PATH_PROTOCOL *Node;
+ EFI_DEVICE_PATH_PROTOCOL *NextNode;
+
+ for (Node = DevicePath; !IsDevicePathEndType (Node); Node = NextDevicePathNode (Node)) {
+ if (DevicePathType (Node) == MESSAGING_DEVICE_PATH) {
+ //
+ // Make sure the device path points to the driver device.
+ //
+ NextNode = NextDevicePathNode (Node);
+ if (DevicePathSubType(NextNode) == MSG_DEVICE_LOGICAL_UNIT_DP) {
+ //
+ // if the next node type is Device Logical Unit, which specify the Logical Unit Number (LUN),
+ // skip it
+ //
+ NextNode = NextDevicePathNode (NextNode);
+ }
+ if (IsDevicePathEndType (NextNode)) {
+ if ((DevicePathType (Node) == MESSAGING_DEVICE_PATH)) {
+ return DevicePathSubType (Node);
+ } else {
+ return MSG_SATA_DP;
+ }
+ }
+ }
+ }
+
+ return (UINT8) -1;
+}
+
+/**
+ Returns the priority number.
+ OptionType EFI
+ ------------------------------------
+ PXE 2
+ DVD 4
+ USB 6
+ NVME 7
+ HDD 8
+ EFI Shell 9
+ Others 100
+
+ @param BootOption
+**/
+UINTN
+BootOptionPriority (
+ CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOption
+ )
+{
+ //
+ // EFI boot options
+ //
+ switch (BootOptionType (BootOption->FilePath)) {
+ case MSG_MAC_ADDR_DP:
+ case MSG_VLAN_DP:
+ case MSG_IPv4_DP:
+ case MSG_IPv6_DP:
+ return 2;
+
+ case MSG_SATA_DP:
+ case MSG_ATAPI_DP:
+ case MSG_UFS_DP:
+ case MSG_NVME_NAMESPACE_DP:
+ return 4;
+
+ case MSG_USB_DP:
+ return 6;
+
+ }
+ if (StrCmp (BootOption->Description, INTERNAL_UEFI_SHELL_NAME) == 0) {
+ if (PcdGetBool (PcdBootToShellOnly)) {
+ return 0;
+ }
+ return 9;
+ }
+ if (StrCmp (BootOption->Description, UEFI_HARD_DRIVE_NAME) == 0) {
+ return 8;
+ }
+ return 100;
+}
+
+INTN
+EFIAPI
+CompareBootOption (
+ CONST VOID *Left,
+ CONST VOID *Right
+ )
+{
+ return BootOptionPriority ((EFI_BOOT_MANAGER_LOAD_OPTION *) Left) -
+ BootOptionPriority ((EFI_BOOT_MANAGER_LOAD_OPTION *) Right);
+}
+
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
deleted file mode 100644
index 4adca1b465..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
+++ /dev/null
@@ -1,3092 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- BdsPlatform.c
-
-Abstract:
-
- This file include all platform action which can be customized
- by IBV/OEM.
-
---*/
-
-#include "BdsPlatform.h"
-#include "SetupMode.h"
-#include <Guid/SetupVariable.h>
-#include <Library/TcgPhysicalPresenceLib.h>
-#include <Library/Tcg2PhysicalPresenceLib.h>
-#include <Protocol/I2cMasterMcg.h>
-#include <TianoApi.h>
-#include <PlatformBaseAddresses.h>
-#include <Protocol/GlobalNvsArea.h>
-#include <Library/DxeServicesTableLib.h>
-#include <Protocol/BlockIo.h>
-#include <PchRegs/PchRegsPcu.h>
-#include <Library/S3BootScriptLib.h>
-#include "PchAccess.h"
-#include "PchRegs/PchRegsSata.h"
-#include <Library/SerialPortLib.h>
-#include <Library/DebugLib.h>
-
-#include <Library/GenericBdsLib/InternalBdsLib.h>
-#include <Library/GenericBdsLib/String.h>
-#include <Library/NetLib.h>
-
-#include <Library/CapsuleLib.h>
-#include <Protocol/EsrtManagement.h>
-
-EFI_GUID *ConnectDriverTable[] = {
- &gEfiMmioDeviceProtocolGuid,
- &gEfiI2cMasterProtocolGuid,
- &gEfiI2cHostProtocolGuid
-};
-
-#define SHELL_ENVIRONMENT_INTERFACE_PROTOCOL \
- { \
- 0x47c7b221, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
- }
-VOID *mShellImageCallbackReg = NULL;
-
-
-
-EFI_USER_PROFILE_HANDLE mCurrentUser = NULL;
-EFI_EVENT mHotKeyTimerEvent = NULL;
-EFI_EVENT mHitHotkeyEvent = NULL;
-EFI_EVENT mUsbKeyboardConnectEvent = NULL;
-BOOLEAN mHotKeyPressed = FALSE;
-VOID *mHitHotkeyRegistration;
-#define KEYBOARD_TIMER_INTERVAL 20000 // 0.02s
-
-VOID
-ConnectUSBController (
- VOID
- );
-
-EFI_STATUS
-PlatformBdsConnectSimpleConsole (
- IN BDS_CONSOLE_CONNECT_ENTRY *PlatformConsole
-);
-
-VOID
-BootIntoFirmwareInterface(
- VOID
- );
-
-VOID
-EFIAPI
-PlatformBdsInitHotKeyEvent (
- VOID
- );
-
-VOID
-EFIAPI
-DisableAhciCtlr (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- UINT32 PmcDisableAddress;
- UINT8 SataStorageAmount;
- UINT32 SataBase;
- UINT16 SataPortStatus;
-
-
- DEBUG ((EFI_D_INFO, "Disable AHCI event is signalled\n"));
- SataStorageAmount = 0;
- SataBase = *(UINT32*) Context;
-
- //
- // BayTrail-M EDS chapter 16 ---- PCI IO Register Offset 92 (SATA Port Control and Status)
- //
- SataPortStatus = MmioRead16 (SataBase + R_PCH_SATA_PCS);
-
- //
- // Bit 8 EN: Port 0 Present
- //
- if ((SataPortStatus & 0x100) == 0x100) {
- SataStorageAmount++;
- }
-
- //
- // Bit 9 EN: Port 1 Present
- //
- if ((SataPortStatus & 0x200) == 0x200) {
- SataStorageAmount++;
- }
-
- //
- // Disable SATA controller when it sets to AHCI mode without carrying any devices
- // in order to prevent AHCI yellow bang under Win device manager.
- //
- if (SataStorageAmount == 0) {
- PmcDisableAddress = (MmioRead32 ((PCH_PCI_EXPRESS_BASE_ADDRESS + (UINT32) (31 << 15)) + R_PCH_LPC_PMC_BASE) & B_PCH_LPC_PMC_BASE_BAR) + R_PCH_PMC_FUNC_DIS;
- MmioOr32 (PmcDisableAddress, B_PCH_PMC_FUNC_DIS_SATA);
- S3BootScriptSaveMemWrite (
- EfiBootScriptWidthUint32,
- (UINTN) PmcDisableAddress,
- 1,
- (VOID *) (UINTN) PmcDisableAddress
- );
- }
-}
-
-VOID
-InstallReadyToLock (
- VOID
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE Handle;
- EFI_SMM_ACCESS2_PROTOCOL *SmmAccess;
- EFI_ACPI_S3_SAVE_PROTOCOL *AcpiS3Save;
-
- //
- // Install DxeSmmReadyToLock protocol prior to the processing of boot options
- //
- Status = gBS->LocateProtocol (
- &gEfiSmmAccess2ProtocolGuid,
- NULL,
- (VOID **) &SmmAccess
- );
- if (!EFI_ERROR (Status)) {
-
- //
- // Prepare S3 information, this MUST be done before DxeSmmReadyToLock
- //
- Status = gBS->LocateProtocol (
- &gEfiAcpiS3SaveProtocolGuid,
- NULL,
- (VOID **)&AcpiS3Save
- );
- if (!EFI_ERROR (Status)) {
- AcpiS3Save->S3Save (AcpiS3Save, NULL);
- }
-
- Handle = NULL;
- Status = gBS->InstallProtocolInterface (
- &Handle,
- &gExitPmAuthProtocolGuid,
- EFI_NATIVE_INTERFACE,
- NULL
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Signal EndOfDxe PI Event
- //
- EfiEventGroupSignal (&gEfiEndOfDxeEventGroupGuid);
-
- Handle = NULL;
- Status = gBS->InstallProtocolInterface (
- &Handle,
- &gEfiDxeSmmReadyToLockProtocolGuid,
- EFI_NATIVE_INTERFACE,
- NULL
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- return ;
-}
-
-VOID
-EFIAPI
-ShellImageCallback (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- BdsSetConsoleMode (TRUE);
- DEBUG ((EFI_D_INFO, "BdsEntry ShellImageCallback \n"));
-}
-
-//
-// BDS Platform Functions
-//
-/**
- Platform Bds init. Include the platform firmware vendor, revision
- and so crc check.
-
- @param VOID
-
- @retval None.
-
-**/
-VOID
-EFIAPI
-PlatformBdsInit (
- VOID
- )
-{
- EFI_STATUS Status;
- EFI_EVENT ShellImageEvent;
- EFI_GUID ShellEnvProtocol = SHELL_ENVIRONMENT_INTERFACE_PROTOCOL;
-
- #ifdef __GNUC__
- SerialPortWrite((UINT8 *)">>>>BdsEntry[GCC]\r\n", 19);
- #else
- SerialPortWrite((UINT8 *)">>>>BdsEntry\r\n", 14);
- #endif
- BdsLibSaveMemoryTypeInformation ();
-
- //
- // Before user authentication, the user identification devices need be connected
- // from the platform customized device paths
- //
- PlatformBdsConnectAuthDevice ();
-
- //
- // As console is not ready, the auto logon user will be identified.
- //
- BdsLibUserIdentify (&mCurrentUser);
-
- //
- // Change Gop mode when boot into Shell
- //
- if (mShellImageCallbackReg == NULL) {
- Status = gBS->CreateEvent (
- EFI_EVENT_NOTIFY_SIGNAL,
- EFI_TPL_CALLBACK,
- ShellImageCallback,
- NULL,
- &ShellImageEvent
- );
- if (!EFI_ERROR (Status)) {
- Status = gBS->RegisterProtocolNotify (
- &ShellEnvProtocol,
- ShellImageEvent,
- &mShellImageCallbackReg
- );
-
- DEBUG ((EFI_D_INFO, "BdsEntry ShellImageCallback \n"));
- }
- }
-}
-
-EFI_STATUS
-GetGopDevicePath (
- IN EFI_DEVICE_PATH_PROTOCOL *PciDevicePath,
- OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath
- )
-{
- UINTN Index;
- EFI_STATUS Status;
- EFI_HANDLE PciDeviceHandle;
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *TempPciDevicePath;
- UINTN GopHandleCount;
- EFI_HANDLE *GopHandleBuffer;
-
- UINTN VarSize;
- SYSTEM_CONFIGURATION mSystemConfiguration;
-
- if (PciDevicePath == NULL || GopDevicePath == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Initialize the GopDevicePath to be PciDevicePath
- //
- *GopDevicePath = PciDevicePath;
- TempPciDevicePath = PciDevicePath;
-
- Status = gBS->LocateDevicePath (
- &gEfiDevicePathProtocolGuid,
- &TempPciDevicePath,
- &PciDeviceHandle
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Try to connect this handle, so that GOP driver could start on this
- // device and create child handles with GraphicsOutput Protocol installed
- // on them, then we get device paths of these child handles and select
- // them as possible console device.
- //
-
- //
- // Select display devices
- //
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"Setup",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &mSystemConfiguration
- );
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"SetupRecovery",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &mSystemConfiguration
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- if(mSystemConfiguration.BootDisplayDevice != 0x0)
- {
- ACPI_ADR_DEVICE_PATH AcpiAdr;
- EFI_DEVICE_PATH_PROTOCOL *MyDevicePath = NULL;
-
- AcpiAdr.Header.Type = ACPI_DEVICE_PATH;
- AcpiAdr.Header.SubType = ACPI_ADR_DP;
-
- switch (mSystemConfiguration.BootDisplayDevice) {
- case 1:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, PORT_CRT, 0); //CRT Device
- break;
- case 2:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL, PORT_B_HDMI, 0); //HDMI Device Port B
- break;
- case 3:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL, PORT_B_DP, 0); //DP PortB
- break;
- case 4:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL, PORT_C_DP, 0); //DP PortC
- break;
- case 5:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL, PORT_C_DP, 0); //eDP Port C
- break;
- case 6:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL, PORT_MIPI_A, 0); //DSI Port A
- break;
- case 7:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL, PORT_MIPI_C, 0); //DSI Port C
- break;
- default:
- AcpiAdr.ADR= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, PORT_CRT, 0);
- break;
- }
-
- SetDevicePathNodeLength (&AcpiAdr.Header, sizeof (ACPI_ADR_DEVICE_PATH));
-
- MyDevicePath = AppendDevicePathNode(MyDevicePath, (EFI_DEVICE_PATH_PROTOCOL*)&AcpiAdr);
-
- gBS->ConnectController (
- PciDeviceHandle,
- NULL,
- MyDevicePath,
- FALSE
- );
-
- FreePool(MyDevicePath);
- }
- else
- {
- gBS->ConnectController (
- PciDeviceHandle,
- NULL,
- NULL,
- FALSE
- );
- }
-
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiGraphicsOutputProtocolGuid,
- NULL,
- &GopHandleCount,
- &GopHandleBuffer
- );
- if (!EFI_ERROR (Status)) {
- //
- // Add all the child handles as possible Console Device
- //
- for (Index = 0; Index < GopHandleCount; Index++) {
- Status = gBS->HandleProtocol (
- GopHandleBuffer[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID**)&TempDevicePath
- );
- if (EFI_ERROR (Status)) {
- continue;
- }
- if (CompareMem (
- PciDevicePath,
- TempDevicePath,
- GetDevicePathSize (PciDevicePath) - END_DEVICE_PATH_LENGTH
- ) == 0) {
- //
- // In current implementation, we only enable one of the child handles
- // as console device, i.e. sotre one of the child handle's device
- // path to variable "ConOut"
- // In future, we could select all child handles to be console device
- //
- *GopDevicePath = TempDevicePath;
- }
- }
- gBS->FreePool (GopHandleBuffer);
- }
-
- return EFI_SUCCESS;
-}
-
-/**
-
- Search out all the platform pci or agp video device. The function may will
- find multiple video device, and return all enabled device path.
-
- @param PlugInPciVgaDevicePath Return the platform plug in pci video device
- path if the system have plug in pci video device.
- @param OnboardPciVgaDevicePath Return the platform active agp video device path
- if the system have plug in agp video device or on
- chip agp device.
-
- @retval EFI_SUCCSS Get all platform active video device path.
- @retval EFI_STATUS Return the status of gBS->LocateDevicePath (),
- gBS->ConnectController (),
- and gBS->LocateHandleBuffer ().
-
-**/
-EFI_STATUS
-GetPlugInPciVgaDevicePath (
- IN OUT EFI_DEVICE_PATH_PROTOCOL **PlugInPciVgaDevicePath,
- IN OUT EFI_DEVICE_PATH_PROTOCOL **OnboardPciVgaDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE RootHandle;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- UINTN Index;
- UINTN Index1;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- BOOLEAN PlugInPciVga;
- EFI_PCI_IO_PROTOCOL *PciIo;
- PCI_TYPE00 Pci;
-
- DevicePath = NULL;
- PlugInPciVga = TRUE;
- HandleCount = 0;
- HandleBuffer = NULL;
-
- //
- // Make all the PCI_IO protocols on PCI Seg 0 show up
- //
- BdsLibConnectDevicePath (gPlatformRootBridges[0]);
-
- Status = gBS->LocateDevicePath (
- &gEfiDevicePathProtocolGuid,
- &gPlatformRootBridges[0],
- &RootHandle
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- Status = gBS->ConnectController (
- RootHandle,
- NULL,
- NULL,
- FALSE
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Start to check all the pci io to find all possible VGA device
- //
- HandleCount = 0;
- HandleBuffer = NULL;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiPciIoProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiPciIoProtocolGuid,
- (VOID**)&PciIo
- );
- if (!EFI_ERROR (Status)) {
-
- //
- // Check for all VGA device
- //
- Status = PciIo->Pci.Read (
- PciIo,
- EfiPciIoWidthUint32,
- 0,
- sizeof (Pci) / sizeof (UINT32),
- &Pci
- );
- if (EFI_ERROR (Status)) {
- continue;
- }
-
- //
- // Here we decide which VGA device to enable in PCI bus
- //
- // The first plugin PCI VGA card device will be present as PCI VGA
- // The onchip AGP or AGP card will be present as AGP VGA
- //
- if (!IS_PCI_VGA (&Pci)) {
- continue;
- }
-
- //
- // Set the device as the possible console out device,
- //
- // Below code will make every VGA device to be one
- // of the possibe console out device
- //
- PlugInPciVga = TRUE;
- gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID**)&DevicePath
- );
-
- Index1 = 0;
-
- while (gPlatformAllPossiblePciVgaConsole[Index1] != NULL) {
- if (CompareMem (
- DevicePath,
- gPlatformAllPossiblePciVgaConsole[Index1],
- GetDevicePathSize (gPlatformAllPossiblePciVgaConsole[Index1])
- ) == 0) {
-
- //
- // This device is an AGP device
- //
- *OnboardPciVgaDevicePath = DevicePath;
- PlugInPciVga = FALSE;
- break;
- }
-
- Index1 ++;
- }
-
- if (PlugInPciVga) {
- *PlugInPciVgaDevicePath = DevicePath;
- }
- }
- }
-
- FreePool (HandleBuffer);
-
- return EFI_SUCCESS;
-}
-
-/**
-
- Find the platform active vga, and base on the policy to enable the vga as
- the console out device. The policy is driven by one setup variable "VBIOS".
-
- None.
-
- @param EFI_UNSUPPORTED There is no active vga device
-
- @retval EFI_STATUS Return the status of BdsLibGetVariableAndSize ()
-
-**/
-EFI_STATUS
-PlatformBdsForceActiveVga (
- VOID
- )
-{
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *PlugInPciVgaDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *OnboardPciVgaDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *DevicePathFirst;
- EFI_DEVICE_PATH_PROTOCOL *DevicePathSecond;
- EFI_DEVICE_PATH_PROTOCOL *GopDevicePath;
- UINTN VarSize;
- SYSTEM_CONFIGURATION mSystemConfiguration;
-
- Status = EFI_SUCCESS;
- PlugInPciVgaDevicePath = NULL;
- OnboardPciVgaDevicePath = NULL;
-
- //
- // Check the policy which is the first enabled VGA
- //
- GetPlugInPciVgaDevicePath (&PlugInPciVgaDevicePath, &OnboardPciVgaDevicePath);
-
- if (PlugInPciVgaDevicePath == NULL && OnboardPciVgaDevicePath == NULL) {
- return EFI_UNSUPPORTED;
- }
-
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"Setup",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &mSystemConfiguration
- );
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"SetupRecovery",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &mSystemConfiguration
- );
- ASSERT_EFI_ERROR (Status);
- }
-
-
- if ((PlugInPciVgaDevicePath == NULL && OnboardPciVgaDevicePath != NULL) ) {
- DEBUG ((EFI_D_ERROR,"Update onboard PCI VGA ...\n"));
- DevicePathFirst = OnboardPciVgaDevicePath;
- DevicePathSecond = PlugInPciVgaDevicePath;
- goto UpdateConOut;
- }
- if(OnboardPciVgaDevicePath != NULL && mSystemConfiguration.PrimaryVideoAdaptor == 0) {
- DEBUG ((EFI_D_ERROR,"Update onboard PCI VGA When set primary!!!...\n"));
- DevicePathFirst = OnboardPciVgaDevicePath;
- DevicePathSecond = PlugInPciVgaDevicePath;
- goto UpdateConOut;
- }
-
- DEBUG ((EFI_D_ERROR,"Update plug in PCI VGA ...\n"));
- DevicePathFirst = PlugInPciVgaDevicePath;
- DevicePathSecond = OnboardPciVgaDevicePath;
-
-UpdateConOut:
- GetGopDevicePath (DevicePathFirst, &GopDevicePath);
- DevicePathFirst = GopDevicePath;
-
- Status = BdsLibUpdateConsoleVariable (
- L"ConOut",
- DevicePathFirst,
- DevicePathSecond
- );
-
- return Status;
-}
-
-VOID
-UpdateConsoleResolution(
- VOID
- )
-{
- UINT32 HorizontalResolution;
- UINT32 VerticalResolution;
- SYSTEM_CONFIGURATION SystemConfiguration;
- UINTN VarSize;
- EFI_STATUS Status;
-
-
- HorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);
- VerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);
-
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"Setup",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &SystemConfiguration
- );
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"SetupRecovery",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &SystemConfiguration
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- switch (SystemConfiguration.IgdFlatPanel) {
-
- case 0:
- //
- // Use the detault PCD values.
- //
- break;
-
- case 1:
- HorizontalResolution = 640;
- VerticalResolution = 480;
- break;
-
- case 2:
- HorizontalResolution = 800;
- VerticalResolution = 600;
- break;
-
- case 3:
- HorizontalResolution = 1024;
- VerticalResolution = 768;
- break;
-
- case 4:
- HorizontalResolution = 1280;
- VerticalResolution = 1024;
- break;
-
- case 5:
- HorizontalResolution = 1366;
- VerticalResolution = 768;
- break;
-
- case 6:
- HorizontalResolution = 1680;
- VerticalResolution = 1050;
- break;
-
- case 7:
- HorizontalResolution = 1920;
- VerticalResolution = 1200;
- break;
-
- case 8:
- HorizontalResolution = 1280;
- VerticalResolution = 800;
- break;
- }
-
- PcdSet32 (PcdSetupVideoHorizontalResolution, HorizontalResolution);
- PcdSet32 (PcdSetupVideoVerticalResolution, VerticalResolution);
- DEBUG ((EFI_D_ERROR, "HorizontalResolution = %x; VerticalResolution = %x", HorizontalResolution, VerticalResolution));
-
- return;
-}
-
-/**
- Connect the predefined platform default console device. Always try to find
- and enable the vga device if have.
-
- @param PlatformConsole Predefined platform default console device array.
-
- @retval EFI_SUCCESS Success connect at least one ConIn and ConOut
- device, there must have one ConOut device is
- active vga device.
-
- @retval EFI_STATUS Return the status of
- BdsLibConnectAllDefaultConsoles ()
-
-**/
-EFI_STATUS
-PlatformBdsConnectConsole (
- IN BDS_CONSOLE_CONNECT_ENTRY *PlatformConsole
-)
-{
- EFI_STATUS Status;
- UINTN Index;
- EFI_DEVICE_PATH_PROTOCOL *VarConout;
- EFI_DEVICE_PATH_PROTOCOL *VarConin;
- UINTN DevicePathSize;
-
- UpdateConsoleResolution();
-
- Index = 0;
- Status = EFI_SUCCESS;
- DevicePathSize = 0;
- VarConout = BdsLibGetVariableAndSize (
- L"ConOut",
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
- VarConin = BdsLibGetVariableAndSize (
- L"ConIn",
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
- if (VarConout == NULL || VarConin == NULL) {
- //
- // Have chance to connect the platform default console,
- // the platform default console is the minimum device group
- // the platform should support
- //
- while (PlatformConsole[Index].DevicePath != NULL) {
-
- //
- // Update the console variable with the connect type
- //
- if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) == CONSOLE_IN) {
- BdsLibUpdateConsoleVariable (L"ConIn", PlatformConsole[Index].DevicePath, NULL);
- }
-
- if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) == CONSOLE_OUT) {
- BdsLibUpdateConsoleVariable (L"ConOut", PlatformConsole[Index].DevicePath, NULL);
- }
-
- if ((PlatformConsole[Index].ConnectType & STD_ERROR) == STD_ERROR) {
- BdsLibUpdateConsoleVariable (L"ErrOut", PlatformConsole[Index].DevicePath, NULL);
- }
-
- Index ++;
- }
- }
-
- //
- // Make sure we have at least one active VGA, and have the right
- // active VGA in console variable
- //
- Status = PlatformBdsForceActiveVga ();
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- DEBUG ((EFI_D_INFO, "DISPLAY INIT DONE\n"));
-
- //
- // Connect the all the default console with current console variable
- //
- Status = BdsLibConnectAllDefaultConsoles ();
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Connect with predefined platform connect sequence,
- the OEM/IBV can customize with their own connect sequence.
-
- @param None.
-
- @retval None.
-
-**/
-VOID
-PlatformBdsConnectSequence (
- VOID
- )
-{
- UINTN Index;
-
- Index = 0;
-
- //
- // Here we can get the customized platform connect sequence
- // Notes: we can connect with new variable which record the
- // last time boots connect device path sequence
- //
- while (gPlatformConnectSequence[Index] != NULL) {
-
- //
- // Build the platform boot option
- //
- BdsLibConnectDevicePath (gPlatformConnectSequence[Index]);
- Index ++;
- }
-
- //
- // Just use the simple policy to connect all devices
- // There should be no difference between debug tip and release tip, or it will be extremely hard to debug.
- //
- // There is case that IdeController driver will write boot script in driver model Start() function. It will be rejected by boot script save.
- // It is only found when DEBUG disabled, because we are using BdsLibConnectAll() when DEBUG enabled.
- //
- // So we use BdsLibConnectAll() here to make sure IdeController.Start() is invoked before InstallReadyToLock().
- // We may also consider to connect SataController only later if needed.
- //
- BdsLibConnectAll ();
-}
-
-/**
-
- Load the predefined driver option, OEM/IBV can customize this
- to load their own drivers
-
- @param BdsDriverLists The header of the driver option link list.
-
- @retval None.
-
-**/
-VOID
-PlatformBdsGetDriverOption (
- IN OUT LIST_ENTRY *BdsDriverLists
- )
-{
- UINTN Index;
-
- Index = 0;
-
- //
- // Here we can get the customized platform driver option
- //
- while (gPlatformDriverOption[Index] != NULL) {
-
- //
- // Build the platform boot option
- //
- BdsLibRegisterNewOption (BdsDriverLists, gPlatformDriverOption[Index], NULL, L"DriverOrder");
- Index ++;
- }
-
-}
-
-/**
- This function is used for some critical time if the the system
- have no any boot option, and there is no time out for user to add
- the new boot option. This can also treat as the platform default
- boot option.
-
- @param BdsBootOptionList The header of the boot option link list.
-
- @retval None.
-
-**/
-VOID
-PlatformBdsPredictBootOption (
- IN OUT LIST_ENTRY *BdsBootOptionList
- )
-{
- UINTN Index;
-
- Index = 0;
-
- //
- // Here give chance to get platform boot option data
- //
- while (gPlatformBootOption[Index] != NULL) {
-
- //
- // Build the platform boot option
- //
- BdsLibRegisterNewOption (BdsBootOptionList, gPlatformBootOption[Index], NULL, L"BootOrder");
- Index ++;
- }
-}
-
-/**
- Perform the platform diagnostic, such like test memory. OEM/IBV also
- can customize this fuction to support specific platform diagnostic.
-
- @param MemoryTestLevel The memory test intensive level
- @param QuietBoot Indicate if need to enable the quiet boot
- @param BaseMemoryTest A pointer to BdsMemoryTest()
-
- @retval None.
-
-**/
-VOID
-PlatformBdsDiagnostics (
- IN EXTENDMEM_COVERAGE_LEVEL MemoryTestLevel,
- IN BOOLEAN QuietBoot,
- IN BASEM_MEMORY_TEST BaseMemoryTest
- )
-{
- EFI_STATUS Status;
-
- //
- // Here we can decide if we need to show
- // the diagnostics screen
- // Notes: this quiet boot code should be remove
- // from the graphic lib
- //
- if (QuietBoot) {
- EnableQuietBoot (PcdGetPtr(PcdLogoFile));
-
- //
- // Perform system diagnostic
- //
- Status = BaseMemoryTest (MemoryTestLevel);
- if (EFI_ERROR (Status)) {
- DisableQuietBoot ();
- }
-
- return;
- }
-
- //
- // Perform system diagnostic
- //
- Status = BaseMemoryTest (MemoryTestLevel);
-}
-
-
-/**
- For EFI boot option, BDS separate them as six types:
- 1. Network - The boot option points to the SimpleNetworkProtocol device.
- Bds will try to automatically create this type boot option when enumerate.
- 2. Shell - The boot option points to internal flash shell.
- Bds will try to automatically create this type boot option when enumerate.
- 3. Removable BlockIo - The boot option only points to the removable media
- device, like USB flash disk, DVD, Floppy etc.
- These device should contain a *removable* blockIo
- protocol in their device handle.
- Bds will try to automatically create this type boot option
- when enumerate.
- 4. Fixed BlockIo - The boot option only points to a Fixed blockIo device,
- like HardDisk.
- These device should contain a *fixed* blockIo
- protocol in their device handle.
- BDS will skip fixed blockIo devices, and NOT
- automatically create boot option for them. But BDS
- will help to delete those fixed blockIo boot option,
- whose description rule conflict with other auto-created
- boot options.
- 5. Non-BlockIo Simplefile - The boot option points to a device whose handle
- has SimpleFileSystem Protocol, but has no blockio
- protocol. These devices do not offer blockIo
- protocol, but BDS still can get the
- \EFI\BOOT\boot{machinename}.EFI by SimpleFileSystem
- Protocol.
- 6. File - The boot option points to a file. These boot options are usually
- created by user manually or OS loader. BDS will not delete or modify
- these boot options.
-
- This function will enumerate all possible boot device in the system, and
- automatically create boot options for Network, Shell, Removable BlockIo,
- and Non-BlockIo Simplefile devices.
- It will only execute once of every boot.
-
- @param BdsBootOptionList The header of the link list which indexed all
- current boot options
-
- @retval EFI_SUCCESS Finished all the boot device enumerate and create
- the boot option base on that boot device
-
- @retval EFI_OUT_OF_RESOURCES Failed to enumerate the boot device and create the boot option list
-**/
-EFI_STATUS
-EFIAPI
-PlatformBdsLibEnumerateAllBootOption (
- IN OUT LIST_ENTRY *BdsBootOptionList
- )
-{
- EFI_STATUS Status;
- UINT16 FloppyNumber;
- UINT16 HarddriveNumber;
- UINT16 CdromNumber;
- UINT16 UsbNumber;
- UINT16 MiscNumber;
- UINT16 ScsiNumber;
- UINT16 NonBlockNumber;
- UINTN NumberBlockIoHandles;
- EFI_HANDLE *BlockIoHandles;
- EFI_BLOCK_IO_PROTOCOL *BlkIo;
- BOOLEAN Removable[2];
- UINTN RemovableIndex;
- UINTN Index;
- UINTN NumOfLoadFileHandles;
- EFI_HANDLE *LoadFileHandles;
- UINTN FvHandleCount;
- EFI_HANDLE *FvHandleBuffer;
- EFI_FV_FILETYPE Type;
- UINTN Size;
- EFI_FV_FILE_ATTRIBUTES Attributes;
- UINT32 AuthenticationStatus;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- UINTN DevicePathType;
- CHAR16 Buffer[40];
- EFI_HANDLE *FileSystemHandles;
- UINTN NumberFileSystemHandles;
- BOOLEAN NeedDelete;
- EFI_IMAGE_DOS_HEADER DosHeader;
- CHAR8 *PlatLang;
- CHAR8 *LastLang;
- EFI_IMAGE_OPTIONAL_HEADER_UNION HdrData;
- EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;
- CHAR16 *MacStr;
- CHAR16 *IPverStr;
- EFI_HANDLE *NetworkHandles;
- UINTN BufferSize;
-
- FloppyNumber = 0;
- HarddriveNumber = 0;
- CdromNumber = 0;
- UsbNumber = 0;
- MiscNumber = 0;
- ScsiNumber = 0;
- PlatLang = NULL;
- LastLang = NULL;
- ZeroMem (Buffer, sizeof (Buffer));
-
- //
- // If the boot device enumerate happened, just get the boot
- // device from the boot order variable
- //
- if (mEnumBootDevice) {
- GetVariable2 (LAST_ENUM_LANGUAGE_VARIABLE_NAME, &gLastEnumLangGuid, (VOID**)&LastLang, NULL);
- GetEfiGlobalVariable2 (L"PlatformLang", (VOID**)&PlatLang, NULL);
- ASSERT (PlatLang != NULL);
- if ((LastLang != NULL) && (AsciiStrCmp (LastLang, PlatLang) == 0)) {
- Status = BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");
- FreePool (LastLang);
- FreePool (PlatLang);
- return Status;
- } else {
- Status = gRT->SetVariable (
- LAST_ENUM_LANGUAGE_VARIABLE_NAME,
- &gLastEnumLangGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- AsciiStrSize (PlatLang),
- PlatLang
- );
- //
- // Failure to set the variable only impacts the performance next time enumerating the boot options.
- //
-
- if (LastLang != NULL) {
- FreePool (LastLang);
- }
- FreePool (PlatLang);
- }
- }
-
- //
- // Notes: this dirty code is to get the legacy boot option from the
- // BBS table and create to variable as the EFI boot option, it should
- // be removed after the CSM can provide legacy boot option directly
- //
- REFRESH_LEGACY_BOOT_OPTIONS;
-
- //
- // Delete invalid boot option
- //
- BdsDeleteAllInvalidEfiBootOption ();
-
- //
- // Parse removable media followed by fixed media.
- // The Removable[] array is used by the for-loop below to create removable media boot options
- // at first, and then to create fixed media boot options.
- //
- Removable[0] = FALSE;
- Removable[1] = TRUE;
-
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiBlockIoProtocolGuid,
- NULL,
- &NumberBlockIoHandles,
- &BlockIoHandles
- );
-
- for (RemovableIndex = 0; RemovableIndex < 2; RemovableIndex++) {
- for (Index = 0; Index < NumberBlockIoHandles; Index++) {
- Status = gBS->HandleProtocol (
- BlockIoHandles[Index],
- &gEfiBlockIoProtocolGuid,
- (VOID **) &BlkIo
- );
- //
- // skip the logical partition
- //
- if (EFI_ERROR (Status) || BlkIo->Media->LogicalPartition) {
- continue;
- }
-
- //
- // firstly fixed block io then the removable block io
- //
- if (BlkIo->Media->RemovableMedia == Removable[RemovableIndex]) {
- continue;
- }
- DevicePath = DevicePathFromHandle (BlockIoHandles[Index]);
- DevicePathType = BdsGetBootTypeFromDevicePath (DevicePath);
-
- switch (DevicePathType) {
- case BDS_EFI_ACPI_FLOPPY_BOOT:
- if (FloppyNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY)), FloppyNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- FloppyNumber++;
- break;
-
- //
- // Assume a removable SATA device should be the DVD/CD device, a fixed SATA device should be the Hard Drive device.
- //
- case BDS_EFI_MESSAGE_ATAPI_BOOT:
- case BDS_EFI_MESSAGE_SATA_BOOT:
- if (BlkIo->Media->RemovableMedia) {
- if (CdromNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_CD_DVD)), CdromNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_CD_DVD)));
- }
- CdromNumber++;
- } else {
- if (HarddriveNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_HARDDRIVE)), HarddriveNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_HARDDRIVE)));
- }
- HarddriveNumber++;
- }
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Buffer: %S\n", Buffer));
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- break;
-
- case BDS_EFI_MESSAGE_USB_DEVICE_BOOT:
- if (UsbNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_USB)), UsbNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_USB)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- UsbNumber++;
- break;
-
- case BDS_EFI_MESSAGE_SCSI_BOOT:
- if (ScsiNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI)), ScsiNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- ScsiNumber++;
- break;
-
- case BDS_EFI_MESSAGE_MISC_BOOT:
- default:
- if (MiscNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC)), MiscNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- MiscNumber++;
- break;
- }
- }
- }
-
- if (NumberBlockIoHandles != 0) {
- FreePool (BlockIoHandles);
- }
-
- //
- // If there is simple file protocol which does not consume block Io protocol, create a boot option for it here.
- //
- NonBlockNumber = 0;
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiSimpleFileSystemProtocolGuid,
- NULL,
- &NumberFileSystemHandles,
- &FileSystemHandles
- );
- for (Index = 0; Index < NumberFileSystemHandles; Index++) {
- Status = gBS->HandleProtocol (
- FileSystemHandles[Index],
- &gEfiBlockIoProtocolGuid,
- (VOID **) &BlkIo
- );
- if (!EFI_ERROR (Status)) {
- //
- // Skip if the file system handle supports a BlkIo protocol,
- //
- continue;
- }
-
- //
- // Do the removable Media thing. \EFI\BOOT\boot{machinename}.EFI
- // machinename is ia32, ia64, x64, ...
- //
- Hdr.Union = &HdrData;
- NeedDelete = TRUE;
- Status = BdsLibGetImageHeader (
- FileSystemHandles[Index],
- EFI_REMOVABLE_MEDIA_FILE_NAME,
- &DosHeader,
- Hdr
- );
- if (!EFI_ERROR (Status) &&
- EFI_IMAGE_MACHINE_TYPE_SUPPORTED (Hdr.Pe32->FileHeader.Machine) &&
- Hdr.Pe32->OptionalHeader.Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {
- NeedDelete = FALSE;
- }
-
- if (NeedDelete) {
- //
- // No such file or the file is not a EFI application, delete this boot option
- //
- BdsLibDeleteOptionFromHandle (FileSystemHandles[Index]);
- } else {
- if (NonBlockNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NON_BLOCK)), NonBlockNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NON_BLOCK)));
- }
- BdsLibBuildOptionFromHandle (FileSystemHandles[Index], BdsBootOptionList, Buffer);
- NonBlockNumber++;
- }
- }
-
- if (NumberFileSystemHandles != 0) {
- FreePool (FileSystemHandles);
- }
-
- //
- // Check if we have on flash shell
- //
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &FvHandleCount,
- &FvHandleBuffer
- );
- for (Index = 0; Index < FvHandleCount; Index++) {
- gBS->HandleProtocol (
- FvHandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
-
- Status = Fv->ReadFile (
- Fv,
- &gUefiShellFileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (EFI_ERROR (Status)) {
- //
- // Skip if no shell file in the FV
- //
- continue;
- }
- //
- // Build the shell boot option
- //
- BdsLibBuildOptionFromShell (FvHandleBuffer[Index], BdsBootOptionList);
- }
-
- if (FvHandleCount != 0) {
- FreePool (FvHandleBuffer);
- }
-
- //
- // Parse Network Boot Device
- //
- NumOfLoadFileHandles = 0;
- //
- // Search Load File protocol for PXE boot option.
- //
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiLoadFileProtocolGuid,
- NULL,
- &NumOfLoadFileHandles,
- &LoadFileHandles
- );
-
- for (Index = 0; Index < NumOfLoadFileHandles; Index++) {
-
-//
-//Locate EFI_DEVICE_PATH_PROTOCOL to dynamically get IPv4/IPv6 protocol information.
-//
-
- Status = gBS->HandleProtocol (
- LoadFileHandles[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID **) &DevicePath
- );
-
- ASSERT_EFI_ERROR (Status);
-
- while (!IsDevicePathEnd (DevicePath)) {
- if ((DevicePath->Type == MESSAGING_DEVICE_PATH) &&
- (DevicePath->SubType == MSG_IPv4_DP)) {
-
- //
- //Get handle infomation
- //
- BufferSize = 0;
- NetworkHandles = NULL;
- Status = gBS->LocateHandle (
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
-
- if (Status == EFI_BUFFER_TOO_SMALL) {
- NetworkHandles = AllocateZeroPool(BufferSize);
- if (NetworkHandles == NULL) {
- return (EFI_OUT_OF_RESOURCES);
- }
- Status = gBS->LocateHandle(
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
- }
-
- //
- //Get the MAC string
- //
- Status = NetLibGetMacString (
- *NetworkHandles,
- NULL,
- &MacStr
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- IPverStr = L" IPv4";
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s%s%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK)),MacStr,IPverStr);
- break;
- }
- if((DevicePath->Type == MESSAGING_DEVICE_PATH) &&
- (DevicePath->SubType == MSG_IPv6_DP)) {
-
- //
- //Get handle infomation
- //
- BufferSize = 0;
- NetworkHandles = NULL;
- Status = gBS->LocateHandle (
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
-
- if (Status == EFI_BUFFER_TOO_SMALL) {
- NetworkHandles = AllocateZeroPool(BufferSize);
- if (NetworkHandles == NULL) {
- return (EFI_OUT_OF_RESOURCES);
- }
- Status = gBS->LocateHandle(
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
- }
-
- //
- //Get the MAC string
- //
- Status = NetLibGetMacString (
- *NetworkHandles,
- NULL,
- &MacStr
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- IPverStr = L" IPv6";
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s%s%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK)),MacStr,IPverStr);
- break;
- }
- DevicePath = NextDevicePathNode (DevicePath);
- }
-
- BdsLibBuildOptionFromHandle (LoadFileHandles[Index], BdsBootOptionList, Buffer);
- }
-
- if (NumOfLoadFileHandles != 0) {
- FreePool (LoadFileHandles);
- }
-
- //
- // Check if we have on flash shell
- //
- /* gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &FvHandleCount,
- &FvHandleBuffer
- );
- for (Index = 0; Index < FvHandleCount; Index++) {
- gBS->HandleProtocol (
- FvHandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
-
- Status = Fv->ReadFile (
- Fv,
- &gUefiShellFileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (EFI_ERROR (Status)) {
- //
- // Skip if no shell file in the FV
- //
- continue;
- }
- //
- // Build the shell boot option
- //
- BdsLibBuildOptionFromShell (FvHandleBuffer[Index], BdsBootOptionList);
- }
-
- if (FvHandleCount != 0) {
- FreePool (FvHandleBuffer);
- } */
-
- //
- // Make sure every boot only have one time
- // boot device enumerate
- //
- Status = BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");
- mEnumBootDevice = TRUE;
-
- return Status;
-}
-
-
-
-/**
-
- The function will execute with as the platform policy, current policy
- is driven by boot mode. IBV/OEM can customize this code for their specific
- policy action.
-
- @param DriverOptionList - The header of the driver option link list
- @param BootOptionList - The header of the boot option link list
- @param ProcessCapsules - A pointer to ProcessCapsules()
- @param BaseMemoryTest - A pointer to BaseMemoryTest()
-
- @retval None.
-
-**/
-VOID
-EFIAPI
-PlatformBdsPolicyBehavior (
- IN OUT LIST_ENTRY *DriverOptionList,
- IN OUT LIST_ENTRY *BootOptionList,
- IN PROCESS_CAPSULES BdsProcessCapsules,
- IN BASEM_MEMORY_TEST BaseMemoryTest
- )
-{
- EFI_STATUS Status;
- UINT16 Timeout;
- EFI_BOOT_MODE BootMode;
- BOOLEAN DeferredImageExist;
- UINTN Index;
- SYSTEM_CONFIGURATION SystemConfiguration;
- UINTN VarSize;
- PLATFORM_PCI_DEVICE_PATH *EmmcBootDevPath;
- EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsArea;
- EFI_HANDLE FvProtocolHandle;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- UINTN Index1;
- UINTN SataPciRegBase = 0;
- UINT16 SataModeSelect = 0;
- VOID *RegistrationExitPmAuth = NULL;
- EFI_EVENT Event;
- BOOLEAN IsFirstBoot;
- UINT16 *BootOrder;
- UINTN BootOrderSize;
- ESRT_MANAGEMENT_PROTOCOL *EsrtManagement;
-
- Timeout = PcdGet16 (PcdPlatformBootTimeOut);
- if (Timeout > 10 ) {
- //we think the Timeout variable is corrupted
- Timeout = 10;
- }
-
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- NORMAL_SETUP_NAME,
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &SystemConfiguration
- );
-
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
- VarSize = sizeof(SYSTEM_CONFIGURATION);
- Status = gRT->GetVariable(
- L"SetupRecovery",
- &gEfiNormalSetupGuid,
- NULL,
- &VarSize,
- &SystemConfiguration
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- //
- // Load the driver option as the driver option list
- //
- PlatformBdsGetDriverOption (DriverOptionList);
-
- //
- // Get current Boot Mode
- //
- BootMode = GetBootModeHob();
-
- //
- // No deferred images exist by default
- //
- DeferredImageExist = FALSE;
- if ((BootMode != BOOT_WITH_MINIMAL_CONFIGURATION) && (PcdGet32(PcdFlashFvShellSize) > 0)){
- gDS->ProcessFirmwareVolume (
- (VOID *)(UINTN)PcdGet32(PcdFlashFvShellBase),
- PcdGet32(PcdFlashFvShellSize),
- &FvProtocolHandle
- );
- }
-
- if (SystemConfiguration.FastBoot == 1) {
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- if ((BootOrder != NULL) && (BootMode != BOOT_ON_FLASH_UPDATE)) {
- //
- // BootOrder exist, it means system has boot before. We can do fast boot.
- //
- BootMode = BOOT_WITH_MINIMAL_CONFIGURATION;
- }
- }
-
-
- //
- // Use eMMC to boot OS and turn on AHCI, when SATA HDD is diconnected,
- // SATA AHCI CTLR device will show yellow bang, implement this solution to solve it.
- //
- SataPciRegBase = MmPciAddress (0, 0, PCI_DEVICE_NUMBER_PCH_SATA, 0, 0);
- SataModeSelect = MmioRead16 (SataPciRegBase + R_PCH_SATA_MAP) & B_PCH_SATA_MAP_SMS_MASK;
- Status = EFI_SUCCESS;
- if (SataModeSelect != V_PCH_SATA_MAP_SMS_IDE) {
- Status = gBS->CreateEvent (
- EVT_NOTIFY_SIGNAL,
- TPL_CALLBACK,
- DisableAhciCtlr,
- &SataPciRegBase,
- &Event
- );
- if (!EFI_ERROR (Status)) {
- Status = gBS->RegisterProtocolNotify (
- &gExitPmAuthProtocolGuid,
- Event,
- &RegistrationExitPmAuth
- );
- }
- }
-
- Status = gBS->LocateProtocol(&gEsrtManagementProtocolGuid, NULL, (VOID **)&EsrtManagement);
- if (EFI_ERROR(Status)) {
- EsrtManagement = NULL;
- }
-
- DEBUG ((DEBUG_INFO, "BDS: BootMode=%02x\n", BootMode));
-
- switch (BootMode) {
-
- case BOOT_WITH_MINIMAL_CONFIGURATION:
- PlatformBdsInitHotKeyEvent ();
- PlatformBdsConnectSimpleConsole (gPlatformSimpleConsole);
-
-
- //
- // Check to see if it's needed to dispatch more DXE drivers.
- //
- for (Index = 0; Index < sizeof(ConnectDriverTable)/sizeof(EFI_GUID *); Index++) {
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- ConnectDriverTable[Index],
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (!EFI_ERROR (Status)) {
- for (Index1 = 0; Index1 < HandleCount; Index1++) {
- gBS->ConnectController (
- HandleBuffer[Index1],
- NULL,
- NULL,
- TRUE
- );
- }
- }
-
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- }
-
- gDS->Dispatch ();
- }
-
- //
- // Locate the Global NVS Protocol.
- //
- Status = gBS->LocateProtocol (
- &gEfiGlobalNvsAreaProtocolGuid,
- NULL,
- (void **)&GlobalNvsArea
- );
- if (GlobalNvsArea->Area->emmcVersion == 0){
- EmmcBootDevPath = (PLATFORM_PCI_DEVICE_PATH *)gPlatformSimpleBootOption[0];
- EmmcBootDevPath->PciDevice.Device = 0x10;
- }
-
- //
- // Connect boot device here to give time to read keyboard.
- //
- BdsLibConnectDevicePath (gPlatformSimpleBootOption[0]);
-
- //
- // This is a workround for dectecting hotkey from USB keyboard.
- //
- gBS->Stall(KEYBOARD_TIMER_INTERVAL);
-
- if (mHotKeyTimerEvent != NULL) {
- gBS->SetTimer (
- mHotKeyTimerEvent,
- TimerCancel,
- 0
- );
- gBS->CloseEvent (mHotKeyTimerEvent);
- mHotKeyTimerEvent = NULL;
- }
- if (mHotKeyPressed) {
- //
- // Skip show progress count down
- //
- Timeout = 0xFFFF;
- goto FULL_CONFIGURATION;
- }
-
- EnableQuietBoot (PcdGetPtr(PcdLogoFile));
- if (!SystemConfiguration.QuietBoot) {
- PlatformBdsDiagnostics (IGNORE, FALSE, BaseMemoryTest);
- }
-
-
- #ifdef TPM_ENABLED
- TcgPhysicalPresenceLibProcessRequest();
- #endif
-
- if (EsrtManagement != NULL) {
- EsrtManagement->LockEsrtRepository();
- }
-
- //
- // Close boot script and install ready to lock
- //
- InstallReadyToLock ();
-
- //
- // Give one chance to enter the setup if we
- // select Gummiboot "Reboot Into Firmware Interface" and Fast Boot is enabled.
- //
- BootIntoFirmwareInterface();
- break;
-
- case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES:
-
- //
- // In no-configuration boot mode, we can connect the
- // console directly.
- //
- BdsLibConnectAllDefaultConsoles ();
- PlatformBdsDiagnostics (IGNORE, TRUE, BaseMemoryTest);
-
- //
- // Perform some platform specific connect sequence
- //
- PlatformBdsConnectSequence ();
-
- //
- // As console is ready, perform user identification again.
- //
- if (mCurrentUser == NULL) {
- PlatformBdsUserIdentify (&mCurrentUser, &DeferredImageExist);
- if (DeferredImageExist) {
- //
- // After user authentication, the deferred drivers was loaded again.
- // Here, need to ensure the deferred images are connected.
- //
- BdsLibConnectAllDefaultConsoles ();
- PlatformBdsConnectSequence ();
- }
- }
-
- if (EsrtManagement != NULL) {
- EsrtManagement->LockEsrtRepository();
- }
-
- //
- // Close boot script and install ready to lock
- //
- InstallReadyToLock ();
-
- //
- // Notes: current time out = 0 can not enter the
- // front page
- //
- PlatformBdsEnterFrontPageWithHotKey (Timeout, FALSE);
-
- //
- // Check the boot option with the boot option list
- //
- BdsLibBuildOptionFromVar (BootOptionList, L"BootOrder");
- break;
-
- case BOOT_ON_FLASH_UPDATE:
-
- //
- // Boot with the specific configuration
- //
- PlatformBdsConnectConsole (gPlatformConsole);
- PlatformBdsDiagnostics (EXTENSIVE, TRUE, BaseMemoryTest);
-
- DEBUG((DEBUG_INFO, "ProcessCapsules Before EndOfDxe......\n"));
- ProcessCapsules ();
- DEBUG((DEBUG_INFO, "ProcessCapsules Done\n"));
-
- //
- // Close boot script and install ready to lock
- //
- InstallReadyToLock ();
-
- BdsLibConnectAll ();
-
- //
- // Perform user identification
- //
- if (mCurrentUser == NULL) {
- PlatformBdsUserIdentify (&mCurrentUser, &DeferredImageExist);
- if (DeferredImageExist) {
- //
- // After user authentication, the deferred drivers was loaded again.
- // Here, need to ensure the deferred images are connected.
- //
- BdsLibConnectAll ();
- }
- }
-
- if (EsrtManagement != NULL) {
- EsrtManagement->SyncEsrtFmp();
- }
-
- DEBUG((DEBUG_INFO, "ProcessCapsules After ConnectAll......\n"));
- ProcessCapsules();
- DEBUG((DEBUG_INFO, "ProcessCapsules Done\n"));
- break;
-
- case BOOT_IN_RECOVERY_MODE:
-
- //
- // In recovery mode, just connect platform console
- // and show up the front page
- //
- PlatformBdsConnectConsole (gPlatformConsole);
- PlatformBdsDiagnostics (EXTENSIVE, FALSE, BaseMemoryTest);
- BdsLibConnectAll ();
-
- //
- // Perform user identification
- //
- if (mCurrentUser == NULL) {
- PlatformBdsUserIdentify (&mCurrentUser, &DeferredImageExist);
- if (DeferredImageExist) {
- //
- // After user authentication, the deferred drivers was loaded again.
- // Here, need to ensure the deferred drivers are connected.
- //
- BdsLibConnectAll ();
- }
- }
-
- //
- // Close boot script and install ready to lock
- //
- InstallReadyToLock ();
-
- //
- // In recovery boot mode, we still enter to the
- // frong page now
- //
- PlatformBdsEnterFrontPageWithHotKey (Timeout, FALSE);
- break;
-
-FULL_CONFIGURATION:
- case BOOT_WITH_FULL_CONFIGURATION:
- case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS:
- case BOOT_WITH_DEFAULT_SETTINGS:
- default:
-
- //
- // Connect platform console
- //
- Status = PlatformBdsConnectConsole (gPlatformConsole);
- if (EFI_ERROR (Status)) {
-
- //
- // Here OEM/IBV can customize with defined action
- //
- PlatformBdsNoConsoleAction ();
- }
-
- //
- // Chenyunh[TODO]: This is Workgroud to show the fs for uSDcard,
- // Need to root cause this issue.
- //
- DEBUG ((DEBUG_ERROR, "Start to reconnect all driver.\n"));
- BdsLibDisconnectAllEfi();
- BdsLibConnectAll ();
- DEBUG ((DEBUG_ERROR, "End to reconnect all driver.\n"));
-
- //
- // Perform some platform specific connect sequence
- //
- PlatformBdsConnectSequence ();
- EnableQuietBoot (PcdGetPtr(PcdLogoFile));
- if (!SystemConfiguration.QuietBoot) {
- PlatformBdsDiagnostics (IGNORE, FALSE, BaseMemoryTest);
- }
-
- //
- // Do a pre-delay so Hard Disk can spin up and see more logo.
- //
- gBS->Stall(SystemConfiguration.HddPredelay * 1000000);
-
- //
- // Perform user identification
- //
- if (mCurrentUser == NULL) {
- PlatformBdsUserIdentify (&mCurrentUser, &DeferredImageExist);
- if (DeferredImageExist) {
- //
- // After user authentication, the deferred drivers was loaded again.
- // Here, need to ensure the deferred drivers are connected.
- //
- Status = PlatformBdsConnectConsole (gPlatformConsole);
- if (EFI_ERROR (Status)) {
- PlatformBdsNoConsoleAction ();
- }
- PlatformBdsConnectSequence ();
- }
- }
- #ifdef TPM_ENABLED
- TcgPhysicalPresenceLibProcessRequest();
- #endif
-
- if (EsrtManagement != NULL) {
- EsrtManagement->SyncEsrtFmp();
- }
- //
- // Close boot script and install ready to lock
- //
- InstallReadyToLock ();
-
- //
- // Here we have enough time to do the enumeration of boot device
- //
- PlatformBdsLibEnumerateAllBootOption (BootOptionList);
-
- //
- // Give one chance to enter the setup if we
- // have the time out
- //
- PlatformBdsEnterFrontPageWithHotKey (Timeout, FALSE);
-
- //
- // Give one chance to enter the setup if we
- // select Gummiboot "Reboot Into Firmware Interface"
- //
- BootIntoFirmwareInterface();
-
- //
- // In default boot mode, always find all boot
- // option and do enumerate all the default boot option
- //
- if (Timeout == 0) {
- BdsLibBuildOptionFromVar (BootOptionList, L"BootOrder");
- if (IsListEmpty(BootOptionList)) {
- PlatformBdsPredictBootOption (BootOptionList);
- }
-
- return;
- }
-
-
- break;
- }
-
-
- IsFirstBoot = PcdGetBool(PcdBootState);
- if (IsFirstBoot) {
- PcdSetBool(PcdBootState, FALSE);
- }
- return;
-
-}
-
-/**
- Hook point after a boot attempt succeeds. We don't expect a boot option to
- return, so the UEFI 2.0 specification defines that you will default to an
- interactive mode and stop processing the BootOrder list in this case. This
- is alos a platform implementation and can be customized by IBV/OEM.
-
- @param Option Pointer to Boot Option that succeeded to boot.
-
- @retval None.
-
-**/
-VOID
-EFIAPI
-PlatformBdsBootSuccess (
- IN BDS_COMMON_OPTION *Option
- )
-{
- CHAR16 *TmpStr;
-
- //
- // If Boot returned with EFI_SUCCESS and there is not in the boot device
- // select loop then we need to pop up a UI and wait for user input.
- //
- TmpStr = Option->StatusString;
- if (TmpStr != NULL) {
- BdsLibOutputStrings (gST->ConOut, TmpStr, Option->Description, L"\n\r", NULL);
- FreePool(TmpStr);
- }
-}
-
-/**
- Hook point after a boot attempt fails.
-
- @param Option - Pointer to Boot Option that failed to boot.
- @param Status - Status returned from failed boot.
- @param ExitData - Exit data returned from failed boot.
- @param ExitDataSize - Exit data size returned from failed boot.
-
- @retval None.
-
-**/
-VOID
-EFIAPI
-PlatformBdsBootFail (
- IN BDS_COMMON_OPTION *Option,
- IN EFI_STATUS Status,
- IN CHAR16 *ExitData,
- IN UINTN ExitDataSize
- )
-{
- CHAR16 *TmpStr;
- EFI_HANDLE FvProtocolHandle;
-
- //
- // If Boot returned with failed status then we need to pop up a UI and wait
- // for user input.
- //
- TmpStr = Option->StatusString;
- if (TmpStr != NULL) {
- BdsLibOutputStrings (gST->ConOut, TmpStr, Option->Description, L"\n\r", NULL);
- FreePool(TmpStr);
- }
- if (PcdGet32(PcdFlashFvShellSize) > 0){
- gDS->ProcessFirmwareVolume (
- (VOID *)(UINTN)PcdGet32(PcdFlashFvShellBase),
- PcdGet32(PcdFlashFvShellSize),
- &FvProtocolHandle
- );
- }
- PlatformBdsConnectSequence ();
-}
-
-/**
- This function is remained for IBV/OEM to do some platform action,
- if there no console device can be connected.
-
- @param None.
-
- @retval EFI_SUCCESS Direct return success now.
-
-**/
-EFI_STATUS
-PlatformBdsNoConsoleAction (
- VOID
- )
-{
- return EFI_SUCCESS;
-}
-
-/**
- This function locks the block
-
- @param Base The base address flash region to be locked.
-
-**/
-VOID
-BdsLockFv (
- IN EFI_PHYSICAL_ADDRESS Base
- )
-{
- EFI_FV_BLOCK_MAP_ENTRY *BlockMap;
- EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
- EFI_PHYSICAL_ADDRESS BaseAddress;
- UINT32 BlockLength;
- UINTN Index;
-
- BaseAddress = Base - 0x400000 + 2;
- FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) (Base));
- BlockMap = &(FvHeader->BlockMap[0]);
-
- while ((BlockMap->NumBlocks != 0) && (BlockMap->Length != 0)) {
- BlockLength = BlockMap->Length;
- for (Index = 0; Index < BlockMap->NumBlocks; Index++) {
- MmioOr8 ((UINTN) BaseAddress, 0x03);
- BaseAddress += BlockLength;
- }
- BlockMap++;
- }
-}
-
-VOID
-EFIAPI
-PlatformBdsLockNonUpdatableFlash (
- VOID
- )
-{
- EFI_PHYSICAL_ADDRESS Base;
-
- Base = (EFI_PHYSICAL_ADDRESS) PcdGet32 (PcdFlashFvMainBase);
- if (Base > 0) {
- BdsLockFv (Base);
- }
-
- Base = (EFI_PHYSICAL_ADDRESS) PcdGet32 (PcdFlashFvRecoveryBase);
- if (Base > 0) {
- BdsLockFv (Base);
- }
-}
-
-/**
- Lock the ConsoleIn device in system table. All key
- presses will be ignored until the Password is typed in. The only way to
- disable the password is to type it in to a ConIn device.
-
- @param Password Password used to lock ConIn device.
-
- @retval EFI_SUCCESS lock the Console In Spliter virtual handle successfully.
- @retval EFI_UNSUPPORTED Password not found
-
-**/
-EFI_STATUS
-EFIAPI
-LockKeyboards (
- IN CHAR16 *Password
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-/**
- Connect the predefined platform default authentication devices.
-
- This function connects the predefined device path for authentication device,
- and if the predefined device path has child device path, the child handle will
- be connected too. But the child handle of the child will not be connected.
-
-**/
-VOID
-EFIAPI
-PlatformBdsConnectAuthDevice (
- VOID
- )
-{
- EFI_STATUS Status;
- UINTN Index;
- UINTN HandleIndex;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- EFI_DEVICE_PATH_PROTOCOL *ChildDevicePath;
- EFI_USER_MANAGER_PROTOCOL *Manager;
-
- Status = gBS->LocateProtocol (
- &gEfiUserManagerProtocolGuid,
- NULL,
- (VOID **) &Manager
- );
- if (EFI_ERROR (Status)) {
- //
- // As user manager protocol is not installed, the authentication devices
- // should not be connected.
- //
- return ;
- }
-
- Index = 0;
- while (gUserAuthenticationDevice[Index] != NULL) {
- //
- // Connect the platform customized device paths
- //
- BdsLibConnectDevicePath (gUserAuthenticationDevice[Index]);
- Index++;
- }
-
- //
- // Find and connect the child device paths of the platform customized device paths
- //
- HandleBuffer = NULL;
- for (Index = 0; gUserAuthenticationDevice[Index] != NULL; Index++) {
- HandleCount = 0;
- Status = gBS->LocateHandleBuffer (
- AllHandles,
- NULL,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- ASSERT (!EFI_ERROR (Status));
-
- //
- // Find and connect the child device paths of gUserIdentificationDevice[Index]
- //
- for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) {
- ChildDevicePath = NULL;
- Status = gBS->HandleProtocol (
- HandleBuffer[HandleIndex],
- &gEfiDevicePathProtocolGuid,
- (VOID **) &ChildDevicePath
- );
- if (EFI_ERROR (Status) || ChildDevicePath == NULL) {
- continue;
- }
-
- if (CompareMem (
- ChildDevicePath,
- gUserAuthenticationDevice[Index],
- (GetDevicePathSize (gUserAuthenticationDevice[Index]) - sizeof (EFI_DEVICE_PATH_PROTOCOL))
- ) != 0) {
- continue;
- }
- gBS->ConnectController (
- HandleBuffer[HandleIndex],
- NULL,
- NULL,
- TRUE
- );
- }
- }
-
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- }
-}
-
-/**
- This function is to identify a user, and return whether deferred images exist.
-
- @param[out] User Point to user profile handle.
- @param[out] DeferredImageExist On return, points to TRUE if the deferred image
- exist or FALSE if it did not exist.
-
-**/
-VOID
-EFIAPI
-PlatformBdsUserIdentify (
- OUT EFI_USER_PROFILE_HANDLE *User,
- OUT BOOLEAN *DeferredImageExist
- )
-{
- EFI_STATUS Status;
- EFI_DEFERRED_IMAGE_LOAD_PROTOCOL *DeferredImage;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuf;
- UINTN Index;
- UINTN DriverIndex;
- EFI_DEVICE_PATH_PROTOCOL *ImageDevicePath;
- VOID *DriverImage;
- UINTN ImageSize;
- BOOLEAN BootOption;
-
- //
- // Perform user identification
- //
- do {
- Status = BdsLibUserIdentify (User);
- } while (EFI_ERROR (Status));
-
- //
- // After user authentication now, try to find whether deferred image exists
- //
- HandleCount = 0;
- HandleBuf = NULL;
- *DeferredImageExist = FALSE;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiDeferredImageLoadProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuf
- );
- if (EFI_ERROR (Status)) {
- return ;
- }
-
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->HandleProtocol (
- HandleBuf[Index],
- &gEfiDeferredImageLoadProtocolGuid,
- (VOID **) &DeferredImage
- );
- if (!EFI_ERROR (Status)) {
- //
- // Find whether deferred image exists in this instance.
- //
- DriverIndex = 0;
- Status = DeferredImage->GetImageInfo(
- DeferredImage,
- DriverIndex,
- &ImageDevicePath,
- (VOID **) &DriverImage,
- &ImageSize,
- &BootOption
- );
- if (!EFI_ERROR (Status)) {
- //
- // The deferred image is found.
- //
- FreePool (HandleBuf);
- *DeferredImageExist = TRUE;
- return ;
- }
- }
- }
-
- FreePool (HandleBuf);
-}
-
-UINTN gHotKey = 0;
-
-
-EFI_STATUS
-ShowProgressHotKey (
- IN UINT16 TimeoutDefault
- )
-{
- CHAR16 *TmpStr;
- UINT16 TimeoutRemain;
- EFI_STATUS Status;
- EFI_INPUT_KEY Key;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL Color;
- UINT32 GpioValue;
- CHAR16 *TmpStr1;
- CHAR16 *TmpStr2;
- CHAR16 *TmpStr3;
- UINTN TmpStrSize;
- VOID *Buffer;
- UINTN Size;
-
- if (TimeoutDefault == 0) {
- return EFI_TIMEOUT;
- }
-
- gST->ConOut->SetAttribute(gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));
-
- if (DebugAssertEnabled())
- {
- DEBUG ((EFI_D_INFO, "\n\nStart showing progress bar... Press any key to stop it, or press <F2> or <DEL> to enter setup page! ...Zzz....\n"));
- }
- else
- {
- #ifdef __GNUC__
- SerialPortWrite((UINT8 *)"\n\n>>>>Start boot option, Press <F2> or <DEL> to enter setup page(5 Sec)[GCC]", 76);
- #else
- SerialPortWrite((UINT8 *)"\n\n>>>>Start boot option, Press <F2> or <DEL> to enter setup page(5 Sec)", 71);
- #endif
- }
- SetMem (&Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);
- SetMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0x0);
- SetMem (&Color, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);
-
- TmpStr2 = NULL;
- TmpStr3 = NULL;
-
- //
- // Check if the platform is using test key.
- //
- Status = GetSectionFromAnyFv(
- PcdGetPtr(PcdEdkiiRsa2048Sha256TestPublicKeyFileGuid),
- EFI_SECTION_RAW,
- 0,
- &Buffer,
- &Size
- );
- if (!EFI_ERROR(Status)) {
- if ((Size == PcdGetSize(PcdRsa2048Sha256PublicKeyBuffer)) &&
- (CompareMem(Buffer, PcdGetPtr(PcdRsa2048Sha256PublicKeyBuffer), Size) == 0)) {
- TmpStr2 = L"WARNING: Recovery Test Key is used.\r\n";
- if (DebugAssertEnabled()) {
- DEBUG ((DEBUG_INFO, "\n\nWARNING: Recovery Test Key is used.\n"));
- } else {
- SerialPortWrite((UINT8 *)"\n\nWARNING: Recovery Test Key is used.", sizeof("\n\nWARNING: Recovery Test Key is used."));
- }
- PcdSetBoolS(PcdTestKeyUsed, TRUE);
- }
- FreePool(Buffer);
- }
- Status = GetSectionFromAnyFv(
- PcdGetPtr(PcdEdkiiPkcs7TestPublicKeyFileGuid),
- EFI_SECTION_RAW,
- 0,
- &Buffer,
- &Size
- );
- if (!EFI_ERROR(Status)) {
- if ((Size == PcdGetSize(PcdPkcs7CertBuffer)) &&
- (CompareMem(Buffer, PcdGetPtr(PcdPkcs7CertBuffer), Size) == 0)) {
- TmpStr3 = L"WARNING: Capsule Test Key is used.\r\n";
- if (DebugAssertEnabled()) {
- DEBUG ((DEBUG_INFO, "\n\nWARNING: Capsule Test Key is used.\r\n"));
- } else {
- SerialPortWrite((UINT8 *)"\n\nWARNING: Capsule Test Key is used.", sizeof("\n\nWARNING: Capsule Test Key is used."));
- }
- PcdSetBoolS(PcdTestKeyUsed, TRUE);
- }
- FreePool(Buffer);
- }
-
- //
- // Clear the progress status bar first
- //
- TmpStr1 = L"Start boot option, Press <F2> or <DEL> to enter setup page.\r\n";
- TmpStrSize = StrSize(TmpStr1);
- if (TmpStr2 != NULL) {
- TmpStrSize += StrSize(TmpStr2);
- }
- if (TmpStr3 != NULL) {
- TmpStrSize += StrSize(TmpStr3);
- }
- TmpStr = AllocatePool (TmpStrSize);
- if (TmpStr == NULL) {
- TmpStr = TmpStr1;
- } else {
- StrCpyS(TmpStr, TmpStrSize/sizeof(CHAR16), TmpStr1);
- if (TmpStr2 != NULL) {
- StrCatS(TmpStr, TmpStrSize/sizeof(CHAR16), TmpStr2);
- }
- if (TmpStr3 != NULL) {
- StrCatS(TmpStr, TmpStrSize/sizeof(CHAR16), TmpStr3);
- }
- }
- PlatformBdsShowProgress (Foreground, Background, TmpStr, Color, 0, 0);
-
- TimeoutRemain = TimeoutDefault;
- while (TimeoutRemain != 0) {
- if (DebugAssertEnabled())
- {
- DEBUG ((EFI_D_INFO, "Showing progress bar...Remaining %d second!\n", TimeoutRemain));
- }
- else
- {
- SerialPortWrite ((UINT8 *)".", 1);
- }
- Status = WaitForSingleEvent (gST->ConIn->WaitForKey, ONE_SECOND);
- if (Status != EFI_TIMEOUT) {
- break;
- }
- TimeoutRemain--;
-
- //
- // Show progress
- //
- if (TmpStr != NULL) {
- PlatformBdsShowProgress (
- Foreground,
- Background,
- TmpStr,
- Color,
- ((TimeoutDefault - TimeoutRemain) * 100 / TimeoutDefault),
- 0
- );
- }
- }
-
- //
- // Timeout expired
- //
- if (TimeoutRemain == 0) {
- if (DebugAssertEnabled())
- {
- }
- else
- {
- SerialPortWrite ((UINT8 *)"\r\n", 2);
- }
- return EFI_TIMEOUT;
- }
-
- //
- // User pressed some key
- //
- Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Check Volume Up Key to enter Setup
- //
- GpioValue = MmioRead32 (IO_BASE_ADDRESS + 0x0668); // The value of GPIOC_5
- if (((GpioValue & BIT0) == 0) && (Key.ScanCode == SCAN_UP)) {
- gHotKey = 0;
- return EFI_SUCCESS;
- }
-
- if (Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {
- //
- // User pressed enter, equivalent to select "continue"
- //
- return EFI_TIMEOUT;
- }
-
- //
- //F2 -- Front Page
- //F5 -- Device Manager
- //F7 -- Boot Manager
- // do not use F8. generally people assume it is windows safe mode key.
- //F9 -- Boot order
- //
- DEBUG ((EFI_D_INFO, "[Key Pressed]: ScanCode 0x%x\n", Key.ScanCode));
- switch(Key.ScanCode) {
- case SCAN_F2:
- gHotKey = 0;
- break;
-
- case SCAN_DELETE:
- gHotKey = 0;
- break;
-
- case SCAN_F5:
- gHotKey = FRONT_PAGE_KEY_DEVICE_MANAGER;
- break;
-
- case SCAN_F7:
- gHotKey = FRONT_PAGE_KEY_BOOT_MANAGER;
- break;
-
- case SCAN_F9:
- gHotKey = FRONT_PAGE_KEY_BOOT_MAINTAIN;
- break;
-
- default:
- //set gHotKey to continue so that flow will not go into CallFrontPage
- gHotKey = FRONT_PAGE_KEY_CONTINUE;
- return EFI_TIMEOUT;
- break;
- }
-
- return EFI_SUCCESS;
-}
-
-
-
-/**
- This function is the main entry of the platform setup entry.
- The function will present the main menu of the system setup,
- this is the platform reference part and can be customize.
-
-
- @param TimeoutDefault The fault time out value before the system
- continue to boot.
- @param ConnectAllHappened The indicater to check if the connect all have
- already happened.
-
-**/
-VOID
-PlatformBdsEnterFrontPageWithHotKey (
- IN UINT16 TimeoutDefault,
- IN BOOLEAN ConnectAllHappened
- )
-{
- EFI_STATUS Status;
-
- EFI_STATUS LogoStatus;
- EFI_BOOT_LOGO_PROTOCOL *BootLogo;
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut;
- UINTN BootTextColumn;
- UINTN BootTextRow;
-
- GraphicsOutput = NULL;
- SimpleTextOut = NULL;
-
- PERF_START (NULL, "BdsTimeOut", "BDS", 0);
-
- //
- // Indicate if we need connect all in the platform setup
- //
- if (ConnectAllHappened) {
- gConnectAllHappened = TRUE;
- }
-
- if (!mModeInitialized) {
- //
- // After the console is ready, get current video resolution
- // and text mode before launching setup at first time.
- //
- Status = gBS->HandleProtocol (
- gST->ConsoleOutHandle,
- &gEfiGraphicsOutputProtocolGuid,
- (VOID**)&GraphicsOutput
- );
- if (EFI_ERROR (Status)) {
- GraphicsOutput = NULL;
- }
-
- Status = gBS->HandleProtocol (
- gST->ConsoleOutHandle,
- &gEfiSimpleTextOutProtocolGuid,
- (VOID**)&SimpleTextOut
- );
- if (EFI_ERROR (Status)) {
- SimpleTextOut = NULL;
- }
-
- if (GraphicsOutput != NULL) {
- //
- // Get current video resolution and text mode.
- //
- mBootHorizontalResolution = GraphicsOutput->Mode->Info->HorizontalResolution;
- mBootVerticalResolution = GraphicsOutput->Mode->Info->VerticalResolution;
- }
-
- if (SimpleTextOut != NULL) {
- Status = SimpleTextOut->QueryMode (
- SimpleTextOut,
- SimpleTextOut->Mode->Mode,
- &BootTextColumn,
- &BootTextRow
- );
- mBootTextModeColumn = (UINT32)BootTextColumn;
- mBootTextModeRow = (UINT32)BootTextRow;
- }
-
- //
- // Get user defined text mode for setup.
- //
- mSetupHorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);
- mSetupVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);
- mSetupTextModeColumn = PcdGet32 (PcdSetupConOutColumn);
- mSetupTextModeRow = PcdGet32 (PcdSetupConOutRow);
-
- mModeInitialized = TRUE;
- }
-
- if (TimeoutDefault != 0xffff) {
- Status = ShowProgressHotKey (TimeoutDefault);
-
- //
- // Ensure screen is clear when switch Console from Graphics mode to Text mode
- //
- gST->ConOut->EnableCursor (gST->ConOut, TRUE);
- gST->ConOut->ClearScreen (gST->ConOut);
-
- //
- // Boot Logo is corrupted, report it using Boot Logo protocol.
- //
- LogoStatus = gBS->LocateProtocol (&gEfiBootLogoProtocolGuid, NULL, (VOID **) &BootLogo);
- if (!EFI_ERROR (LogoStatus) && (BootLogo != NULL)) {
- BootLogo->SetBootLogo (BootLogo, NULL, 0, 0, 0, 0);
- }
-
- if (EFI_ERROR (Status)) {
- //
- // Timeout or user press enter to continue
- //
- goto Exit;
- }
- }
-
- //
- // Install BM HiiPackages.
- // Keep BootMaint HiiPackage, so that it can be covered by global setting.
- //
- InitBMPackage ();
- do {
-
- BdsSetConsoleMode (TRUE);
-
- InitializeFrontPage (FALSE);
-
- //
- // Update Front Page strings
- //
- UpdateFrontPageStrings ();
-
- Status = EFI_SUCCESS;
- gCallbackKey = 0;
- if (gHotKey == 0) {
- Status = CallFrontPage ();
- } else {
- gCallbackKey = gHotKey;
- gHotKey = 0;
- }
-
- //
- // If gCallbackKey is greater than 1 and less or equal to 5,
- // it will launch configuration utilities.
- // 2 = set language
- // 3 = boot manager
- // 4 = device manager
- // 5 = boot maintenance manager
- //
- if (gCallbackKey != 0) {
- REPORT_STATUS_CODE (
- EFI_PROGRESS_CODE,
- (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_PC_USER_SETUP)
- );
- }
-
- //
- // Based on the key that was set, we can determine what to do
- //
- switch (gCallbackKey) {
- //
- // The first 4 entries in the Front Page are to be GUARANTEED to remain constant so IHV's can
- // describe to their customers in documentation how to find their setup information (namely
- // under the device manager and specific buckets)
- //
- // These entries consist of the Continue, Select language, Boot Manager, and Device Manager
- //
- case FRONT_PAGE_KEY_CONTINUE:
-
- //
- // User hit continue
- //
- break;
-
- case FRONT_PAGE_KEY_LANGUAGE:
-
- //
- // User made a language setting change - display front page again
- //
- break;
-
- case FRONT_PAGE_KEY_BOOT_MANAGER:
- //
- // Remove the installed BootMaint HiiPackages when exit.
- //
- FreeBMPackage ();
-
- //
- // User chose to run the Boot Manager
- //
- CallBootManager ();
-
- //
- // Reinstall BootMaint HiiPackages after exiting from Boot Manager.
- //
- InitBMPackage ();
- break;
-
- case FRONT_PAGE_KEY_DEVICE_MANAGER:
-
- //
- // Display the Device Manager
- //
- do {
- CallDeviceManager ();
- } while (gCallbackKey == FRONT_PAGE_KEY_DEVICE_MANAGER);
- break;
-
- case FRONT_PAGE_KEY_BOOT_MAINTAIN:
-
- //
- // Display the Boot Maintenance Manager
- //
- BdsStartBootMaint ();
- break;
- }
-
- } while (((UINTN)gCallbackKey) != FRONT_PAGE_KEY_CONTINUE);
-
- //
- //Will leave browser, check any reset required change is applied? if yes, reset system
- //
- SetupResetReminder ();
- //
- // Remove the installed BootMaint HiiPackages when exit.
- //
- FreeBMPackage ();
-
-Exit:
- //
- // Automatically load current entry
- // Note: The following lines of code only execute when Auto boot
- // takes affect
- //
- PERF_END (NULL, "BdsTimeOut", "BDS", 0);
-}
-
-
-VOID
-BootIntoFirmwareInterface(
-VOID
-)
-{
- EFI_STATUS Status;
- UINTN DataSize;
- UINT16 Timeout;
- UINT64 OsIndication;
-
-
- OsIndication = 0;
- DataSize = sizeof(UINT64);
- Status = gRT->GetVariable (
- L"OsIndications",
- &gEfiGlobalVariableGuid,
- NULL,
- &DataSize,
- &OsIndication
- );
-
- DEBUG ((EFI_D_INFO, "OSIndication Variable Value %d\n", OsIndication));
- //
- //Goto FrontPage directly when bit EFI_OS_INDICATIONS_BOOT_TO_FW_UI in OSIndication Variable is setted.
- //
- if (!EFI_ERROR(Status) && (OsIndication != 0)) {
- Timeout = 0xffff;
- PlatformBdsEnterFrontPage (Timeout, FALSE);
- }
-}
-
-
-EFI_STATUS
-PlatformBdsConnectSimpleConsole (
- IN BDS_CONSOLE_CONNECT_ENTRY *PlatformConsole
-)
-{
- EFI_STATUS Status;
- UINTN Index;
- EFI_DEVICE_PATH_PROTOCOL *VarConout;
- EFI_DEVICE_PATH_PROTOCOL *VarConin;
- UINTN DevicePathSize;
-
-
- Index = 0;
- Status = EFI_SUCCESS;
- DevicePathSize = 0;
- VarConout = BdsLibGetVariableAndSize (
- L"ConOut",
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
- VarConin = BdsLibGetVariableAndSize (
- L"ConIn",
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
- if (VarConout == NULL || VarConin == NULL) {
- //
- // Have chance to connect the platform default console,
- // the platform default console is the minimum device group
- // the platform should support
- //
- while (PlatformConsole[Index].DevicePath != NULL) {
-
- //
- // Update the console variable with the connect type
- //
- if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) == CONSOLE_IN) {
- BdsLibUpdateConsoleVariable (L"ConIn", PlatformConsole[Index].DevicePath, NULL);
- }
-
- if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) == CONSOLE_OUT) {
- BdsLibUpdateConsoleVariable (L"ConOut", PlatformConsole[Index].DevicePath, NULL);
- }
-
- if ((PlatformConsole[Index].ConnectType & STD_ERROR) == STD_ERROR) {
- BdsLibUpdateConsoleVariable (L"ErrOut", PlatformConsole[Index].DevicePath, NULL);
- }
-
- Index ++;
- }
- }
-
- //
- // Connect ConIn first to give keyboard time to parse hot key event.
- //
- Status = BdsLibConnectConsoleVariable (L"ConIn");
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Make sure we have at least one active VGA, and have the right
- // active VGA in console variable
- //
- Status = PlatformBdsForceActiveVga ();
-
- //
- // It seems impossible not to have any ConOut device on platform,
- // so we check the status here.
- //
- Status = BdsLibConnectConsoleVariable (L"ConOut");
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Timer handler to convert the key from USB.
-
- @param Event Indicates the event that invoke this function.
- @param Context Indicates the calling context.
-**/
-VOID
-EFIAPI
-HotKeyTimerHandler (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- EFI_STATUS Status;
- EFI_INPUT_KEY Key;
-
- Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
- if (EFI_ERROR (Status)) {
- return;
- }
-
- switch(Key.ScanCode) {
- case SCAN_F2:
- gHotKey = 0;
- mHotKeyPressed = TRUE;
- break;
-
- case SCAN_F5:
- gHotKey = FRONT_PAGE_KEY_DEVICE_MANAGER;
- mHotKeyPressed = TRUE;
- break;
-
- case SCAN_F7:
- gHotKey = FRONT_PAGE_KEY_BOOT_MANAGER;
- mHotKeyPressed = TRUE;
- break;
-
- case SCAN_F9:
- gHotKey = FRONT_PAGE_KEY_BOOT_MAINTAIN;
- mHotKeyPressed = TRUE;
- break;
- }
-
- if (mHotKeyPressed) {
- gBS->SetTimer (
- mHotKeyTimerEvent,
- TimerCancel,
- 0
- );
- gBS->CloseEvent (mHotKeyTimerEvent);
- mHotKeyTimerEvent = NULL;
- }
-
- return;
-}
-
-
-/**
- Callback function for SimpleTextInEx protocol install events
-
- @param Event the event that is signaled.
- @param Context not used here.
-
-**/
-VOID
-EFIAPI
-HitHotkeyEvent (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- EFI_STATUS Status;
-
- Status = gBS->CloseEvent(mHitHotkeyEvent);
- if (EFI_ERROR (Status)) {
- return;
- }
- Status = gBS->CreateEvent (
- EVT_TIMER | EVT_NOTIFY_SIGNAL,
- TPL_NOTIFY,
- HotKeyTimerHandler,
- NULL,
- &mHotKeyTimerEvent
- );
- if (EFI_ERROR (Status)) {
- return;
- }
- Status = gBS->SetTimer (
- mHotKeyTimerEvent,
- TimerPeriodic,
- KEYBOARD_TIMER_INTERVAL
- );
- if (EFI_ERROR (Status)) {
- return;
- }
-
- return;
-}
-
-
-VOID
-EFIAPI
-PlatformBdsInitHotKeyEvent (
- VOID
- )
-{
- EFI_STATUS Status;
-
- //
- // Register Protocol notify for Hotkey service
- //
- Status = gBS->CreateEvent (
- EVT_NOTIFY_SIGNAL,
- TPL_CALLBACK,
- HitHotkeyEvent,
- NULL,
- &mHitHotkeyEvent
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Register for protocol notifications on this event
- //
- Status = gBS->RegisterProtocolNotify (
- &gEfiSimpleTextInputExProtocolGuid,
- mHitHotkeyEvent,
- &mHitHotkeyRegistration
- );
- ASSERT_EFI_ERROR (Status);
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h
deleted file mode 100644
index b5bb519747..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h
+++ /dev/null
@@ -1,516 +0,0 @@
-/*++
-
- Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-Module Name:
-
- BdsPlatform.h
-
-Abstract:
-
- Head file for BDS Platform specific code
-
---*/
-
-#ifndef _BDS_PLATFORM_H
-#define _BDS_PLATFORM_H
-
-#include <FrameworkDxe.h>
-
-#include <Protocol/FirmwareVolume2.h>
-#include <Protocol/DevicePath.h>
-#include <Protocol/SimpleNetwork.h>
-#include <Protocol/PciRootBridgeIo.h>
-#include <Protocol/LoadFile.h>
-#include <Protocol/LegacyBios.h>
-#include <Protocol/PciIo.h>
-#include <Protocol/SmmAccess2.h>
-#include <Protocol/DxeSmmReadyToLock.h>
-#include <Protocol/UserManager.h>
-#include <Protocol/DeferredImageLoad.h>
-#include <Protocol/AcpiS3Save.h>
-#include <Protocol/ExitPmAuth.h>
-#include <Protocol/MmioDevice.h>
-#include <Protocol/I2cBusMcg.h>
-#include <Protocol/I2cHostMcg.h>
-#include <Guid/CapsuleVendor.h>
-#include <Guid/MemoryTypeInformation.h>
-#include <Guid/GlobalVariable.h>
-#include <Guid/DebugAgentGuid.h>
-
-
-#include <Library/DebugLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/BaseLib.h>
-#include <Library/PcdLib.h>
-#include <Library/IoLib.h>
-#include <Library/GenericBdsLib.h>
-#include <Library/PlatformBdsLib.h>
-#include <Library/DevicePathLib.h>
-#include <Library/UefiLib.h>
-#include <Library/HobLib.h>
-#include <Library/PrintLib.h>
-#include <Library/PerformanceLib.h>
-#include <Library/ReportStatusCodeLib.h>
-
-#include <IndustryStandard/Pci.h>
-
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformRootBridges [];
-extern BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole [];
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformAllPossiblePciVgaConsole [];
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence [];
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformDriverOption [];
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformBootOption [];
-extern EFI_DEVICE_PATH_PROTOCOL *gUserAuthenticationDevice[];
-extern BDS_CONSOLE_CONNECT_ENTRY gPlatformSimpleConsole [];
-extern EFI_DEVICE_PATH_PROTOCOL *gPlatformSimpleBootOption [];
-
-extern BOOLEAN mEnumBootDevice;
-
-
-//
-// the short form device path for Usb keyboard
-//
-#define CLASS_HID 3
-#define SUBCLASS_BOOT 1
-#define PROTOCOL_KEYBOARD 1
-
-#define PCI_DEVICE_PATH_NODE(Func, Dev) \
- { \
- HARDWARE_DEVICE_PATH, \
- HW_PCI_DP, \
- { \
- (UINT8) (sizeof (PCI_DEVICE_PATH)), \
- (UINT8) ((sizeof (PCI_DEVICE_PATH)) >> 8) \
- }, \
- (Func), \
- (Dev) \
- }
-
-#define PNPID_DEVICE_PATH_NODE(PnpId) \
- { \
- { \
- ACPI_DEVICE_PATH, \
- ACPI_DP, \
- { \
- (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \
- (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \
- } \
- }, \
- EISA_PNP_ID((PnpId)), \
- 0 \
- }
-
-#define gUart(BaudRate, DataBits, Parity, StopBits) \
- { \
- { \
- MESSAGING_DEVICE_PATH, \
- MSG_UART_DP, \
- { \
- (UINT8) (sizeof (UART_DEVICE_PATH)), \
- (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) \
- } \
- }, \
- 0, \
- (BaudRate), \
- (DataBits), \
- (Parity), \
- (StopBits) \
- }
-
-#define gPcAnsiTerminal \
- { \
- { \
- MESSAGING_DEVICE_PATH, \
- MSG_VENDOR_DP, \
- { \
- (UINT8) (sizeof (VENDOR_DEVICE_PATH)), \
- (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) \
- } \
- }, \
- DEVICE_PATH_MESSAGING_PC_ANSI \
- }
-
-#define gUsbKeyboardMouse \
- { \
- { \
- MESSAGING_DEVICE_PATH, \
- MSG_USB_CLASS_DP, \
- (UINT8) (sizeof (USB_CLASS_DEVICE_PATH)), \
- (UINT8) ((sizeof (USB_CLASS_DEVICE_PATH)) >> 8) \
- }, \
- 0xffff, \
- 0xffff, \
- CLASS_HID, \
- SUBCLASS_BOOT, \
- PROTOCOL_KEYBOARD \
- }
-
-#define gEndEntire \
- { \
- END_DEVICE_PATH_TYPE, \
- END_ENTIRE_DEVICE_PATH_SUBTYPE, \
- { \
- END_DEVICE_PATH_LENGTH, \
- 0 \
- } \
- }
-
-#define gPciRootBridge \
- PNPID_DEVICE_PATH_NODE(0x0A03)
-
-#define gPnpPs2Keyboard \
- PNPID_DEVICE_PATH_NODE(0x0303)
-
-#define gPnp16550ComPort \
- PNPID_DEVICE_PATH_NODE(0x0501)
-
-#define gPciePort0Bridge \
- PCI_DEVICE_PATH_NODE(0, 0x1C)
-
-#define gPciePort1Bridge \
- PCI_DEVICE_PATH_NODE(1, 0x1C)
-
-#define gPciePort2Bridge \
- PCI_DEVICE_PATH_NODE(2, 0x1C)
-
-#define gPciePort3Bridge \
- PCI_DEVICE_PATH_NODE(3, 0x1C)
-
-#define gPciIsaBridge \
- PCI_DEVICE_PATH_NODE(0, 0x1f)
-
-//
-// Platform Root Bridge
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_ROOT_BRIDGE_DEVICE_PATH;
-
-//
-// Below is the platform console device path
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH IsaBridge;
- ACPI_HID_DEVICE_PATH Keyboard;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_ISA_KEYBOARD_DEVICE_PATH;
-
-typedef struct {
- VENDOR_DEVICE_PATH VendorDevicePath;
- EFI_DEVICE_PATH_PROTOCOL End;
-} HII_VENDOR_DEVICE_PATH;
-
-typedef struct {
- USB_CLASS_DEVICE_PATH UsbClass;
- EFI_DEVICE_PATH_PROTOCOL End;
-} USB_CLASS_FORMAT_DEVICE_PATH;
-
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH OnboardVga;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_ONBOARD_VGA_DEVICE_PATH;
-
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH AgpBridge;
- PCI_DEVICE_PATH AgpDevice;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_OFFBOARD_VGA_DEVICE_PATH;
-
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH IsaBridge;
- ACPI_HID_DEVICE_PATH IsaSerial;
- UART_DEVICE_PATH Uart;
- VENDOR_DEVICE_PATH TerminalType;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_ISA_SERIAL_DEVICE_PATH;
-
-//
-// Below is the boot option device path
-//
-typedef struct {
- BBS_BBS_DEVICE_PATH LegacyHD;
- EFI_DEVICE_PATH_PROTOCOL End;
-} LEGACY_HD_DEVICE_PATH;
-
-//
-// Below is the platform IDE device path
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH IsaBridge;
- ATAPI_DEVICE_PATH Ide;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_IDE_DEVICE_PATH;
-
-//
-// Floppy device path definition
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH IsaBridge;
- ACPI_HID_DEVICE_PATH Floppy;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_FLOPPY_DEVICE_PATH;
-
-//
-// Below is the platform USB controller device path for
-// USB disk as user authentication device.
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH PciDevice;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_USB_DEVICE_PATH;
-
-//
-// Debug Agent UART Console device path definition
-//
-typedef struct {
- VENDOR_DEVICE_PATH VendorHardware;
- UART_DEVICE_PATH Uart;
- VENDOR_DEVICE_PATH TerminalType;
- EFI_DEVICE_PATH_PROTOCOL End;
-} VENDOR_UART_DEVICE_PATH;
-
-//
-// Below is the platform PCI device path
-//
-typedef struct {
- ACPI_HID_DEVICE_PATH PciRootBridge;
- PCI_DEVICE_PATH PciDevice;
- EFI_DEVICE_PATH_PROTOCOL End;
-} PLATFORM_PCI_DEVICE_PATH;
-
-typedef enum {
- PMIC_Equal = 0, // = 0
- PMIC_Greater_Than, // > 1
- PMIC_Smaller_Than, // < 2
- PMIC_Greater_Equal, // >= 3
- PMIC_Smaller_Equal, // <= 4
- PMIC_Any // don't care 5
-} PMIC_Condition_list;
-
-typedef enum {
- PMIC_White_List = 0, //White list
- PMIC_Black_List = 1 //Black list
-} PMIC_Compliance_mode;
-
-typedef struct {
- UINT8 Cond_Choice; // PMIC_Condition_list
- UINT8 Cond_Number; // the number
-}PMIC_Condition_Item;
-
-typedef struct {
- PMIC_Condition_Item PMIC_BoardID;
- PMIC_Condition_Item PMIC_FabID;
- PMIC_Condition_Item Soc_Stepping;//define PMIC type, 1:Dialog , 2:Rohm
- PMIC_Condition_Item PMIC_VendID;
- PMIC_Condition_Item PMIC_RevID;
- PMIC_Compliance_mode mode; //if 1, blacklist; if 0, white list.
-} PMIC_Compliance_Item;
-
-//
-// Platform BDS Functions
-//
-VOID
-PlatformBdsGetDriverOption (
- IN LIST_ENTRY *BdsDriverLists
- );
-
-VOID
-PlatformBdsPredictBootOption (
- IN LIST_ENTRY *BdsBootOptionList
- );
-
-EFI_STATUS
-PlatformBdsShowProgress (
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleForeground,
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL TitleBackground,
- CHAR16 *Title,
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL ProgressColor,
- UINTN Progress,
- UINTN PreviousValue
- );
-
-VOID
-PlatformBdsConnectSequence (
- VOID
- );
-
-EFI_STATUS
-PlatformBdsConnectConsole (
- IN BDS_CONSOLE_CONNECT_ENTRY *PlatformConsole
- );
-
-EFI_STATUS
-PlatformBdsNoConsoleAction (
- VOID
- );
-
-VOID
-PlatformBdsEnterFrontPage (
- IN UINT16 TimeoutDefault,
- IN BOOLEAN ConnectAllHappened
- );
-
-VOID
-EFIAPI
-PlatformBdsUserIdentify (
- OUT EFI_USER_PROFILE_HANDLE *User,
- OUT BOOLEAN *DeferredImage
- );
-
-VOID
-EFIAPI
-PlatformBdsConnectAuthDevice (
- VOID
- );
-
-VOID
-PlatformBdsEnterFrontPageWithHotKey (
- IN UINT16 TimeoutDefault,
- IN BOOLEAN ConnectAllHappened
- );
-
- EFI_STATUS
- ShowProgress (
- IN UINT16 TimeoutDefault
- );
-
- EFI_STATUS
- InitializeFrontPage (
- IN BOOLEAN InitializeHiiData
- );
-
- VOID
- UpdateFrontPageStrings (
- VOID
- );
-
-
- EFI_STATUS
- InitBMPackage (
- VOID
- );
-
-
- VOID
- FreeBMPackage (
- VOID
- );
-
-
- EFI_STATUS
- CallFrontPage (
- VOID
- );
-
-
- VOID
- CallBootManager (
- VOID
- );
-
-VOID
-CallDeviceManager (
- VOID
- );
-
-VOID
-BdsStartBootMaint (
- VOID
- );
-
-CHAR16 *
-GetStringById (
- IN EFI_STRING_ID Id
- );
-
-EFI_STATUS
-WaitForSingleEvent (
- IN EFI_EVENT Event,
- IN UINT64 Timeout OPTIONAL
- );
-
-EFI_STATUS
-BdsLibDeleteOptionFromHandle (
- IN EFI_HANDLE Handle
- );
-
-EFI_STATUS
-BdsDeleteAllInvalidEfiBootOption (
- VOID
- );
-
-
-#define ONE_SECOND 10000000
-#define FRONT_PAGE_KEY_CONTINUE 0x1000
-#define FRONT_PAGE_KEY_LANGUAGE 0x1234
-#define FRONT_PAGE_KEY_BOOT_MANAGER 0x1064
-#define FRONT_PAGE_KEY_DEVICE_MANAGER 0x8567
-#define FRONT_PAGE_KEY_BOOT_MAINTAIN 0x9876
-
-#define PORT_A_DVO 0 // ; DVO A
-#define PORT_B_DVO 1 // ; DVO B
-#define PORT_C_DVO 2 // ; DVO C
-#define PORT_D_DVO 3 // ; DVO D
-#define PORT_LVDS 4 // ; Integrated LVDS port
-#define PORT_ANALOG_TV 5 // ; Integrated TV port
-#define PORT_CRT 6 // ; integrated Analog port
-#define PORT_B_DP 7 // ; DisplayPort B
-#define PORT_C_DP 8 // ; DisplayPort C
-#define PORT_D_DP 9 // ; DisplayPort D
-#define PORT_A_DP 10 // ; DisplayPort A (for eDP on ILK)
-#define PORT_B_HDMI 11 // ; HDMI B
-#define PORT_C_HDMI 12 // ; HDMI C
-#define PORT_D_HDMI 13 // ; HDMI D
-#define PORT_B_DVI 14 // ; DVI B
-#define PORT_C_DVI 15 // ; DVI C
-#define PORT_D_DVI 16 // ; DVI D
-#define PORT_MIPI_A 21 // ; MIPI
-#define PORT_MIPI_B 22
-#define PORT_MIPI_C 23
-
-
-extern BOOLEAN gConnectAllHappened;
-extern UINTN gCallbackKey;
-
-VOID
-BdsBootDeviceSelect (
- VOID
-);
-VOID FastBoot(VOID);
-
-extern BOOLEAN mModeInitialized;
-
-//
-// Boot video resolution and text mode.
-//
-extern UINT32 mBootHorizontalResolution ;
-extern UINT32 mBootVerticalResolution ;
-extern UINT32 mBootTextModeColumn ;
-extern UINT32 mBootTextModeRow ;
-
-//
-// BIOS setup video resolution and text mode.
-//
-extern UINT32 mSetupTextModeColumn ;
-extern UINT32 mSetupTextModeRow ;
-extern UINT32 mSetupHorizontalResolution ;
-extern UINT32 mSetupVerticalResolution ;
-extern EFI_STATUS BdsSetConsoleMode (BOOLEAN);
-#endif // _BDS_PLATFORM_H
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf
deleted file mode 100644
index 66d11c6cda..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf
+++ /dev/null
@@ -1,128 +0,0 @@
-#/** @file
-# Component name for module PlatformBootManagerLib
-#
-# Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR>
-#
-
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-
-#
-#
-#
-#**/
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = PlatformBdsLib
- FILE_GUID = A6BC385D-59E5-4b77-87D7-200ABAA83C15
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = PlatformBootManagerLib|DXE_DRIVER
- EDK_RELEASE_VERSION = 0x00020000
- EFI_SPECIFICATION_VERSION = 0x0002000A
-
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- BdsPlatform.c
- BdsPlatform.h
- PlatformData.c
- PlatformBdsStrings.uni
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
- Vlv2TbltDevicePkg/PlatformPkg.dec
- Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
- ShellPkg/ShellPkg.dec
- CryptoPkg/CryptoPkg.dec
- SecurityPkg/SecurityPkg.dec
- SignedCapsulePkg/SignedCapsulePkg.dec
- SourceLevelDebugPkg/SourceLevelDebugPkg.dec
- NetworkPkg/NetworkPkg.dec
-
-[LibraryClasses]
- DxeServicesTableLib
- BaseLib
- MemoryAllocationLib
- UefiBootServicesTableLib
- UefiRuntimeServicesTableLib
- BaseMemoryLib
- DebugLib
- PcdLib
- GenericBdsLib
- DevicePathLib
- NetLib
- UefiLib
- HobLib
- PciLib
- PrintLib
- BaseCryptLib
-# TcgPhysicalPresenceLib
- Tcg2PhysicalPresenceLib
- FileHandleLib
- S3BootScriptLib
- SerialPortLib
- CapsuleLib
-
-[Protocols]
- gEfiFirmwareVolume2ProtocolGuid
- gEfiSimpleNetworkProtocolGuid
- gEfiLoadFileProtocolGuid
- gEfiPciIoProtocolGuid
- gEfiSmmAccess2ProtocolGuid
- gEfiDxeSmmReadyToLockProtocolGuid
- gEfiUserManagerProtocolGuid
- gEfiDeferredImageLoadProtocolGuid
- gEfiAcpiS3SaveProtocolGuid
- gEfiSpiProtocolGuid ## PROTOCOL CONSUMES
- gExitPmAuthProtocolGuid
- gEfiTdtOperationProtocolGuid
- gEfiGlobalNvsAreaProtocolGuid
- gEfiMmioDeviceProtocolGuid
- gEfiI2cMasterProtocolGuid
- gEfiI2cHostProtocolGuid
- gEsrtManagementProtocolGuid
-
-[Guids]
- gEfiMemoryTypeInformationGuid
- gEfiCapsuleVendorGuid
- gEfiGlobalVariableGuid
- gEfiNormalSetupGuid
- gEfiPartTypeSystemPartGuid
- gEfiEndOfDxeEventGroupGuid
- gUefiShellFileGuid
-
-[Pcd]
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiRsa2048Sha256TestPublicKeyFileGuid
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiPkcs7TestPublicKeyFileGuid
- gEfiSecurityPkgTokenSpaceGuid.PcdRsa2048Sha256PublicKeyBuffer
- gEfiSecurityPkgTokenSpaceGuid.PcdPkcs7CertBuffer
- gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed
- gPlatformModuleTokenSpaceGuid.PcdFlashFvRecovery2Base
- gPlatformModuleTokenSpaceGuid.PcdFlashFvMainBase
- gPlatformModuleTokenSpaceGuid.PcdFlashFvRecoveryBase
- gPlatformModuleTokenSpaceGuid.PcdFlashFvShellBase
- gPlatformModuleTokenSpaceGuid.PcdFlashFvShellSize
- gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile
- gPlatformModuleTokenSpaceGuid.PcdIFWISigBaseAddress
- gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow
- gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn
- gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution
- gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution
- gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
- gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutColumn
- gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutRow
- gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution
- gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootState
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsStrings.uni b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsStrings.uni
deleted file mode 100644
index 101106f9f4..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsStrings.uni
+++ /dev/null
@@ -1,30 +0,0 @@
-///** @file
-//
-// String definitions for Boot Option description.
-//
-// Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-//**/
-
-/=#
-
-#langdef en-US "English"
-#langdef fr-FR "Français"
-
-#string STR_DESCRIPTION_FLOPPY #language en-US "EFI Floppy"
- #language fr-FR "fr-FR: EFI Floppy"
-#string STR_DESCRIPTION_CD_DVD #language en-US "EFI DVD/CDROM"
- #language fr-FR "fr-FR: EFI DVD/CDROM"
-#string STR_DESCRIPTION_HARDDRIVE #language en-US "EFI Hard Drive"
- #language fr-FR "fr-FR: EFI Hard Drive"
-#string STR_DESCRIPTION_USB #language en-US "EFI USB Device"
- #language fr-FR "fr-FR: EFI USB Device"
-#string STR_DESCRIPTION_SCSI #language en-US "EFI SCSI Device"
- #language fr-FR "fr-FR: EFI SCSI Device"
-#string STR_DESCRIPTION_MISC #language en-US "EFI Misc Device"
- #language fr-FR "fr-FR: EFI Misc Device"
-#string STR_DESCRIPTION_NETWORK #language en-US "EFI Network"
- #language fr-FR "fr-FR: EFI Network"
-#string STR_DESCRIPTION_NON_BLOCK #language en-US "EFI Non-Block Boot Device"
- #language fr-FR "fr-FR: EFI Non-Block Boot Device"
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformData.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformData.c
deleted file mode 100644
index 9dff93f52b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformData.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-Module Name:
-
- PlatformData.c
-
-Abstract:
-
- Defined the platform specific device path which will be used by
- platform Bbd to perform the platform policy connect.
-
---*/
-
-#include "BdsPlatform.h"
-
-//
-// Predefined platform default time out value
-//
-UINT16 gPlatformBootTimeOutDefault = 10;
-
-//
-// Predefined platform root bridge
-//
-PLATFORM_ROOT_BRIDGE_DEVICE_PATH gPlatformRootBridge0 = {
- gPciRootBridge,
- gEndEntire
-};
-
-EFI_DEVICE_PATH_PROTOCOL* gPlatformRootBridges [] = {
- (EFI_DEVICE_PATH_PROTOCOL*)&gPlatformRootBridge0,
- NULL
-};
-
-//
-// Platform specific ISA keyboard device path
-//
-PLATFORM_ISA_KEYBOARD_DEVICE_PATH gIsaKeyboardDevicePath = {
- gPciRootBridge,
- gPciIsaBridge,
- gPnpPs2Keyboard,
- gEndEntire
-};
-
-//
-// Platform specific on chip PCI VGA device path
-//
-PLATFORM_ONBOARD_VGA_DEVICE_PATH gOnChipPciVgaDevicePath = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(0, 0x2),
- gEndEntire
-};
-
-//
-// Platform specific plug in PCI VGA device path
-//
-PLATFORM_OFFBOARD_VGA_DEVICE_PATH gPlugInPciVgaDevicePath = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(0, 0x1),
- PCI_DEVICE_PATH_NODE(0, 0x0),
- gEndEntire
-};
-
-//
-// Platform specific ISA serial device path
-//
-PLATFORM_ISA_SERIAL_DEVICE_PATH gIsaSerialDevicePath = {
- gPciRootBridge,
- gPciIsaBridge,
- gPnp16550ComPort,
- gUart(115200, 8, 1, 1),
- gPcAnsiTerminal,
- gEndEntire
-};
-
-
-//
-// Platform specific Button Array device path
-//
-HII_VENDOR_DEVICE_PATH gHiiVendorDevicePath0 = {
- {
- {
- HARDWARE_DEVICE_PATH,
- HW_VENDOR_DP,
- {
- (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
- (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
- }
- },
-
- //
- // {C8752FDE-B5C8-4528-897D-6920FE771E38}
- //
- { 0xC8752FDE, 0xB5C8, 0x4528, { 0x89, 0x7D, 0x69, 0x20, 0xFE, 0x77, 0x1E, 0x38 } }
- },
- {
- END_DEVICE_PATH_TYPE,
- END_ENTIRE_DEVICE_PATH_SUBTYPE,
- {
- (UINT8) (END_DEVICE_PATH_LENGTH),
- (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)
- }
- }
-};
-
-USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath = {
- gUsbKeyboardMouse,
- gEndEntire
-};
-
-//
-// Debug Agent UART Console device path
-//
-VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = {
- {
- {
- HARDWARE_DEVICE_PATH,
- HW_VENDOR_DP,
- {
- (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
- (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
- }
- },
- EFI_DEBUG_AGENT_GUID,
- },
- {
- {
- MESSAGING_DEVICE_PATH,
- MSG_UART_DP,
- {
- (UINT8) (sizeof (UART_DEVICE_PATH)),
- (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8)
- }
- },
- 0, // Reserved
- 0, // BaudRate - Default
- 0, // DataBits - Default
- 0, // Parity - Default
- 0, // StopBits - Default
- },
- {
- {
- MESSAGING_DEVICE_PATH,
- MSG_VENDOR_DP,
- {
- (UINT8)(sizeof (VENDOR_DEVICE_PATH)),
- (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)
- }
- },
- DEVICE_PATH_MESSAGING_PC_ANSI
- },
- gEndEntire
-};
-
-//
-// Predefined platform default console device path
-//
-BDS_CONSOLE_CONNECT_ENTRY gPlatformConsole [] = {
- {(EFI_DEVICE_PATH_PROTOCOL*)&gIsaSerialDevicePath, CONSOLE_ALL},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gHiiVendorDevicePath0, CONSOLE_IN},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gIsaKeyboardDevicePath, CONSOLE_IN},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gDebugAgentUartDevicePath, CONSOLE_ALL},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gUsbClassKeyboardDevicePath, CONSOLE_IN},
- {NULL, 0}
-};
-
-//
-// All the possible platform PCI VGA device path
-//
-EFI_DEVICE_PATH_PROTOCOL* gPlatformAllPossiblePciVgaConsole [] = {
- (EFI_DEVICE_PATH_PROTOCOL*)&gOnChipPciVgaDevicePath,
- (EFI_DEVICE_PATH_PROTOCOL*)&gPlugInPciVgaDevicePath,
- NULL
-};
-
-//
-// Legacy hard disk boot option
-//
-LEGACY_HD_DEVICE_PATH gLegacyHd = {
- {
- BBS_DEVICE_PATH,
- BBS_BBS_DP,
- (UINT8)(sizeof(BBS_BBS_DEVICE_PATH)),
- (UINT8)((sizeof(BBS_BBS_DEVICE_PATH)) >> 8),
- BBS_TYPE_HARDDRIVE,
- 0,
- 0
- },
- gEndEntire
-};
-
-//
-// Legacy cdrom boot option
-//
-LEGACY_HD_DEVICE_PATH gLegacyCdrom = {
- {
- BBS_DEVICE_PATH,
- BBS_BBS_DP,
- (UINT8)(sizeof(BBS_BBS_DEVICE_PATH)),
- (UINT8)((sizeof(BBS_BBS_DEVICE_PATH)) >> 8),
- BBS_TYPE_CDROM,
- 0,
- 0
- },
- gEndEntire
-};
-
-//
-// Predefined platform specific perdict boot option
-//
-EFI_DEVICE_PATH_PROTOCOL* gPlatformBootOption [] = {
- (EFI_DEVICE_PATH_PROTOCOL*)&gLegacyHd,
- (EFI_DEVICE_PATH_PROTOCOL*)&gLegacyCdrom,
- NULL
-};
-
-//
-// Predefined platform specific driver option
-//
-EFI_DEVICE_PATH_PROTOCOL* gPlatformDriverOption [] = {
- NULL
-};
-
-//
-// Predefined platform connect sequence
-//
-EFI_DEVICE_PATH_PROTOCOL* gPlatformConnectSequence [] = {
- (EFI_DEVICE_PATH_PROTOCOL *)&gPlatformRootBridge0, // Force PCI enumer before Legacy OpROM shadow
- NULL
-};
-
-//
-// Platform specific USB controller device path
-//
-PLATFORM_USB_DEVICE_PATH gUsbDevicePath0 = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(0, 0x1D),
- gEndEntire
-};
-
-PLATFORM_USB_DEVICE_PATH gUsbDevicePath1 = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(1, 0x1D),
- gEndEntire
-};
-
-PLATFORM_USB_DEVICE_PATH gUsbDevicePath2 = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(2, 0x1D),
- gEndEntire
-};
-
-PLATFORM_USB_DEVICE_PATH gUsbDevicePath3 = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE(3, 0x1D),
- gEndEntire
-};
-
-//
-// Predefined platform device path for user authtication
-//
-EFI_DEVICE_PATH_PROTOCOL* gUserAuthenticationDevice[] = {
- //
- // Predefined device path for secure card (USB disk).
- //
- (EFI_DEVICE_PATH_PROTOCOL*)&gUsbDevicePath0,
- (EFI_DEVICE_PATH_PROTOCOL*)&gUsbDevicePath1,
- (EFI_DEVICE_PATH_PROTOCOL*)&gUsbDevicePath2,
- (EFI_DEVICE_PATH_PROTOCOL*)&gUsbDevicePath3,
- NULL
-};
-
-//
-// Predefined platform console device path
-//
-BDS_CONSOLE_CONNECT_ENTRY gPlatformSimpleConsole [] = {
- {(EFI_DEVICE_PATH_PROTOCOL*)&gOnChipPciVgaDevicePath, CONSOLE_OUT},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gIsaSerialDevicePath, CONSOLE_ALL},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gHiiVendorDevicePath0, CONSOLE_IN},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gDebugAgentUartDevicePath, CONSOLE_ALL},
- {(EFI_DEVICE_PATH_PROTOCOL*)&gUsbClassKeyboardDevicePath, CONSOLE_IN},
- {NULL, 0}
-};
-
-//
-// eMMC device at BDF(0x0, 0x17, 0x0)
-//
-PLATFORM_PCI_DEVICE_PATH gEmmcBootDevPath0 = {
- gPciRootBridge,
- PCI_DEVICE_PATH_NODE (0x00, 0x10),
- gEndEntire
-};
-
-//
-// Predefined platform specific perdict boot option
-//
-EFI_DEVICE_PATH_PROTOCOL* gPlatformSimpleBootOption [] = {
- (EFI_DEVICE_PATH_PROTOCOL*)&gEmmcBootDevPath0,
- NULL
-};
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c
deleted file mode 100644
index 3034853695..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c
+++ /dev/null
@@ -1,4490 +0,0 @@
-/** @file
- BDS Lib functions which relate with create or process the boot option.
-
-Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "InternalBdsLib.h"
-#include "String.h"
-#include <Library/NetLib.h>
-#include "Library/DebugLib.h"
-
-BOOLEAN mEnumBootDevice = FALSE;
-EFI_HII_HANDLE gBdsLibStringPackHandle = NULL;
-
-/**
-
- End Perf entry of BDS
-
- @param Event The triggered event.
- @param Context Context for this event.
-
-**/
-VOID
-EFIAPI
-BmEndOfBdsPerfCode (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- //
- // Record the performance data for End of BDS
- //
- PERF_END(NULL, "BDS", NULL, 0);
-
- return ;
-}
-
-/**
- The constructor function register UNI strings into imageHandle.
-
- It will ASSERT() if that operation fails and it will always return EFI_SUCCESS.
-
- @param ImageHandle The firmware allocated handle for the EFI image.
- @param SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The constructor successfully added string package.
- @retval Other value The constructor can't add string package.
-
-**/
-EFI_STATUS
-EFIAPI
-GenericBdsLibConstructor (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
-
- gBdsLibStringPackHandle = HiiAddPackages (
- &gBdsLibStringPackageGuid,
- ImageHandle,
- GenericBdsLibStrings,
- NULL
- );
-
- ASSERT (gBdsLibStringPackHandle != NULL);
-
- return EFI_SUCCESS;
-}
-
-/**
- Deletete the Boot Option from EFI Variable. The Boot Order Arrray
- is also updated.
-
- @param OptionNumber The number of Boot option want to be deleted.
- @param BootOrder The Boot Order array.
- @param BootOrderSize The size of the Boot Order Array.
-
- @retval EFI_SUCCESS The Boot Option Variable was found and removed
- @retval EFI_UNSUPPORTED The Boot Option Variable store was inaccessible
- @retval EFI_NOT_FOUND The Boot Option Variable was not found
-**/
-EFI_STATUS
-EFIAPI
-BdsDeleteBootOption (
- IN UINTN OptionNumber,
- IN OUT UINT16 *BootOrder,
- IN OUT UINTN *BootOrderSize
- )
-{
- CHAR16 BootOption[9];
- UINTN Index;
- EFI_STATUS Status;
-
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", OptionNumber);
- Status = gRT->SetVariable (
- BootOption,
- &gEfiGlobalVariableGuid,
- 0,
- 0,
- NULL
- );
- //
- // Deleting variable with existing variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
-
- //
- // adjust boot order array
- //
- for (Index = 0; Index < *BootOrderSize / sizeof (UINT16); Index++) {
- if (BootOrder[Index] == OptionNumber) {
- CopyMem (&BootOrder[Index], &BootOrder[Index+1], *BootOrderSize - (Index+1) * sizeof (UINT16));
- *BootOrderSize -= sizeof (UINT16);
- break;
- }
- }
-
- return Status;
-}
-/**
-
- Translate the first n characters of an Ascii string to
- Unicode characters. The count n is indicated by parameter
- Size. If Size is greater than the length of string, then
- the entire string is translated.
-
-
- @param AStr Pointer to input Ascii string.
- @param Size The number of characters to translate.
- @param UStr Pointer to output Unicode string buffer.
-
-**/
-VOID
-AsciiToUnicodeSize (
- IN UINT8 *AStr,
- IN UINTN Size,
- OUT UINT16 *UStr
- )
-{
- UINTN Idx;
-
- Idx = 0;
- while (AStr[Idx] != 0) {
- UStr[Idx] = (CHAR16) AStr[Idx];
- if (Idx == Size) {
- break;
- }
-
- Idx++;
- }
- UStr[Idx] = 0;
-}
-
-/**
- Build Legacy Device Name String according.
-
- @param CurBBSEntry BBS Table.
- @param Index Index.
- @param BufSize The buffer size.
- @param BootString The output string.
-
-**/
-VOID
-BdsBuildLegacyDevNameString (
- IN BBS_TABLE *CurBBSEntry,
- IN UINTN Index,
- IN UINTN BufSize,
- OUT CHAR16 *BootString
- )
-{
- CHAR16 *Fmt;
- CHAR16 *Type;
- UINT8 *StringDesc;
- CHAR16 Temp[80];
-
- switch (Index) {
- //
- // Primary Master
- //
- case 1:
- Fmt = L"Primary Master %s";
- break;
-
- //
- // Primary Slave
- //
- case 2:
- Fmt = L"Primary Slave %s";
- break;
-
- //
- // Secondary Master
- //
- case 3:
- Fmt = L"Secondary Master %s";
- break;
-
- //
- // Secondary Slave
- //
- case 4:
- Fmt = L"Secondary Slave %s";
- break;
-
- default:
- Fmt = L"%s";
- break;
- }
-
- switch (CurBBSEntry->DeviceType) {
- case BBS_FLOPPY:
- Type = L"Floppy";
- break;
-
- case BBS_HARDDISK:
- Type = L"Harddisk";
- break;
-
- case BBS_CDROM:
- Type = L"CDROM";
- break;
-
- case BBS_PCMCIA:
- Type = L"PCMCIAe";
- break;
-
- case BBS_USB:
- Type = L"USB";
- break;
-
- case BBS_EMBED_NETWORK:
- Type = L"Network";
- break;
-
- case BBS_BEV_DEVICE:
- Type = L"BEVe";
- break;
-
- case BBS_UNKNOWN:
- default:
- Type = L"Unknown";
- break;
- }
- //
- // If current BBS entry has its description then use it.
- //
- StringDesc = (UINT8 *) (UINTN) ((CurBBSEntry->DescStringSegment << 4) + CurBBSEntry->DescStringOffset);
- if (NULL != StringDesc) {
- //
- // Only get fisrt 32 characters, this is suggested by BBS spec
- //
- AsciiToUnicodeSize (StringDesc, 32, Temp);
- Fmt = L"%s";
- Type = Temp;
- }
-
- //
- // BbsTable 16 entries are for onboard IDE.
- // Set description string for SATA harddisks, Harddisk 0 ~ Harddisk 11
- //
- if (Index >= 5 && Index <= 16 && (CurBBSEntry->DeviceType == BBS_HARDDISK || CurBBSEntry->DeviceType == BBS_CDROM)) {
- Fmt = L"%s %d";
- UnicodeSPrint (BootString, BufSize, Fmt, Type, Index - 5);
- } else {
- UnicodeSPrint (BootString, BufSize, Fmt, Type);
- }
-}
-
-/**
-
- Create a legacy boot option for the specified entry of
- BBS table, save it as variable, and append it to the boot
- order list.
-
-
- @param CurrentBbsEntry Pointer to current BBS table.
- @param CurrentBbsDevPath Pointer to the Device Path Protocol instance of BBS
- @param Index Index of the specified entry in BBS table.
- @param BootOrderList On input, the original boot order list.
- On output, the new boot order list attached with the
- created node.
- @param BootOrderListSize On input, the original size of boot order list.
- On output, the size of new boot order list.
-
- @retval EFI_SUCCESS Boot Option successfully created.
- @retval EFI_OUT_OF_RESOURCES Fail to allocate necessary memory.
- @retval Other Error occurs while setting variable.
-
-**/
-EFI_STATUS
-BdsCreateLegacyBootOption (
- IN BBS_TABLE *CurrentBbsEntry,
- IN EFI_DEVICE_PATH_PROTOCOL *CurrentBbsDevPath,
- IN UINTN Index,
- IN OUT UINT16 **BootOrderList,
- IN OUT UINTN *BootOrderListSize
- )
-{
- EFI_STATUS Status;
- UINT16 CurrentBootOptionNo;
- UINT16 BootString[10];
- CHAR16 BootDesc[100];
- CHAR8 HelpString[100];
- UINT16 *NewBootOrderList;
- UINTN BufferSize;
- UINTN StringLen;
- VOID *Buffer;
- UINT8 *Ptr;
- UINT16 CurrentBbsDevPathSize;
- UINTN BootOrderIndex;
- UINTN BootOrderLastIndex;
- UINTN ArrayIndex;
- BOOLEAN IndexNotFound;
- BBS_BBS_DEVICE_PATH *NewBbsDevPathNode;
-
- if ((*BootOrderList) == NULL) {
- CurrentBootOptionNo = 0;
- } else {
- for (ArrayIndex = 0; ArrayIndex < (UINTN) (*BootOrderListSize / sizeof (UINT16)); ArrayIndex++) {
- IndexNotFound = TRUE;
- for (BootOrderIndex = 0; BootOrderIndex < (UINTN) (*BootOrderListSize / sizeof (UINT16)); BootOrderIndex++) {
- if ((*BootOrderList)[BootOrderIndex] == ArrayIndex) {
- IndexNotFound = FALSE;
- break;
- }
- }
-
- if (!IndexNotFound) {
- continue;
- } else {
- break;
- }
- }
-
- CurrentBootOptionNo = (UINT16) ArrayIndex;
- }
-
- UnicodeSPrint (
- BootString,
- sizeof (BootString),
- L"Boot%04x",
- CurrentBootOptionNo
- );
-
- BdsBuildLegacyDevNameString (CurrentBbsEntry, Index, sizeof (BootDesc), BootDesc);
-
- //
- // Create new BBS device path node with description string
- //
- UnicodeStrToAsciiStr (BootDesc, HelpString);
-
- StringLen = AsciiStrLen (HelpString);
- NewBbsDevPathNode = AllocateZeroPool (sizeof (BBS_BBS_DEVICE_PATH) + StringLen);
- if (NewBbsDevPathNode == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
- CopyMem (NewBbsDevPathNode, CurrentBbsDevPath, sizeof (BBS_BBS_DEVICE_PATH));
- CopyMem (NewBbsDevPathNode->String, HelpString, StringLen + 1);
- SetDevicePathNodeLength (&(NewBbsDevPathNode->Header), sizeof (BBS_BBS_DEVICE_PATH) + StringLen);
-
- //
- // Create entire new CurrentBbsDevPath with end node
- //
- CurrentBbsDevPath = AppendDevicePathNode (
- NULL,
- (EFI_DEVICE_PATH_PROTOCOL *) NewBbsDevPathNode
- );
- if (CurrentBbsDevPath == NULL) {
- FreePool (NewBbsDevPathNode);
- return EFI_OUT_OF_RESOURCES;
- }
-
- CurrentBbsDevPathSize = (UINT16) (GetDevicePathSize (CurrentBbsDevPath));
-
- BufferSize = sizeof (UINT32) +
- sizeof (UINT16) +
- StrSize (BootDesc) +
- CurrentBbsDevPathSize +
- sizeof (BBS_TABLE) +
- sizeof (UINT16);
-
- Buffer = AllocateZeroPool (BufferSize);
- if (Buffer == NULL) {
- FreePool (NewBbsDevPathNode);
- FreePool (CurrentBbsDevPath);
- return EFI_OUT_OF_RESOURCES;
- }
-
- Ptr = (UINT8 *) Buffer;
-
- *((UINT32 *) Ptr) = LOAD_OPTION_ACTIVE;
- Ptr += sizeof (UINT32);
-
- *((UINT16 *) Ptr) = CurrentBbsDevPathSize;
- Ptr += sizeof (UINT16);
-
- CopyMem (
- Ptr,
- BootDesc,
- StrSize (BootDesc)
- );
- Ptr += StrSize (BootDesc);
-
- CopyMem (
- Ptr,
- CurrentBbsDevPath,
- CurrentBbsDevPathSize
- );
- Ptr += CurrentBbsDevPathSize;
-
- CopyMem (
- Ptr,
- CurrentBbsEntry,
- sizeof (BBS_TABLE)
- );
-
- Ptr += sizeof (BBS_TABLE);
- *((UINT16 *) Ptr) = (UINT16) Index;
-
- Status = gRT->SetVariable (
- BootString,
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- BufferSize,
- Buffer
- );
-
- FreePool (Buffer);
-
- Buffer = NULL;
-
- NewBootOrderList = AllocateZeroPool (*BootOrderListSize + sizeof (UINT16));
- if (NULL == NewBootOrderList) {
- FreePool (NewBbsDevPathNode);
- FreePool (CurrentBbsDevPath);
- return EFI_OUT_OF_RESOURCES;
- }
-
- if (*BootOrderList != NULL) {
- CopyMem (NewBootOrderList, *BootOrderList, *BootOrderListSize);
- FreePool (*BootOrderList);
- }
-
- BootOrderLastIndex = (UINTN) (*BootOrderListSize / sizeof (UINT16));
- NewBootOrderList[BootOrderLastIndex] = CurrentBootOptionNo;
- *BootOrderListSize += sizeof (UINT16);
- *BootOrderList = NewBootOrderList;
-
- FreePool (NewBbsDevPathNode);
- FreePool (CurrentBbsDevPath);
- return Status;
-}
-
-/**
- Check if the boot option is a legacy one.
-
- @param BootOptionVar The boot option data payload.
- @param BbsEntry The BBS Table.
- @param BbsIndex The table index.
-
- @retval TRUE It is a legacy boot option.
- @retval FALSE It is not a legacy boot option.
-
-**/
-BOOLEAN
-BdsIsLegacyBootOption (
- IN UINT8 *BootOptionVar,
- OUT BBS_TABLE **BbsEntry,
- OUT UINT16 *BbsIndex
- )
-{
- UINT8 *Ptr;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- BOOLEAN Ret;
- UINT16 DevPathLen;
-
- Ptr = BootOptionVar;
- Ptr += sizeof (UINT32);
- DevPathLen = *(UINT16 *) Ptr;
- Ptr += sizeof (UINT16);
- Ptr += StrSize ((UINT16 *) Ptr);
- DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;
- if ((BBS_DEVICE_PATH == DevicePath->Type) && (BBS_BBS_DP == DevicePath->SubType)) {
- Ptr += DevPathLen;
- *BbsEntry = (BBS_TABLE *) Ptr;
- Ptr += sizeof (BBS_TABLE);
- *BbsIndex = *(UINT16 *) Ptr;
- Ret = TRUE;
- } else {
- *BbsEntry = NULL;
- Ret = FALSE;
- }
-
- return Ret;
-}
-
-/**
- Delete all the invalid legacy boot options.
-
- @retval EFI_SUCCESS All invalide legacy boot options are deleted.
- @retval EFI_OUT_OF_RESOURCES Fail to allocate necessary memory.
- @retval EFI_NOT_FOUND Fail to retrive variable of boot order.
-**/
-EFI_STATUS
-EFIAPI
-BdsDeleteAllInvalidLegacyBootOptions (
- VOID
- )
-{
- UINT16 *BootOrder;
- UINT8 *BootOptionVar;
- UINTN BootOrderSize;
- UINTN BootOptionSize;
- EFI_STATUS Status;
- UINT16 HddCount;
- UINT16 BbsCount;
- HDD_INFO *LocalHddInfo;
- BBS_TABLE *LocalBbsTable;
- BBS_TABLE *BbsEntry;
- UINT16 BbsIndex;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;
- UINTN Index;
- UINT16 BootOption[10];
- UINT16 BootDesc[100];
- BOOLEAN DescStringMatch;
-
- Status = EFI_SUCCESS;
- BootOrder = NULL;
- BootOrderSize = 0;
- HddCount = 0;
- BbsCount = 0;
- LocalHddInfo = NULL;
- LocalBbsTable = NULL;
- BbsEntry = NULL;
-
- Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- if (BootOrder == NULL) {
- return EFI_NOT_FOUND;
- }
-
- LegacyBios->GetBbsInfo (
- LegacyBios,
- &HddCount,
- &LocalHddInfo,
- &BbsCount,
- &LocalBbsTable
- );
-
- Index = 0;
- while (Index < BootOrderSize / sizeof (UINT16)) {
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);
- BootOptionVar = BdsLibGetVariableAndSize (
- BootOption,
- &gEfiGlobalVariableGuid,
- &BootOptionSize
- );
- if (NULL == BootOptionVar) {
- BootOptionSize = 0;
- Status = gRT->GetVariable (
- BootOption,
- &gEfiGlobalVariableGuid,
- NULL,
- &BootOptionSize,
- BootOptionVar
- );
- if (Status == EFI_NOT_FOUND) {
- //
- // Update BootOrder
- //
- BdsDeleteBootOption (
- BootOrder[Index],
- BootOrder,
- &BootOrderSize
- );
- continue;
- } else {
- FreePool (BootOrder);
- return EFI_OUT_OF_RESOURCES;
- }
- }
-
- //
- // Skip Non-Legacy boot option
- //
- if (!BdsIsLegacyBootOption (BootOptionVar, &BbsEntry, &BbsIndex)) {
- if (BootOptionVar!= NULL) {
- FreePool (BootOptionVar);
- }
- Index++;
- continue;
- }
-
- if (BbsIndex < BbsCount) {
- //
- // Check if BBS Description String is changed
- //
- DescStringMatch = FALSE;
- BdsBuildLegacyDevNameString (
- &LocalBbsTable[BbsIndex],
- BbsIndex,
- sizeof (BootDesc),
- BootDesc
- );
-
- if (StrCmp (BootDesc, (UINT16*)(BootOptionVar + sizeof (UINT32) + sizeof (UINT16))) == 0) {
- DescStringMatch = TRUE;
- }
-
- if (!((LocalBbsTable[BbsIndex].BootPriority == BBS_IGNORE_ENTRY) ||
- (LocalBbsTable[BbsIndex].BootPriority == BBS_DO_NOT_BOOT_FROM)) &&
- (LocalBbsTable[BbsIndex].DeviceType == BbsEntry->DeviceType) &&
- DescStringMatch) {
- Index++;
- continue;
- }
- }
-
- if (BootOptionVar != NULL) {
- FreePool (BootOptionVar);
- }
- //
- // should delete
- //
- BdsDeleteBootOption (
- BootOrder[Index],
- BootOrder,
- &BootOrderSize
- );
- }
-
- //
- // Adjust the number of boot options.
- //
- Status = gRT->SetVariable (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- BootOrderSize,
- BootOrder
- );
- //
- // Shrinking variable with existing variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
- FreePool (BootOrder);
-
- return Status;
-}
-
-/**
- Find all legacy boot option by device type.
-
- @param BootOrder The boot order array.
- @param BootOptionNum The number of boot option.
- @param DevType Device type.
- @param DevName Device name.
- @param Attribute The boot option attribute.
- @param BbsIndex The BBS table index.
- @param OptionNumber The boot option index.
-
- @retval TRUE The Legacy boot option is found.
- @retval FALSE The legacy boot option is not found.
-
-**/
-BOOLEAN
-BdsFindLegacyBootOptionByDevTypeAndName (
- IN UINT16 *BootOrder,
- IN UINTN BootOptionNum,
- IN UINT16 DevType,
- IN CHAR16 *DevName,
- OUT UINT32 *Attribute,
- OUT UINT16 *BbsIndex,
- OUT UINT16 *OptionNumber
- )
-{
- UINTN Index;
- CHAR16 BootOption[9];
- UINTN BootOptionSize;
- UINT8 *BootOptionVar;
- BBS_TABLE *BbsEntry;
- BOOLEAN Found;
-
- BbsEntry = NULL;
- Found = FALSE;
-
- if (NULL == BootOrder) {
- return Found;
- }
-
- //
- // Loop all boot option from variable
- //
- for (Index = 0; Index < BootOptionNum; Index++) {
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", (UINTN) BootOrder[Index]);
- BootOptionVar = BdsLibGetVariableAndSize (
- BootOption,
- &gEfiGlobalVariableGuid,
- &BootOptionSize
- );
- if (NULL == BootOptionVar) {
- continue;
- }
-
- //
- // Skip Non-legacy boot option
- //
- if (!BdsIsLegacyBootOption (BootOptionVar, &BbsEntry, BbsIndex)) {
- FreePool (BootOptionVar);
- continue;
- }
-
- if (
- (BbsEntry->DeviceType != DevType) ||
- (StrCmp (DevName, (CHAR16*)(BootOptionVar + sizeof (UINT32) + sizeof (UINT16))) != 0)
- ) {
- FreePool (BootOptionVar);
- continue;
- }
-
- *Attribute = *(UINT32 *) BootOptionVar;
- *OptionNumber = BootOrder[Index];
- Found = TRUE;
- FreePool (BootOptionVar);
- break;
- }
-
- return Found;
-}
-
-/**
- Create a legacy boot option.
-
- @param BbsItem The BBS Table entry.
- @param Index Index of the specified entry in BBS table.
- @param BootOrderList The boot order list.
- @param BootOrderListSize The size of boot order list.
-
- @retval EFI_OUT_OF_RESOURCE No enough memory.
- @retval EFI_SUCCESS The function complete successfully.
- @return Other value if the legacy boot option is not created.
-
-**/
-EFI_STATUS
-BdsCreateOneLegacyBootOption (
- IN BBS_TABLE *BbsItem,
- IN UINTN Index,
- IN OUT UINT16 **BootOrderList,
- IN OUT UINTN *BootOrderListSize
- )
-{
- BBS_BBS_DEVICE_PATH BbsDevPathNode;
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *DevPath;
-
- DevPath = NULL;
-
- //
- // Create device path node.
- //
- BbsDevPathNode.Header.Type = BBS_DEVICE_PATH;
- BbsDevPathNode.Header.SubType = BBS_BBS_DP;
- SetDevicePathNodeLength (&BbsDevPathNode.Header, sizeof (BBS_BBS_DEVICE_PATH));
- BbsDevPathNode.DeviceType = BbsItem->DeviceType;
- CopyMem (&BbsDevPathNode.StatusFlag, &BbsItem->StatusFlags, sizeof (UINT16));
-
- DevPath = AppendDevicePathNode (
- NULL,
- (EFI_DEVICE_PATH_PROTOCOL *) &BbsDevPathNode
- );
- if (NULL == DevPath) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- Status = BdsCreateLegacyBootOption (
- BbsItem,
- DevPath,
- Index,
- BootOrderList,
- BootOrderListSize
- );
- BbsItem->BootPriority = 0x00;
-
- FreePool (DevPath);
-
- return Status;
-}
-
-/**
- Add the legacy boot options from BBS table if they do not exist.
-
- @retval EFI_SUCCESS The boot options are added successfully
- or they are already in boot options.
- @retval EFI_NOT_FOUND No legacy boot options is found.
- @retval EFI_OUT_OF_RESOURCE No enough memory.
- @return Other value LegacyBoot options are not added.
-**/
-EFI_STATUS
-EFIAPI
-BdsAddNonExistingLegacyBootOptions (
- VOID
- )
-{
- UINT16 *BootOrder;
- UINTN BootOrderSize;
- EFI_STATUS Status;
- CHAR16 Desc[100];
- UINT16 HddCount;
- UINT16 BbsCount;
- HDD_INFO *LocalHddInfo;
- BBS_TABLE *LocalBbsTable;
- UINT16 BbsIndex;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;
- UINT16 Index;
- UINT32 Attribute;
- UINT16 OptionNumber;
- BOOLEAN Exist;
-
- HddCount = 0;
- BbsCount = 0;
- LocalHddInfo = NULL;
- LocalBbsTable = NULL;
-
- Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- LegacyBios->GetBbsInfo (
- LegacyBios,
- &HddCount,
- &LocalHddInfo,
- &BbsCount,
- &LocalBbsTable
- );
-
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- if (BootOrder == NULL) {
- BootOrderSize = 0;
- }
-
- for (Index = 0; Index < BbsCount; Index++) {
- if ((LocalBbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) ||
- (LocalBbsTable[Index].BootPriority == BBS_DO_NOT_BOOT_FROM)
- ) {
- continue;
- }
-
- BdsBuildLegacyDevNameString (&LocalBbsTable[Index], Index, sizeof (Desc), Desc);
-
- Exist = BdsFindLegacyBootOptionByDevTypeAndName (
- BootOrder,
- BootOrderSize / sizeof (UINT16),
- LocalBbsTable[Index].DeviceType,
- Desc,
- &Attribute,
- &BbsIndex,
- &OptionNumber
- );
- if (!Exist) {
- //
- // Not found such type of legacy device in boot options or we found but it's disabled
- // so we have to create one and put it to the tail of boot order list
- //
- Status = BdsCreateOneLegacyBootOption (
- &LocalBbsTable[Index],
- Index,
- &BootOrder,
- &BootOrderSize
- );
- if (!EFI_ERROR (Status)) {
- ASSERT (BootOrder != NULL);
- BbsIndex = Index;
- OptionNumber = BootOrder[BootOrderSize / sizeof (UINT16) - 1];
- }
- }
-
- ASSERT (BbsIndex == Index);
- }
-
- Status = gRT->SetVariable (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- BootOrderSize,
- BootOrder
- );
- if (BootOrder != NULL) {
- FreePool (BootOrder);
- }
-
- return Status;
-}
-
-/**
- Fill the device order buffer.
-
- @param BbsTable The BBS table.
- @param BbsType The BBS Type.
- @param BbsCount The BBS Count.
- @param Buf device order buffer.
-
- @return The device order buffer.
-
-**/
-UINT16 *
-BdsFillDevOrderBuf (
- IN BBS_TABLE *BbsTable,
- IN BBS_TYPE BbsType,
- IN UINTN BbsCount,
- OUT UINT16 *Buf
- )
-{
- UINTN Index;
-
- for (Index = 0; Index < BbsCount; Index++) {
- if (BbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) {
- continue;
- }
-
- if (BbsTable[Index].DeviceType != BbsType) {
- continue;
- }
-
- *Buf = (UINT16) (Index & 0xFF);
- Buf++;
- }
-
- return Buf;
-}
-
-/**
- Create the device order buffer.
-
- @param BbsTable The BBS table.
- @param BbsCount The BBS Count.
-
- @retval EFI_SUCCES The buffer is created and the EFI variable named
- VAR_LEGACY_DEV_ORDER and gEfiLegacyDevOrderVariableGuid is
- set correctly.
- @retval EFI_OUT_OF_RESOURCES Memmory or storage is not enough.
- @retval EFI_DEVICE_ERROR Fail to add the device order into EFI variable fail
- because of hardware error.
-**/
-EFI_STATUS
-BdsCreateDevOrder (
- IN BBS_TABLE *BbsTable,
- IN UINT16 BbsCount
- )
-{
- UINTN Index;
- UINTN FDCount;
- UINTN HDCount;
- UINTN CDCount;
- UINTN NETCount;
- UINTN BEVCount;
- UINTN TotalSize;
- UINTN HeaderSize;
- LEGACY_DEV_ORDER_ENTRY *DevOrder;
- LEGACY_DEV_ORDER_ENTRY *DevOrderPtr;
- EFI_STATUS Status;
-
- FDCount = 0;
- HDCount = 0;
- CDCount = 0;
- NETCount = 0;
- BEVCount = 0;
- TotalSize = 0;
- HeaderSize = sizeof (BBS_TYPE) + sizeof (UINT16);
- DevOrder = NULL;
- Status = EFI_SUCCESS;
-
- //
- // Count all boot devices
- //
- for (Index = 0; Index < BbsCount; Index++) {
- if (BbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) {
- continue;
- }
-
- switch (BbsTable[Index].DeviceType) {
- case BBS_FLOPPY:
- FDCount++;
- break;
-
- case BBS_HARDDISK:
- HDCount++;
- break;
-
- case BBS_CDROM:
- CDCount++;
- break;
-
- case BBS_EMBED_NETWORK:
- NETCount++;
- break;
-
- case BBS_BEV_DEVICE:
- BEVCount++;
- break;
-
- default:
- break;
- }
- }
-
- TotalSize += (HeaderSize + sizeof (UINT16) * FDCount);
- TotalSize += (HeaderSize + sizeof (UINT16) * HDCount);
- TotalSize += (HeaderSize + sizeof (UINT16) * CDCount);
- TotalSize += (HeaderSize + sizeof (UINT16) * NETCount);
- TotalSize += (HeaderSize + sizeof (UINT16) * BEVCount);
-
- //
- // Create buffer to hold all boot device order
- //
- DevOrder = AllocateZeroPool (TotalSize);
- if (NULL == DevOrder) {
- return EFI_OUT_OF_RESOURCES;
- }
- DevOrderPtr = DevOrder;
-
- DevOrderPtr->BbsType = BBS_FLOPPY;
- DevOrderPtr->Length = (UINT16) (sizeof (DevOrderPtr->Length) + FDCount * sizeof (UINT16));
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) BdsFillDevOrderBuf (BbsTable, BBS_FLOPPY, BbsCount, DevOrderPtr->Data);
-
- DevOrderPtr->BbsType = BBS_HARDDISK;
- DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + HDCount * sizeof (UINT16));
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) BdsFillDevOrderBuf (BbsTable, BBS_HARDDISK, BbsCount, DevOrderPtr->Data);
-
- DevOrderPtr->BbsType = BBS_CDROM;
- DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + CDCount * sizeof (UINT16));
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) BdsFillDevOrderBuf (BbsTable, BBS_CDROM, BbsCount, DevOrderPtr->Data);
-
- DevOrderPtr->BbsType = BBS_EMBED_NETWORK;
- DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + NETCount * sizeof (UINT16));
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) BdsFillDevOrderBuf (BbsTable, BBS_EMBED_NETWORK, BbsCount, DevOrderPtr->Data);
-
- DevOrderPtr->BbsType = BBS_BEV_DEVICE;
- DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + BEVCount * sizeof (UINT16));
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) BdsFillDevOrderBuf (BbsTable, BBS_BEV_DEVICE, BbsCount, DevOrderPtr->Data);
-
- ASSERT (TotalSize == (UINTN) ((UINT8 *) DevOrderPtr - (UINT8 *) DevOrder));
-
- //
- // Save device order for legacy boot device to variable.
- //
- Status = gRT->SetVariable (
- VAR_LEGACY_DEV_ORDER,
- &gEfiLegacyDevOrderVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- TotalSize,
- DevOrder
- );
- FreePool (DevOrder);
-
- return Status;
-}
-
-/**
- Add the legacy boot devices from BBS table into
- the legacy device boot order.
-
- @retval EFI_SUCCESS The boot devices are added successfully.
- @retval EFI_NOT_FOUND The legacy boot devices are not found.
- @retval EFI_OUT_OF_RESOURCES Memmory or storage is not enough.
- @retval EFI_DEVICE_ERROR Fail to add the legacy device boot order into EFI variable
- because of hardware error.
-**/
-EFI_STATUS
-EFIAPI
-BdsUpdateLegacyDevOrder (
- VOID
- )
-{
- LEGACY_DEV_ORDER_ENTRY *DevOrder;
- LEGACY_DEV_ORDER_ENTRY *NewDevOrder;
- LEGACY_DEV_ORDER_ENTRY *Ptr;
- LEGACY_DEV_ORDER_ENTRY *NewPtr;
- UINTN DevOrderSize;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;
- EFI_STATUS Status;
- UINT16 HddCount;
- UINT16 BbsCount;
- HDD_INFO *LocalHddInfo;
- BBS_TABLE *LocalBbsTable;
- UINTN Index;
- UINTN Index2;
- UINTN *Idx;
- UINTN FDCount;
- UINTN HDCount;
- UINTN CDCount;
- UINTN NETCount;
- UINTN BEVCount;
- UINTN TotalSize;
- UINTN HeaderSize;
- UINT16 *NewFDPtr;
- UINT16 *NewHDPtr;
- UINT16 *NewCDPtr;
- UINT16 *NewNETPtr;
- UINT16 *NewBEVPtr;
- UINT16 *NewDevPtr;
- UINTN FDIndex;
- UINTN HDIndex;
- UINTN CDIndex;
- UINTN NETIndex;
- UINTN BEVIndex;
-
- Idx = NULL;
- FDCount = 0;
- HDCount = 0;
- CDCount = 0;
- NETCount = 0;
- BEVCount = 0;
- TotalSize = 0;
- HeaderSize = sizeof (BBS_TYPE) + sizeof (UINT16);
- FDIndex = 0;
- HDIndex = 0;
- CDIndex = 0;
- NETIndex = 0;
- BEVIndex = 0;
- NewDevPtr = NULL;
-
- Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- Status = LegacyBios->GetBbsInfo (
- LegacyBios,
- &HddCount,
- &LocalHddInfo,
- &BbsCount,
- &LocalBbsTable
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- DevOrder = BdsLibGetVariableAndSize (
- VAR_LEGACY_DEV_ORDER,
- &gEfiLegacyDevOrderVariableGuid,
- &DevOrderSize
- );
- if (NULL == DevOrder) {
- return BdsCreateDevOrder (LocalBbsTable, BbsCount);
- }
- //
- // First we figure out how many boot devices with same device type respectively
- //
- for (Index = 0; Index < BbsCount; Index++) {
- if ((LocalBbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) ||
- (LocalBbsTable[Index].BootPriority == BBS_DO_NOT_BOOT_FROM)
- ) {
- continue;
- }
-
- switch (LocalBbsTable[Index].DeviceType) {
- case BBS_FLOPPY:
- FDCount++;
- break;
-
- case BBS_HARDDISK:
- HDCount++;
- break;
-
- case BBS_CDROM:
- CDCount++;
- break;
-
- case BBS_EMBED_NETWORK:
- NETCount++;
- break;
-
- case BBS_BEV_DEVICE:
- BEVCount++;
- break;
-
- default:
- break;
- }
- }
-
- TotalSize += (HeaderSize + FDCount * sizeof (UINT16));
- TotalSize += (HeaderSize + HDCount * sizeof (UINT16));
- TotalSize += (HeaderSize + CDCount * sizeof (UINT16));
- TotalSize += (HeaderSize + NETCount * sizeof (UINT16));
- TotalSize += (HeaderSize + BEVCount * sizeof (UINT16));
-
- NewDevOrder = AllocateZeroPool (TotalSize);
- if (NULL == NewDevOrder) {
- return EFI_OUT_OF_RESOURCES;
- }
-
-
-
- //
- // copy FD
- //
- Ptr = DevOrder;
- NewPtr = NewDevOrder;
- NewPtr->BbsType = Ptr->BbsType;
- NewPtr->Length = (UINT16) (sizeof (UINT16) + FDCount * sizeof (UINT16));
- for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) {
- if (LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_IGNORE_ENTRY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_DO_NOT_BOOT_FROM ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_FLOPPY
- ) {
- continue;
- }
-
- NewPtr->Data[FDIndex] = Ptr->Data[Index];
- FDIndex++;
- }
- NewFDPtr = NewPtr->Data;
-
- //
- // copy HD
- //
- Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]);
- NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]);
- NewPtr->BbsType = Ptr->BbsType;
- NewPtr->Length = (UINT16) (sizeof (UINT16) + HDCount * sizeof (UINT16));
- for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) {
- if (LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_IGNORE_ENTRY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_DO_NOT_BOOT_FROM ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_LOWEST_PRIORITY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_HARDDISK
- ) {
- continue;
- }
-
- NewPtr->Data[HDIndex] = Ptr->Data[Index];
- HDIndex++;
- }
- NewHDPtr = NewPtr->Data;
-
- //
- // copy CD
- //
- Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]);
- NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]);
- NewPtr->BbsType = Ptr->BbsType;
- NewPtr->Length = (UINT16) (sizeof (UINT16) + CDCount * sizeof (UINT16));
- for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) {
- if (LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_IGNORE_ENTRY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_DO_NOT_BOOT_FROM ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_LOWEST_PRIORITY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_CDROM
- ) {
- continue;
- }
-
- NewPtr->Data[CDIndex] = Ptr->Data[Index];
- CDIndex++;
- }
- NewCDPtr = NewPtr->Data;
-
- //
- // copy NET
- //
- Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]);
- NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]);
- NewPtr->BbsType = Ptr->BbsType;
- NewPtr->Length = (UINT16) (sizeof (UINT16) + NETCount * sizeof (UINT16));
- for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) {
- if (LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_IGNORE_ENTRY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_DO_NOT_BOOT_FROM ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_LOWEST_PRIORITY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_EMBED_NETWORK
- ) {
- continue;
- }
-
- NewPtr->Data[NETIndex] = Ptr->Data[Index];
- NETIndex++;
- }
- NewNETPtr = NewPtr->Data;
-
- //
- // copy BEV
- //
- Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]);
- NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]);
- NewPtr->BbsType = Ptr->BbsType;
- NewPtr->Length = (UINT16) (sizeof (UINT16) + BEVCount * sizeof (UINT16));
- for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) {
- if (LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_IGNORE_ENTRY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_DO_NOT_BOOT_FROM ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].BootPriority == BBS_LOWEST_PRIORITY ||
- LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_BEV_DEVICE
- ) {
- continue;
- }
-
- NewPtr->Data[BEVIndex] = Ptr->Data[Index];
- BEVIndex++;
- }
- NewBEVPtr = NewPtr->Data;
-
- for (Index = 0; Index < BbsCount; Index++) {
- if ((LocalBbsTable[Index].BootPriority == BBS_IGNORE_ENTRY) ||
- (LocalBbsTable[Index].BootPriority == BBS_DO_NOT_BOOT_FROM)
- ) {
- continue;
- }
-
- switch (LocalBbsTable[Index].DeviceType) {
- case BBS_FLOPPY:
- Idx = &FDIndex;
- NewDevPtr = NewFDPtr;
- break;
-
- case BBS_HARDDISK:
- Idx = &HDIndex;
- NewDevPtr = NewHDPtr;
- break;
-
- case BBS_CDROM:
- Idx = &CDIndex;
- NewDevPtr = NewCDPtr;
- break;
-
- case BBS_EMBED_NETWORK:
- Idx = &NETIndex;
- NewDevPtr = NewNETPtr;
- break;
-
- case BBS_BEV_DEVICE:
- Idx = &BEVIndex;
- NewDevPtr = NewBEVPtr;
- break;
-
- default:
- Idx = NULL;
- break;
- }
- //
- // at this point we have copied those valid indexes to new buffer
- // and we should check if there is any new appeared boot device
- //
- if (Idx != NULL) {
- for (Index2 = 0; Index2 < *Idx; Index2++) {
- if ((NewDevPtr[Index2] & 0xFF) == (UINT16) Index) {
- break;
- }
- }
-
- if (Index2 == *Idx) {
- //
- // Index2 == *Idx means we didn't find Index
- // so Index is a new appeared device's index in BBS table
- // insert it before disabled indexes.
- //
- for (Index2 = 0; Index2 < *Idx; Index2++) {
- if ((NewDevPtr[Index2] & 0xFF00) == 0xFF00) {
- break;
- }
- }
- CopyMem (&NewDevPtr[Index2 + 1], &NewDevPtr[Index2], (*Idx - Index2) * sizeof (UINT16));
- NewDevPtr[Index2] = (UINT16) (Index & 0xFF);
- (*Idx)++;
- }
- }
- }
-
- FreePool (DevOrder);
-
- Status = gRT->SetVariable (
- VAR_LEGACY_DEV_ORDER,
- &gEfiLegacyDevOrderVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- TotalSize,
- NewDevOrder
- );
- FreePool (NewDevOrder);
-
- return Status;
-}
-
-/**
- Set Boot Priority for specified device type.
-
- @param DeviceType The device type.
- @param BbsIndex The BBS index to set the highest priority. Ignore when -1.
- @param LocalBbsTable The BBS table.
- @param Priority The prority table.
-
- @retval EFI_SUCCESS The function completes successfully.
- @retval EFI_NOT_FOUND Failed to find device.
- @retval EFI_OUT_OF_RESOURCES Failed to get the efi variable of device order.
-
-**/
-EFI_STATUS
-BdsSetBootPriority4SameTypeDev (
- IN UINT16 DeviceType,
- IN UINTN BbsIndex,
- IN OUT BBS_TABLE *LocalBbsTable,
- IN OUT UINT16 *Priority
- )
-{
- LEGACY_DEV_ORDER_ENTRY *DevOrder;
- LEGACY_DEV_ORDER_ENTRY *DevOrderPtr;
- UINTN DevOrderSize;
- UINTN Index;
-
- DevOrder = BdsLibGetVariableAndSize (
- VAR_LEGACY_DEV_ORDER,
- &gEfiLegacyDevOrderVariableGuid,
- &DevOrderSize
- );
- if (NULL == DevOrder) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- DevOrderPtr = DevOrder;
- while ((UINT8 *) DevOrderPtr < (UINT8 *) DevOrder + DevOrderSize) {
- if (DevOrderPtr->BbsType == DeviceType) {
- break;
- }
-
- DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) ((UINTN) DevOrderPtr + sizeof (BBS_TYPE) + DevOrderPtr->Length);
- }
-
- if ((UINT8 *) DevOrderPtr >= (UINT8 *) DevOrder + DevOrderSize) {
- FreePool (DevOrder);
- return EFI_NOT_FOUND;
- }
-
- if (BbsIndex != (UINTN) -1) {
- LocalBbsTable[BbsIndex].BootPriority = *Priority;
- (*Priority)++;
- }
- //
- // If the high byte of the DevIndex is 0xFF, it indicates that this device has been disabled.
- //
- for (Index = 0; Index < DevOrderPtr->Length / sizeof (UINT16) - 1; Index++) {
- if ((DevOrderPtr->Data[Index] & 0xFF00) == 0xFF00) {
- //
- // LocalBbsTable[DevIndex[Index] & 0xFF].BootPriority = BBS_DISABLED_ENTRY;
- //
- } else if (DevOrderPtr->Data[Index] != BbsIndex) {
- LocalBbsTable[DevOrderPtr->Data[Index]].BootPriority = *Priority;
- (*Priority)++;
- }
- }
-
- FreePool (DevOrder);
- return EFI_SUCCESS;
-}
-
-/**
- Print the BBS Table.
-
- @param LocalBbsTable The BBS table.
- @param BbsCount The count of entry in BBS table.
-**/
-VOID
-PrintBbsTable (
- IN BBS_TABLE *LocalBbsTable,
- IN UINT16 BbsCount
- )
-{
- UINT16 Idx;
-
- DEBUG ((DEBUG_ERROR, "\n"));
- DEBUG ((DEBUG_ERROR, " NO Prio bb/dd/ff cl/sc Type Stat segm:offs\n"));
- DEBUG ((DEBUG_ERROR, "=============================================\n"));
- for (Idx = 0; Idx < BbsCount; Idx++) {
- if ((LocalBbsTable[Idx].BootPriority == BBS_IGNORE_ENTRY) ||
- (LocalBbsTable[Idx].BootPriority == BBS_DO_NOT_BOOT_FROM) ||
- (LocalBbsTable[Idx].BootPriority == BBS_LOWEST_PRIORITY)
- ) {
- continue;
- }
-
- DEBUG (
- (DEBUG_ERROR,
- " %02x: %04x %02x/%02x/%02x %02x/%02x %04x %04x %04x:%04x\n",
- (UINTN) Idx,
- (UINTN) LocalBbsTable[Idx].BootPriority,
- (UINTN) LocalBbsTable[Idx].Bus,
- (UINTN) LocalBbsTable[Idx].Device,
- (UINTN) LocalBbsTable[Idx].Function,
- (UINTN) LocalBbsTable[Idx].Class,
- (UINTN) LocalBbsTable[Idx].SubClass,
- (UINTN) LocalBbsTable[Idx].DeviceType,
- (UINTN) * (UINT16 *) &LocalBbsTable[Idx].StatusFlags,
- (UINTN) LocalBbsTable[Idx].BootHandlerSegment,
- (UINTN) LocalBbsTable[Idx].BootHandlerOffset,
- (UINTN) ((LocalBbsTable[Idx].MfgStringSegment << 4) + LocalBbsTable[Idx].MfgStringOffset),
- (UINTN) ((LocalBbsTable[Idx].DescStringSegment << 4) + LocalBbsTable[Idx].DescStringOffset))
- );
- }
-
- DEBUG ((DEBUG_ERROR, "\n"));
-}
-
-/**
- Set the boot priority for BBS entries based on boot option entry and boot order.
-
- @param Entry The boot option is to be checked for refresh BBS table.
-
- @retval EFI_SUCCESS The boot priority for BBS entries is refreshed successfully.
- @retval EFI_NOT_FOUND BBS entries can't be found.
- @retval EFI_OUT_OF_RESOURCES Failed to get the legacy device boot order.
-**/
-EFI_STATUS
-EFIAPI
-BdsRefreshBbsTableForBoot (
- IN BDS_COMMON_OPTION *Entry
- )
-{
- EFI_STATUS Status;
- UINT16 BbsIndex;
- UINT16 HddCount;
- UINT16 BbsCount;
- HDD_INFO *LocalHddInfo;
- BBS_TABLE *LocalBbsTable;
- UINT16 DevType;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;
- UINTN Index;
- UINT16 Priority;
- UINT16 *BootOrder;
- UINTN BootOrderSize;
- UINT8 *BootOptionVar;
- UINTN BootOptionSize;
- CHAR16 BootOption[9];
- UINT8 *Ptr;
- UINT16 DevPathLen;
- EFI_DEVICE_PATH_PROTOCOL *DevPath;
- UINT16 *DeviceType;
- UINTN DeviceTypeCount;
- UINTN DeviceTypeIndex;
-
- HddCount = 0;
- BbsCount = 0;
- LocalHddInfo = NULL;
- LocalBbsTable = NULL;
- DevType = BBS_UNKNOWN;
-
- Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- LegacyBios->GetBbsInfo (
- LegacyBios,
- &HddCount,
- &LocalHddInfo,
- &BbsCount,
- &LocalBbsTable
- );
- //
- // First, set all the present devices' boot priority to BBS_UNPRIORITIZED_ENTRY
- // We will set them according to the settings setup by user
- //
- for (Index = 0; Index < BbsCount; Index++) {
- if (!((BBS_IGNORE_ENTRY == LocalBbsTable[Index].BootPriority) ||
- (BBS_DO_NOT_BOOT_FROM == LocalBbsTable[Index].BootPriority) ||
- (BBS_LOWEST_PRIORITY == LocalBbsTable[Index].BootPriority))) {
- LocalBbsTable[Index].BootPriority = BBS_UNPRIORITIZED_ENTRY;
- }
- }
- //
- // boot priority always starts at 0
- //
- Priority = 0;
- if (Entry->LoadOptionsSize == sizeof (BBS_TABLE) + sizeof (UINT16)) {
- //
- // If Entry stands for a legacy boot option, we prioritize the devices with the same type first.
- //
- DevType = ((BBS_TABLE *) Entry->LoadOptions)->DeviceType;
- BbsIndex = *(UINT16 *) ((BBS_TABLE *) Entry->LoadOptions + 1);
- Status = BdsSetBootPriority4SameTypeDev (
- DevType,
- BbsIndex,
- LocalBbsTable,
- &Priority
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- }
- //
- // we have to set the boot priority for other BBS entries with different device types
- //
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- DeviceType = AllocatePool (BootOrderSize + sizeof (UINT16));
- ASSERT (DeviceType != NULL);
-
- DeviceType[0] = DevType;
- DeviceTypeCount = 1;
- for (Index = 0; ((BootOrder != NULL) && (Index < BootOrderSize / sizeof (UINT16))); Index++) {
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);
- BootOptionVar = BdsLibGetVariableAndSize (
- BootOption,
- &gEfiGlobalVariableGuid,
- &BootOptionSize
- );
- if (NULL == BootOptionVar) {
- continue;
- }
-
- Ptr = BootOptionVar;
-
- Ptr += sizeof (UINT32);
- DevPathLen = *(UINT16 *) Ptr;
- Ptr += sizeof (UINT16);
- Ptr += StrSize ((UINT16 *) Ptr);
- DevPath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;
- if (BBS_DEVICE_PATH != DevPath->Type || BBS_BBS_DP != DevPath->SubType) {
- FreePool (BootOptionVar);
- continue;
- }
-
- Ptr += DevPathLen;
- DevType = ((BBS_TABLE *) Ptr)->DeviceType;
- for (DeviceTypeIndex = 0; DeviceTypeIndex < DeviceTypeCount; DeviceTypeIndex++) {
- if (DeviceType[DeviceTypeIndex] == DevType) {
- break;
- }
- }
- if (DeviceTypeIndex < DeviceTypeCount) {
- //
- // We don't want to process twice for a device type
- //
- FreePool (BootOptionVar);
- continue;
- }
-
- DeviceType[DeviceTypeCount] = DevType;
- DeviceTypeCount++;
-
- Status = BdsSetBootPriority4SameTypeDev (
- DevType,
- (UINTN) -1,
- LocalBbsTable,
- &Priority
- );
- FreePool (BootOptionVar);
- if (EFI_ERROR (Status)) {
- break;
- }
- }
-
- FreePool (DeviceType);
-
- if (BootOrder != NULL) {
- FreePool (BootOrder);
- }
-
- DEBUG_CODE_BEGIN();
- PrintBbsTable (LocalBbsTable, BbsCount);
- DEBUG_CODE_END();
-
- return Status;
-}
-
-/**
- Boot the legacy system with the boot option
-
- @param Option The legacy boot option which have BBS device path
-
- @retval EFI_UNSUPPORTED There is no legacybios protocol, do not support
- legacy boot.
- @retval EFI_STATUS Return the status of LegacyBios->LegacyBoot ().
-
-**/
-EFI_STATUS
-BdsLibDoLegacyBoot (
- IN BDS_COMMON_OPTION *Option
- )
-{
- EFI_STATUS Status;
- EFI_LEGACY_BIOS_PROTOCOL *LegacyBios;
- EFI_EVENT LegacyBootEvent;
-
- Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios);
- if (EFI_ERROR (Status)) {
- //
- // If no LegacyBios protocol we do not support legacy boot
- //
- return EFI_UNSUPPORTED;
- }
- //
- // Notes: if we separate the int 19, then we don't need to refresh BBS
- //
- BdsRefreshBbsTableForBoot (Option);
-
- //
- // Write boot to OS performance data for legacy boot.
- //
- PERF_CODE (
- //
- // Create an event to be signalled when Legacy Boot occurs to write performance data.
- //
- Status = EfiCreateEventLegacyBootEx(
- TPL_NOTIFY,
- BmEndOfBdsPerfCode,
- NULL,
- &LegacyBootEvent
- );
- ASSERT_EFI_ERROR (Status);
- );
-
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Legacy Boot: %S\n", Option->Description));
- return LegacyBios->LegacyBoot (
- LegacyBios,
- (BBS_BBS_DEVICE_PATH *) Option->DevicePath,
- Option->LoadOptionsSize,
- Option->LoadOptions
- );
-}
-
-/**
- Internal function to check if the input boot option is a valid EFI NV Boot####.
-
- @param OptionToCheck Boot option to be checked.
-
- @retval TRUE This boot option matches a valid EFI NV Boot####.
- @retval FALSE If not.
-
-**/
-BOOLEAN
-IsBootOptionValidNVVarialbe (
- IN BDS_COMMON_OPTION *OptionToCheck
- )
-{
- LIST_ENTRY TempList;
- BDS_COMMON_OPTION *BootOption;
- BOOLEAN Valid;
- CHAR16 OptionName[20];
-
- Valid = FALSE;
-
- InitializeListHead (&TempList);
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", OptionToCheck->BootCurrent);
-
- BootOption = BdsLibVariableToOption (&TempList, OptionName);
- if (BootOption == NULL) {
- return FALSE;
- }
-
- //
- // If the Boot Option Number and Device Path matches, OptionToCheck matches a
- // valid EFI NV Boot####.
- //
- if ((OptionToCheck->BootCurrent == BootOption->BootCurrent) &&
- (CompareMem (OptionToCheck->DevicePath, BootOption->DevicePath, GetDevicePathSize (OptionToCheck->DevicePath)) == 0))
- {
- Valid = TRUE;
- }
-
- FreePool (BootOption);
-
- return Valid;
-}
-
-/**
- Check whether a USB device match the specified USB Class device path. This
- function follows "Load Option Processing" behavior in UEFI specification.
-
- @param UsbIo USB I/O protocol associated with the USB device.
- @param UsbClass The USB Class device path to match.
-
- @retval TRUE The USB device match the USB Class device path.
- @retval FALSE The USB device does not match the USB Class device path.
-
-**/
-BOOLEAN
-BdsMatchUsbClass (
- IN EFI_USB_IO_PROTOCOL *UsbIo,
- IN USB_CLASS_DEVICE_PATH *UsbClass
- )
-{
- EFI_STATUS Status;
- EFI_USB_DEVICE_DESCRIPTOR DevDesc;
- EFI_USB_INTERFACE_DESCRIPTOR IfDesc;
- UINT8 DeviceClass;
- UINT8 DeviceSubClass;
- UINT8 DeviceProtocol;
-
- if ((DevicePathType (UsbClass) != MESSAGING_DEVICE_PATH) ||
- (DevicePathSubType (UsbClass) != MSG_USB_CLASS_DP)){
- return FALSE;
- }
-
- //
- // Check Vendor Id and Product Id.
- //
- Status = UsbIo->UsbGetDeviceDescriptor (UsbIo, &DevDesc);
- if (EFI_ERROR (Status)) {
- return FALSE;
- }
-
- if ((UsbClass->VendorId != 0xffff) &&
- (UsbClass->VendorId != DevDesc.IdVendor)) {
- return FALSE;
- }
-
- if ((UsbClass->ProductId != 0xffff) &&
- (UsbClass->ProductId != DevDesc.IdProduct)) {
- return FALSE;
- }
-
- DeviceClass = DevDesc.DeviceClass;
- DeviceSubClass = DevDesc.DeviceSubClass;
- DeviceProtocol = DevDesc.DeviceProtocol;
- if (DeviceClass == 0) {
- //
- // If Class in Device Descriptor is set to 0, use the Class, SubClass and
- // Protocol in Interface Descriptor instead.
- //
- Status = UsbIo->UsbGetInterfaceDescriptor (UsbIo, &IfDesc);
- if (EFI_ERROR (Status)) {
- return FALSE;
- }
-
- DeviceClass = IfDesc.InterfaceClass;
- DeviceSubClass = IfDesc.InterfaceSubClass;
- DeviceProtocol = IfDesc.InterfaceProtocol;
- }
-
- //
- // Check Class, SubClass and Protocol.
- //
- if ((UsbClass->DeviceClass != 0xff) &&
- (UsbClass->DeviceClass != DeviceClass)) {
- return FALSE;
- }
-
- if ((UsbClass->DeviceSubClass != 0xff) &&
- (UsbClass->DeviceSubClass != DeviceSubClass)) {
- return FALSE;
- }
-
- if ((UsbClass->DeviceProtocol != 0xff) &&
- (UsbClass->DeviceProtocol != DeviceProtocol)) {
- return FALSE;
- }
-
- return TRUE;
-}
-
-/**
- Check whether a USB device match the specified USB WWID device path. This
- function follows "Load Option Processing" behavior in UEFI specification.
-
- @param UsbIo USB I/O protocol associated with the USB device.
- @param UsbWwid The USB WWID device path to match.
-
- @retval TRUE The USB device match the USB WWID device path.
- @retval FALSE The USB device does not match the USB WWID device path.
-
-**/
-BOOLEAN
-BdsMatchUsbWwid (
- IN EFI_USB_IO_PROTOCOL *UsbIo,
- IN USB_WWID_DEVICE_PATH *UsbWwid
- )
-{
- EFI_STATUS Status;
- EFI_USB_DEVICE_DESCRIPTOR DevDesc;
- EFI_USB_INTERFACE_DESCRIPTOR IfDesc;
- UINT16 *LangIdTable;
- UINT16 TableSize;
- UINT16 Index;
- CHAR16 *CompareStr;
- UINTN CompareLen;
- CHAR16 *SerialNumberStr;
- UINTN Length;
-
- if ((DevicePathType (UsbWwid) != MESSAGING_DEVICE_PATH) ||
- (DevicePathSubType (UsbWwid) != MSG_USB_WWID_DP )){
- return FALSE;
- }
-
- //
- // Check Vendor Id and Product Id.
- //
- Status = UsbIo->UsbGetDeviceDescriptor (UsbIo, &DevDesc);
- if (EFI_ERROR (Status)) {
- return FALSE;
- }
- if ((DevDesc.IdVendor != UsbWwid->VendorId) ||
- (DevDesc.IdProduct != UsbWwid->ProductId)) {
- return FALSE;
- }
-
- //
- // Check Interface Number.
- //
- Status = UsbIo->UsbGetInterfaceDescriptor (UsbIo, &IfDesc);
- if (EFI_ERROR (Status)) {
- return FALSE;
- }
- if (IfDesc.InterfaceNumber != UsbWwid->InterfaceNumber) {
- return FALSE;
- }
-
- //
- // Check Serial Number.
- //
- if (DevDesc.StrSerialNumber == 0) {
- return FALSE;
- }
-
- //
- // Get all supported languages.
- //
- TableSize = 0;
- LangIdTable = NULL;
- Status = UsbIo->UsbGetSupportedLanguages (UsbIo, &LangIdTable, &TableSize);
- if (EFI_ERROR (Status) || (TableSize == 0) || (LangIdTable == NULL)) {
- return FALSE;
- }
-
- //
- // Serial number in USB WWID device path is the last 64-or-less UTF-16 characters.
- //
- CompareStr = (CHAR16 *) (UINTN) (UsbWwid + 1);
- CompareLen = (DevicePathNodeLength (UsbWwid) - sizeof (USB_WWID_DEVICE_PATH)) / sizeof (CHAR16);
- if (CompareStr[CompareLen - 1] == L'\0') {
- CompareLen--;
- }
-
- //
- // Compare serial number in each supported language.
- //
- for (Index = 0; Index < TableSize / sizeof (UINT16); Index++) {
- SerialNumberStr = NULL;
- Status = UsbIo->UsbGetStringDescriptor (
- UsbIo,
- LangIdTable[Index],
- DevDesc.StrSerialNumber,
- &SerialNumberStr
- );
- if (EFI_ERROR (Status) || (SerialNumberStr == NULL)) {
- continue;
- }
-
- Length = StrLen (SerialNumberStr);
- if ((Length >= CompareLen) &&
- (CompareMem (SerialNumberStr + Length - CompareLen, CompareStr, CompareLen * sizeof (CHAR16)) == 0)) {
- FreePool (SerialNumberStr);
- return TRUE;
- }
-
- FreePool (SerialNumberStr);
- }
-
- return FALSE;
-}
-
-/**
- Find a USB device path which match the specified short-form device path start
- with USB Class or USB WWID device path and load the boot file then return the
- image handle. If ParentDevicePath is NULL, this function will search in all USB
- devices of the platform. If ParentDevicePath is not NULL,this function will only
- search in its child devices.
-
- @param ParentDevicePath The device path of the parent.
- @param ShortFormDevicePath The USB Class or USB WWID device path to match.
-
- @return The image Handle if find load file from specified short-form device path
- or NULL if not found.
-
-**/
-EFI_HANDLE *
-BdsFindUsbDevice (
- IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
- IN EFI_DEVICE_PATH_PROTOCOL *ShortFormDevicePath
- )
-{
- EFI_STATUS Status;
- UINTN UsbIoHandleCount;
- EFI_HANDLE *UsbIoHandleBuffer;
- EFI_DEVICE_PATH_PROTOCOL *UsbIoDevicePath;
- EFI_USB_IO_PROTOCOL *UsbIo;
- UINTN Index;
- UINTN ParentSize;
- UINTN Size;
- EFI_HANDLE ImageHandle;
- EFI_HANDLE Handle;
- EFI_DEVICE_PATH_PROTOCOL *FullDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *NextDevicePath;
-
- FullDevicePath = NULL;
- ImageHandle = NULL;
-
- //
- // Get all UsbIo Handles.
- //
- UsbIoHandleCount = 0;
- UsbIoHandleBuffer = NULL;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiUsbIoProtocolGuid,
- NULL,
- &UsbIoHandleCount,
- &UsbIoHandleBuffer
- );
- if (EFI_ERROR (Status) || (UsbIoHandleCount == 0) || (UsbIoHandleBuffer == NULL)) {
- return NULL;
- }
-
- ParentSize = (ParentDevicePath == NULL) ? 0 : GetDevicePathSize (ParentDevicePath);
- for (Index = 0; Index < UsbIoHandleCount; Index++) {
- //
- // Get the Usb IO interface.
- //
- Status = gBS->HandleProtocol(
- UsbIoHandleBuffer[Index],
- &gEfiUsbIoProtocolGuid,
- (VOID **) &UsbIo
- );
- if (EFI_ERROR (Status)) {
- continue;
- }
-
- UsbIoDevicePath = DevicePathFromHandle (UsbIoHandleBuffer[Index]);
- if (UsbIoDevicePath == NULL) {
- continue;
- }
-
- if (ParentDevicePath != NULL) {
- //
- // Compare starting part of UsbIoHandle's device path with ParentDevicePath.
- //
- Size = GetDevicePathSize (UsbIoDevicePath);
- if ((Size < ParentSize) ||
- (CompareMem (UsbIoDevicePath, ParentDevicePath, ParentSize - END_DEVICE_PATH_LENGTH) != 0)) {
- continue;
- }
- }
-
- if (BdsMatchUsbClass (UsbIo, (USB_CLASS_DEVICE_PATH *) ShortFormDevicePath) ||
- BdsMatchUsbWwid (UsbIo, (USB_WWID_DEVICE_PATH *) ShortFormDevicePath)) {
- //
- // Try to find if there is the boot file in this DevicePath
- //
- NextDevicePath = NextDevicePathNode (ShortFormDevicePath);
- if (!IsDevicePathEnd (NextDevicePath)) {
- FullDevicePath = AppendDevicePath (UsbIoDevicePath, NextDevicePath);
- //
- // Connect the full device path, so that Simple File System protocol
- // could be installed for this USB device.
- //
- BdsLibConnectDevicePath (FullDevicePath);
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));
- Status = gBS->LoadImage (
- TRUE,
- gImageHandle,
- FullDevicePath,
- NULL,
- 0,
- &ImageHandle
- );
- FreePool (FullDevicePath);
- } else {
- FullDevicePath = UsbIoDevicePath;
- Status = EFI_NOT_FOUND;
- }
-
- //
- // If we didn't find an image directly, we need to try as if it is a removable device boot option
- // and load the image according to the default boot behavior for removable device.
- //
- if (EFI_ERROR (Status)) {
- //
- // check if there is a bootable removable media could be found in this device path ,
- // and get the bootable media handle
- //
- Handle = BdsLibGetBootableHandle(UsbIoDevicePath);
- if (Handle == NULL) {
- continue;
- }
- //
- // Load the default boot file \EFI\BOOT\boot{machinename}.EFI from removable Media
- // machinename is ia32, ia64, x64, ...
- //
- FullDevicePath = FileDevicePath (Handle, EFI_REMOVABLE_MEDIA_FILE_NAME);
- if (FullDevicePath != NULL) {
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));
- Status = gBS->LoadImage (
- TRUE,
- gImageHandle,
- FullDevicePath,
- NULL,
- 0,
- &ImageHandle
- );
- if (EFI_ERROR (Status)) {
- //
- // The DevicePath failed, and it's not a valid
- // removable media device.
- //
- continue;
- }
- } else {
- continue;
- }
- }
- break;
- }
- }
-
- FreePool (UsbIoHandleBuffer);
- return ImageHandle;
-}
-
-/**
- Expand USB Class or USB WWID device path node to be full device path of a USB
- device in platform then load the boot file on this full device path and return the
- image handle.
-
- This function support following 4 cases:
- 1) Boot Option device path starts with a USB Class or USB WWID device path,
- and there is no Media FilePath device path in the end.
- In this case, it will follow Removable Media Boot Behavior.
- 2) Boot Option device path starts with a USB Class or USB WWID device path,
- and ended with Media FilePath device path.
- 3) Boot Option device path starts with a full device path to a USB Host Controller,
- contains a USB Class or USB WWID device path node, while not ended with Media
- FilePath device path. In this case, it will follow Removable Media Boot Behavior.
- 4) Boot Option device path starts with a full device path to a USB Host Controller,
- contains a USB Class or USB WWID device path node, and ended with Media
- FilePath device path.
-
- @param DevicePath The Boot Option device path.
-
- @return The image handle of boot file, or NULL if there is no boot file found in
- the specified USB Class or USB WWID device path.
-
-**/
-EFI_HANDLE *
-BdsExpandUsbShortFormDevicePath (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- )
-{
- EFI_HANDLE *ImageHandle;
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *ShortFormDevicePath;
-
- //
- // Search for USB Class or USB WWID device path node.
- //
- ShortFormDevicePath = NULL;
- ImageHandle = NULL;
- TempDevicePath = DevicePath;
- while (!IsDevicePathEnd (TempDevicePath)) {
- if ((DevicePathType (TempDevicePath) == MESSAGING_DEVICE_PATH) &&
- ((DevicePathSubType (TempDevicePath) == MSG_USB_CLASS_DP) ||
- (DevicePathSubType (TempDevicePath) == MSG_USB_WWID_DP))) {
- ShortFormDevicePath = TempDevicePath;
- break;
- }
- TempDevicePath = NextDevicePathNode (TempDevicePath);
- }
-
- if (ShortFormDevicePath == NULL) {
- //
- // No USB Class or USB WWID device path node found, do nothing.
- //
- return NULL;
- }
-
- if (ShortFormDevicePath == DevicePath) {
- //
- // Boot Option device path starts with USB Class or USB WWID device path.
- //
- ImageHandle = BdsFindUsbDevice (NULL, ShortFormDevicePath);
- if (ImageHandle == NULL) {
- //
- // Failed to find a match in existing devices, connect the short form USB
- // device path and try again.
- //
- BdsLibConnectUsbDevByShortFormDP (0xff, ShortFormDevicePath);
- ImageHandle = BdsFindUsbDevice (NULL, ShortFormDevicePath);
- }
- } else {
- //
- // Boot Option device path contains USB Class or USB WWID device path node.
- //
-
- //
- // Prepare the parent device path for search.
- //
- TempDevicePath = DuplicateDevicePath (DevicePath);
- ASSERT (TempDevicePath != NULL);
- SetDevicePathEndNode (((UINT8 *) TempDevicePath) + ((UINTN) ShortFormDevicePath - (UINTN) DevicePath));
-
- //
- // The USB Host Controller device path is already in Boot Option device path
- // and USB Bus driver already support RemainingDevicePath starts with USB
- // Class or USB WWID device path, so just search in existing USB devices and
- // doesn't perform ConnectController here.
- //
- ImageHandle = BdsFindUsbDevice (TempDevicePath, ShortFormDevicePath);
- FreePool (TempDevicePath);
- }
-
- return ImageHandle;
-}
-
-/**
- Process the boot option follow the UEFI specification and
- special treat the legacy boot option with BBS_DEVICE_PATH.
-
- @param Option The boot option need to be processed
- @param DevicePath The device path which describe where to load the
- boot image or the legacy BBS device path to boot
- the legacy OS
- @param ExitDataSize The size of exit data.
- @param ExitData Data returned when Boot image failed.
-
- @retval EFI_SUCCESS Boot from the input boot option successfully.
- @retval EFI_NOT_FOUND If the Device Path is not found in the system
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibBootViaBootOption (
- IN BDS_COMMON_OPTION *Option,
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- OUT UINTN *ExitDataSize,
- OUT CHAR16 **ExitData OPTIONAL
- )
-{
- EFI_STATUS Status;
- EFI_STATUS StatusLogo;
- EFI_HANDLE Handle;
- EFI_HANDLE ImageHandle;
- EFI_DEVICE_PATH_PROTOCOL *FilePath;
- EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;
- EFI_DEVICE_PATH_PROTOCOL *WorkingDevicePath;
- EFI_ACPI_S3_SAVE_PROTOCOL *AcpiS3Save;
- LIST_ENTRY TempBootLists;
- EFI_BOOT_LOGO_PROTOCOL *BootLogo;
-
- *ExitDataSize = 0;
- *ExitData = NULL;
-
- //
- // Notes: this code can be remove after the s3 script table
- // hook on the event EVT_SIGNAL_READY_TO_BOOT or
- // EVT_SIGNAL_LEGACY_BOOT
- //
- Status = gBS->LocateProtocol (&gEfiAcpiS3SaveProtocolGuid, NULL, (VOID **) &AcpiS3Save);
- if (!EFI_ERROR (Status)) {
- AcpiS3Save->S3Save (AcpiS3Save, NULL);
- }
- //
- // If it's Device Path that starts with a hard drive path, append it with the front part to compose a
- // full device path
- //
- WorkingDevicePath = NULL;
- if ((DevicePathType (DevicePath) == MEDIA_DEVICE_PATH) &&
- (DevicePathSubType (DevicePath) == MEDIA_HARDDRIVE_DP)) {
- WorkingDevicePath = BdsExpandPartitionPartialDevicePathToFull (
- (HARDDRIVE_DEVICE_PATH *)DevicePath
- );
- if (WorkingDevicePath != NULL) {
- DevicePath = WorkingDevicePath;
- }
- }
-
- //
- // Set Boot Current
- //
- if (IsBootOptionValidNVVarialbe (Option)) {
- //
- // For a temporary boot (i.e. a boot by selected a EFI Shell using "Boot From File"), Boot Current is actually not valid.
- // In this case, "BootCurrent" is not created.
- // Only create the BootCurrent variable when it points to a valid Boot#### variable.
- //
- SetVariableAndReportStatusCodeOnError (
- L"BootCurrent",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
- sizeof (UINT16),
- &Option->BootCurrent
- );
- }
-
- //
- // Report Status Code to indicate ReadyToBoot event will be signalled
- //
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT));
-
- //
- // Signal the EVT_SIGNAL_READY_TO_BOOT event
- //
- EfiSignalEventReadyToBoot();
-
- //
- // Expand USB Class or USB WWID device path node to be full device path of a USB
- // device in platform then load the boot file on this full device path and get the
- // image handle.
- //
- ImageHandle = BdsExpandUsbShortFormDevicePath (DevicePath);
-
- //
- // Adjust the different type memory page number just before booting
- // and save the updated info into the variable for next boot to use
- //
- BdsSetMemoryTypeInformationVariable ();
-
- //
- // By expanding the USB Class or WWID device path, the ImageHandle has returnned.
- // Here get the ImageHandle for the non USB class or WWID device path.
- //
- if (ImageHandle == NULL) {
- ASSERT (Option->DevicePath != NULL);
- if ((DevicePathType (Option->DevicePath) == BBS_DEVICE_PATH) &&
- (DevicePathSubType (Option->DevicePath) == BBS_BBS_DP)
- ) {
- //
- // Check to see if we should legacy BOOT. If yes then do the legacy boot
- //
- return BdsLibDoLegacyBoot (Option);
- }
-
- //
- // If the boot option point to Internal FV shell, make sure it is valid
- //
- Status = BdsLibUpdateFvFileDevicePath (&DevicePath, &gUefiShellFileGuid);
- if (!EFI_ERROR(Status)) {
- if (Option->DevicePath != NULL) {
- FreePool(Option->DevicePath);
- }
- Option->DevicePath = AllocateZeroPool (GetDevicePathSize (DevicePath));
- ASSERT(Option->DevicePath != NULL);
- CopyMem (Option->DevicePath, DevicePath, GetDevicePathSize (DevicePath));
- //
- // Update the shell boot option
- //
- InitializeListHead (&TempBootLists);
- BdsLibRegisterNewOption (&TempBootLists, DevicePath, L"EFI Internal Shell", L"BootOrder");
-
- //
- // free the temporary device path created by BdsLibUpdateFvFileDevicePath()
- //
- FreePool (DevicePath);
- DevicePath = Option->DevicePath;
- }
-
- DEBUG_CODE_BEGIN();
-
- if (Option->Description == NULL) {
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Booting from unknown device path\n"));
- } else {
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Booting %S\n", Option->Description));
- }
-
- DEBUG_CODE_END();
-
- //
- // Report status code for OS Loader LoadImage.
- //
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));
- Status = gBS->LoadImage (
- TRUE,
- gImageHandle,
- DevicePath,
- NULL,
- 0,
- &ImageHandle
- );
-
- //
- // If we didn't find an image directly, we need to try as if it is a removable device boot option
- // and load the image according to the default boot behavior for removable device.
- //
- if (EFI_ERROR (Status)) {
- //
- // check if there is a bootable removable media could be found in this device path ,
- // and get the bootable media handle
- //
- Handle = BdsLibGetBootableHandle(DevicePath);
- if (Handle != NULL) {
- //
- // Load the default boot file \EFI\BOOT\boot{machinename}.EFI from removable Media
- // machinename is ia32, ia64, x64, ...
- //
- FilePath = FileDevicePath (Handle, EFI_REMOVABLE_MEDIA_FILE_NAME);
- if (FilePath != NULL) {
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderLoad));
- Status = gBS->LoadImage (
- TRUE,
- gImageHandle,
- FilePath,
- NULL,
- 0,
- &ImageHandle
- );
- }
- }
- }
- }
- //
- // Provide the image with it's load options
- //
- if ((ImageHandle == NULL) || (EFI_ERROR(Status))) {
- //
- // Report Status Code to indicate that the failure to load boot option
- //
- REPORT_STATUS_CODE (
- EFI_ERROR_CODE | EFI_ERROR_MINOR,
- (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_BOOT_OPTION_LOAD_ERROR)
- );
- goto Done;
- }
-
- Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &ImageInfo);
- ASSERT_EFI_ERROR (Status);
-
- if (Option->LoadOptionsSize != 0) {
- ImageInfo->LoadOptionsSize = Option->LoadOptionsSize;
- ImageInfo->LoadOptions = Option->LoadOptions;
- }
-
- //
- // Clean to NULL because the image is loaded directly from the firmwares boot manager.
- //
- ImageInfo->ParentHandle = NULL;
-
- //
- // Before calling the image, enable the Watchdog Timer for
- // the 5 Minute period
- //
- gBS->SetWatchdogTimer (5 * 60, 0x0000, 0x00, NULL);
-
- //
- // Write boot to OS performance data for UEFI boot
- //
- PERF_CODE (
- BmEndOfBdsPerfCode (NULL, NULL);
- );
-
- //
- // Report status code for OS Loader StartImage.
- //
- REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderStart));
-
- Status = gBS->StartImage (ImageHandle, ExitDataSize, ExitData);
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Image Return Status = %r\n", Status));
- if (EFI_ERROR (Status)) {
- //
- // Report Status Code to indicate that boot failure
- //
- REPORT_STATUS_CODE (
- EFI_ERROR_CODE | EFI_ERROR_MINOR,
- (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_BOOT_OPTION_FAILED)
- );
- }
-
- //
- // Clear the Watchdog Timer after the image returns
- //
- gBS->SetWatchdogTimer (0x0000, 0x0000, 0x0000, NULL);
-
-Done:
- //
- // Set Logo status invalid after trying one boot option
- //
- BootLogo = NULL;
- StatusLogo = gBS->LocateProtocol (&gEfiBootLogoProtocolGuid, NULL, (VOID **) &BootLogo);
- if (!EFI_ERROR (StatusLogo) && (BootLogo != NULL)) {
- BootLogo->SetBootLogo (BootLogo, NULL, 0, 0, 0, 0);
- }
-
- //
- // Clear Boot Current
- // Deleting variable with current implementation shouldn't fail.
- //
- gRT->SetVariable (
- L"BootCurrent",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
- 0,
- NULL
- );
-
- return Status;
-}
-
-
-/**
- Expand a device path that starts with a hard drive media device path node to be a
- full device path that includes the full hardware path to the device. We need
- to do this so it can be booted. As an optimization the front match (the part point
- to the partition node. E.g. ACPI() /PCI()/ATA()/Partition() ) is saved in a variable
- so a connect all is not required on every boot. All successful history device path
- which point to partition node (the front part) will be saved.
-
- @param HardDriveDevicePath EFI Device Path to boot, if it starts with a hard
- drive media device path.
- @return A Pointer to the full device path or NULL if a valid Hard Drive devic path
- cannot be found.
-
-**/
-EFI_DEVICE_PATH_PROTOCOL *
-EFIAPI
-BdsExpandPartitionPartialDevicePathToFull (
- IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath
- )
-{
- EFI_STATUS Status;
- UINTN BlockIoHandleCount;
- EFI_HANDLE *BlockIoBuffer;
- EFI_DEVICE_PATH_PROTOCOL *FullDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *BlockIoDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- UINTN Index;
- UINTN InstanceNum;
- EFI_DEVICE_PATH_PROTOCOL *CachedDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *TempNewDevicePath;
- UINTN CachedDevicePathSize;
- BOOLEAN DeviceExist;
- BOOLEAN NeedAdjust;
- EFI_DEVICE_PATH_PROTOCOL *Instance;
- UINTN Size;
-
- FullDevicePath = NULL;
- //
- // Check if there is prestore HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable.
- // If exist, search the front path which point to partition node in the variable instants.
- // If fail to find or HD_BOOT_DEVICE_PATH_VARIABLE_NAME not exist, reconnect all and search in all system
- //
- GetVariable2 (
- HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
- &gHdBootDevicePathVariablGuid,
- (VOID **) &CachedDevicePath,
- &CachedDevicePathSize
- );
-
- //
- // Delete the invalid HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable.
- //
- if ((CachedDevicePath != NULL) && !IsDevicePathValid (CachedDevicePath, CachedDevicePathSize)) {
- FreePool (CachedDevicePath);
- CachedDevicePath = NULL;
- Status = gRT->SetVariable (
- HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
- &gHdBootDevicePathVariablGuid,
- 0,
- 0,
- NULL
- );
- ASSERT_EFI_ERROR (Status);
- }
-
- if (CachedDevicePath != NULL) {
- TempNewDevicePath = CachedDevicePath;
- DeviceExist = FALSE;
- NeedAdjust = FALSE;
- do {
- //
- // Check every instance of the variable
- // First, check whether the instance contain the partition node, which is needed for distinguishing multi
- // partial partition boot option. Second, check whether the instance could be connected.
- //
- Instance = GetNextDevicePathInstance (&TempNewDevicePath, &Size);
- if (MatchPartitionDevicePathNode (Instance, HardDriveDevicePath)) {
- //
- // Connect the device path instance, the device path point to hard drive media device path node
- // e.g. ACPI() /PCI()/ATA()/Partition()
- //
- Status = BdsLibConnectDevicePath (Instance);
- if (!EFI_ERROR (Status)) {
- DeviceExist = TRUE;
- break;
- }
- }
- //
- // Come here means the first instance is not matched
- //
- NeedAdjust = TRUE;
- FreePool(Instance);
- } while (TempNewDevicePath != NULL);
-
- if (DeviceExist) {
- //
- // Find the matched device path.
- // Append the file path information from the boot option and return the fully expanded device path.
- //
- DevicePath = NextDevicePathNode ((EFI_DEVICE_PATH_PROTOCOL *) HardDriveDevicePath);
- FullDevicePath = AppendDevicePath (Instance, DevicePath);
-
- //
- // Adjust the HD_BOOT_DEVICE_PATH_VARIABLE_NAME instances sequence if the matched one is not first one.
- //
- if (NeedAdjust) {
- //
- // First delete the matched instance.
- //
- TempNewDevicePath = CachedDevicePath;
- CachedDevicePath = BdsLibDelPartMatchInstance (CachedDevicePath, Instance );
- FreePool (TempNewDevicePath);
-
- //
- // Second, append the remaining path after the matched instance
- //
- TempNewDevicePath = CachedDevicePath;
- CachedDevicePath = AppendDevicePathInstance (Instance, CachedDevicePath );
- FreePool (TempNewDevicePath);
- //
- // Save the matching Device Path so we don't need to do a connect all next time
- // Failure to set the variable only impacts the performance when next time expanding the short-form device path.
- //
- Status = gRT->SetVariable (
- HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
- &gHdBootDevicePathVariablGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- GetDevicePathSize (CachedDevicePath),
- CachedDevicePath
- );
- }
-
- FreePool (Instance);
- FreePool (CachedDevicePath);
- return FullDevicePath;
- }
- }
-
- //
- // If we get here we fail to find or HD_BOOT_DEVICE_PATH_VARIABLE_NAME not exist, and now we need
- // to search all devices in the system for a matched partition
- //
- BdsLibConnectAllDriversToAllControllers ();
- Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiBlockIoProtocolGuid, NULL, &BlockIoHandleCount, &BlockIoBuffer);
- if (EFI_ERROR (Status) || BlockIoHandleCount == 0 || BlockIoBuffer == NULL) {
- //
- // If there was an error or there are no device handles that support
- // the BLOCK_IO Protocol, then return.
- //
- return NULL;
- }
- //
- // Loop through all the device handles that support the BLOCK_IO Protocol
- //
- for (Index = 0; Index < BlockIoHandleCount; Index++) {
-
- Status = gBS->HandleProtocol (BlockIoBuffer[Index], &gEfiDevicePathProtocolGuid, (VOID *) &BlockIoDevicePath);
- if (EFI_ERROR (Status) || BlockIoDevicePath == NULL) {
- continue;
- }
-
- if (MatchPartitionDevicePathNode (BlockIoDevicePath, HardDriveDevicePath)) {
- //
- // Find the matched partition device path
- //
- DevicePath = NextDevicePathNode ((EFI_DEVICE_PATH_PROTOCOL *) HardDriveDevicePath);
- FullDevicePath = AppendDevicePath (BlockIoDevicePath, DevicePath);
-
- //
- // Save the matched partition device path in HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable
- //
- if (CachedDevicePath != NULL) {
- //
- // Save the matched partition device path as first instance of HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable
- //
- if (BdsLibMatchDevicePaths (CachedDevicePath, BlockIoDevicePath)) {
- TempNewDevicePath = CachedDevicePath;
- CachedDevicePath = BdsLibDelPartMatchInstance (CachedDevicePath, BlockIoDevicePath);
- FreePool(TempNewDevicePath);
- }
-
- if (CachedDevicePath != NULL) {
- TempNewDevicePath = CachedDevicePath;
- CachedDevicePath = AppendDevicePathInstance (BlockIoDevicePath, CachedDevicePath);
- FreePool(TempNewDevicePath);
- } else {
- CachedDevicePath = DuplicateDevicePath (BlockIoDevicePath);
- }
-
- //
- // Here limit the device path instance number to 12, which is max number for a system support 3 IDE controller
- // If the user try to boot many OS in different HDs or partitions, in theory,
- // the HD_BOOT_DEVICE_PATH_VARIABLE_NAME variable maybe become larger and larger.
- //
- InstanceNum = 0;
- ASSERT (CachedDevicePath != NULL);
- TempNewDevicePath = CachedDevicePath;
- while (!IsDevicePathEnd (TempNewDevicePath)) {
- TempNewDevicePath = NextDevicePathNode (TempNewDevicePath);
- //
- // Parse one instance
- //
- while (!IsDevicePathEndType (TempNewDevicePath)) {
- TempNewDevicePath = NextDevicePathNode (TempNewDevicePath);
- }
- InstanceNum++;
- //
- // If the CachedDevicePath variable contain too much instance, only remain 12 instances.
- //
- if (InstanceNum >= 12) {
- SetDevicePathEndNode (TempNewDevicePath);
- break;
- }
- }
- } else {
- CachedDevicePath = DuplicateDevicePath (BlockIoDevicePath);
- }
-
- //
- // Save the matching Device Path so we don't need to do a connect all next time
- // Failure to set the variable only impacts the performance when next time expanding the short-form device path.
- //
- Status = gRT->SetVariable (
- HD_BOOT_DEVICE_PATH_VARIABLE_NAME,
- &gHdBootDevicePathVariablGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- GetDevicePathSize (CachedDevicePath),
- CachedDevicePath
- );
-
- break;
- }
- }
-
- if (CachedDevicePath != NULL) {
- FreePool (CachedDevicePath);
- }
- if (BlockIoBuffer != NULL) {
- FreePool (BlockIoBuffer);
- }
- return FullDevicePath;
-}
-
-/**
- Check whether there is a instance in BlockIoDevicePath, which contain multi device path
- instances, has the same partition node with HardDriveDevicePath device path
-
- @param BlockIoDevicePath Multi device path instances which need to check
- @param HardDriveDevicePath A device path which starts with a hard drive media
- device path.
-
- @retval TRUE There is a matched device path instance.
- @retval FALSE There is no matched device path instance.
-
-**/
-BOOLEAN
-EFIAPI
-MatchPartitionDevicePathNode (
- IN EFI_DEVICE_PATH_PROTOCOL *BlockIoDevicePath,
- IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath
- )
-{
- HARDDRIVE_DEVICE_PATH *TmpHdPath;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- BOOLEAN Match;
- EFI_DEVICE_PATH_PROTOCOL *BlockIoHdDevicePathNode;
-
- if ((BlockIoDevicePath == NULL) || (HardDriveDevicePath == NULL)) {
- return FALSE;
- }
-
- //
- // Make PreviousDevicePath == the device path node before the end node
- //
- DevicePath = BlockIoDevicePath;
- BlockIoHdDevicePathNode = NULL;
-
- //
- // find the partition device path node
- //
- while (!IsDevicePathEnd (DevicePath)) {
- if ((DevicePathType (DevicePath) == MEDIA_DEVICE_PATH) &&
- (DevicePathSubType (DevicePath) == MEDIA_HARDDRIVE_DP)
- ) {
- BlockIoHdDevicePathNode = DevicePath;
- break;
- }
-
- DevicePath = NextDevicePathNode (DevicePath);
- }
-
- if (BlockIoHdDevicePathNode == NULL) {
- return FALSE;
- }
- //
- // See if the harddrive device path in blockio matches the orig Hard Drive Node
- //
- TmpHdPath = (HARDDRIVE_DEVICE_PATH *) BlockIoHdDevicePathNode;
- Match = FALSE;
-
- //
- // Check for the match
- //
- if ((TmpHdPath->MBRType == HardDriveDevicePath->MBRType) &&
- (TmpHdPath->SignatureType == HardDriveDevicePath->SignatureType)) {
- switch (TmpHdPath->SignatureType) {
- case SIGNATURE_TYPE_GUID:
- Match = CompareGuid ((EFI_GUID *)TmpHdPath->Signature, (EFI_GUID *)HardDriveDevicePath->Signature);
- break;
- case SIGNATURE_TYPE_MBR:
- Match = (BOOLEAN)(*((UINT32 *)(&(TmpHdPath->Signature[0]))) == ReadUnaligned32((UINT32 *)(&(HardDriveDevicePath->Signature[0]))));
- break;
- default:
- Match = FALSE;
- break;
- }
- }
-
- return Match;
-}
-
-/**
- Delete the boot option associated with the handle passed in.
-
- @param Handle The handle which present the device path to create
- boot option
-
- @retval EFI_SUCCESS Delete the boot option success
- @retval EFI_NOT_FOUND If the Device Path is not found in the system
- @retval EFI_OUT_OF_RESOURCES Lack of memory resource
- @retval Other Error return value from SetVariable()
-
-**/
-EFI_STATUS
-BdsLibDeleteOptionFromHandle (
- IN EFI_HANDLE Handle
- )
-{
- UINT16 *BootOrder;
- UINT8 *BootOptionVar;
- UINTN BootOrderSize;
- UINTN BootOptionSize;
- EFI_STATUS Status;
- UINTN Index;
- UINT16 BootOption[BOOT_OPTION_MAX_CHAR];
- UINTN DevicePathSize;
- UINTN OptionDevicePathSize;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath;
- UINT8 *TempPtr;
-
- Status = EFI_SUCCESS;
- BootOrder = NULL;
- BootOrderSize = 0;
-
- //
- // Check "BootOrder" variable, if no, means there is no any boot order.
- //
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- if (BootOrder == NULL) {
- return EFI_NOT_FOUND;
- }
-
- //
- // Convert device handle to device path protocol instance
- //
- DevicePath = DevicePathFromHandle (Handle);
- if (DevicePath == NULL) {
- return EFI_NOT_FOUND;
- }
- DevicePathSize = GetDevicePathSize (DevicePath);
-
- //
- // Loop all boot order variable and find the matching device path
- //
- Index = 0;
- while (Index < BootOrderSize / sizeof (UINT16)) {
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);
- BootOptionVar = BdsLibGetVariableAndSize (
- BootOption,
- &gEfiGlobalVariableGuid,
- &BootOptionSize
- );
-
- if (BootOptionVar == NULL) {
- FreePool (BootOrder);
- return EFI_OUT_OF_RESOURCES;
- }
-
- if (!ValidateOption(BootOptionVar, BootOptionSize)) {
- BdsDeleteBootOption (BootOrder[Index], BootOrder, &BootOrderSize);
- FreePool (BootOptionVar);
- Index++;
- continue;
- }
-
- TempPtr = BootOptionVar;
- TempPtr += sizeof (UINT32) + sizeof (UINT16);
- TempPtr += StrSize ((CHAR16 *) TempPtr);
- OptionDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;
- OptionDevicePathSize = GetDevicePathSize (OptionDevicePath);
-
- //
- // Check whether the device path match
- //
- if ((OptionDevicePathSize == DevicePathSize) &&
- (CompareMem (DevicePath, OptionDevicePath, DevicePathSize) == 0)) {
- BdsDeleteBootOption (BootOrder[Index], BootOrder, &BootOrderSize);
- FreePool (BootOptionVar);
- break;
- }
-
- FreePool (BootOptionVar);
- Index++;
- }
-
- //
- // Adjust number of boot option for "BootOrder" variable.
- //
- Status = gRT->SetVariable (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- BootOrderSize,
- BootOrder
- );
- //
- // Shrinking variable with existing variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
-
- FreePool (BootOrder);
-
- return Status;
-}
-
-
-/**
- Delete all invalid EFI boot options.
-
- @retval EFI_SUCCESS Delete all invalid boot option success
- @retval EFI_NOT_FOUND Variable "BootOrder" is not found
- @retval EFI_OUT_OF_RESOURCES Lack of memory resource
- @retval Other Error return value from SetVariable()
-
-**/
-EFI_STATUS
-BdsDeleteAllInvalidEfiBootOption (
- VOID
- )
-{
- UINT16 *BootOrder;
- UINT8 *BootOptionVar;
- UINTN BootOrderSize;
- UINTN BootOptionSize;
- EFI_STATUS Status;
- UINTN Index;
- UINTN Index2;
- UINT16 BootOption[BOOT_OPTION_MAX_CHAR];
- EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath;
- UINT8 *TempPtr;
- CHAR16 *Description;
- BOOLEAN Corrupted;
-
- Status = EFI_SUCCESS;
- BootOrder = NULL;
- Description = NULL;
- OptionDevicePath = NULL;
- BootOrderSize = 0;
- Corrupted = FALSE;
-
- //
- // Check "BootOrder" variable firstly, this variable hold the number of boot options
- //
- BootOrder = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &BootOrderSize
- );
- if (NULL == BootOrder) {
- return EFI_NOT_FOUND;
- }
-
- Index = 0;
- while (Index < BootOrderSize / sizeof (UINT16)) {
- UnicodeSPrint (BootOption, sizeof (BootOption), L"Boot%04x", BootOrder[Index]);
- BootOptionVar = BdsLibGetVariableAndSize (
- BootOption,
- &gEfiGlobalVariableGuid,
- &BootOptionSize
- );
- if (NULL == BootOptionVar) {
- FreePool (BootOrder);
- return EFI_OUT_OF_RESOURCES;
- }
-
- if (!ValidateOption(BootOptionVar, BootOptionSize)) {
- Corrupted = TRUE;
- } else {
- TempPtr = BootOptionVar;
- TempPtr += sizeof (UINT32) + sizeof (UINT16);
- Description = (CHAR16 *) TempPtr;
- TempPtr += StrSize ((CHAR16 *) TempPtr);
- OptionDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;
-
- //
- // Skip legacy boot option (BBS boot device)
- //
- if ((DevicePathType (OptionDevicePath) == BBS_DEVICE_PATH) &&
- (DevicePathSubType (OptionDevicePath) == BBS_BBS_DP)) {
- FreePool (BootOptionVar);
- Index++;
- continue;
- }
- }
-
- if (Corrupted || !BdsLibIsValidEFIBootOptDevicePathExt (OptionDevicePath, FALSE, Description)) {
- //
- // Delete this invalid boot option "Boot####"
- //
- Status = gRT->SetVariable (
- BootOption,
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- 0,
- NULL
- );
- //
- // Deleting variable with current variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
- //
- // Mark this boot option in boot order as deleted
- //
- BootOrder[Index] = 0xffff;
- Corrupted = FALSE;
- }
-
- FreePool (BootOptionVar);
- Index++;
- }
-
- //
- // Adjust boot order array
- //
- Index2 = 0;
- for (Index = 0; Index < BootOrderSize / sizeof (UINT16); Index++) {
- if (BootOrder[Index] != 0xffff) {
- BootOrder[Index2] = BootOrder[Index];
- Index2 ++;
- }
- }
- Status = gRT->SetVariable (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- Index2 * sizeof (UINT16),
- BootOrder
- );
- //
- // Shrinking variable with current variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
-
- FreePool (BootOrder);
-
- return Status;
-}
-
-
-/**
- For EFI boot option, BDS separate them as six types:
- 1. Network - The boot option points to the SimpleNetworkProtocol device.
- Bds will try to automatically create this type boot option when enumerate.
- 2. Shell - The boot option points to internal flash shell.
- Bds will try to automatically create this type boot option when enumerate.
- 3. Removable BlockIo - The boot option only points to the removable media
- device, like USB flash disk, DVD, Floppy etc.
- These device should contain a *removable* blockIo
- protocol in their device handle.
- Bds will try to automatically create this type boot option
- when enumerate.
- 4. Fixed BlockIo - The boot option only points to a Fixed blockIo device,
- like HardDisk.
- These device should contain a *fixed* blockIo
- protocol in their device handle.
- BDS will skip fixed blockIo devices, and NOT
- automatically create boot option for them. But BDS
- will help to delete those fixed blockIo boot option,
- whose description rule conflict with other auto-created
- boot options.
- 5. Non-BlockIo Simplefile - The boot option points to a device whose handle
- has SimpleFileSystem Protocol, but has no blockio
- protocol. These devices do not offer blockIo
- protocol, but BDS still can get the
- \EFI\BOOT\boot{machinename}.EFI by SimpleFileSystem
- Protocol.
- 6. File - The boot option points to a file. These boot options are usually
- created by user manually or OS loader. BDS will not delete or modify
- these boot options.
-
- This function will enumerate all possible boot device in the system, and
- automatically create boot options for Network, Shell, Removable BlockIo,
- and Non-BlockIo Simplefile devices.
- It will only execute once of every boot.
-
- @param BdsBootOptionList The header of the link list which indexed all
- current boot options
-
- @retval EFI_SUCCESS Finished all the boot device enumerate and create
- the boot option base on that boot device
-
- @retval EFI_OUT_OF_RESOURCES Failed to enumerate the boot device and create the boot option list
-**/
-EFI_STATUS
-EFIAPI
-BdsLibEnumerateAllBootOption (
- IN OUT LIST_ENTRY *BdsBootOptionList
- )
-{
- EFI_STATUS Status;
- UINT16 FloppyNumber;
- UINT16 HarddriveNumber;
- UINT16 CdromNumber;
- UINT16 UsbNumber;
- UINT16 MiscNumber;
- UINT16 ScsiNumber;
- UINT16 NonBlockNumber;
- UINTN NumberBlockIoHandles;
- EFI_HANDLE *BlockIoHandles;
- EFI_BLOCK_IO_PROTOCOL *BlkIo;
- BOOLEAN Removable[2];
- UINTN RemovableIndex;
- UINTN Index;
- UINTN NumOfLoadFileHandles;
- EFI_HANDLE *LoadFileHandles;
- UINTN FvHandleCount;
- EFI_HANDLE *FvHandleBuffer;
- EFI_FV_FILETYPE Type;
- UINTN Size;
- EFI_FV_FILE_ATTRIBUTES Attributes;
- UINT32 AuthenticationStatus;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- UINTN DevicePathType;
- CHAR16 Buffer[40];
- EFI_HANDLE *FileSystemHandles;
- UINTN NumberFileSystemHandles;
- BOOLEAN NeedDelete;
- EFI_IMAGE_DOS_HEADER DosHeader;
- CHAR8 *PlatLang;
- CHAR8 *LastLang;
- EFI_IMAGE_OPTIONAL_HEADER_UNION HdrData;
- EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;
- CHAR16 *MacStr;
- CHAR16 *IPverStr;
- EFI_HANDLE *NetworkHandles;
- UINTN BufferSize;
-
- FloppyNumber = 0;
- HarddriveNumber = 0;
- CdromNumber = 0;
- UsbNumber = 0;
- MiscNumber = 0;
- ScsiNumber = 0;
- PlatLang = NULL;
- LastLang = NULL;
- ZeroMem (Buffer, sizeof (Buffer));
-
- //
- // If the boot device enumerate happened, just get the boot
- // device from the boot order variable
- //
- if (mEnumBootDevice) {
- GetVariable2 (LAST_ENUM_LANGUAGE_VARIABLE_NAME, &gLastEnumLangGuid, (VOID**)&LastLang, NULL);
- GetEfiGlobalVariable2 (L"PlatformLang", (VOID**)&PlatLang, NULL);
- ASSERT (PlatLang != NULL);
- if ((LastLang != NULL) && (AsciiStrCmp (LastLang, PlatLang) == 0)) {
- Status = BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");
- FreePool (LastLang);
- FreePool (PlatLang);
- return Status;
- } else {
- Status = gRT->SetVariable (
- LAST_ENUM_LANGUAGE_VARIABLE_NAME,
- &gLastEnumLangGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- AsciiStrSize (PlatLang),
- PlatLang
- );
- //
- // Failure to set the variable only impacts the performance next time enumerating the boot options.
- //
-
- if (LastLang != NULL) {
- FreePool (LastLang);
- }
- FreePool (PlatLang);
- }
- }
-
- //
- // Notes: this dirty code is to get the legacy boot option from the
- // BBS table and create to variable as the EFI boot option, it should
- // be removed after the CSM can provide legacy boot option directly
- //
- REFRESH_LEGACY_BOOT_OPTIONS;
-
- //
- // Delete invalid boot option
- //
- BdsDeleteAllInvalidEfiBootOption ();
-
- //
- // Parse removable media followed by fixed media.
- // The Removable[] array is used by the for-loop below to create removable media boot options
- // at first, and then to create fixed media boot options.
- //
- Removable[0] = FALSE;
- Removable[1] = TRUE;
-
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiBlockIoProtocolGuid,
- NULL,
- &NumberBlockIoHandles,
- &BlockIoHandles
- );
-
- for (RemovableIndex = 0; RemovableIndex < 2; RemovableIndex++) {
- for (Index = 0; Index < NumberBlockIoHandles; Index++) {
- Status = gBS->HandleProtocol (
- BlockIoHandles[Index],
- &gEfiBlockIoProtocolGuid,
- (VOID **) &BlkIo
- );
- //
- // skip the logical partition
- //
- if (EFI_ERROR (Status) || BlkIo->Media->LogicalPartition) {
- continue;
- }
-
- //
- // firstly fixed block io then the removable block io
- //
- if (BlkIo->Media->RemovableMedia == Removable[RemovableIndex]) {
- continue;
- }
- DevicePath = DevicePathFromHandle (BlockIoHandles[Index]);
- DevicePathType = BdsGetBootTypeFromDevicePath (DevicePath);
-
- switch (DevicePathType) {
- case BDS_EFI_ACPI_FLOPPY_BOOT:
- if (FloppyNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY)), FloppyNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_FLOPPY)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- FloppyNumber++;
- break;
-
- //
- // Assume a removable SATA device should be the DVD/CD device, a fixed SATA device should be the Hard Drive device.
- //
- case BDS_EFI_MESSAGE_ATAPI_BOOT:
- case BDS_EFI_MESSAGE_SATA_BOOT:
- if (BlkIo->Media->RemovableMedia) {
- if (CdromNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_CD_DVD)), CdromNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_CD_DVD)));
- }
- CdromNumber++;
- } else {
- if (HarddriveNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_HARDDRIVE)), HarddriveNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_HARDDRIVE)));
- }
- HarddriveNumber++;
- }
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Buffer: %S\n", Buffer));
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- break;
-
- case BDS_EFI_MESSAGE_USB_DEVICE_BOOT:
- if (UsbNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_USB)), UsbNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_USB)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- UsbNumber++;
- break;
-
- case BDS_EFI_MESSAGE_SCSI_BOOT:
- if (ScsiNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI)), ScsiNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_SCSI)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- ScsiNumber++;
- break;
-
- case BDS_EFI_MESSAGE_MISC_BOOT:
- default:
- if (MiscNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC)), MiscNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_MISC)));
- }
- BdsLibBuildOptionFromHandle (BlockIoHandles[Index], BdsBootOptionList, Buffer);
- MiscNumber++;
- break;
- }
- }
- }
-
- if (NumberBlockIoHandles != 0) {
- FreePool (BlockIoHandles);
- }
-
- //
- // If there is simple file protocol which does not consume block Io protocol, create a boot option for it here.
- //
- NonBlockNumber = 0;
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiSimpleFileSystemProtocolGuid,
- NULL,
- &NumberFileSystemHandles,
- &FileSystemHandles
- );
- for (Index = 0; Index < NumberFileSystemHandles; Index++) {
- Status = gBS->HandleProtocol (
- FileSystemHandles[Index],
- &gEfiBlockIoProtocolGuid,
- (VOID **) &BlkIo
- );
- if (!EFI_ERROR (Status)) {
- //
- // Skip if the file system handle supports a BlkIo protocol,
- //
- continue;
- }
-
- //
- // Do the removable Media thing. \EFI\BOOT\boot{machinename}.EFI
- // machinename is ia32, ia64, x64, ...
- //
- Hdr.Union = &HdrData;
- NeedDelete = TRUE;
- Status = BdsLibGetImageHeader (
- FileSystemHandles[Index],
- EFI_REMOVABLE_MEDIA_FILE_NAME,
- &DosHeader,
- Hdr
- );
- if (!EFI_ERROR (Status) &&
- EFI_IMAGE_MACHINE_TYPE_SUPPORTED (Hdr.Pe32->FileHeader.Machine) &&
- Hdr.Pe32->OptionalHeader.Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {
- NeedDelete = FALSE;
- }
-
- if (NeedDelete) {
- //
- // No such file or the file is not a EFI application, delete this boot option
- //
- BdsLibDeleteOptionFromHandle (FileSystemHandles[Index]);
- } else {
- if (NonBlockNumber != 0) {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s %d", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NON_BLOCK)), NonBlockNumber);
- } else {
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NON_BLOCK)));
- }
- BdsLibBuildOptionFromHandle (FileSystemHandles[Index], BdsBootOptionList, Buffer);
- NonBlockNumber++;
- }
- }
-
- if (NumberFileSystemHandles != 0) {
- FreePool (FileSystemHandles);
- }
-
- //
- // Parse Network Boot Device
- //
- NumOfLoadFileHandles = 0;
- //
- // Search Load File protocol for PXE boot option.
- //
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiLoadFileProtocolGuid,
- NULL,
- &NumOfLoadFileHandles,
- &LoadFileHandles
- );
-
- for (Index = 0; Index < NumOfLoadFileHandles; Index++) {
-
-//
-//Locate EFI_DEVICE_PATH_PROTOCOL to dynamically get IPv4/IPv6 protocol information.
-//
-
- Status = gBS->HandleProtocol (
- LoadFileHandles[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID **) &DevicePath
- );
-
- ASSERT_EFI_ERROR (Status);
-
- while (!IsDevicePathEnd (DevicePath)) {
- if ((DevicePath->Type == MESSAGING_DEVICE_PATH) &&
- (DevicePath->SubType == MSG_IPv4_DP)) {
-
- //
- //Get handle infomation
- //
- BufferSize = 0;
- NetworkHandles = NULL;
- Status = gBS->LocateHandle (
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
-
- if (Status == EFI_BUFFER_TOO_SMALL) {
- NetworkHandles = AllocateZeroPool(BufferSize);
- if (NetworkHandles == NULL) {
- return (EFI_OUT_OF_RESOURCES);
- }
- Status = gBS->LocateHandle(
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
- }
-
- //
- //Get the MAC string
- //
- Status = NetLibGetMacString (
- *NetworkHandles,
- NULL,
- &MacStr
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- IPverStr = L" IPv4";
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s%s%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK)),MacStr,IPverStr);
- break;
- }
- if((DevicePath->Type == MESSAGING_DEVICE_PATH) &&
- (DevicePath->SubType == MSG_IPv6_DP)) {
-
- //
- //Get handle infomation
- //
- BufferSize = 0;
- NetworkHandles = NULL;
- Status = gBS->LocateHandle (
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
-
- if (Status == EFI_BUFFER_TOO_SMALL) {
- NetworkHandles = AllocateZeroPool(BufferSize);
- if (NetworkHandles == NULL) {
- return (EFI_OUT_OF_RESOURCES);
- }
- Status = gBS->LocateHandle(
- ByProtocol,
- &gEfiSimpleNetworkProtocolGuid,
- NULL,
- &BufferSize,
- NetworkHandles
- );
- }
-
- //
- //Get the MAC string
- //
- Status = NetLibGetMacString (
- *NetworkHandles,
- NULL,
- &MacStr
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- IPverStr = L" IPv6";
- UnicodeSPrint (Buffer, sizeof (Buffer), L"%s%s%s", BdsLibGetStringById (STRING_TOKEN (STR_DESCRIPTION_NETWORK)),MacStr,IPverStr);
- break;
- }
- DevicePath = NextDevicePathNode (DevicePath);
- }
-
- BdsLibBuildOptionFromHandle (LoadFileHandles[Index], BdsBootOptionList, Buffer);
- }
-
- if (NumOfLoadFileHandles != 0) {
- FreePool (LoadFileHandles);
- }
-
- //
- // Check if we have on flash shell
- //
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &FvHandleCount,
- &FvHandleBuffer
- );
- for (Index = 0; Index < FvHandleCount; Index++) {
- gBS->HandleProtocol (
- FvHandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
-
- Status = Fv->ReadFile (
- Fv,
- &gUefiShellFileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (EFI_ERROR (Status)) {
- //
- // Skip if no shell file in the FV
- //
- continue;
- }
- //
- // Build the shell boot option
- //
- BdsLibBuildOptionFromShell (FvHandleBuffer[Index], BdsBootOptionList);
- }
-
- if (FvHandleCount != 0) {
- FreePool (FvHandleBuffer);
- }
- //
- // Make sure every boot only have one time
- // boot device enumerate
- //
- Status = BdsLibBuildOptionFromVar (BdsBootOptionList, L"BootOrder");
- mEnumBootDevice = TRUE;
-
- return Status;
-}
-
-/**
- Build the boot option with the handle parsed in
-
- @param Handle The handle which present the device path to create
- boot option
- @param BdsBootOptionList The header of the link list which indexed all
- current boot options
- @param String The description of the boot option.
-
-**/
-VOID
-EFIAPI
-BdsLibBuildOptionFromHandle (
- IN EFI_HANDLE Handle,
- IN LIST_ENTRY *BdsBootOptionList,
- IN CHAR16 *String
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
-
- DevicePath = DevicePathFromHandle (Handle);
-
- //
- // Create and register new boot option
- //
- BdsLibRegisterNewOption (BdsBootOptionList, DevicePath, String, L"BootOrder");
-}
-
-
-/**
- Build the on flash shell boot option with the handle parsed in.
-
- @param Handle The handle which present the device path to create
- on flash shell boot option
- @param BdsBootOptionList The header of the link list which indexed all
- current boot options
-
-**/
-VOID
-EFIAPI
-BdsLibBuildOptionFromShell (
- IN EFI_HANDLE Handle,
- IN OUT LIST_ENTRY *BdsBootOptionList
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- MEDIA_FW_VOL_FILEPATH_DEVICE_PATH ShellNode;
-
- DevicePath = DevicePathFromHandle (Handle);
-
- //
- // Build the shell device path
- //
- EfiInitializeFwVolDevicepathNode (&ShellNode, &gUefiShellFileGuid);
-
- DevicePath = AppendDevicePathNode (DevicePath, (EFI_DEVICE_PATH_PROTOCOL *) &ShellNode);
-
- //
- // Create and register the shell boot option
- //
- BdsLibRegisterNewOption (BdsBootOptionList, DevicePath, L"EFI Internal Shell", L"BootOrder");
-
-}
-
-/**
- Boot from the UEFI spec defined "BootNext" variable.
-
-**/
-VOID
-EFIAPI
-BdsLibBootNext (
- VOID
- )
-{
- EFI_STATUS Status;
- UINT16 *BootNext;
- UINTN BootNextSize;
- CHAR16 Buffer[20];
- BDS_COMMON_OPTION *BootOption;
- LIST_ENTRY TempList;
- UINTN ExitDataSize;
- CHAR16 *ExitData;
-
- //
- // Init the boot option name buffer and temp link list
- //
- InitializeListHead (&TempList);
- ZeroMem (Buffer, sizeof (Buffer));
-
- BootNext = BdsLibGetVariableAndSize (
- L"BootNext",
- &gEfiGlobalVariableGuid,
- &BootNextSize
- );
-
- //
- // Clear the boot next variable first
- //
- if (BootNext != NULL) {
- Status = gRT->SetVariable (
- L"BootNext",
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- 0,
- NULL
- );
- //
- // Deleting variable with current variable implementation shouldn't fail.
- //
- ASSERT_EFI_ERROR (Status);
-
- //
- // Start to build the boot option and try to boot
- //
- UnicodeSPrint (Buffer, sizeof (Buffer), L"Boot%04x", *BootNext);
- BootOption = BdsLibVariableToOption (&TempList, Buffer);
- ASSERT (BootOption != NULL);
- BdsLibConnectDevicePath (BootOption->DevicePath);
- BdsLibBootViaBootOption (BootOption, BootOption->DevicePath, &ExitDataSize, &ExitData);
- FreePool(BootOption);
- FreePool(BootNext);
- }
-
-}
-
-/**
- Return the bootable media handle.
- First, check the device is connected
- Second, check whether the device path point to a device which support SimpleFileSystemProtocol,
- Third, detect the the default boot file in the Media, and return the removable Media handle.
-
- @param DevicePath Device Path to a bootable device
-
- @return The bootable media handle. If the media on the DevicePath is not bootable, NULL will return.
-
-**/
-EFI_HANDLE
-EFIAPI
-BdsLibGetBootableHandle (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- )
-{
- EFI_STATUS Status;
- EFI_TPL OldTpl;
- EFI_DEVICE_PATH_PROTOCOL *UpdatedDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *DupDevicePath;
- EFI_HANDLE Handle;
- EFI_BLOCK_IO_PROTOCOL *BlockIo;
- VOID *Buffer;
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- UINTN Size;
- UINTN TempSize;
- EFI_HANDLE ReturnHandle;
- EFI_HANDLE *SimpleFileSystemHandles;
-
- UINTN NumberSimpleFileSystemHandles;
- UINTN Index;
- EFI_IMAGE_DOS_HEADER DosHeader;
- EFI_IMAGE_OPTIONAL_HEADER_UNION HdrData;
- EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;
-
- UpdatedDevicePath = DevicePath;
-
- //
- // Enter to critical section to protect the acquired BlockIo instance
- // from getting released due to the USB mass storage hotplug event
- //
- OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
-
- //
- // Check whether the device is connected
- //
- Status = gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, &UpdatedDevicePath, &Handle);
- if (EFI_ERROR (Status)) {
- //
- // Skip the case that the boot option point to a simple file protocol which does not consume block Io protocol,
- //
- Status = gBS->LocateDevicePath (&gEfiSimpleFileSystemProtocolGuid, &UpdatedDevicePath, &Handle);
- if (EFI_ERROR (Status)) {
- //
- // Fail to find the proper BlockIo and simple file protocol, maybe because device not present, we need to connect it firstly
- //
- UpdatedDevicePath = DevicePath;
- Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &UpdatedDevicePath, &Handle);
- gBS->ConnectController (Handle, NULL, NULL, TRUE);
- }
- } else {
- //
- // For removable device boot option, its contained device path only point to the removable device handle,
- // should make sure all its children handles (its child partion or media handles) are created and connected.
- //
- gBS->ConnectController (Handle, NULL, NULL, TRUE);
- //
- // Get BlockIo protocol and check removable attribute
- //
- Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo);
- ASSERT_EFI_ERROR (Status);
-
- //
- // Issue a dummy read to the device to check for media change.
- // When the removable media is changed, any Block IO read/write will
- // cause the BlockIo protocol be reinstalled and EFI_MEDIA_CHANGED is
- // returned. After the Block IO protocol is reinstalled, subsequent
- // Block IO read/write will success.
- //
- Buffer = AllocatePool (BlockIo->Media->BlockSize);
- if (Buffer != NULL) {
- BlockIo->ReadBlocks (
- BlockIo,
- BlockIo->Media->MediaId,
- 0,
- BlockIo->Media->BlockSize,
- Buffer
- );
- FreePool(Buffer);
- }
- }
-
- //
- // Detect the the default boot file from removable Media
- //
-
- //
- // If fail to get bootable handle specified by a USB boot option, the BDS should try to find other bootable device in the same USB bus
- // Try to locate the USB node device path first, if fail then use its previous PCI node to search
- //
- DupDevicePath = DuplicateDevicePath (DevicePath);
- ASSERT (DupDevicePath != NULL);
-
- UpdatedDevicePath = DupDevicePath;
- Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &UpdatedDevicePath, &Handle);
- //
- // if the resulting device path point to a usb node, and the usb node is a dummy node, should only let device path only point to the previous Pci node
- // Acpi()/Pci()/Usb() --> Acpi()/Pci()
- //
- if ((DevicePathType (UpdatedDevicePath) == MESSAGING_DEVICE_PATH) &&
- (DevicePathSubType (UpdatedDevicePath) == MSG_USB_DP)) {
- //
- // Remove the usb node, let the device path only point to PCI node
- //
- SetDevicePathEndNode (UpdatedDevicePath);
- UpdatedDevicePath = DupDevicePath;
- } else {
- UpdatedDevicePath = DevicePath;
- }
-
- //
- // Get the device path size of boot option
- //
- Size = GetDevicePathSize(UpdatedDevicePath) - sizeof (EFI_DEVICE_PATH_PROTOCOL); // minus the end node
- ReturnHandle = NULL;
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiSimpleFileSystemProtocolGuid,
- NULL,
- &NumberSimpleFileSystemHandles,
- &SimpleFileSystemHandles
- );
- for (Index = 0; Index < NumberSimpleFileSystemHandles; Index++) {
- //
- // Get the device path size of SimpleFileSystem handle
- //
- TempDevicePath = DevicePathFromHandle (SimpleFileSystemHandles[Index]);
- TempSize = GetDevicePathSize (TempDevicePath)- sizeof (EFI_DEVICE_PATH_PROTOCOL); // minus the end node
- //
- // Check whether the device path of boot option is part of the SimpleFileSystem handle's device path
- //
- if (Size <= TempSize && CompareMem (TempDevicePath, UpdatedDevicePath, Size)==0) {
- //
- // Load the default boot file \EFI\BOOT\boot{machinename}.EFI from removable Media
- // machinename is ia32, ia64, x64, ...
- //
- Hdr.Union = &HdrData;
- Status = BdsLibGetImageHeader (
- SimpleFileSystemHandles[Index],
- EFI_REMOVABLE_MEDIA_FILE_NAME,
- &DosHeader,
- Hdr
- );
- if (!EFI_ERROR (Status) &&
- EFI_IMAGE_MACHINE_TYPE_SUPPORTED (Hdr.Pe32->FileHeader.Machine) &&
- Hdr.Pe32->OptionalHeader.Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {
- ReturnHandle = SimpleFileSystemHandles[Index];
- break;
- }
- }
- }
-
- FreePool(DupDevicePath);
-
- if (SimpleFileSystemHandles != NULL) {
- FreePool(SimpleFileSystemHandles);
- }
-
- gBS->RestoreTPL (OldTpl);
-
- return ReturnHandle;
-}
-
-/**
- Check to see if the network cable is plugged in. If the DevicePath is not
- connected it will be connected.
-
- @param DevicePath Device Path to check
-
- @retval TRUE DevicePath points to an Network that is connected
- @retval FALSE DevicePath does not point to a bootable network
-
-**/
-BOOLEAN
-BdsLibNetworkBootWithMediaPresent (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- )
-{
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *UpdatedDevicePath;
- EFI_HANDLE Handle;
- EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
- BOOLEAN MediaPresent;
- UINT32 InterruptStatus;
-
- MediaPresent = FALSE;
-
- UpdatedDevicePath = DevicePath;
- //
- // Locate Load File Protocol for PXE boot option first
- //
- Status = gBS->LocateDevicePath (&gEfiLoadFileProtocolGuid, &UpdatedDevicePath, &Handle);
- if (EFI_ERROR (Status)) {
- //
- // Device not present so see if we need to connect it
- //
- Status = BdsLibConnectDevicePath (DevicePath);
- if (!EFI_ERROR (Status)) {
- //
- // This one should work after we did the connect
- //
- Status = gBS->LocateDevicePath (&gEfiLoadFileProtocolGuid, &UpdatedDevicePath, &Handle);
- }
- }
-
- if (!EFI_ERROR (Status)) {
- Status = gBS->HandleProtocol (Handle, &gEfiSimpleNetworkProtocolGuid, (VOID **)&Snp);
- if (EFI_ERROR (Status)) {
- //
- // Failed to open SNP from this handle, try to get SNP from parent handle
- //
- UpdatedDevicePath = DevicePathFromHandle (Handle);
- if (UpdatedDevicePath != NULL) {
- Status = gBS->LocateDevicePath (&gEfiSimpleNetworkProtocolGuid, &UpdatedDevicePath, &Handle);
- if (!EFI_ERROR (Status)) {
- //
- // SNP handle found, get SNP from it
- //
- Status = gBS->HandleProtocol (Handle, &gEfiSimpleNetworkProtocolGuid, (VOID **) &Snp);
- }
- }
- }
-
- if (!EFI_ERROR (Status)) {
- if (Snp->Mode->MediaPresentSupported) {
- if (Snp->Mode->State == EfiSimpleNetworkInitialized) {
- //
- // Invoke Snp->GetStatus() to refresh the media status
- //
- Snp->GetStatus (Snp, &InterruptStatus, NULL);
-
- //
- // In case some one else is using the SNP check to see if it's connected
- //
- MediaPresent = Snp->Mode->MediaPresent;
- } else {
- //
- // No one is using SNP so we need to Start and Initialize so
- // MediaPresent will be valid.
- //
- Status = Snp->Start (Snp);
- if (!EFI_ERROR (Status)) {
- Status = Snp->Initialize (Snp, 0, 0);
- if (!EFI_ERROR (Status)) {
- MediaPresent = Snp->Mode->MediaPresent;
- Snp->Shutdown (Snp);
- }
- Snp->Stop (Snp);
- }
- }
- } else {
- MediaPresent = TRUE;
- }
- }
- }
-
- return MediaPresent;
-}
-
-/**
- For a bootable Device path, return its boot type.
-
- @param DevicePath The bootable device Path to check
-
- @retval BDS_EFI_MEDIA_HD_BOOT If given device path contains MEDIA_DEVICE_PATH type device path node
- which subtype is MEDIA_HARDDRIVE_DP
- @retval BDS_EFI_MEDIA_CDROM_BOOT If given device path contains MEDIA_DEVICE_PATH type device path node
- which subtype is MEDIA_CDROM_DP
- @retval BDS_EFI_ACPI_FLOPPY_BOOT If given device path contains ACPI_DEVICE_PATH type device path node
- which HID is floppy device.
- @retval BDS_EFI_MESSAGE_ATAPI_BOOT If given device path contains MESSAGING_DEVICE_PATH type device path node
- and its last device path node's subtype is MSG_ATAPI_DP.
- @retval BDS_EFI_MESSAGE_SCSI_BOOT If given device path contains MESSAGING_DEVICE_PATH type device path node
- and its last device path node's subtype is MSG_SCSI_DP.
- @retval BDS_EFI_MESSAGE_USB_DEVICE_BOOT If given device path contains MESSAGING_DEVICE_PATH type device path node
- and its last device path node's subtype is MSG_USB_DP.
- @retval BDS_EFI_MESSAGE_MISC_BOOT If the device path not contains any media device path node, and
- its last device path node point to a message device path node.
- @retval BDS_LEGACY_BBS_BOOT If given device path contains BBS_DEVICE_PATH type device path node.
- @retval BDS_EFI_UNSUPPORT An EFI Removable BlockIO device path not point to a media and message device,
-
-**/
-UINT32
-EFIAPI
-BdsGetBootTypeFromDevicePath (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
- )
-{
- ACPI_HID_DEVICE_PATH *Acpi;
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *LastDeviceNode;
- UINT32 BootType;
-
- if (NULL == DevicePath) {
- return BDS_EFI_UNSUPPORT;
- }
-
- TempDevicePath = DevicePath;
-
- while (!IsDevicePathEndType (TempDevicePath)) {
- switch (DevicePathType (TempDevicePath)) {
- case BBS_DEVICE_PATH:
- return BDS_LEGACY_BBS_BOOT;
- case MEDIA_DEVICE_PATH:
- if (DevicePathSubType (TempDevicePath) == MEDIA_HARDDRIVE_DP) {
- return BDS_EFI_MEDIA_HD_BOOT;
- } else if (DevicePathSubType (TempDevicePath) == MEDIA_CDROM_DP) {
- return BDS_EFI_MEDIA_CDROM_BOOT;
- }
- break;
- case ACPI_DEVICE_PATH:
- Acpi = (ACPI_HID_DEVICE_PATH *) TempDevicePath;
- if (EISA_ID_TO_NUM (Acpi->HID) == 0x0604) {
- return BDS_EFI_ACPI_FLOPPY_BOOT;
- }
- break;
- case MESSAGING_DEVICE_PATH:
- //
- // Get the last device path node
- //
- LastDeviceNode = NextDevicePathNode (TempDevicePath);
- if (DevicePathSubType(LastDeviceNode) == MSG_DEVICE_LOGICAL_UNIT_DP) {
- //
- // if the next node type is Device Logical Unit, which specify the Logical Unit Number (LUN),
- // skip it
- //
- LastDeviceNode = NextDevicePathNode (LastDeviceNode);
- }
- //
- // if the device path not only point to driver device, it is not a messaging device path,
- //
- if (!IsDevicePathEndType (LastDeviceNode)) {
- break;
- }
-
- switch (DevicePathSubType (TempDevicePath)) {
- case MSG_ATAPI_DP:
- BootType = BDS_EFI_MESSAGE_ATAPI_BOOT;
- break;
-
- case MSG_USB_DP:
- BootType = BDS_EFI_MESSAGE_USB_DEVICE_BOOT;
- break;
-
- case MSG_SCSI_DP:
- BootType = BDS_EFI_MESSAGE_SCSI_BOOT;
- break;
-
- case MSG_SATA_DP:
- BootType = BDS_EFI_MESSAGE_SATA_BOOT;
- break;
-
- case MSG_MAC_ADDR_DP:
- case MSG_VLAN_DP:
- case MSG_IPv4_DP:
- case MSG_IPv6_DP:
- BootType = BDS_EFI_MESSAGE_MAC_BOOT;
- break;
-
- default:
- BootType = BDS_EFI_MESSAGE_MISC_BOOT;
- break;
- }
- return BootType;
-
- default:
- break;
- }
- TempDevicePath = NextDevicePathNode (TempDevicePath);
- }
-
- return BDS_EFI_UNSUPPORT;
-}
-
-/**
- Check whether the Device path in a boot option point to a valid bootable device,
- And if CheckMedia is true, check the device is ready to boot now.
-
- @param DevPath the Device path in a boot option
- @param CheckMedia if true, check the device is ready to boot now.
-
- @retval TRUE the Device path is valid
- @retval FALSE the Device path is invalid .
-
-**/
-BOOLEAN
-EFIAPI
-BdsLibIsValidEFIBootOptDevicePath (
- IN EFI_DEVICE_PATH_PROTOCOL *DevPath,
- IN BOOLEAN CheckMedia
- )
-{
- return BdsLibIsValidEFIBootOptDevicePathExt (DevPath, CheckMedia, NULL);
-}
-
-/**
- Check whether the Device path in a boot option point to a valid bootable device,
- And if CheckMedia is true, check the device is ready to boot now.
- If Description is not NULL and the device path point to a fixed BlockIo
- device, check the description whether conflict with other auto-created
- boot options.
-
- @param DevPath the Device path in a boot option
- @param CheckMedia if true, check the device is ready to boot now.
- @param Description the description in a boot option
-
- @retval TRUE the Device path is valid
- @retval FALSE the Device path is invalid .
-
-**/
-BOOLEAN
-EFIAPI
-BdsLibIsValidEFIBootOptDevicePathExt (
- IN EFI_DEVICE_PATH_PROTOCOL *DevPath,
- IN BOOLEAN CheckMedia,
- IN CHAR16 *Description
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE Handle;
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *LastDeviceNode;
- EFI_BLOCK_IO_PROTOCOL *BlockIo;
-
- TempDevicePath = DevPath;
- LastDeviceNode = DevPath;
-
- //
- // Check if it's a valid boot option for network boot device.
- // Check if there is EfiLoadFileProtocol installed.
- // If yes, that means there is a boot option for network.
- //
- Status = gBS->LocateDevicePath (
- &gEfiLoadFileProtocolGuid,
- &TempDevicePath,
- &Handle
- );
- if (EFI_ERROR (Status)) {
- //
- // Device not present so see if we need to connect it
- //
- TempDevicePath = DevPath;
- BdsLibConnectDevicePath (TempDevicePath);
- Status = gBS->LocateDevicePath (
- &gEfiLoadFileProtocolGuid,
- &TempDevicePath,
- &Handle
- );
- }
-
- if (!EFI_ERROR (Status)) {
- if (!IsDevicePathEnd (TempDevicePath)) {
- //
- // LoadFile protocol is not installed on handle with exactly the same DevPath
- //
- return FALSE;
- }
-
- if (CheckMedia) {
- //
- // Test if it is ready to boot now
- //
- if (BdsLibNetworkBootWithMediaPresent(DevPath)) {
- return TRUE;
- }
- } else {
- return TRUE;
- }
- }
-
- //
- // If the boot option point to a file, it is a valid EFI boot option,
- // and assume it is ready to boot now
- //
- while (!IsDevicePathEnd (TempDevicePath)) {
- //
- // If there is USB Class or USB WWID device path node, treat it as valid EFI
- // Boot Option. BdsExpandUsbShortFormDevicePath () will be used to expand it
- // to full device path.
- //
- if ((DevicePathType (TempDevicePath) == MESSAGING_DEVICE_PATH) &&
- ((DevicePathSubType (TempDevicePath) == MSG_USB_CLASS_DP) ||
- (DevicePathSubType (TempDevicePath) == MSG_USB_WWID_DP))) {
- return TRUE;
- }
-
- LastDeviceNode = TempDevicePath;
- TempDevicePath = NextDevicePathNode (TempDevicePath);
- }
- if ((DevicePathType (LastDeviceNode) == MEDIA_DEVICE_PATH) &&
- (DevicePathSubType (LastDeviceNode) == MEDIA_FILEPATH_DP)) {
- return TRUE;
- }
-
- //
- // Check if it's a valid boot option for internal FV application
- //
- if (EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode) != NULL) {
- //
- // If the boot option point to internal FV application, make sure it is valid
- //
- TempDevicePath = DevPath;
- Status = BdsLibUpdateFvFileDevicePath (
- &TempDevicePath,
- EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode)
- );
- if (Status == EFI_ALREADY_STARTED) {
- return TRUE;
- } else {
- if (Status == EFI_SUCCESS) {
- FreePool (TempDevicePath);
- }
- return FALSE;
- }
- }
-
- //
- // If the boot option point to a blockIO device:
- // if it is a removable blockIo device, it is valid.
- // if it is a fixed blockIo device, check its description confliction.
- //
- TempDevicePath = DevPath;
- Status = gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, &TempDevicePath, &Handle);
- if (EFI_ERROR (Status)) {
- //
- // Device not present so see if we need to connect it
- //
- Status = BdsLibConnectDevicePath (DevPath);
- if (!EFI_ERROR (Status)) {
- //
- // Try again to get the Block Io protocol after we did the connect
- //
- TempDevicePath = DevPath;
- Status = gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, &TempDevicePath, &Handle);
- }
- }
-
- if (!EFI_ERROR (Status)) {
- Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo);
- if (!EFI_ERROR (Status)) {
- if (CheckMedia) {
- //
- // Test if it is ready to boot now
- //
- if (BdsLibGetBootableHandle (DevPath) != NULL) {
- return TRUE;
- }
- } else {
- return TRUE;
- }
- }
- } else {
- //
- // if the boot option point to a simple file protocol which does not consume block Io protocol, it is also a valid EFI boot option,
- //
- Status = gBS->LocateDevicePath (&gEfiSimpleFileSystemProtocolGuid, &TempDevicePath, &Handle);
- if (!EFI_ERROR (Status)) {
- if (CheckMedia) {
- //
- // Test if it is ready to boot now
- //
- if (BdsLibGetBootableHandle (DevPath) != NULL) {
- return TRUE;
- }
- } else {
- return TRUE;
- }
- }
- }
-
- return FALSE;
-}
-
-
-/**
- According to a file guild, check a Fv file device path is valid. If it is invalid,
- try to return the valid device path.
- FV address maybe changes for memory layout adjust from time to time, use this function
- could promise the Fv file device path is right.
-
- @param DevicePath on input, the Fv file device path need to check on
- output, the updated valid Fv file device path
- @param FileGuid the Fv file guild
-
- @retval EFI_INVALID_PARAMETER the input DevicePath or FileGuid is invalid
- parameter
- @retval EFI_UNSUPPORTED the input DevicePath does not contain Fv file
- guild at all
- @retval EFI_ALREADY_STARTED the input DevicePath has pointed to Fv file, it is
- valid
- @retval EFI_SUCCESS has successfully updated the invalid DevicePath,
- and return the updated device path in DevicePath
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibUpdateFvFileDevicePath (
- IN OUT EFI_DEVICE_PATH_PROTOCOL ** DevicePath,
- IN EFI_GUID *FileGuid
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *LastDeviceNode;
- EFI_STATUS Status;
- EFI_GUID *GuidPoint;
- UINTN Index;
- UINTN FvHandleCount;
- EFI_HANDLE *FvHandleBuffer;
- EFI_FV_FILETYPE Type;
- UINTN Size;
- EFI_FV_FILE_ATTRIBUTES Attributes;
- UINT32 AuthenticationStatus;
- BOOLEAN FindFvFile;
- EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
- MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FvFileNode;
- EFI_HANDLE FoundFvHandle;
- EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
-
- if ((DevicePath == NULL) || (*DevicePath == NULL)) {
- return EFI_INVALID_PARAMETER;
- }
- if (FileGuid == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Check whether the device path point to the default the input Fv file
- //
- TempDevicePath = *DevicePath;
- LastDeviceNode = TempDevicePath;
- while (!IsDevicePathEnd (TempDevicePath)) {
- LastDeviceNode = TempDevicePath;
- TempDevicePath = NextDevicePathNode (TempDevicePath);
- }
- GuidPoint = EfiGetNameGuidFromFwVolDevicePathNode (
- (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode
- );
- if (GuidPoint == NULL) {
- //
- // if this option does not points to a Fv file, just return EFI_UNSUPPORTED
- //
- return EFI_UNSUPPORTED;
- }
- if (!CompareGuid (GuidPoint, FileGuid)) {
- //
- // If the Fv file is not the input file guid, just return EFI_UNSUPPORTED
- //
- return EFI_UNSUPPORTED;
- }
-
- //
- // Check whether the input Fv file device path is valid
- //
- TempDevicePath = *DevicePath;
- FoundFvHandle = NULL;
- Status = gBS->LocateDevicePath (
- &gEfiFirmwareVolume2ProtocolGuid,
- &TempDevicePath,
- &FoundFvHandle
- );
- if (!EFI_ERROR (Status)) {
- Status = gBS->HandleProtocol (
- FoundFvHandle,
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
- if (!EFI_ERROR (Status)) {
- //
- // Set FV ReadFile Buffer as NULL, only need to check whether input Fv file exist there
- //
- Status = Fv->ReadFile (
- Fv,
- FileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (!EFI_ERROR (Status)) {
- return EFI_ALREADY_STARTED;
- }
- }
- }
-
- //
- // Look for the input wanted FV file in current FV
- // First, try to look for in Bds own FV. Bds and input wanted FV file usually are in the same FV
- //
- FindFvFile = FALSE;
- FoundFvHandle = NULL;
- Status = gBS->HandleProtocol (
- gImageHandle,
- &gEfiLoadedImageProtocolGuid,
- (VOID **) &LoadedImage
- );
- if (!EFI_ERROR (Status)) {
- Status = gBS->HandleProtocol (
- LoadedImage->DeviceHandle,
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
- if (!EFI_ERROR (Status)) {
- Status = Fv->ReadFile (
- Fv,
- FileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (!EFI_ERROR (Status)) {
- FindFvFile = TRUE;
- FoundFvHandle = LoadedImage->DeviceHandle;
- }
- }
- }
- //
- // Second, if fail to find, try to enumerate all FV
- //
- if (!FindFvFile) {
- FvHandleBuffer = NULL;
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &FvHandleCount,
- &FvHandleBuffer
- );
- for (Index = 0; Index < FvHandleCount; Index++) {
- gBS->HandleProtocol (
- FvHandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &Fv
- );
-
- Status = Fv->ReadFile (
- Fv,
- FileGuid,
- NULL,
- &Size,
- &Type,
- &Attributes,
- &AuthenticationStatus
- );
- if (EFI_ERROR (Status)) {
- //
- // Skip if input Fv file not in the FV
- //
- continue;
- }
- FindFvFile = TRUE;
- FoundFvHandle = FvHandleBuffer[Index];
- break;
- }
-
- if (FvHandleBuffer != NULL) {
- FreePool (FvHandleBuffer);
- }
- }
-
- if (FindFvFile) {
- //
- // Build the shell device path
- //
- NewDevicePath = DevicePathFromHandle (FoundFvHandle);
- EfiInitializeFwVolDevicepathNode (&FvFileNode, FileGuid);
- NewDevicePath = AppendDevicePathNode (NewDevicePath, (EFI_DEVICE_PATH_PROTOCOL *) &FvFileNode);
- ASSERT (NewDevicePath != NULL);
- *DevicePath = NewDevicePath;
- return EFI_SUCCESS;
- }
- return EFI_NOT_FOUND;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConnect.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConnect.c
deleted file mode 100644
index dfeefc01b8..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConnect.c
+++ /dev/null
@@ -1,429 +0,0 @@
-/** @file
- BDS Lib functions which relate with connect the device
-
-Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "InternalBdsLib.h"
-
-
-/**
- This function will connect all the system driver to controller
- first, and then special connect the default console, this make
- sure all the system controller available and the platform default
- console connected.
-
-**/
-VOID
-EFIAPI
-BdsLibConnectAll (
- VOID
- )
-{
- //
- // Connect the platform console first
- //
- BdsLibConnectAllDefaultConsoles ();
-
- //
- // Generic way to connect all the drivers
- //
- BdsLibConnectAllDriversToAllControllers ();
-
- //
- // Here we have the assumption that we have already had
- // platform default console
- //
- BdsLibConnectAllDefaultConsoles ();
-}
-
-
-/**
- This function will connect all the system drivers to all controllers
- first, and then connect all the console devices the system current
- have. After this we should get all the device work and console available
- if the system have console device.
-
-**/
-VOID
-BdsLibGenericConnectAll (
- VOID
- )
-{
- //
- // Most generic way to connect all the drivers
- //
- BdsLibConnectAllDriversToAllControllers ();
- BdsLibConnectAllConsoles ();
-}
-
-/**
- This function will create all handles associate with every device
- path node. If the handle associate with one device path node can not
- be created successfully, then still give chance to do the dispatch,
- which load the missing drivers if possible.
-
- @param DevicePathToConnect The device path which will be connected, it can be
- a multi-instance device path
-
- @retval EFI_SUCCESS All handles associate with every device path node
- have been created
- @retval EFI_OUT_OF_RESOURCES There is no resource to create new handles
- @retval EFI_NOT_FOUND Create the handle associate with one device path
- node failed
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectDevicePath (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePathToConnect
- )
-{
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- EFI_DEVICE_PATH_PROTOCOL *CopyOfDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *Instance;
- EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *Next;
- EFI_HANDLE Handle;
- EFI_HANDLE PreviousHandle;
- UINTN Size;
- EFI_TPL CurrentTpl;
-
- if (DevicePathToConnect == NULL) {
- return EFI_SUCCESS;
- }
-
- CurrentTpl = EfiGetCurrentTpl ();
-
- DevicePath = DuplicateDevicePath (DevicePathToConnect);
- if (DevicePath == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
- CopyOfDevicePath = DevicePath;
-
- do {
- //
- // The outer loop handles multi instance device paths.
- // Only console variables contain multiple instance device paths.
- //
- // After this call DevicePath points to the next Instance
- //
- Instance = GetNextDevicePathInstance (&DevicePath, &Size);
- if (Instance == NULL) {
- FreePool (CopyOfDevicePath);
- return EFI_OUT_OF_RESOURCES;
- }
-
- Next = Instance;
- while (!IsDevicePathEndType (Next)) {
- Next = NextDevicePathNode (Next);
- }
-
- SetDevicePathEndNode (Next);
-
- //
- // Start the real work of connect with RemainingDevicePath
- //
- PreviousHandle = NULL;
- do {
- //
- // Find the handle that best matches the Device Path. If it is only a
- // partial match the remaining part of the device path is returned in
- // RemainingDevicePath.
- //
- RemainingDevicePath = Instance;
- Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &Handle);
-
- if (!EFI_ERROR (Status)) {
- if (Handle == PreviousHandle) {
- //
- // If no forward progress is made try invoking the Dispatcher.
- // A new FV may have been added to the system an new drivers
- // may now be found.
- // Status == EFI_SUCCESS means a driver was dispatched
- // Status == EFI_NOT_FOUND means no new drivers were dispatched
- //
- if (CurrentTpl == TPL_APPLICATION) {
- //
- // Dispatch calls LoadImage/StartImage which cannot run at TPL > TPL_APPLICATION
- //
- Status = gDS->Dispatch ();
- } else {
- //
- // Always return EFI_NOT_FOUND here
- // to prevent dead loop when control handle is found but connection failded case
- //
- Status = EFI_NOT_FOUND;
- }
- }
-
- if (!EFI_ERROR (Status)) {
- PreviousHandle = Handle;
- //
- // Connect all drivers that apply to Handle and RemainingDevicePath,
- // the Recursive flag is FALSE so only one level will be expanded.
- //
- // Do not check the connect status here, if the connect controller fail,
- // then still give the chance to do dispatch, because partial
- // RemainingDevicepath may be in the new FV
- //
- // 1. If the connect fail, RemainingDevicepath and handle will not
- // change, so next time will do the dispatch, then dispatch's status
- // will take effect
- // 2. If the connect success, the RemainingDevicepath and handle will
- // change, then avoid the dispatch, we have chance to continue the
- // next connection
- //
- gBS->ConnectController (Handle, NULL, RemainingDevicePath, FALSE);
- }
- }
- //
- // Loop until RemainingDevicePath is an empty device path
- //
- } while (!EFI_ERROR (Status) && !IsDevicePathEnd (RemainingDevicePath));
-
- } while (DevicePath != NULL);
-
- if (CopyOfDevicePath != NULL) {
- FreePool (CopyOfDevicePath);
- }
- //
- // All handle with DevicePath exists in the handle database
- //
- return Status;
-}
-
-/**
- This function will connect all current system handles recursively.
-
- gBS->ConnectController() service is invoked for each handle exist in system handler buffer.
- If the handle is bus type handler, all childrens also will be connected recursively
- by gBS->ConnectController().
-
- @retval EFI_SUCCESS All handles and it's child handle have been connected
- @retval EFI_STATUS Error status returned by of gBS->LocateHandleBuffer().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectAllEfi (
- VOID
- )
-{
- EFI_STATUS Status;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- UINTN Index;
-
- Status = gBS->LocateHandleBuffer (
- AllHandles,
- NULL,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
- }
-
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- This function will disconnect all current system handles.
-
- gBS->DisconnectController() is invoked for each handle exists in system handle buffer.
- If handle is a bus type handle, all childrens also are disconnected recursively by
- gBS->DisconnectController().
-
- @retval EFI_SUCCESS All handles have been disconnected
- @retval EFI_STATUS Error status returned by of gBS->LocateHandleBuffer().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibDisconnectAllEfi (
- VOID
- )
-{
- EFI_STATUS Status;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
- UINTN Index;
-
- //
- // Disconnect all
- //
- Status = gBS->LocateHandleBuffer (
- AllHandles,
- NULL,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->DisconnectController (HandleBuffer[Index], NULL, NULL);
- }
-
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- }
-
- return EFI_SUCCESS;
-}
-
-
-/**
- Connects all drivers to all controllers.
- This function make sure all the current system driver will manage
- the correspoinding controllers if have. And at the same time, make
- sure all the system controllers have driver to manage it if have.
-
-**/
-VOID
-EFIAPI
-BdsLibConnectAllDriversToAllControllers (
- VOID
- )
-{
- EFI_STATUS Status;
-
- do {
- //
- // Connect All EFI 1.10 drivers following EFI 1.10 algorithm
- //
- BdsLibConnectAllEfi ();
-
- //
- // Check to see if it's possible to dispatch an more DXE drivers.
- // The BdsLibConnectAllEfi () may have made new DXE drivers show up.
- // If anything is Dispatched Status == EFI_SUCCESS and we will try
- // the connect again.
- //
- Status = gDS->Dispatch ();
-
- } while (!EFI_ERROR (Status));
-
-}
-
-
-/**
- Connect the specific Usb device which match the short form device path,
- and whose bus is determined by Host Controller (Uhci or Ehci).
-
- @param HostControllerPI Uhci (0x00) or Ehci (0x20) or Both uhci and ehci
- (0xFF)
- @param RemainingDevicePath a short-form device path that starts with the first
- element being a USB WWID or a USB Class device
- path
-
- @return EFI_INVALID_PARAMETER RemainingDevicePath is NULL pointer.
- RemainingDevicePath is not a USB device path.
- Invalid HostControllerPI type.
- @return EFI_SUCCESS Success to connect USB device
- @return EFI_NOT_FOUND Fail to find handle for USB controller to connect.
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectUsbDevByShortFormDP(
- IN UINT8 HostControllerPI,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE *HandleArray;
- UINTN HandleArrayCount;
- UINTN Index;
- EFI_PCI_IO_PROTOCOL *PciIo;
- UINT8 Class[3];
- BOOLEAN AtLeastOneConnected;
-
- //
- // Check the passed in parameters
- //
- if (RemainingDevicePath == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- if ((DevicePathType (RemainingDevicePath) != MESSAGING_DEVICE_PATH) ||
- ((DevicePathSubType (RemainingDevicePath) != MSG_USB_CLASS_DP)
- && (DevicePathSubType (RemainingDevicePath) != MSG_USB_WWID_DP)
- )) {
- return EFI_INVALID_PARAMETER;
- }
-
- if (HostControllerPI != 0xFF &&
- HostControllerPI != 0x00 &&
- HostControllerPI != 0x20) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Find the usb host controller firstly, then connect with the remaining device path
- //
- AtLeastOneConnected = FALSE;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiPciIoProtocolGuid,
- NULL,
- &HandleArrayCount,
- &HandleArray
- );
- if (!EFI_ERROR (Status)) {
- for (Index = 0; Index < HandleArrayCount; Index++) {
- Status = gBS->HandleProtocol (
- HandleArray[Index],
- &gEfiPciIoProtocolGuid,
- (VOID **)&PciIo
- );
- if (!EFI_ERROR (Status)) {
- //
- // Check whether the Pci device is the wanted usb host controller
- //
- Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, 0x09, 3, &Class);
- if (!EFI_ERROR (Status)) {
- if ((PCI_CLASS_SERIAL == Class[2]) &&
- (PCI_CLASS_SERIAL_USB == Class[1])) {
- if (HostControllerPI == Class[0] || HostControllerPI == 0xFF) {
- Status = gBS->ConnectController (
- HandleArray[Index],
- NULL,
- RemainingDevicePath,
- FALSE
- );
- if (!EFI_ERROR(Status)) {
- AtLeastOneConnected = TRUE;
- }
- }
- }
- }
- }
- }
-
- if (HandleArray != NULL) {
- FreePool (HandleArray);
- }
-
- if (AtLeastOneConnected) {
- return EFI_SUCCESS;
- }
- }
-
- return EFI_NOT_FOUND;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConsole.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConsole.c
deleted file mode 100644
index 2fffd9e4bc..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConsole.c
+++ /dev/null
@@ -1,1061 +0,0 @@
-/** @file
- BDS Lib functions which contain all the code to connect console device
-
-Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "InternalBdsLib.h"
-
-
-/**
- Check if we need to save the EFI variable with "ConVarName" as name
- as NV type
- If ConVarName is NULL, then ASSERT().
-
- @param ConVarName The name of the EFI variable.
-
- @retval TRUE Set the EFI variable as NV type.
- @retval FALSE EFI variable as NV type can be set NonNV.
-**/
-BOOLEAN
-IsNvNeed (
- IN CHAR16 *ConVarName
- )
-{
- CHAR16 *Ptr;
-
- ASSERT (ConVarName != NULL);
-
- Ptr = ConVarName;
-
- //
- // If the variable includes "Dev" at last, we consider
- // it does not support NV attribute.
- //
- while (*Ptr != L'\0') {
- Ptr++;
- }
-
- if (((INTN)((UINTN)Ptr - (UINTN)ConVarName) / sizeof (CHAR16)) <= 3) {
- return TRUE;
- }
-
- if ((*(Ptr - 3) == 'D') && (*(Ptr - 2) == 'e') && (*(Ptr - 1) == 'v')) {
- return FALSE;
- } else {
- return TRUE;
- }
-}
-
-/**
- Fill console handle in System Table if there are no valid console handle in.
-
- Firstly, check the validation of console handle in System Table. If it is invalid,
- update it by the first console device handle from EFI console variable.
-
- @param VarName The name of the EFI console variable.
- @param ConsoleGuid Specified Console protocol GUID.
- @param ConsoleHandle On IN, console handle in System Table to be checked.
- On OUT, new console handle in system table.
- @param ProtocolInterface On IN, console protocol on console handle in System Table to be checked.
- On OUT, new console protocol on new console handle in system table.
-
- @retval TRUE System Table has been updated.
- @retval FALSE System Table hasn't been updated.
-
-**/
-BOOLEAN
-UpdateSystemTableConsole (
- IN CHAR16 *VarName,
- IN EFI_GUID *ConsoleGuid,
- IN OUT EFI_HANDLE *ConsoleHandle,
- IN OUT VOID **ProtocolInterface
- )
-{
- EFI_STATUS Status;
- UINTN DevicePathSize;
- EFI_DEVICE_PATH_PROTOCOL *FullDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *VarConsole;
- EFI_DEVICE_PATH_PROTOCOL *Instance;
- VOID *Interface;
- EFI_HANDLE NewHandle;
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;
-
- ASSERT (VarName != NULL);
- ASSERT (ConsoleHandle != NULL);
- ASSERT (ConsoleGuid != NULL);
- ASSERT (ProtocolInterface != NULL);
-
- if (*ConsoleHandle != NULL) {
- Status = gBS->HandleProtocol (
- *ConsoleHandle,
- ConsoleGuid,
- &Interface
- );
- if (Status == EFI_SUCCESS && Interface == *ProtocolInterface) {
- //
- // If ConsoleHandle is valid and console protocol on this handle also
- // also matched, just return.
- //
- return FALSE;
- }
- }
-
- //
- // Get all possible consoles device path from EFI variable
- //
- VarConsole = BdsLibGetVariableAndSize (
- VarName,
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
- if (VarConsole == NULL) {
- //
- // If there is no any console device, just return.
- //
- return FALSE;
- }
-
- FullDevicePath = VarConsole;
-
- do {
- //
- // Check every instance of the console variable
- //
- Instance = GetNextDevicePathInstance (&VarConsole, &DevicePathSize);
- if (Instance == NULL) {
- FreePool (FullDevicePath);
- ASSERT (FALSE);
- }
-
- //
- // Find console device handle by device path instance
- //
- Status = gBS->LocateDevicePath (
- ConsoleGuid,
- &Instance,
- &NewHandle
- );
- if (!EFI_ERROR (Status)) {
- //
- // Get the console protocol on this console device handle
- //
- Status = gBS->HandleProtocol (
- NewHandle,
- ConsoleGuid,
- &Interface
- );
- if (!EFI_ERROR (Status)) {
- //
- // Update new console handle in System Table.
- //
- *ConsoleHandle = NewHandle;
- *ProtocolInterface = Interface;
- if (CompareGuid (ConsoleGuid, &gEfiSimpleTextOutProtocolGuid)) {
- //
- // If it is console out device, set console mode 80x25 if current mode is invalid.
- //
- TextOut = (EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *) Interface;
- if (TextOut->Mode->Mode == -1) {
- TextOut->SetMode (TextOut, 0);
- }
- }
- return TRUE;
- }
- }
-
- } while (Instance != NULL);
-
- //
- // No any available console devcie found.
- //
- return FALSE;
-}
-
-/**
- This function update console variable based on ConVarName, it can
- add or remove one specific console device path from the variable
-
- @param ConVarName Console related variable name, ConIn, ConOut,
- ErrOut.
- @param CustomizedConDevicePath The console device path which will be added to
- the console variable ConVarName, this parameter
- can not be multi-instance.
- @param ExclusiveDevicePath The console device path which will be removed
- from the console variable ConVarName, this
- parameter can not be multi-instance.
-
- @retval EFI_UNSUPPORTED The added device path is same to the removed one.
- @retval EFI_SUCCESS Success add or remove the device path from the
- console variable.
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibUpdateConsoleVariable (
- IN CHAR16 *ConVarName,
- IN EFI_DEVICE_PATH_PROTOCOL *CustomizedConDevicePath,
- IN EFI_DEVICE_PATH_PROTOCOL *ExclusiveDevicePath
- )
-{
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *VarConsole;
- UINTN DevicePathSize;
- EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *TempNewDevicePath;
- UINT32 Attributes;
-
- VarConsole = NULL;
- DevicePathSize = 0;
-
- //
- // Notes: check the device path point, here should check
- // with compare memory
- //
- if (CustomizedConDevicePath == ExclusiveDevicePath) {
- return EFI_UNSUPPORTED;
- }
- //
- // Delete the ExclusiveDevicePath from current default console
- //
- VarConsole = BdsLibGetVariableAndSize (
- ConVarName,
- &gEfiGlobalVariableGuid,
- &DevicePathSize
- );
-
- //
- // Initialize NewDevicePath
- //
- NewDevicePath = VarConsole;
-
- //
- // If ExclusiveDevicePath is even the part of the instance in VarConsole, delete it.
- // In the end, NewDevicePath is the final device path.
- //
- if (ExclusiveDevicePath != NULL && VarConsole != NULL) {
- NewDevicePath = BdsLibDelPartMatchInstance (VarConsole, ExclusiveDevicePath);
- }
- //
- // Try to append customized device path to NewDevicePath.
- //
- if (CustomizedConDevicePath != NULL) {
- if (!BdsLibMatchDevicePaths (NewDevicePath, CustomizedConDevicePath)) {
- //
- // Check if there is part of CustomizedConDevicePath in NewDevicePath, delete it.
- //
- NewDevicePath = BdsLibDelPartMatchInstance (NewDevicePath, CustomizedConDevicePath);
- //
- // In the first check, the default console variable will be _ModuleEntryPoint,
- // just append current customized device path
- //
- TempNewDevicePath = NewDevicePath;
- NewDevicePath = AppendDevicePathInstance (NewDevicePath, CustomizedConDevicePath);
- if (TempNewDevicePath != NULL) {
- FreePool(TempNewDevicePath);
- }
- }
- }
-
- //
- // The attribute for ConInDev, ConOutDev and ErrOutDev does not include NV.
- //
- if (IsNvNeed(ConVarName)) {
- //
- // ConVarName has NV attribute.
- //
- Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE;
- } else {
- //
- // ConVarName does not have NV attribute.
- //
- Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS;
- }
-
- //
- // Finally, Update the variable of the default console by NewDevicePath
- //
- DevicePathSize = GetDevicePathSize (NewDevicePath);
- Status = SetVariableAndReportStatusCodeOnError (
- ConVarName,
- &gEfiGlobalVariableGuid,
- Attributes,
- DevicePathSize,
- NewDevicePath
- );
- if ((DevicePathSize == 0) && (Status == EFI_NOT_FOUND)) {
- Status = EFI_SUCCESS;
- }
-
- if (VarConsole == NewDevicePath) {
- if (VarConsole != NULL) {
- FreePool(VarConsole);
- }
- } else {
- if (VarConsole != NULL) {
- FreePool(VarConsole);
- }
- if (NewDevicePath != NULL) {
- FreePool(NewDevicePath);
- }
- }
-
- return Status;
-
-}
-
-
-/**
- Connect the console device base on the variable ConVarName, if
- device path of the ConVarName is multi-instance device path and
- anyone of the instances is connected success, then this function
- will return success.
- If the handle associate with one device path node can not
- be created successfully, then still give chance to do the dispatch,
- which load the missing drivers if possible..
-
- @param ConVarName Console related variable name, ConIn, ConOut,
- ErrOut.
-
- @retval EFI_NOT_FOUND There is not any console devices connected
- success
- @retval EFI_SUCCESS Success connect any one instance of the console
- device path base on the variable ConVarName.
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectConsoleVariable (
- IN CHAR16 *ConVarName
- )
-{
- EFI_STATUS Status;
- EFI_DEVICE_PATH_PROTOCOL *StartDevicePath;
- UINTN VariableSize;
- EFI_DEVICE_PATH_PROTOCOL *Instance;
- EFI_DEVICE_PATH_PROTOCOL *Next;
- EFI_DEVICE_PATH_PROTOCOL *CopyOfDevicePath;
- UINTN Size;
- BOOLEAN DeviceExist;
-
- Status = EFI_SUCCESS;
- DeviceExist = FALSE;
-
- //
- // Check if the console variable exist
- //
- StartDevicePath = BdsLibGetVariableAndSize (
- ConVarName,
- &gEfiGlobalVariableGuid,
- &VariableSize
- );
- if (StartDevicePath == NULL) {
- return EFI_UNSUPPORTED;
- }
-
- CopyOfDevicePath = StartDevicePath;
- do {
- //
- // Check every instance of the console variable
- //
- Instance = GetNextDevicePathInstance (&CopyOfDevicePath, &Size);
- if (Instance == NULL) {
- FreePool (StartDevicePath);
- return EFI_UNSUPPORTED;
- }
-
- Next = Instance;
- while (!IsDevicePathEndType (Next)) {
- Next = NextDevicePathNode (Next);
- }
-
- SetDevicePathEndNode (Next);
- //
- // Connect the USB console
- // USB console device path is a short-form device path that
- // starts with the first element being a USB WWID
- // or a USB Class device path
- //
- if ((DevicePathType (Instance) == MESSAGING_DEVICE_PATH) &&
- ((DevicePathSubType (Instance) == MSG_USB_CLASS_DP)
- || (DevicePathSubType (Instance) == MSG_USB_WWID_DP)
- )) {
- Status = BdsLibConnectUsbDevByShortFormDP (0xFF, Instance);
- if (!EFI_ERROR (Status)) {
- DeviceExist = TRUE;
- }
- } else {
- //
- // Connect the instance device path
- //
- Status = BdsLibConnectDevicePath (Instance);
-
- if (EFI_ERROR (Status)) {
- //
- // Delete the instance from the console varialbe
- //
- BdsLibUpdateConsoleVariable (ConVarName, NULL, Instance);
- } else {
- DeviceExist = TRUE;
- }
- }
- FreePool(Instance);
- } while (CopyOfDevicePath != NULL);
-
- FreePool (StartDevicePath);
-
- if (!DeviceExist) {
- return EFI_NOT_FOUND;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- This function will search every simpletext device in current system,
- and make every simpletext device as pertantial console device.
-
-**/
-VOID
-EFIAPI
-BdsLibConnectAllConsoles (
- VOID
- )
-{
- UINTN Index;
- EFI_DEVICE_PATH_PROTOCOL *ConDevicePath;
- UINTN HandleCount;
- EFI_HANDLE *HandleBuffer;
-
- Index = 0;
- HandleCount = 0;
- HandleBuffer = NULL;
- ConDevicePath = NULL;
-
- //
- // Update all the console variables
- //
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiSimpleTextInProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
-
- for (Index = 0; Index < HandleCount; Index++) {
- gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID **) &ConDevicePath
- );
- BdsLibUpdateConsoleVariable (L"ConIn", ConDevicePath, NULL);
- }
-
- if (HandleBuffer != NULL) {
- FreePool(HandleBuffer);
- HandleBuffer = NULL;
- }
-
- gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiSimpleTextOutProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- for (Index = 0; Index < HandleCount; Index++) {
- gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiDevicePathProtocolGuid,
- (VOID **) &ConDevicePath
- );
- BdsLibUpdateConsoleVariable (L"ConOut", ConDevicePath, NULL);
- BdsLibUpdateConsoleVariable (L"ErrOut", ConDevicePath, NULL);
- }
-
- if (HandleBuffer != NULL) {
- FreePool(HandleBuffer);
- }
-
- //
- // Connect all console variables
- //
- BdsLibConnectAllDefaultConsoles ();
-
-}
-
-/**
- This function will connect console device base on the console
- device variable ConIn, ConOut and ErrOut.
-
- @retval EFI_SUCCESS At least one of the ConIn and ConOut device have
- been connected success.
- @retval EFI_STATUS Return the status of BdsLibConnectConsoleVariable ().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectAllDefaultConsoles (
- VOID
- )
-{
- EFI_STATUS Status;
- BOOLEAN SystemTableUpdated;
-
- //
- // Connect all default console variables
- //
-
- //
- // It seems impossible not to have any ConOut device on platform,
- // so we check the status here.
- //
- Status = BdsLibConnectConsoleVariable (L"ConOut");
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Insert the performance probe for Console Out
- //
- PERF_START (NULL, "ConOut", "BDS", 1);
- PERF_END (NULL, "ConOut", "BDS", 0);
-
- //
- // Because possibly the platform is legacy free, in such case,
- // ConIn devices (Serial Port and PS2 Keyboard ) does not exist,
- // so we need not check the status.
- //
- BdsLibConnectConsoleVariable (L"ConIn");
-
- //
- // The _ModuleEntryPoint err out var is legal.
- //
- BdsLibConnectConsoleVariable (L"ErrOut");
-
- SystemTableUpdated = FALSE;
- //
- // Fill console handles in System Table if no console device assignd.
- //
- if (UpdateSystemTableConsole (L"ConIn", &gEfiSimpleTextInProtocolGuid, &gST->ConsoleInHandle, (VOID **) &gST->ConIn)) {
- SystemTableUpdated = TRUE;
- }
- if (UpdateSystemTableConsole (L"ConOut", &gEfiSimpleTextOutProtocolGuid, &gST->ConsoleOutHandle, (VOID **) &gST->ConOut)) {
- SystemTableUpdated = TRUE;
- }
- if (UpdateSystemTableConsole (L"ErrOut", &gEfiSimpleTextOutProtocolGuid, &gST->StandardErrorHandle, (VOID **) &gST->StdErr)) {
- SystemTableUpdated = TRUE;
- }
-
- if (SystemTableUpdated) {
- //
- // Update the CRC32 in the EFI System Table header
- //
- gST->Hdr.CRC32 = 0;
- gBS->CalculateCrc32 (
- (UINT8 *) &gST->Hdr,
- gST->Hdr.HeaderSize,
- &gST->Hdr.CRC32
- );
- }
-
- //
- // If any component set PcdTestKeyUsed to TRUE because use of a test key
- // was detected, then display a warning message on the debug log and the console
- //
- if (PcdGetBool (PcdTestKeyUsed) == TRUE) {
- DEBUG ((DEBUG_ERROR, "**********************************\n"));
- DEBUG ((DEBUG_ERROR, "** WARNING: Test Key is used. **\n"));
- DEBUG ((DEBUG_ERROR, "**********************************\n"));
- Print (L"** WARNING: Test Key is used. **\n");
- }
-
- return EFI_SUCCESS;
-
-}
-
-/**
- This function will connect console device except ConIn base on the console
- device variable ConOut and ErrOut.
-
- @retval EFI_SUCCESS At least one of the ConOut device have
- been connected success.
- @retval EFI_STATUS Return the status of BdsLibConnectConsoleVariable ().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibConnectAllDefaultConsolesWithOutConIn (
- VOID
- )
-{
- EFI_STATUS Status;
- BOOLEAN SystemTableUpdated;
-
- //
- // Connect all default console variables except ConIn
- //
-
- //
- // It seems impossible not to have any ConOut device on platform,
- // so we check the status here.
- //
- Status = BdsLibConnectConsoleVariable (L"ConOut");
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Insert the performance probe for Console Out
- //
- PERF_START (NULL, "ConOut", "BDS", 1);
- PERF_END (NULL, "ConOut", "BDS", 0);
-
- //
- // The _ModuleEntryPoint err out var is legal.
- //
- BdsLibConnectConsoleVariable (L"ErrOut");
-
- SystemTableUpdated = FALSE;
- //
- // Fill console handles in System Table if no console device assignd.
- //
- if (UpdateSystemTableConsole (L"ConOut", &gEfiSimpleTextOutProtocolGuid, &gST->ConsoleOutHandle, (VOID **) &gST->ConOut)) {
- SystemTableUpdated = TRUE;
- }
- if (UpdateSystemTableConsole (L"ErrOut", &gEfiSimpleTextOutProtocolGuid, &gST->StandardErrorHandle, (VOID **) &gST->StdErr)) {
- SystemTableUpdated = TRUE;
- }
-
- if (SystemTableUpdated) {
- //
- // Update the CRC32 in the EFI System Table header
- //
- gST->Hdr.CRC32 = 0;
- gBS->CalculateCrc32 (
- (UINT8 *) &gST->Hdr,
- gST->Hdr.HeaderSize,
- &gST->Hdr.CRC32
- );
- }
-
- return EFI_SUCCESS;
-
-}
-
-/**
- Use SystemTable Conout to stop video based Simple Text Out consoles from going
- to the video device. Put up LogoFile on every video device that is a console.
-
- @param[in] LogoFile File name of logo to display on the center of the screen.
-
- @retval EFI_SUCCESS ConsoleControl has been flipped to graphics and logo displayed.
- @retval EFI_UNSUPPORTED Logo not found
-
-**/
-EFI_STATUS
-EFIAPI
-EnableQuietBoot (
- IN EFI_GUID *LogoFile
- )
-{
- EFI_STATUS Status;
- EFI_OEM_BADGING_PROTOCOL *Badging;
- UINT32 SizeOfX;
- UINT32 SizeOfY;
- INTN DestX;
- INTN DestY;
- UINT8 *ImageData;
- UINTN ImageSize;
- UINTN BltSize;
- UINT32 Instance;
- EFI_BADGING_FORMAT Format;
- EFI_BADGING_DISPLAY_ATTRIBUTE Attribute;
- UINTN CoordinateX;
- UINTN CoordinateY;
- UINTN Height;
- UINTN Width;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
- EFI_UGA_DRAW_PROTOCOL *UgaDraw;
- UINT32 ColorDepth;
- UINT32 RefreshRate;
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
- EFI_BOOT_LOGO_PROTOCOL *BootLogo;
- UINTN NumberOfLogos;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL *LogoBlt;
- UINTN LogoDestX;
- UINTN LogoDestY;
- UINTN LogoHeight;
- UINTN LogoWidth;
- UINTN NewDestX;
- UINTN NewDestY;
- UINTN NewHeight;
- UINTN NewWidth;
- UINT64 BufferSize;
-
- UgaDraw = NULL;
- //
- // Try to open GOP first
- //
- Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiGraphicsOutputProtocolGuid, (VOID **) &GraphicsOutput);
- if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {
- GraphicsOutput = NULL;
- //
- // Open GOP failed, try to open UGA
- //
- Status = gBS->HandleProtocol (gST->ConsoleOutHandle, &gEfiUgaDrawProtocolGuid, (VOID **) &UgaDraw);
- }
- if (EFI_ERROR (Status)) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Try to open Boot Logo Protocol.
- //
- BootLogo = NULL;
- gBS->LocateProtocol (&gEfiBootLogoProtocolGuid, NULL, (VOID **) &BootLogo);
-
- //
- // Erase Cursor from screen
- //
- gST->ConOut->EnableCursor (gST->ConOut, FALSE);
-
- Badging = NULL;
- Status = gBS->LocateProtocol (&gEfiOEMBadgingProtocolGuid, NULL, (VOID **) &Badging);
-
- if (GraphicsOutput != NULL) {
- SizeOfX = GraphicsOutput->Mode->Info->HorizontalResolution;
- SizeOfY = GraphicsOutput->Mode->Info->VerticalResolution;
-
- } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
- Status = UgaDraw->GetMode (UgaDraw, &SizeOfX, &SizeOfY, &ColorDepth, &RefreshRate);
- if (EFI_ERROR (Status)) {
- return EFI_UNSUPPORTED;
- }
- } else {
- return EFI_UNSUPPORTED;
- }
-
- Blt = NULL;
- NumberOfLogos = 0;
- LogoDestX = 0;
- LogoDestY = 0;
- LogoHeight = 0;
- LogoWidth = 0;
- NewDestX = 0;
- NewDestY = 0;
- NewHeight = 0;
- NewWidth = 0;
- Instance = 0;
- while (1) {
- ImageData = NULL;
- ImageSize = 0;
-
- if (Badging != NULL) {
- //
- // Get image from OEMBadging protocol.
- //
- Status = Badging->GetImage (
- Badging,
- &Instance,
- &Format,
- &ImageData,
- &ImageSize,
- &Attribute,
- &CoordinateX,
- &CoordinateY
- );
- if (EFI_ERROR (Status)) {
- goto Done;
- }
-
- //
- // Currently only support BMP format.
- //
- if (Format != EfiBadgingFormatBMP) {
- if (ImageData != NULL) {
- FreePool (ImageData);
- }
- continue;
- }
- } else {
- //
- // Get the specified image from FV.
- //
- Status = GetSectionFromAnyFv (LogoFile, EFI_SECTION_RAW, 0, (VOID **) &ImageData, &ImageSize);
- if (EFI_ERROR (Status)) {
- return EFI_UNSUPPORTED;
- }
-
- CoordinateX = 0;
- CoordinateY = 0;
- if (!FeaturePcdGet(PcdBootlogoOnlyEnable)) {
- Attribute = EfiBadgingDisplayAttributeCenter;
- } else {
- Attribute = EfiBadgingDisplayAttributeCustomized;
- }
- }
-
- if (Blt != NULL) {
- FreePool (Blt);
- }
- Blt = NULL;
- Status = TranslateBmpToGopBlt (
- ImageData,
- ImageSize,
- &Blt,
- &BltSize,
- &Height,
- &Width
- );
- if (EFI_ERROR (Status)) {
- FreePool (ImageData);
-
- if (Badging == NULL) {
- return Status;
- } else {
- continue;
- }
- }
-
- //
- // Calculate the display position according to Attribute.
- //
- switch (Attribute) {
- case EfiBadgingDisplayAttributeLeftTop:
- DestX = CoordinateX;
- DestY = CoordinateY;
- break;
-
- case EfiBadgingDisplayAttributeCenterTop:
- DestX = (SizeOfX - Width) / 2;
- DestY = CoordinateY;
- break;
-
- case EfiBadgingDisplayAttributeRightTop:
- DestX = (SizeOfX - Width - CoordinateX);
- DestY = CoordinateY;;
- break;
-
- case EfiBadgingDisplayAttributeCenterRight:
- DestX = (SizeOfX - Width - CoordinateX);
- DestY = (SizeOfY - Height) / 2;
- break;
-
- case EfiBadgingDisplayAttributeRightBottom:
- DestX = (SizeOfX - Width - CoordinateX);
- DestY = (SizeOfY - Height - CoordinateY);
- break;
-
- case EfiBadgingDisplayAttributeCenterBottom:
- DestX = (SizeOfX - Width) / 2;
- DestY = (SizeOfY - Height - CoordinateY);
- break;
-
- case EfiBadgingDisplayAttributeLeftBottom:
- DestX = CoordinateX;
- DestY = (SizeOfY - Height - CoordinateY);
- break;
-
- case EfiBadgingDisplayAttributeCenterLeft:
- DestX = CoordinateX;
- DestY = (SizeOfY - Height) / 2;
- break;
-
- case EfiBadgingDisplayAttributeCenter:
- DestX = (SizeOfX - Width) / 2;
- DestY = (SizeOfY - Height) / 2;
- break;
-
- case EfiBadgingDisplayAttributeCustomized:
- DestX = (SizeOfX - Width) / 2;
- DestY = ((SizeOfY * 382) / 1000) - Height / 2;
- break;
-
- default:
- DestX = CoordinateX;
- DestY = CoordinateY;
- break;
- }
-
- if ((DestX >= 0) && (DestY >= 0)) {
- if (GraphicsOutput != NULL) {
- Status = GraphicsOutput->Blt (
- GraphicsOutput,
- Blt,
- EfiBltBufferToVideo,
- 0,
- 0,
- (UINTN) DestX,
- (UINTN) DestY,
- Width,
- Height,
- Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
- );
- } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
- Status = UgaDraw->Blt (
- UgaDraw,
- (EFI_UGA_PIXEL *) Blt,
- EfiUgaBltBufferToVideo,
- 0,
- 0,
- (UINTN) DestX,
- (UINTN) DestY,
- Width,
- Height,
- Width * sizeof (EFI_UGA_PIXEL)
- );
- } else {
- Status = EFI_UNSUPPORTED;
- }
-
- //
- // Report displayed Logo information.
- //
- if (!EFI_ERROR (Status)) {
- NumberOfLogos++;
-
- if (LogoWidth == 0) {
- //
- // The first Logo.
- //
- LogoDestX = (UINTN) DestX;
- LogoDestY = (UINTN) DestY;
- LogoWidth = Width;
- LogoHeight = Height;
- } else {
- //
- // Merge new logo with old one.
- //
- NewDestX = MIN ((UINTN) DestX, LogoDestX);
- NewDestY = MIN ((UINTN) DestY, LogoDestY);
- NewWidth = MAX ((UINTN) DestX + Width, LogoDestX + LogoWidth) - NewDestX;
- NewHeight = MAX ((UINTN) DestY + Height, LogoDestY + LogoHeight) - NewDestY;
-
- LogoDestX = NewDestX;
- LogoDestY = NewDestY;
- LogoWidth = NewWidth;
- LogoHeight = NewHeight;
- }
- }
- }
-
- FreePool (ImageData);
-
- if (Badging == NULL) {
- break;
- }
- }
-
-Done:
- if (BootLogo == NULL || NumberOfLogos == 0) {
- //
- // No logo displayed.
- //
- if (Blt != NULL) {
- FreePool (Blt);
- }
-
- return Status;
- }
-
- //
- // Advertise displayed Logo information.
- //
- if (NumberOfLogos == 1) {
- //
- // Only one logo displayed, use its Blt buffer directly for BootLogo protocol.
- //
- LogoBlt = Blt;
- Status = EFI_SUCCESS;
- } else {
- //
- // More than one Logo displayed, get merged BltBuffer using VideoToBuffer operation.
- //
- if (Blt != NULL) {
- FreePool (Blt);
- }
-
- //
- // Ensure the LogoHeight * LogoWidth doesn't overflow
- //
- if (LogoHeight > DivU64x64Remainder ((UINTN) ~0, LogoWidth, NULL)) {
- return EFI_UNSUPPORTED;
- }
- BufferSize = MultU64x64 (LogoWidth, LogoHeight);
-
- //
- // Ensure the BufferSize * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL) doesn't overflow
- //
- if (BufferSize > DivU64x32 ((UINTN) ~0, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL))) {
- return EFI_UNSUPPORTED;
- }
-
- LogoBlt = AllocateZeroPool ((UINTN)BufferSize * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
- if (LogoBlt == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- if (GraphicsOutput != NULL) {
- Status = GraphicsOutput->Blt (
- GraphicsOutput,
- LogoBlt,
- EfiBltVideoToBltBuffer,
- LogoDestX,
- LogoDestY,
- 0,
- 0,
- LogoWidth,
- LogoHeight,
- LogoWidth * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
- );
- } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
- Status = UgaDraw->Blt (
- UgaDraw,
- (EFI_UGA_PIXEL *) LogoBlt,
- EfiUgaVideoToBltBuffer,
- LogoDestX,
- LogoDestY,
- 0,
- 0,
- LogoWidth,
- LogoHeight,
- LogoWidth * sizeof (EFI_UGA_PIXEL)
- );
- } else {
- Status = EFI_UNSUPPORTED;
- }
- }
-
- if (!EFI_ERROR (Status)) {
- BootLogo->SetBootLogo (BootLogo, LogoBlt, LogoDestX, LogoDestY, LogoWidth, LogoHeight);
- }
- FreePool (LogoBlt);
-
- return Status;
-}
-
-/**
- Use SystemTable Conout to turn on video based Simple Text Out consoles. The
- Simple Text Out screens will now be synced up with all non video output devices
-
- @retval EFI_SUCCESS UGA devices are back in text mode and synced up.
-
-**/
-EFI_STATUS
-EFIAPI
-DisableQuietBoot (
- VOID
- )
-{
-
- //
- // Enable Cursor on Screen
- //
- gST->ConOut->EnableCursor (gST->ConOut, TRUE);
- return EFI_SUCCESS;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c
deleted file mode 100644
index 313a1ea9f6..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c
+++ /dev/null
@@ -1,1575 +0,0 @@
-/** @file
- Misc BDS library function
-
-Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "InternalBdsLib.h"
-
-
-#define MAX_STRING_LEN 200
-
-BOOLEAN mFeaturerSwitch = TRUE;
-BOOLEAN mResetRequired = FALSE;
-
-extern UINT16 gPlatformBootTimeOutDefault;
-
-/**
- The function will go through the driver option link list, load and start
- every driver the driver option device path point to.
-
- @param BdsDriverLists The header of the current driver option link list
-
-**/
-VOID
-EFIAPI
-BdsLibLoadDrivers (
- IN LIST_ENTRY *BdsDriverLists
- )
-{
- EFI_STATUS Status;
- LIST_ENTRY *Link;
- BDS_COMMON_OPTION *Option;
- EFI_HANDLE ImageHandle;
- EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;
- UINTN ExitDataSize;
- CHAR16 *ExitData;
- BOOLEAN ReconnectAll;
-
- ReconnectAll = FALSE;
-
- //
- // Process the driver option
- //
- for (Link = BdsDriverLists->ForwardLink; Link != BdsDriverLists; Link = Link->ForwardLink) {
- Option = CR (Link, BDS_COMMON_OPTION, Link, BDS_LOAD_OPTION_SIGNATURE);
-
- //
- // If a load option is not marked as LOAD_OPTION_ACTIVE,
- // the boot manager will not automatically load the option.
- //
- if (!IS_LOAD_OPTION_TYPE (Option->Attribute, LOAD_OPTION_ACTIVE)) {
- continue;
- }
-
- //
- // If a driver load option is marked as LOAD_OPTION_FORCE_RECONNECT,
- // then all of the EFI drivers in the system will be disconnected and
- // reconnected after the last driver load option is processed.
- //
- if (IS_LOAD_OPTION_TYPE (Option->Attribute, LOAD_OPTION_FORCE_RECONNECT)) {
- ReconnectAll = TRUE;
- }
-
- //
- // Make sure the driver path is connected.
- //
- BdsLibConnectDevicePath (Option->DevicePath);
-
- //
- // Load and start the image that Driver#### describes
- //
- Status = gBS->LoadImage (
- FALSE,
- gImageHandle,
- Option->DevicePath,
- NULL,
- 0,
- &ImageHandle
- );
-
- if (!EFI_ERROR (Status)) {
- gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &ImageInfo);
-
- //
- // Verify whether this image is a driver, if not,
- // exit it and continue to parse next load option
- //
- if (ImageInfo->ImageCodeType != EfiBootServicesCode && ImageInfo->ImageCodeType != EfiRuntimeServicesCode) {
- gBS->Exit (ImageHandle, EFI_INVALID_PARAMETER, 0, NULL);
- continue;
- }
-
- if (Option->LoadOptionsSize != 0) {
- ImageInfo->LoadOptionsSize = Option->LoadOptionsSize;
- ImageInfo->LoadOptions = Option->LoadOptions;
- }
- //
- // Before calling the image, enable the Watchdog Timer for
- // the 5 Minute period
- //
- gBS->SetWatchdogTimer (5 * 60, 0x0000, 0x00, NULL);
-
- Status = gBS->StartImage (ImageHandle, &ExitDataSize, &ExitData);
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Driver Return Status = %r\n", Status));
-
- //
- // Clear the Watchdog Timer after the image returns
- //
- gBS->SetWatchdogTimer (0x0000, 0x0000, 0x0000, NULL);
- }
- }
-
- //
- // Process the LOAD_OPTION_FORCE_RECONNECT driver option
- //
- if (ReconnectAll) {
- BdsLibDisconnectAllEfi ();
- BdsLibConnectAll ();
- }
-
-}
-
-/**
- Get the Option Number that does not used.
- Try to locate the specific option variable one by one utile find a free number.
-
- @param VariableName Indicate if the boot#### or driver#### option
-
- @return The Minimal Free Option Number
-
-**/
-UINT16
-BdsLibGetFreeOptionNumber (
- IN CHAR16 *VariableName
- )
-{
- UINTN Index;
- CHAR16 StrTemp[10];
- UINT16 *OptionBuffer;
- UINTN OptionSize;
-
- //
- // Try to find the minimum free number from 0, 1, 2, 3....
- //
- Index = 0;
- do {
- if (*VariableName == 'B') {
- UnicodeSPrint (StrTemp, sizeof (StrTemp), L"Boot%04x", Index);
- } else {
- UnicodeSPrint (StrTemp, sizeof (StrTemp), L"Driver%04x", Index);
- }
- //
- // try if the option number is used
- //
- OptionBuffer = BdsLibGetVariableAndSize (
- StrTemp,
- &gEfiGlobalVariableGuid,
- &OptionSize
- );
- if (OptionBuffer == NULL) {
- break;
- }
- FreePool(OptionBuffer);
- Index++;
- } while (TRUE);
-
- return ((UINT16) Index);
-}
-
-
-/**
- This function will register the new boot#### or driver#### option base on
- the VariableName. The new registered boot#### or driver#### will be linked
- to BdsOptionList and also update to the VariableName. After the boot#### or
- driver#### updated, the BootOrder or DriverOrder will also be updated.
-
- @param BdsOptionList The header of the boot#### or driver#### link list
- @param DevicePath The device path which the boot#### or driver####
- option present
- @param String The description of the boot#### or driver####
- @param VariableName Indicate if the boot#### or driver#### option
-
- @retval EFI_SUCCESS The boot#### or driver#### have been success
- registered
- @retval EFI_STATUS Return the status of gRT->SetVariable ().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibRegisterNewOption (
- IN LIST_ENTRY *BdsOptionList,
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- IN CHAR16 *String,
- IN CHAR16 *VariableName
- )
-{
- EFI_STATUS Status;
- UINTN Index;
- UINT16 RegisterOptionNumber;
- UINT16 *TempOptionPtr;
- UINTN TempOptionSize;
- UINT16 *OptionOrderPtr;
- VOID *OptionPtr;
- UINTN OptionSize;
- UINT8 *TempPtr;
- EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath;
- CHAR16 *Description;
- CHAR16 OptionName[10];
- BOOLEAN UpdateDescription;
- UINT16 BootOrderEntry;
- UINTN OrderItemNum;
-
- if (DevicePath == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- OptionPtr = NULL;
- OptionSize = 0;
- TempPtr = NULL;
- OptionDevicePath = NULL;
- Description = NULL;
- OptionOrderPtr = NULL;
- UpdateDescription = FALSE;
- Status = EFI_SUCCESS;
- ZeroMem (OptionName, sizeof (OptionName));
-
- TempOptionSize = 0;
- TempOptionPtr = BdsLibGetVariableAndSize (
- VariableName,
- &gEfiGlobalVariableGuid,
- &TempOptionSize
- );
- //
- // Compare with current option variable if the previous option is set in global variable.
- //
- for (Index = 0; Index < TempOptionSize / sizeof (UINT16); Index++) {
- //
- // TempOptionPtr must not be NULL if we have non-zero TempOptionSize.
- //
- ASSERT (TempOptionPtr != NULL);
-
- if (*VariableName == 'B') {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", TempOptionPtr[Index]);
- } else {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", TempOptionPtr[Index]);
- }
-
- OptionPtr = BdsLibGetVariableAndSize (
- OptionName,
- &gEfiGlobalVariableGuid,
- &OptionSize
- );
- if (OptionPtr == NULL) {
- continue;
- }
-
- //
- // Validate the variable.
- //
- if (!ValidateOption(OptionPtr, OptionSize)) {
- FreePool(OptionPtr);
- continue;
- }
-
- TempPtr = OptionPtr;
- TempPtr += sizeof (UINT32) + sizeof (UINT16);
- Description = (CHAR16 *) TempPtr;
- TempPtr += StrSize ((CHAR16 *) TempPtr);
- OptionDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;
-
- //
- // Notes: the description may will change base on the GetStringToken
- //
- if (CompareMem (OptionDevicePath, DevicePath, GetDevicePathSize (OptionDevicePath)) == 0) {
- if (CompareMem (Description, String, StrSize (Description)) == 0) {
- //
- // Got the option, so just return
- //
- FreePool (OptionPtr);
- FreePool (TempOptionPtr);
- return EFI_SUCCESS;
- } else {
- //
- // Option description changed, need update.
- //
- UpdateDescription = TRUE;
- FreePool (OptionPtr);
- break;
- }
- }
-
- FreePool (OptionPtr);
- }
-
- OptionSize = sizeof (UINT32) + sizeof (UINT16) + StrSize (String);
- OptionSize += GetDevicePathSize (DevicePath);
- OptionPtr = AllocateZeroPool (OptionSize);
- ASSERT (OptionPtr != NULL);
-
- TempPtr = OptionPtr;
- *(UINT32 *) TempPtr = LOAD_OPTION_ACTIVE;
- TempPtr += sizeof (UINT32);
- *(UINT16 *) TempPtr = (UINT16) GetDevicePathSize (DevicePath);
- TempPtr += sizeof (UINT16);
- CopyMem (TempPtr, String, StrSize (String));
- TempPtr += StrSize (String);
- CopyMem (TempPtr, DevicePath, GetDevicePathSize (DevicePath));
-
- if (UpdateDescription) {
- //
- // The number in option#### to be updated.
- // In this case, we must have non-NULL TempOptionPtr.
- //
- ASSERT (TempOptionPtr != NULL);
- RegisterOptionNumber = TempOptionPtr[Index];
- } else {
- //
- // The new option#### number
- //
- RegisterOptionNumber = BdsLibGetFreeOptionNumber(VariableName);
- }
-
- if (*VariableName == 'B') {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", RegisterOptionNumber);
- } else {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", RegisterOptionNumber);
- }
-
- Status = gRT->SetVariable (
- OptionName,
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- OptionSize,
- OptionPtr
- );
- //
- // Return if only need to update a changed description or fail to set option.
- //
- if (EFI_ERROR (Status) || UpdateDescription) {
- FreePool (OptionPtr);
- if (TempOptionPtr != NULL) {
- FreePool (TempOptionPtr);
- }
- return Status;
- }
-
- FreePool (OptionPtr);
-
- //
- // Update the option order variable
- //
-
- //
- // If no option order
- //
- if (TempOptionSize == 0) {
- BootOrderEntry = 0;
- Status = gRT->SetVariable (
- VariableName,
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- sizeof (UINT16),
- &BootOrderEntry
- );
- if (TempOptionPtr != NULL) {
- FreePool (TempOptionPtr);
- }
- return Status;
- }
-
- //
- // TempOptionPtr must not be NULL if TempOptionSize is not zero.
- //
- ASSERT (TempOptionPtr != NULL);
- //
- // Append the new option number to the original option order
- //
- OrderItemNum = (TempOptionSize / sizeof (UINT16)) + 1 ;
- OptionOrderPtr = AllocateZeroPool ( OrderItemNum * sizeof (UINT16));
- ASSERT (OptionOrderPtr!= NULL);
- CopyMem (OptionOrderPtr, TempOptionPtr, (OrderItemNum - 1) * sizeof (UINT16));
-
- OptionOrderPtr[Index] = RegisterOptionNumber;
-
- Status = gRT->SetVariable (
- VariableName,
- &gEfiGlobalVariableGuid,
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
- OrderItemNum * sizeof (UINT16),
- OptionOrderPtr
- );
- FreePool (TempOptionPtr);
- FreePool (OptionOrderPtr);
-
- return Status;
-}
-
-/**
- Returns the size of a device path in bytes.
-
- This function returns the size, in bytes, of the device path data structure
- specified by DevicePath including the end of device path node. If DevicePath
- is NULL, then 0 is returned. If the length of the device path is bigger than
- MaxSize, also return 0 to indicate this is an invalidate device path.
-
- @param DevicePath A pointer to a device path data structure.
- @param MaxSize Max valid device path size. If big than this size,
- return error.
-
- @retval 0 An invalid device path.
- @retval Others The size of a device path in bytes.
-
-**/
-UINTN
-GetDevicePathSizeEx (
- IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- IN UINTN MaxSize
- )
-{
- UINTN Size;
- UINTN NodeSize;
-
- if (DevicePath == NULL) {
- return 0;
- }
-
- //
- // Search for the end of the device path structure
- //
- Size = 0;
- while (!IsDevicePathEnd (DevicePath)) {
- NodeSize = DevicePathNodeLength (DevicePath);
- if (NodeSize < END_DEVICE_PATH_LENGTH) {
- return 0;
- }
- Size += NodeSize;
- if (Size > MaxSize) {
- return 0;
- }
- DevicePath = NextDevicePathNode (DevicePath);
- }
- Size += DevicePathNodeLength (DevicePath);
- if (Size > MaxSize) {
- return 0;
- }
-
- return Size;
-}
-
-/**
- Returns the length of a Null-terminated Unicode string. If the length is
- bigger than MaxStringLen, return length 0 to indicate that this is an
- invalidate string.
-
- This function returns the byte length of Unicode characters in the Null-terminated
- Unicode string specified by String.
-
- If String is NULL, then ASSERT().
- If String is not aligned on a 16-bit boundary, then ASSERT().
-
- @param String A pointer to a Null-terminated Unicode string.
- @param MaxStringLen Max string len in this string.
-
- @retval 0 An invalid string.
- @retval Others The length of String.
-
-**/
-UINTN
-StrSizeEx (
- IN CONST CHAR16 *String,
- IN UINTN MaxStringLen
- )
-{
- UINTN Length;
-
- ASSERT (String != NULL && MaxStringLen != 0);
- ASSERT (((UINTN) String & BIT0) == 0);
-
- for (Length = 0; *String != L'\0' && MaxStringLen != Length; String++, Length+=2);
-
- if (*String != L'\0' && MaxStringLen == Length) {
- return 0;
- }
-
- return Length + 2;
-}
-
-/**
- Validate the EFI Boot#### variable (VendorGuid/Name)
-
- @param Variable Boot#### variable data.
- @param VariableSize Returns the size of the EFI variable that was read
-
- @retval TRUE The variable data is correct.
- @retval FALSE The variable data is corrupted.
-
-**/
-BOOLEAN
-ValidateOption (
- UINT8 *Variable,
- UINTN VariableSize
- )
-{
- UINT16 FilePathSize;
- UINT8 *TempPtr;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- UINTN TempSize;
-
- if (VariableSize <= sizeof (UINT16) + sizeof (UINT32)) {
- return FALSE;
- }
-
- //
- // Skip the option attribute
- //
- TempPtr = Variable;
- TempPtr += sizeof (UINT32);
-
- //
- // Get the option's device path size
- //
- FilePathSize = *(UINT16 *) TempPtr;
- TempPtr += sizeof (UINT16);
-
- //
- // Get the option's description string size
- //
- TempSize = StrSizeEx ((CHAR16 *) TempPtr, VariableSize - sizeof (UINT16) - sizeof (UINT32));
- TempPtr += TempSize;
-
- //
- // Get the option's device path
- //
- DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;
- TempPtr += FilePathSize;
-
- //
- // Validation boot option variable.
- //
- if ((FilePathSize == 0) || (TempSize == 0)) {
- return FALSE;
- }
-
- if (TempSize + FilePathSize + sizeof (UINT16) + sizeof (UINT32) > VariableSize) {
- return FALSE;
- }
-
- return (BOOLEAN) (GetDevicePathSizeEx (DevicePath, FilePathSize) != 0);
-}
-
-/**
- Convert a single character to number.
- It assumes the input Char is in the scope of L'0' ~ L'9' and L'A' ~ L'F'
-
- @param Char The input char which need to change to a hex number.
-
-**/
-UINTN
-CharToUint (
- IN CHAR16 Char
- )
-{
- if ((Char >= L'0') && (Char <= L'9')) {
- return (UINTN) (Char - L'0');
- }
-
- if ((Char >= L'A') && (Char <= L'F')) {
- return (UINTN) (Char - L'A' + 0xA);
- }
-
- ASSERT (FALSE);
- return 0;
-}
-
-/**
- Build the boot#### or driver#### option from the VariableName, the
- build boot#### or driver#### will also be linked to BdsCommonOptionList.
-
- @param BdsCommonOptionList The header of the boot#### or driver#### option
- link list
- @param VariableName EFI Variable name indicate if it is boot#### or
- driver####
-
- @retval BDS_COMMON_OPTION Get the option just been created
- @retval NULL Failed to get the new option
-
-**/
-BDS_COMMON_OPTION *
-EFIAPI
-BdsLibVariableToOption (
- IN OUT LIST_ENTRY *BdsCommonOptionList,
- IN CHAR16 *VariableName
- )
-{
- UINT32 Attribute;
- UINT16 FilePathSize;
- UINT8 *Variable;
- UINT8 *TempPtr;
- UINTN VariableSize;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- BDS_COMMON_OPTION *Option;
- VOID *LoadOptions;
- UINT32 LoadOptionsSize;
- CHAR16 *Description;
- UINT8 NumOff;
-
- //
- // Read the variable. We will never free this data.
- //
- Variable = BdsLibGetVariableAndSize (
- VariableName,
- &gEfiGlobalVariableGuid,
- &VariableSize
- );
- if (Variable == NULL) {
- return NULL;
- }
-
- //
- // Validate Boot#### variable data.
- //
- if (!ValidateOption(Variable, VariableSize)) {
- FreePool (Variable);
- return NULL;
- }
-
- //
- // Notes: careful defined the variable of Boot#### or
- // Driver####, consider use some macro to abstract the code
- //
- //
- // Get the option attribute
- //
- TempPtr = Variable;
- Attribute = *(UINT32 *) Variable;
- TempPtr += sizeof (UINT32);
-
- //
- // Get the option's device path size
- //
- FilePathSize = *(UINT16 *) TempPtr;
- TempPtr += sizeof (UINT16);
-
- //
- // Get the option's description string
- //
- Description = (CHAR16 *) TempPtr;
-
- //
- // Get the option's description string size
- //
- TempPtr += StrSize((CHAR16 *) TempPtr);
-
- //
- // Get the option's device path
- //
- DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) TempPtr;
- TempPtr += FilePathSize;
-
- //
- // Get load opion data.
- //
- LoadOptions = TempPtr;
- LoadOptionsSize = (UINT32) (VariableSize - (UINTN) (TempPtr - Variable));
-
- //
- // The Console variables may have multiple device paths, so make
- // an Entry for each one.
- //
- Option = AllocateZeroPool (sizeof (BDS_COMMON_OPTION));
- if (Option == NULL) {
- FreePool (Variable);
- return NULL;
- }
-
- Option->Signature = BDS_LOAD_OPTION_SIGNATURE;
- Option->DevicePath = AllocateZeroPool (GetDevicePathSize (DevicePath));
- ASSERT(Option->DevicePath != NULL);
- CopyMem (Option->DevicePath, DevicePath, GetDevicePathSize (DevicePath));
-
- Option->Attribute = Attribute;
- Option->Description = AllocateZeroPool (StrSize (Description));
- ASSERT(Option->Description != NULL);
- CopyMem (Option->Description, Description, StrSize (Description));
-
- Option->LoadOptions = AllocateZeroPool (LoadOptionsSize);
- ASSERT(Option->LoadOptions != NULL);
- CopyMem (Option->LoadOptions, LoadOptions, LoadOptionsSize);
- Option->LoadOptionsSize = LoadOptionsSize;
-
- //
- // Get the value from VariableName Unicode string
- // since the ISO standard assumes ASCII equivalent abbreviations, we can be safe in converting this
- // Unicode stream to ASCII without any loss in meaning.
- //
- if (*VariableName == 'B') {
- NumOff = (UINT8) (sizeof (L"Boot") / sizeof (CHAR16) - 1);
- Option->BootCurrent = (UINT16) (CharToUint (VariableName[NumOff+0]) * 0x1000)
- + (UINT16) (CharToUint (VariableName[NumOff+1]) * 0x100)
- + (UINT16) (CharToUint (VariableName[NumOff+2]) * 0x10)
- + (UINT16) (CharToUint (VariableName[NumOff+3]) * 0x1);
- }
- InsertTailList (BdsCommonOptionList, &Option->Link);
- FreePool (Variable);
- return Option;
-}
-
-/**
- Process BootOrder, or DriverOrder variables, by calling
- BdsLibVariableToOption () for each UINT16 in the variables.
-
- @param BdsCommonOptionList The header of the option list base on variable
- VariableName
- @param VariableName EFI Variable name indicate the BootOrder or
- DriverOrder
-
- @retval EFI_SUCCESS Success create the boot option or driver option
- list
- @retval EFI_OUT_OF_RESOURCES Failed to get the boot option or driver option list
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibBuildOptionFromVar (
- IN LIST_ENTRY *BdsCommonOptionList,
- IN CHAR16 *VariableName
- )
-{
- UINT16 *OptionOrder;
- UINTN OptionOrderSize;
- UINTN Index;
- BDS_COMMON_OPTION *Option;
- CHAR16 OptionName[20];
-
- //
- // Zero Buffer in order to get all BOOT#### variables
- //
- ZeroMem (OptionName, sizeof (OptionName));
-
- //
- // Read the BootOrder, or DriverOrder variable.
- //
- OptionOrder = BdsLibGetVariableAndSize (
- VariableName,
- &gEfiGlobalVariableGuid,
- &OptionOrderSize
- );
- if (OptionOrder == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- for (Index = 0; Index < OptionOrderSize / sizeof (UINT16); Index++) {
- if (*VariableName == 'B') {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", OptionOrder[Index]);
- } else {
- UnicodeSPrint (OptionName, sizeof (OptionName), L"Driver%04x", OptionOrder[Index]);
- }
-
- Option = BdsLibVariableToOption (BdsCommonOptionList, OptionName);
- if (Option != NULL) {
- Option->BootCurrent = OptionOrder[Index];
- }
- }
-
- FreePool (OptionOrder);
-
- return EFI_SUCCESS;
-}
-
-/**
- Get boot mode by looking up configuration table and parsing HOB list
-
- @param BootMode Boot mode from PEI handoff HOB.
-
- @retval EFI_SUCCESS Successfully get boot mode
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibGetBootMode (
- OUT EFI_BOOT_MODE *BootMode
- )
-{
- *BootMode = GetBootModeHob ();
-
- return EFI_SUCCESS;
-}
-
-/**
- Read the EFI variable (VendorGuid/Name) and return a dynamically allocated
- buffer, and the size of the buffer. If failure return NULL.
-
- @param Name String part of EFI variable name
- @param VendorGuid GUID part of EFI variable name
- @param VariableSize Returns the size of the EFI variable that was read
-
- @return Dynamically allocated memory that contains a copy of the EFI variable
- Caller is responsible freeing the buffer.
- @retval NULL Variable was not read
-
-**/
-VOID *
-EFIAPI
-BdsLibGetVariableAndSize (
- IN CHAR16 *Name,
- IN EFI_GUID *VendorGuid,
- OUT UINTN *VariableSize
- )
-{
- EFI_STATUS Status;
- UINTN BufferSize;
- VOID *Buffer;
-
- Buffer = NULL;
-
- //
- // Pass in a zero size buffer to find the required buffer size.
- //
- BufferSize = 0;
- Status = gRT->GetVariable (Name, VendorGuid, NULL, &BufferSize, Buffer);
- if (Status == EFI_BUFFER_TOO_SMALL) {
- //
- // Allocate the buffer to return
- //
- Buffer = AllocateZeroPool (BufferSize);
- if (Buffer == NULL) {
- *VariableSize = 0;
- return NULL;
- }
- //
- // Read variable into the allocated buffer.
- //
- Status = gRT->GetVariable (Name, VendorGuid, NULL, &BufferSize, Buffer);
- if (EFI_ERROR (Status)) {
- FreePool (Buffer);
- BufferSize = 0;
- Buffer = NULL;
- }
- }
-
- ASSERT (((Buffer == NULL) && (BufferSize == 0)) ||
- ((Buffer != NULL) && (BufferSize != 0))
- );
- *VariableSize = BufferSize;
- return Buffer;
-}
-
-/**
- Delete the instance in Multi which matches partly with Single instance
-
- @param Multi A pointer to a multi-instance device path data
- structure.
- @param Single A pointer to a single-instance device path data
- structure.
-
- @return This function will remove the device path instances in Multi which partly
- match with the Single, and return the result device path. If there is no
- remaining device path as a result, this function will return NULL.
-
-**/
-EFI_DEVICE_PATH_PROTOCOL *
-EFIAPI
-BdsLibDelPartMatchInstance (
- IN EFI_DEVICE_PATH_PROTOCOL *Multi,
- IN EFI_DEVICE_PATH_PROTOCOL *Single
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *Instance;
- EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *TempNewDevicePath;
- UINTN InstanceSize;
- UINTN SingleDpSize;
- UINTN Size;
-
- NewDevicePath = NULL;
- TempNewDevicePath = NULL;
-
- if (Multi == NULL || Single == NULL) {
- return Multi;
- }
-
- Instance = GetNextDevicePathInstance (&Multi, &InstanceSize);
- SingleDpSize = GetDevicePathSize (Single) - END_DEVICE_PATH_LENGTH;
- InstanceSize -= END_DEVICE_PATH_LENGTH;
-
- while (Instance != NULL) {
-
- Size = (SingleDpSize < InstanceSize) ? SingleDpSize : InstanceSize;
-
- if ((CompareMem (Instance, Single, Size) != 0)) {
- //
- // Append the device path instance which does not match with Single
- //
- TempNewDevicePath = NewDevicePath;
- NewDevicePath = AppendDevicePathInstance (NewDevicePath, Instance);
- if (TempNewDevicePath != NULL) {
- FreePool(TempNewDevicePath);
- }
- }
- FreePool(Instance);
- Instance = GetNextDevicePathInstance (&Multi, &InstanceSize);
- InstanceSize -= END_DEVICE_PATH_LENGTH;
- }
-
- return NewDevicePath;
-}
-
-/**
- Function compares a device path data structure to that of all the nodes of a
- second device path instance.
-
- @param Multi A pointer to a multi-instance device path data
- structure.
- @param Single A pointer to a single-instance device path data
- structure.
-
- @retval TRUE If the Single device path is contained within Multi device path.
- @retval FALSE The Single device path is not match within Multi device path.
-
-**/
-BOOLEAN
-EFIAPI
-BdsLibMatchDevicePaths (
- IN EFI_DEVICE_PATH_PROTOCOL *Multi,
- IN EFI_DEVICE_PATH_PROTOCOL *Single
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- EFI_DEVICE_PATH_PROTOCOL *DevicePathInst;
- UINTN Size;
-
- if (Multi == NULL || Single == NULL) {
- return FALSE;
- }
-
- DevicePath = Multi;
- DevicePathInst = GetNextDevicePathInstance (&DevicePath, &Size);
-
- //
- // Search for the match of 'Single' in 'Multi'
- //
- while (DevicePathInst != NULL) {
- //
- // If the single device path is found in multiple device paths,
- // return success
- //
- if (CompareMem (Single, DevicePathInst, Size) == 0) {
- FreePool (DevicePathInst);
- return TRUE;
- }
-
- FreePool (DevicePathInst);
- DevicePathInst = GetNextDevicePathInstance (&DevicePath, &Size);
- }
-
- return FALSE;
-}
-
-/**
- This function prints a series of strings.
-
- @param ConOut Pointer to EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
- @param ... A variable argument list containing series of
- strings, the last string must be NULL.
-
- @retval EFI_SUCCESS Success print out the string using ConOut.
- @retval EFI_STATUS Return the status of the ConOut->OutputString ().
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibOutputStrings (
- IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut,
- ...
- )
-{
- VA_LIST Args;
- EFI_STATUS Status;
- CHAR16 *String;
-
- Status = EFI_SUCCESS;
- VA_START (Args, ConOut);
-
- while (!EFI_ERROR (Status)) {
- //
- // If String is NULL, then it's the end of the list
- //
- String = VA_ARG (Args, CHAR16 *);
- if (String == NULL) {
- break;
- }
-
- Status = ConOut->OutputString (ConOut, String);
-
- if (EFI_ERROR (Status)) {
- break;
- }
- }
-
- VA_END(Args);
- return Status;
-}
-
-//
-// Following are BDS Lib functions which contain all the code about setup browser reset reminder feature.
-// Setup Browser reset reminder feature is that an reset reminder will be given before user leaves the setup browser if
-// user change any option setting which needs a reset to be effective, and the reset will be applied according to the user selection.
-//
-
-
-/**
- Enable the setup browser reset reminder feature.
- This routine is used in platform tip. If the platform policy need the feature, use the routine to enable it.
-
-**/
-VOID
-EFIAPI
-EnableResetReminderFeature (
- VOID
- )
-{
- mFeaturerSwitch = TRUE;
-}
-
-
-/**
- Disable the setup browser reset reminder feature.
- This routine is used in platform tip. If the platform policy do not want the feature, use the routine to disable it.
-
-**/
-VOID
-EFIAPI
-DisableResetReminderFeature (
- VOID
- )
-{
- mFeaturerSwitch = FALSE;
-}
-
-
-/**
- Record the info that a reset is required.
- A module boolean variable is used to record whether a reset is required.
-
-**/
-VOID
-EFIAPI
-EnableResetRequired (
- VOID
- )
-{
- mResetRequired = TRUE;
-}
-
-
-/**
- Record the info that no reset is required.
- A module boolean variable is used to record whether a reset is required.
-
-**/
-VOID
-EFIAPI
-DisableResetRequired (
- VOID
- )
-{
- mResetRequired = FALSE;
-}
-
-
-/**
- Check whether platform policy enable the reset reminder feature. The default is enabled.
-
-**/
-BOOLEAN
-EFIAPI
-IsResetReminderFeatureEnable (
- VOID
- )
-{
- return mFeaturerSwitch;
-}
-
-
-/**
- Check if user changed any option setting which needs a system reset to be effective.
-
-**/
-BOOLEAN
-EFIAPI
-IsResetRequired (
- VOID
- )
-{
- return mResetRequired;
-}
-
-
-/**
- Check whether a reset is needed, and finish the reset reminder feature.
- If a reset is needed, Popup a menu to notice user, and finish the feature
- according to the user selection.
-
-**/
-VOID
-EFIAPI
-SetupResetReminder (
- VOID
- )
-{
- EFI_INPUT_KEY Key;
- CHAR16 *StringBuffer1;
- CHAR16 *StringBuffer2;
-
-
- //
- //check any reset required change is applied? if yes, reset system
- //
- if (IsResetReminderFeatureEnable ()) {
- if (IsResetRequired ()) {
-
- StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));
- ASSERT (StringBuffer1 != NULL);
- StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));
- ASSERT (StringBuffer2 != NULL);
- StrCpy (StringBuffer1, L"Configuration changed. Reset to apply it Now.");
- StrCpy (StringBuffer2, L"Press ENTER to reset");
- //
- // Popup a menu to notice user
- //
- do {
- CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, StringBuffer1, StringBuffer2, NULL);
- } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);
-
- FreePool (StringBuffer1);
- FreePool (StringBuffer2);
-
- gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);
- }
- }
-}
-
-/**
- Get the headers (dos, image, optional header) from an image
-
- @param Device SimpleFileSystem device handle
- @param FileName File name for the image
- @param DosHeader Pointer to dos header
- @param Hdr The buffer in which to return the PE32, PE32+, or TE header.
-
- @retval EFI_SUCCESS Successfully get the machine type.
- @retval EFI_NOT_FOUND The file is not found.
- @retval EFI_LOAD_ERROR File is not a valid image file.
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibGetImageHeader (
- IN EFI_HANDLE Device,
- IN CHAR16 *FileName,
- OUT EFI_IMAGE_DOS_HEADER *DosHeader,
- OUT EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr
- )
-{
- EFI_STATUS Status;
- EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Volume;
- EFI_FILE_HANDLE Root;
- EFI_FILE_HANDLE ThisFile;
- UINTN BufferSize;
- UINT64 FileSize;
- EFI_FILE_INFO *Info;
-
- Root = NULL;
- ThisFile = NULL;
- //
- // Handle the file system interface to the device
- //
- Status = gBS->HandleProtocol (
- Device,
- &gEfiSimpleFileSystemProtocolGuid,
- (VOID *) &Volume
- );
- if (EFI_ERROR (Status)) {
- goto Done;
- }
-
- Status = Volume->OpenVolume (
- Volume,
- &Root
- );
- if (EFI_ERROR (Status)) {
- Root = NULL;
- goto Done;
- }
- ASSERT (Root != NULL);
- Status = Root->Open (Root, &ThisFile, FileName, EFI_FILE_MODE_READ, 0);
- if (EFI_ERROR (Status)) {
- goto Done;
- }
- ASSERT (ThisFile != NULL);
-
- //
- // Get file size
- //
- BufferSize = SIZE_OF_EFI_FILE_INFO + 200;
- do {
- Info = NULL;
- Status = gBS->AllocatePool (EfiBootServicesData, BufferSize, (VOID **) &Info);
- if (EFI_ERROR (Status)) {
- goto Done;
- }
- Status = ThisFile->GetInfo (
- ThisFile,
- &gEfiFileInfoGuid,
- &BufferSize,
- Info
- );
- if (!EFI_ERROR (Status)) {
- break;
- }
- if (Status != EFI_BUFFER_TOO_SMALL) {
- FreePool (Info);
- goto Done;
- }
- FreePool (Info);
- } while (TRUE);
-
- FileSize = Info->FileSize;
- FreePool (Info);
-
- //
- // Read dos header
- //
- BufferSize = sizeof (EFI_IMAGE_DOS_HEADER);
- Status = ThisFile->Read (ThisFile, &BufferSize, DosHeader);
- if (EFI_ERROR (Status) ||
- BufferSize < sizeof (EFI_IMAGE_DOS_HEADER) ||
- FileSize <= DosHeader->e_lfanew ||
- DosHeader->e_magic != EFI_IMAGE_DOS_SIGNATURE) {
- Status = EFI_LOAD_ERROR;
- goto Done;
- }
-
- //
- // Move to PE signature
- //
- Status = ThisFile->SetPosition (ThisFile, DosHeader->e_lfanew);
- if (EFI_ERROR (Status)) {
- Status = EFI_LOAD_ERROR;
- goto Done;
- }
-
- //
- // Read and check PE signature
- //
- BufferSize = sizeof (EFI_IMAGE_OPTIONAL_HEADER_UNION);
- Status = ThisFile->Read (ThisFile, &BufferSize, Hdr.Pe32);
- if (EFI_ERROR (Status) ||
- BufferSize < sizeof (EFI_IMAGE_OPTIONAL_HEADER_UNION) ||
- Hdr.Pe32->Signature != EFI_IMAGE_NT_SIGNATURE) {
- Status = EFI_LOAD_ERROR;
- goto Done;
- }
-
- //
- // Check PE32 or PE32+ magic
- //
- if (Hdr.Pe32->OptionalHeader.Magic != EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC &&
- Hdr.Pe32->OptionalHeader.Magic != EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) {
- Status = EFI_LOAD_ERROR;
- goto Done;
- }
-
- Done:
- if (ThisFile != NULL) {
- ThisFile->Close (ThisFile);
- }
- if (Root != NULL) {
- Root->Close (Root);
- }
- return Status;
-}
-
-/**
- This routine adjust the memory information for different memory type and
- save them into the variables for next boot.
-**/
-VOID
-BdsSetMemoryTypeInformationVariable (
- VOID
- )
-{
- EFI_STATUS Status;
- EFI_MEMORY_TYPE_INFORMATION *PreviousMemoryTypeInformation;
- EFI_MEMORY_TYPE_INFORMATION *CurrentMemoryTypeInformation;
- UINTN VariableSize;
- UINTN Index;
- UINTN Index1;
- UINT32 Previous;
- UINT32 Current;
- UINT32 Next;
- EFI_HOB_GUID_TYPE *GuidHob;
- BOOLEAN MemoryTypeInformationModified;
- BOOLEAN MemoryTypeInformationVariableExists;
- EFI_BOOT_MODE BootMode;
-
- MemoryTypeInformationModified = FALSE;
- MemoryTypeInformationVariableExists = FALSE;
-
-
- BootMode = GetBootModeHob ();
- //
- // In BOOT_IN_RECOVERY_MODE, Variable region is not reliable.
- //
- if (BootMode == BOOT_IN_RECOVERY_MODE) {
- return;
- }
-
- //
- // Only check the the Memory Type Information variable in the boot mode
- // other than BOOT_WITH_DEFAULT_SETTINGS because the Memory Type
- // Information is not valid in this boot mode.
- //
- if (BootMode != BOOT_WITH_DEFAULT_SETTINGS) {
- VariableSize = 0;
- Status = gRT->GetVariable (
- EFI_MEMORY_TYPE_INFORMATION_VARIABLE_NAME,
- &gEfiMemoryTypeInformationGuid,
- NULL,
- &VariableSize,
- NULL
- );
- if (Status == EFI_BUFFER_TOO_SMALL) {
- MemoryTypeInformationVariableExists = TRUE;
- }
- }
-
- //
- // Retrieve the current memory usage statistics. If they are not found, then
- // no adjustments can be made to the Memory Type Information variable.
- //
- Status = EfiGetSystemConfigurationTable (
- &gEfiMemoryTypeInformationGuid,
- (VOID **) &CurrentMemoryTypeInformation
- );
- if (EFI_ERROR (Status) || CurrentMemoryTypeInformation == NULL) {
- return;
- }
-
- //
- // Get the Memory Type Information settings from Hob if they exist,
- // PEI is responsible for getting them from variable and build a Hob to save them.
- // If the previous Memory Type Information is not available, then set defaults
- //
- GuidHob = GetFirstGuidHob (&gEfiMemoryTypeInformationGuid);
- if (GuidHob == NULL) {
- //
- // If Platform has not built Memory Type Info into the Hob, just return.
- //
- return;
- }
- PreviousMemoryTypeInformation = GET_GUID_HOB_DATA (GuidHob);
- VariableSize = GET_GUID_HOB_DATA_SIZE (GuidHob);
-
- //
- // Use a heuristic to adjust the Memory Type Information for the next boot
- //
- DEBUG ((EFI_D_INFO, "Memory Previous Current Next \n"));
- DEBUG ((EFI_D_INFO, " Type Pages Pages Pages \n"));
- DEBUG ((EFI_D_INFO, "====== ======== ======== ========\n"));
-
- for (Index = 0; PreviousMemoryTypeInformation[Index].Type != EfiMaxMemoryType; Index++) {
-
- for (Index1 = 0; CurrentMemoryTypeInformation[Index1].Type != EfiMaxMemoryType; Index1++) {
- if (PreviousMemoryTypeInformation[Index].Type == CurrentMemoryTypeInformation[Index1].Type) {
- break;
- }
- }
- if (CurrentMemoryTypeInformation[Index1].Type == EfiMaxMemoryType) {
- continue;
- }
-
- //
- // Previous is the number of pages pre-allocated
- // Current is the number of pages actually needed
- //
- Previous = PreviousMemoryTypeInformation[Index].NumberOfPages;
- Current = CurrentMemoryTypeInformation[Index1].NumberOfPages;
- Next = Previous;
-
- //
- // Inconsistent Memory Reserved across bootings may lead to S4 fail
- // Write next varible to 125% * current when the pre-allocated memory is:
- // 1. More than 150% of needed memory and boot mode is BOOT_WITH_DEFAULT_SETTING
- // 2. Less than the needed memory
- //
- if ((Current + (Current >> 1)) < Previous) {
- if (BootMode == BOOT_WITH_DEFAULT_SETTINGS) {
- Next = Current + (Current >> 2);
- }
- } else if (Current > Previous) {
- Next = Current + (Current >> 2);
- }
- if (Next > 0 && Next < 4) {
- Next = 4;
- }
-
- if (Next != Previous) {
- PreviousMemoryTypeInformation[Index].NumberOfPages = Next;
- MemoryTypeInformationModified = TRUE;
- }
-
- DEBUG ((EFI_D_INFO, " %02x %08x %08x %08x\n", PreviousMemoryTypeInformation[Index].Type, Previous, Current, Next));
- }
-
- //
- // If any changes were made to the Memory Type Information settings, then set the new variable value;
- // Or create the variable in first boot.
- //
- if (MemoryTypeInformationModified || !MemoryTypeInformationVariableExists) {
- Status = SetVariableAndReportStatusCodeOnError (
- EFI_MEMORY_TYPE_INFORMATION_VARIABLE_NAME,
- &gEfiMemoryTypeInformationGuid,
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
- VariableSize,
- PreviousMemoryTypeInformation
- );
-
- if (!EFI_ERROR (Status)) {
- //
- // If the Memory Type Information settings have been modified, then reset the platform
- // so the new Memory Type Information setting will be used to guarantee that an S4
- // entry/resume cycle will not fail.
- //
- if (MemoryTypeInformationModified && PcdGetBool (PcdResetOnMemoryTypeInformationChange)) {
- DEBUG ((EFI_D_INFO, "Memory Type Information settings change. Warm Reset!!!\n"));
- gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);
- }
- } else {
- DEBUG ((EFI_D_ERROR, "Memory Type Information settings cannot be saved. OS S4 may fail!\n"));
- }
- }
-}
-
-/**
- This routine is kept for backward compatibility.
-**/
-VOID
-EFIAPI
-BdsLibSaveMemoryTypeInformation (
- VOID
- )
-{
-}
-
-
-/**
- Identify a user and, if authenticated, returns the current user profile handle.
-
- @param[out] User Point to user profile handle.
-
- @retval EFI_SUCCESS User is successfully identified, or user identification
- is not supported.
- @retval EFI_ACCESS_DENIED User is not successfully identified
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibUserIdentify (
- OUT EFI_USER_PROFILE_HANDLE *User
- )
-{
- EFI_STATUS Status;
- EFI_USER_MANAGER_PROTOCOL *Manager;
-
- Status = gBS->LocateProtocol (
- &gEfiUserManagerProtocolGuid,
- NULL,
- (VOID **) &Manager
- );
- if (EFI_ERROR (Status)) {
- return EFI_SUCCESS;
- }
-
- return Manager->Identify (Manager, User);
-}
-
-/**
- Set the variable and report the error through status code upon failure.
-
- @param VariableName A Null-terminated string that is the name of the vendor's variable.
- Each VariableName is unique for each VendorGuid. VariableName must
- contain 1 or more characters. If VariableName is an empty string,
- then EFI_INVALID_PARAMETER is returned.
- @param VendorGuid A unique identifier for the vendor.
- @param Attributes Attributes bitmask to set for the variable.
- @param DataSize The size in bytes of the Data buffer. Unless the EFI_VARIABLE_APPEND_WRITE,
- EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, or
- EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute is set, a size of zero
- causes the variable to be deleted. When the EFI_VARIABLE_APPEND_WRITE attribute is
- set, then a SetVariable() call with a DataSize of zero will not cause any change to
- the variable value (the timestamp associated with the variable may be updated however
- even if no new data value is provided,see the description of the
- EFI_VARIABLE_AUTHENTICATION_2 descriptor below. In this case the DataSize will not
- be zero since the EFI_VARIABLE_AUTHENTICATION_2 descriptor will be populated).
- @param Data The contents for the variable.
-
- @retval EFI_SUCCESS The firmware has successfully stored the variable and its data as
- defined by the Attributes.
- @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits, name, and GUID was supplied, or the
- DataSize exceeds the maximum allowed.
- @retval EFI_INVALID_PARAMETER VariableName is an empty string.
- @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data.
- @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.
- @retval EFI_WRITE_PROTECTED The variable in question is read-only.
- @retval EFI_WRITE_PROTECTED The variable in question cannot be deleted.
- @retval EFI_SECURITY_VIOLATION The variable could not be written due to EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS
- or EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACESS being set, but the AuthInfo
- does NOT pass the validation check carried out by the firmware.
-
- @retval EFI_NOT_FOUND The variable trying to be updated or deleted was not found.
-**/
-EFI_STATUS
-SetVariableAndReportStatusCodeOnError (
- IN CHAR16 *VariableName,
- IN EFI_GUID *VendorGuid,
- IN UINT32 Attributes,
- IN UINTN DataSize,
- IN VOID *Data
- )
-{
- EFI_STATUS Status;
- EDKII_SET_VARIABLE_STATUS *SetVariableStatus;
- UINTN NameSize;
-
- Status = gRT->SetVariable (
- VariableName,
- VendorGuid,
- Attributes,
- DataSize,
- Data
- );
- if (EFI_ERROR (Status)) {
- NameSize = StrSize (VariableName);
- SetVariableStatus = AllocatePool (sizeof (EDKII_SET_VARIABLE_STATUS) + NameSize + DataSize);
- if (SetVariableStatus != NULL) {
- CopyGuid (&SetVariableStatus->Guid, VendorGuid);
- SetVariableStatus->NameSize = NameSize;
- SetVariableStatus->DataSize = DataSize;
- SetVariableStatus->SetStatus = Status;
- SetVariableStatus->Attributes = Attributes;
- CopyMem (SetVariableStatus + 1, VariableName, NameSize);
- if ((Data != NULL) && (DataSize != 0)) {
- CopyMem (((UINT8 *) (SetVariableStatus + 1)) + NameSize, Data, DataSize);
- }
-
- REPORT_STATUS_CODE_EX (
- EFI_ERROR_CODE,
- PcdGet32 (PcdErrorCodeSetVariable),
- 0,
- NULL,
- &gEdkiiStatusCodeDataTypeVariableGuid,
- SetVariableStatus,
- sizeof (EDKII_SET_VARIABLE_STATUS) + NameSize + DataSize
- );
-
- FreePool (SetVariableStatus);
- }
- }
-
- return Status;
-}
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/DevicePath.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/DevicePath.c
deleted file mode 100644
index a0b9da880d..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/DevicePath.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/** @file
- BDS internal function define the default device path string, it can be
- replaced by platform device path.
-
-Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "InternalBdsLib.h"
-
-/**
- This function converts an input device structure to a Unicode string.
-
- @param DevPath A pointer to the device path structure.
-
- @return A new allocated Unicode string that represents the device path.
-
-**/
-CHAR16 *
-EFIAPI
-DevicePathToStr (
- IN EFI_DEVICE_PATH_PROTOCOL *DevPath
- )
-{
- return ConvertDevicePathToText (DevPath, TRUE, TRUE);
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
deleted file mode 100644
index 795a9de4b8..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
+++ /dev/null
@@ -1,143 +0,0 @@
-## @file
-# General BDS library.
-#
-# General BDS defines and produce general interfaces for platform BDS driver including:
-# 1) BDS boot policy interface;
-# 2) BDS boot device connect interface;
-# 3) BDS Misc interfaces for mainting boot variable, ouput string, etc.
-#
-# Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = GenericBdsLib
- MODULE_UNI_FILE = GenericBdsLib.uni
- FILE_GUID = e405ec31-ccaa-4dd4-83e8-0aec01703f7e
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = GenericBdsLib|DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION
- CONSTRUCTOR = GenericBdsLibConstructor
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- DevicePath.c
- BdsConnect.c
- BdsMisc.c
- BdsConsole.c
- BdsBoot.c
- InternalBdsLib.h
- String.h
- String.c
- GenericBdsStrings.uni
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
- IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
- ShellPkg/ShellPkg.dec
- NetworkPkg/NetworkPkg.dec
-
-[LibraryClasses]
- DevicePathLib
- PeCoffGetEntryPointLib
- BaseLib
- HobLib
- UefiRuntimeServicesTableLib
- DxeServicesTableLib
- MemoryAllocationLib
- UefiLib
- UefiBootServicesTableLib
- BaseMemoryLib
- DebugLib
- PrintLib
- PcdLib
- PerformanceLib
- TimerLib
- DxeServicesLib
- HiiLib
- ReportStatusCodeLib
- NetLib
- BmpSupportLib
-
-[Guids]
- ## SOMETIMES_CONSUMES ## HOB # The hob holding memory type information
- ## SOMETIMES_CONSUMES ## SystemTable # The identifier of memory type information type in system table
- ## SOMETIMES_CONSUMES ## Variable:L"MemoryTypeInformation"
- ## SOMETIMES_PRODUCES ## Variable:L"MemoryTypeInformation"
- gEfiMemoryTypeInformationGuid
- ## SOMETIMES_CONSUMES ## Variable:L"BootXXXX" # Boot option variable
- ## SOMETIMES_PRODUCES ## Variable:L"BootXXXX" # Boot option variable
- ## SOMETIMES_CONSUMES ## Variable:L"DriverXXXX" # Driver load option.
- ## SOMETIMES_PRODUCES ## Variable:L"DriverXXXX" # Driver load option.
- ## SOMETIMES_CONSUMES ## Variable:L"BootNext" # Next Boot Option
- ## SOMETIMES_PRODUCES ## Variable:L"BootNext" # Next Boot Option
- ## SOMETIMES_CONSUMES ## Variable:L"BootOrder" # The boot option array
- ## SOMETIMES_PRODUCES ## Variable:L"BootOrder" # The boot option array
- ## SOMETIMES_CONSUMES ## Variable:L"DriverOrder" # The driver order list
- ## SOMETIMES_CONSUMES ## Variable:L"ConIn" # The device path of console in device
- ## SOMETIMES_PRODUCES ## Variable:L"ConIn" # The device path of console in device
- ## SOMETIMES_CONSUMES ## Variable:L"ConOut" # The device path of console out device
- ## SOMETIMES_PRODUCES ## Variable:L"ConOut" # The device path of console out device
- ## SOMETIMES_CONSUMES ## Variable:L"ErrOut" # The device path of error out device
- ## SOMETIMES_PRODUCES ## Variable:L"ErrOut" # The device path of error out device
- ## SOMETIMES_PRODUCES ## Variable:L"BootCurrent" # The boot option of current boot
- ## SOMETIMES_PRODUCES ## Variable:L"BootNext" # The number of next boot option
- gEfiGlobalVariableGuid
- gEfiFileInfoGuid ## SOMETIMES_CONSUMES ## GUID
- gLastEnumLangGuid ## SOMETIMES_PRODUCES ## Variable:L"LastEnumLang" # Platform language at last time enumeration.
- gHdBootDevicePathVariablGuid ## SOMETIMES_PRODUCES ## Variable:L"HDDP" # The device path of Boot file on Hard device.
- gBdsLibStringPackageGuid ## CONSUMES ## HII # HII String PackageList Guid
- ## SOMETIMES_PRODUCES ## Variable:L"LegacyDevOrder"
- ## SOMETIMES_CONSUMES ## Variable:L"LegacyDevOrder"
- gEfiLegacyDevOrderVariableGuid
- gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID
- gUefiShellFileGuid
-
-[Protocols]
- gEfiSimpleFileSystemProtocolGuid ## SOMETIMES_CONSUMES
- gEfiLoadFileProtocolGuid ## SOMETIMES_CONSUMES
- gEfiSimpleTextOutProtocolGuid ## CONSUMES
- gEfiPciIoProtocolGuid ## SOMETIMES_CONSUMES
- gEfiLoadedImageProtocolGuid ## SOMETIMES_CONSUMES
- gEfiSimpleNetworkProtocolGuid ## SOMETIMES_CONSUMES
- gEfiDebugPortProtocolGuid ## SOMETIMES_CONSUMES
- gEfiSimpleTextInProtocolGuid ## CONSUMES
- gEfiBlockIoProtocolGuid ## SOMETIMES_CONSUMES
- gEfiFirmwareVolume2ProtocolGuid ## SOMETIMES_CONSUMES
- gEfiLegacyBiosProtocolGuid ## SOMETIMES_CONSUMES
- gEfiCpuArchProtocolGuid ## CONSUMES
- gEfiDevicePathProtocolGuid ## CONSUMES
- gEfiAcpiS3SaveProtocolGuid ## SOMETIMES_CONSUMES
- gEfiGraphicsOutputProtocolGuid ## SOMETIMES_CONSUMES
- gEfiUgaDrawProtocolGuid |gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport ## SOMETIMES_CONSUMES
- gEfiOEMBadgingProtocolGuid ## SOMETIMES_CONSUMES
- gEfiHiiFontProtocolGuid ## CONSUMES
- gEfiUserManagerProtocolGuid ## SOMETIMES_CONSUMES
- gEfiUsbIoProtocolGuid ## SOMETIMES_CONSUMES
- gEfiBootLogoProtocolGuid ## SOMETIMES_CONSUMES
-
-[FeaturePcd]
- gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport ## CONSUMES
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootlogoOnlyEnable ## CONSUMES
-
-[Pcd]
- gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange ## SOMETIMES_CONSUMES
- gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeOsLoaderLoad ## SOMETIMES_CONSUMES
- gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeOsLoaderStart ## SOMETIMES_CONSUMES
- gEfiMdeModulePkgTokenSpaceGuid.PcdErrorCodeSetVariable ## CONSUMES
- gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed ## CONSUMES
-
-#
-# [BootMode]
-# RECOVERY_FULL ## SOMETIMES_CONSUMES # Memory Type Information variable
-#
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.uni b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.uni
deleted file mode 100644
index c853d3409e..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.uni
+++ /dev/null
@@ -1,19 +0,0 @@
-// /** @file
-// General BDS library.
-//
-// General BDS defines and produce general interfaces for platform BDS driver including:
-// 1) BDS boot policy interface;
-// 2) BDS boot device connect interface;
-// 3) BDS Misc interfaces for mainting boot variable, ouput string, etc.
-//
-// Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT #language en-US "General BDS library"
-
-#string STR_MODULE_DESCRIPTION #language en-US "General BDS defines and produces general interfaces for a platform BDS driver including: 1) BDS boot policy interface; 2) BDS boot device connect interface; 3) BDS Misc interfaces for maintaining boot variable, output string, etc."
-
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsStrings.uni b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsStrings.uni
deleted file mode 100644
index 59a75e548b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsStrings.uni
+++ /dev/null
@@ -1,30 +0,0 @@
-///** @file
-//
-// String definitions for Boot Option description.
-//
-// Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-//**/
-
-/=#
-
-#langdef en-US "English"
-#langdef fr-FR "Français"
-
-#string STR_DESCRIPTION_FLOPPY #language en-US "EFI Floppy"
- #language fr-FR "fr-FR: EFI Floppy"
-#string STR_DESCRIPTION_CD_DVD #language en-US "EFI DVD/CDROM"
- #language fr-FR "fr-FR: EFI DVD/CDROM"
-#string STR_DESCRIPTION_HARDDRIVE #language en-US "EFI Hard Drive"
- #language fr-FR "fr-FR: EFI Hard Drive"
-#string STR_DESCRIPTION_USB #language en-US "EFI USB Device"
- #language fr-FR "fr-FR: EFI USB Device"
-#string STR_DESCRIPTION_SCSI #language en-US "EFI SCSI Device"
- #language fr-FR "fr-FR: EFI SCSI Device"
-#string STR_DESCRIPTION_MISC #language en-US "EFI Misc Device"
- #language fr-FR "fr-FR: EFI Misc Device"
-#string STR_DESCRIPTION_NETWORK #language en-US "EFI Network "
- #language fr-FR "fr-FR: EFI Network "
-#string STR_DESCRIPTION_NON_BLOCK #language en-US "EFI Non-Block Boot Device"
- #language fr-FR "fr-FR: EFI Non-Block Boot Device"
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h
deleted file mode 100644
index 025f06572b..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/** @file
- BDS library definition, include the file and data structure
-
-Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef _INTERNAL_BDS_LIB_H_
-#define _INTERNAL_BDS_LIB_H_
-
-#include <FrameworkDxe.h>
-
-#include <IndustryStandard/Pci.h>
-#include <IndustryStandard/PeImage.h>
-
-#include <Protocol/BlockIo.h>
-#include <Protocol/LoadedImage.h>
-#include <Protocol/Cpu.h>
-#include <Protocol/SimpleFileSystem.h>
-#include <Protocol/LoadFile.h>
-#include <Protocol/DebugPort.h>
-#include <Protocol/DevicePath.h>
-#include <Protocol/SimpleTextIn.h>
-#include <Protocol/LegacyBios.h>
-#include <Protocol/SimpleTextOut.h>
-#include <Protocol/SimpleNetwork.h>
-#include <Protocol/FirmwareVolume2.h>
-#include <Protocol/PciIo.h>
-#include <Protocol/AcpiS3Save.h>
-#include <Protocol/OEMBadging.h>
-#include <Protocol/GraphicsOutput.h>
-#include <Protocol/UgaDraw.h>
-#include <Protocol/HiiFont.h>
-#include <Protocol/HiiImage.h>
-#include <Protocol/UsbIo.h>
-#include <Protocol/BootLogo.h>
-
-#include <Guid/MemoryTypeInformation.h>
-#include <Guid/FileInfo.h>
-#include <Guid/GlobalVariable.h>
-#include <Guid/PcAnsi.h>
-#include <Guid/BdsLibHii.h>
-#include <Guid/HdBootVariable.h>
-#include <Guid/LastEnumLang.h>
-#include <Guid/LegacyDevOrder.h>
-#include <Guid/StatusCodeDataTypeVariable.h>
-
-#include <Library/PrintLib.h>
-#include <Library/DebugLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/DxeServicesTableLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/HobLib.h>
-#include <Library/BaseLib.h>
-#include <Library/DevicePathLib.h>
-#include <Library/PerformanceLib.h>
-#include <Library/PcdLib.h>
-#include <Library/PeCoffGetEntryPointLib.h>
-#include <Library/GenericBdsLib.h>
-#include <Library/TimerLib.h>
-#include <Library/PcdLib.h>
-#include <Library/DxeServicesLib.h>
-#include <Library/ReportStatusCodeLib.h>
-#include <Library/BmpSupportLib.h>
-
-#if !defined (EFI_REMOVABLE_MEDIA_FILE_NAME)
- #if defined (MDE_CPU_EBC)
- //
- // Uefi specification only defines the default boot file name for IA32, X64
- // and IPF processor, so need define boot file name for EBC architecture here.
- //
- #define EFI_REMOVABLE_MEDIA_FILE_NAME L"\\EFI\\BOOT\\BOOTEBC.EFI"
- #else
- #error "Can not determine the default boot file name for unknown processor type!"
- #endif
-#endif
-
-/**
- Get the headers (dos, image, optional header) from an image
-
- @param Device SimpleFileSystem device handle
- @param FileName File name for the image
- @param DosHeader Pointer to dos header
- @param Hdr The buffer in which to return the PE32, PE32+, or TE header.
-
- @retval EFI_SUCCESS Successfully get the machine type.
- @retval EFI_NOT_FOUND The file is not found.
- @retval EFI_LOAD_ERROR File is not a valid image file.
-
-**/
-EFI_STATUS
-EFIAPI
-BdsLibGetImageHeader (
- IN EFI_HANDLE Device,
- IN CHAR16 *FileName,
- OUT EFI_IMAGE_DOS_HEADER *DosHeader,
- OUT EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr
- );
-
-/**
- This routine adjust the memory information for different memory type and
- save them into the variables for next boot.
-**/
-VOID
-BdsSetMemoryTypeInformationVariable (
- VOID
- );
-
-/**
- Validate the EFI Boot#### or Driver#### variable (VendorGuid/Name)
-
- @param Variable Boot#### variable data.
- @param VariableSize Returns the size of the EFI variable that was read
-
- @retval TRUE The variable data is correct.
- @retval FALSE The variable data is corrupted.
-
-**/
-BOOLEAN
-ValidateOption (
- UINT8 *Variable,
- UINTN VariableSize
- );
-
-/**
- Set the variable and report the error through status code upon failure.
-
- @param VariableName A Null-terminated string that is the name of the vendor's variable.
- Each VariableName is unique for each VendorGuid. VariableName must
- contain 1 or more characters. If VariableName is an empty string,
- then EFI_INVALID_PARAMETER is returned.
- @param VendorGuid A unique identifier for the vendor.
- @param Attributes Attributes bitmask to set for the variable.
- @param DataSize The size in bytes of the Data buffer. Unless the EFI_VARIABLE_APPEND_WRITE,
- EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, or
- EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute is set, a size of zero
- causes the variable to be deleted. When the EFI_VARIABLE_APPEND_WRITE attribute is
- set, then a SetVariable() call with a DataSize of zero will not cause any change to
- the variable value (the timestamp associated with the variable may be updated however
- even if no new data value is provided,see the description of the
- EFI_VARIABLE_AUTHENTICATION_2 descriptor below. In this case the DataSize will not
- be zero since the EFI_VARIABLE_AUTHENTICATION_2 descriptor will be populated).
- @param Data The contents for the variable.
-
- @retval EFI_SUCCESS The firmware has successfully stored the variable and its data as
- defined by the Attributes.
- @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits, name, and GUID was supplied, or the
- DataSize exceeds the maximum allowed.
- @retval EFI_INVALID_PARAMETER VariableName is an empty string.
- @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data.
- @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.
- @retval EFI_WRITE_PROTECTED The variable in question is read-only.
- @retval EFI_WRITE_PROTECTED The variable in question cannot be deleted.
- @retval EFI_SECURITY_VIOLATION The variable could not be written due to EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS
- or EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACESS being set, but the AuthInfo
- does NOT pass the validation check carried out by the firmware.
-
- @retval EFI_NOT_FOUND The variable trying to be updated or deleted was not found.
-**/
-EFI_STATUS
-SetVariableAndReportStatusCodeOnError (
- IN CHAR16 *VariableName,
- IN EFI_GUID *VendorGuid,
- IN UINT32 Attributes,
- IN UINTN DataSize,
- IN VOID *Data
- );
-
-#endif // _BDS_LIB_H_
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.c b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.c
deleted file mode 100644
index f36860d5a1..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/** @file
- String support
-
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-#include "String.h"
-
-/**
- Get string by string id from HII Interface
-
-
- @param Id String ID.
-
- @retval CHAR16 * String from ID.
- @retval NULL If error occurs.
-
-**/
-CHAR16 *
-BdsLibGetStringById (
- IN EFI_STRING_ID Id
- )
-{
- return HiiGetString (gBdsLibStringPackHandle, Id, NULL);
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.h b/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.h
deleted file mode 100644
index 53cabe64a9..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/** @file
- String support
-
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef _STRING_H_
-#define _STRING_H_
-
-#include <Library/HiiLib.h>
-#include <Library/DebugLib.h>
-#include <Library/DevicePathLib.h>
-#include <Library/UefiLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-
-extern EFI_HII_HANDLE gBdsLibStringPackHandle;
-
-//
-// This is the VFR compiler generated header file which defines the
-// string identifiers.
-//
-
-extern UINT8 GenericBdsLibStrings[];
-
-/**
- Get string by string id from HII Interface
-
-
- @param Id String ID.
-
- @retval CHAR16 * String from ID.
- @retval NULL If error occurs.
-
-**/
-CHAR16 *
-BdsLibGetStringById (
- IN EFI_STRING_ID Id
- );
-
-#endif // _STRING_H_
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index 15a4251cf8..b0fbbdb9cb 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -9,12 +9,10 @@
#**/
[Defines]
-DEFINE FLASH_BASE = 0xFF800000 #The base address of the 4Mb FLASH Device.
-DEFINE FLASH_SIZE = 0x00800000 #The flash size in bytes of the 4Mb FLASH Device.
-DEFINE FLASH_BLOCK_SIZE = 0x1000 #The block size in bytes of the 4Mb FLASH Device.
-DEFINE FLASH_NUM_BLOCKS = 0x800 #The number of blocks in 4Mb FLASH Device.
-DEFINE FLASH_AREA_BASE_ADDRESS = 0xFF800000
-DEFINE FLASH_AREA_SIZE = 0x00800000
+DEFINE FLASH_BASE = 0xFF800000 #The base address of the 8Mb FLASH Device.
+DEFINE FLASH_SIZE = 0x00800000 #The flash size in bytes of the 8Mb FLASH Device.
+DEFINE FLASH_BLOCK_SIZE = 0x1000 #The block size in bytes of the 8Mb FLASH Device.
+DEFINE FLASH_NUM_BLOCKS = 0x800 #The number of blocks in 8Mb FLASH Device.
DEFINE FLASH_REGION_VLVMICROCODE_OFFSET = 0x00400000
DEFINE FLASH_REGION_VLVMICROCODE_SIZE = 0x00040000
@@ -62,8 +60,11 @@ [FD.Vlv]
#
#Flash location override based on actual flash map
#
-SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaBaseAddress = $(FLASH_AREA_BASE_ADDRESS)
-SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaSize = $(FLASH_AREA_SIZE)
+SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaBaseAddress = $(FLASH_BASE)
+SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaSize = $(FLASH_SIZE)
+
+SET gPlatformModuleTokenSpaceGuid.PcdBiosRomBase = $(FLASH_BASE)
+SET gPlatformModuleTokenSpaceGuid.PcdBiosRomSize = $(FLASH_SIZE)
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE) + 0x60
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE) - 0x60
@@ -401,12 +402,9 @@ [FV.FVMAIN]
INF UefiCpuPkg/CpuDxe/CpuDxe.inf
INF UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
INF MdeModulePkg/Universal/Metronome/Metronome.inf
-INF IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
-!if $(ARCH) == IA32
-INF USE=IA32 MdeModulePkg/Logo/Logo.inf
-!else
-INF USE=X64 MdeModulePkg/Logo/Logo.inf
-!endif
+INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
+INF MdeModulePkg/Logo/LogoDxe.inf
+INF MdeModulePkg/Application/UiApp/UiApp.inf
INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index b8ac61d710..107c160b76 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -9,34 +9,32 @@
#**/
[Defines]
-DEFINE FLASH_BASE = 0xFFC00000 #The base address of the 4Mb FLASH Device.
-DEFINE FLASH_SIZE = 0x00400000 #The flash size in bytes of the 4Mb FLASH Device.
-DEFINE FLASH_BLOCK_SIZE = 0x1000 #The block size in bytes of the 4Mb FLASH Device.
-DEFINE FLASH_NUM_BLOCKS = 0x400 #The number of blocks in 4Mb FLASH Device.
-DEFINE FLASH_AREA_BASE_ADDRESS = 0xFF800000
-DEFINE FLASH_AREA_SIZE = 0x00800000
+DEFINE FLASH_BASE = 0xFF800000 #The base address of the 8Mb FLASH Device.
+DEFINE FLASH_SIZE = 0x00800000 #The flash size in bytes of the 8Mb FLASH Device.
+DEFINE FLASH_BLOCK_SIZE = 0x1000 #The block size in bytes of the 8Mb FLASH Device.
+DEFINE FLASH_NUM_BLOCKS = 0x800 #The number of blocks in 8Mb FLASH Device.
-DEFINE FLASH_REGION_VLVMICROCODE_OFFSET = 0x00000000
+DEFINE FLASH_REGION_VLVMICROCODE_OFFSET = 0x00400000
DEFINE FLASH_REGION_VLVMICROCODE_SIZE = 0x00040000
DEFINE FLASH_REGION_VLVMICROCODE_BASE = 0xFFC00000
-DEFINE FLASH_REGION_VPD_OFFSET = 0x00040000
+DEFINE FLASH_REGION_VPD_OFFSET = 0x00440000
DEFINE FLASH_REGION_VPD_SIZE = 0x0003E000
-DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_OFFSET = 0x0007E000
+DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_OFFSET = 0x0047E000
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_WORKING_SIZE = 0x00002000
-DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET = 0x00080000
+DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_OFFSET = 0x00480000
DEFINE FLASH_REGION_NVSTORAGE_SUBREGION_NV_FTW_SPARE_SIZE = 0x00040000
-DEFINE FLASH_REGION_FVMAIN_OFFSET = 0x00110000
-DEFINE FLASH_REGION_FVMAIN_SIZE = 0x00215000
+DEFINE FLASH_REGION_FVMAIN_OFFSET = 0x00510000
+DEFINE FLASH_REGION_FVMAIN_SIZE = 0x00210000
-DEFINE FLASH_REGION_FV_RECOVERY2_OFFSET = 0x00325000
-DEFINE FLASH_REGION_FV_RECOVERY2_SIZE = 0x0006B000
+DEFINE FLASH_REGION_FV_RECOVERY2_OFFSET = 0x00720000
+DEFINE FLASH_REGION_FV_RECOVERY2_SIZE = 0x00070000
-DEFINE FLASH_REGION_FV_RECOVERY_OFFSET = 0x00390000
+DEFINE FLASH_REGION_FV_RECOVERY_OFFSET = 0x00790000
DEFINE FLASH_REGION_FV_RECOVERY_SIZE = 0x00070000
################################################################################
@@ -62,8 +60,11 @@ [FD.Vlv]
#
#Flash location override based on actual flash map
#
-SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaBaseAddress = $(FLASH_AREA_BASE_ADDRESS)
-SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaSize = $(FLASH_AREA_SIZE)
+SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaBaseAddress = $(FLASH_BASE)
+SET gPlatformModuleTokenSpaceGuid.PcdFlashAreaSize = $(FLASH_SIZE)
+
+SET gPlatformModuleTokenSpaceGuid.PcdBiosRomBase = $(FLASH_BASE)
+SET gPlatformModuleTokenSpaceGuid.PcdBiosRomSize = $(FLASH_SIZE)
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchAddress = $(FLASH_REGION_VLVMICROCODE_BASE) + 0x60
SET gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize = $(FLASH_REGION_VLVMICROCODE_SIZE) - 0x60
@@ -84,9 +85,12 @@ [FD.Vlv]
# Fv Size can be adjusted; FVMAIN_COMPACT can be reduced to 0x120000, and FV_RECOVERY can be enlarged to 0x80000
#
################################################################################
-# Since the Fce tool don't have gcc version, we can't handle default variable in Linux,
-# so we hardcode the default value of variable here.
-# Please note that we MUST update the binary once the default value is changed.
+
+ #
+ # IFWI Header
+ #
+0x0000|0x1000
+FILE=Vlv2TbltDevicePkg/Stitch/IFWIHeader/IFWI_HEADER.bin
#
# CPU Microcodes
@@ -347,12 +351,9 @@ [FV.FVMAIN]
INF UefiCpuPkg/CpuDxe/CpuDxe.inf
INF UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf
INF MdeModulePkg/Universal/Metronome/Metronome.inf
-INF IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
-!if $(ARCH) == IA32
-INF USE=IA32 MdeModulePkg/Logo/Logo.inf
-!else
-INF USE=X64 MdeModulePkg/Logo/Logo.inf
-!endif
+INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
+INF MdeModulePkg/Logo/LogoDxe.inf
+INF MdeModulePkg/Application/UiApp/UiApp.inf
INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index 3910281c49..e4c6750c70 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -118,7 +118,6 @@ [LibraryClasses.common]
DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
UefiCpuLib|UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib.inf
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
- GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
@@ -523,6 +522,8 @@ [PcdsFixedAtBuild.common]
#
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmStackSize|0x4000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
+
#
# Clear unused single certificate PCD
#
@@ -933,19 +934,18 @@ [Components.X64]
}
MdeModulePkg/Universal/Metronome/Metronome.inf
- IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
+ MdeModulePkg/Universal/BdsDxe/BdsDxe.inf {
<LibraryClasses>
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
+ PlatformBootManagerLib|Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
}
-
- $(PLATFORM_PACKAGE)/UiApp/UiApp.inf
+ MdeModulePkg/Logo/LogoDxe.inf
+ MdeModulePkg/Application/UiApp/UiApp.inf {
+ <LibraryClasses>
+ NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
+ }
MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index 2ae594e5be..f5795e5ab0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -116,7 +116,6 @@ [LibraryClasses.common]
DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
UefiCpuLib|UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib.inf
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
- GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
@@ -520,6 +519,8 @@ [PcdsFixedAtBuild.common]
#
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmStackSize|0x4000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
+
#
# Clear unused single certificate PCD
#
@@ -917,19 +918,18 @@ [Components.IA32]
}
MdeModulePkg/Universal/Metronome/Metronome.inf
- IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
+ MdeModulePkg/Universal/BdsDxe/BdsDxe.inf {
<LibraryClasses>
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
+ PlatformBootManagerLib|Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
}
-
- $(PLATFORM_PACKAGE)/UiApp/UiApp.inf
+ MdeModulePkg/Logo/LogoDxe.inf
+ MdeModulePkg/Application/UiApp/UiApp.inf {
+ <LibraryClasses>
+ NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
+ }
MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index 5cdc9bebc8..a930a85a35 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -118,7 +118,6 @@ [LibraryClasses.common]
DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
UefiCpuLib|UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib.inf
UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
- GenericBdsLib|$(PLATFORM_PACKAGE)/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
FlashDeviceLib|Vlv2TbltDevicePkg/Library/FlashDeviceLib/FlashDeviceLib.inf
@@ -522,6 +521,8 @@ [PcdsFixedAtBuild.common]
#
gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmStackSize|0x4000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
+
#
# Clear unused single certificate PCD
#
@@ -932,19 +933,18 @@ [Components.X64]
}
MdeModulePkg/Universal/Metronome/Metronome.inf
- IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf{
+ MdeModulePkg/Universal/BdsDxe/BdsDxe.inf {
<LibraryClasses>
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
- PlatformBdsLib|$(PLATFORM_PACKAGE)/Library/PlatformBdsLib/PlatformBdsLib.inf
- DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
- PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
- SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
+ PlatformBootManagerLib|Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
Tpm2DeviceLib|SecurityPkg/Library/Tpm2DeviceLibTcg2/Tpm2DeviceLibTcg2.inf
}
-
- $(PLATFORM_PACKAGE)/UiApp/UiApp.inf
+ MdeModulePkg/Logo/LogoDxe.inf
+ MdeModulePkg/Application/UiApp/UiApp.inf {
+ <LibraryClasses>
+ NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
+ NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
+ }
MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c b/Platform/Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c
deleted file mode 100644
index 3e58a6d22a..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/** @file
-
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
-
-
-**/
-
-/**
- The user Entry Point for Application. The user code starts with this function
- as the real entry point for the image goes into a library that calls this
- function.
-
- @param[in] ImageHandle The firmware allocated handle for the EFI image.
- @param[in] SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The entry point is executed successfully.
- @retval other Some error occurs when executing this entry point.
-
-**/
-EFI_STATUS
-EFIAPI
-InitializeUserInterface (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- return EFI_SUCCESS;
-}
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf b/Platform/Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf
deleted file mode 100644
index f7a0a83b80..0000000000
--- a/Platform/Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-#
-# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = UiApp
- FILE_GUID = 462CAA21-7614-4503-836E-8AB6F4662331
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 1.0
- ENTRY_POINT = InitializeUserInterface
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- FrontPage.c
-
-[Packages]
- MdePkg/MdePkg.dec
-
-[LibraryClasses]
- UefiApplicationEntryPoint
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 11/14] Vlv2TbltDevicePkg: Update boot mode/state behaviors
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (9 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 10/14] Vlv2TbltDevicePkg: Switch to MdeModulePkg BdsDxe Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:08 ` [edk2-devel] " Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 12/14] Vlv2TbltDevicePkg/PlatformSmm: Switch to PI SMM Protocols Michael D Kinney
` (3 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
* Add platform specific PcdBootState PCD to remove Intel Framework
dependency
* Set PcdUserPhysicalPresence to TRUE to Enable UEFI Secure Boot
Setup Menus
* Remove unused code when NOCS_S3_SUPPORT is not set
* Update PlatformBootManagerLib to not perform a connect all
when FastBoot is enabled.
* Add support for BOOT_ON_FLASH_UPDATE
* Remove logic in CheckSystemConfigSave() that was generating
an ASSERT() when setup changes were saved.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../DxePlatformBootManagerLib/BdsPlatform.c | 33 ++++++-
.../DxePlatformBootManagerLib.inf | 4 +-
.../PlatformDxe/PlatformDxe.inf | 1 -
.../Vlv2TbltDevicePkg/PlatformPei/BootMode.c | 99 +------------------
.../Vlv2TbltDevicePkg/PlatformPei/Platform.c | 8 --
.../Vlv2TbltDevicePkg/PlatformPei/Platform.h | 27 +----
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 8 ++
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 2 +
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 2 +
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 2 +
.../PlatformSetupDxe/PlatformSetupDxe.inf | 1 -
.../PlatformSetupDxe/SetupInfoRecords.c | 51 ----------
12 files changed, 51 insertions(+), 187 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
index 4dd3827a6e..7fbbf281c6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
@@ -1,7 +1,7 @@
/** @file
This file include all platform action which can be customized by IBV/OEM.
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -1164,7 +1164,7 @@ PlatformBootManagerBeforeConsole (
// Fill ConIn/ConOut in Full Configuration boot mode
//
gBootMode = GetBootModeHob();
- DEBUG ((DEBUG_INFO, "PlatformBootManagerInit - %x\n", gBootMode));
+ DEBUG ((DEBUG_INFO, "PlatformBootManagerBeforeConsole: BootMode = %x\n", gBootMode));
if (gBootMode == BOOT_WITH_FULL_CONFIGURATION ||
gBootMode == BOOT_WITH_DEFAULT_SETTINGS ||
@@ -1263,7 +1263,18 @@ ConnectSequence (
IN EFI_BOOT_MODE BootMode
)
{
- EfiBootManagerConnectAll ();
+ switch (BootMode) {
+ case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES:
+ case BOOT_WITH_MINIMAL_CONFIGURATION:
+ case BOOT_ON_S4_RESUME:
+ break;
+ case BOOT_WITH_FULL_CONFIGURATION:
+ case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS:
+ case BOOT_WITH_DEFAULT_SETTINGS:
+ default:
+ EfiBootManagerConnectAll ();
+ break;
+ }
}
/**
@@ -1311,6 +1322,7 @@ PlatformBootManagerAfterConsole (
VOID
)
{
+ EFI_STATUS Status;
EFI_BOOT_MODE LocalBootMode;
DEBUG ((DEBUG_INFO, "PlatformBootManagerAfterConsole\n"));
@@ -1319,7 +1331,7 @@ PlatformBootManagerAfterConsole (
// Get current Boot Mode
//
LocalBootMode = gBootMode;
- DEBUG ((DEBUG_INFO, "Current local bootmode - %x\n", LocalBootMode));
+ DEBUG ((DEBUG_INFO, "PlatformBootManagerAfterConsole: BootMode = %x\n", gBootMode));
//
// Logo show
@@ -1372,6 +1384,19 @@ PlatformBootManagerAfterConsole (
break;
}
+ //
+ // Use a DynamicHii type pcd to save the boot status, which is used to
+ // control configuration mode, such as FULL/MINIMAL/NO_CHANGES configuration.
+ //
+ DEBUG ((DEBUG_INFO, "PcdBootState = %d\n", PcdGetBool(PcdBootState)));
+ if (PcdGetBool(PcdBootState)) {
+ Status = PcdSetBoolS(PcdBootState, FALSE);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Set PcdBootState to FALSE failed.\n"));
+ }
+ DEBUG ((DEBUG_INFO, "PcdBootState = %d\n", PcdGetBool(PcdBootState)));
+ }
+
Print (L"Press F7 for BootMenu!\n");
EfiBootManagerRefreshAllBootOption ();
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
index b04169ad33..0579a18660 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
@@ -1,7 +1,7 @@
### @file
# Component name for module DxePlatformBootManagerLib
#
-# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -48,6 +48,7 @@ [Packages]
MdeModulePkg/MdeModulePkg.dec
SecurityPkg/SecurityPkg.dec
MinPlatformPkg/MinPlatformPkg.dec
+ Vlv2TbltDevicePkg/PlatformPkg.dec
[Pcd]
gMinPlatformPkgTokenSpaceGuid.PcdTpm2Enable ## CONSUMES
@@ -66,6 +67,7 @@ [Pcd]
gMinPlatformPkgTokenSpaceGuid.PcdTrustedConsoleInputDevicePath ## CONSUMES
gMinPlatformPkgTokenSpaceGuid.PcdTrustedConsoleOutputDevicePath ## CONSUMES
gMinPlatformPkgTokenSpaceGuid.PcdTrustedStorageDevicePath ## CONSUMES
+ gPlatformModuleTokenSpaceGuid.PcdBootState
[Sources]
BdsPlatform.c
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index a9ef744ef7..9fee691365 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -84,7 +84,6 @@ [Guids]
gEfiGlobalVariableGuid
gEfiEventExitBootServicesGuid
gEfiVlv2VariableGuid
- gEfiSecureBootEnableDisableGuid
gEfiEndOfDxeEventGroupGuid
[Protocols]
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
index 9fdcb620a3..5269b1ed39 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -84,6 +82,7 @@ CapsulePpiNotifyCallback (
if (Status == EFI_SUCCESS) {
if (Capsule->CheckCapsuleUpdate ((EFI_PEI_SERVICES**)PeiServices) == EFI_SUCCESS) {
BootMode = BOOT_ON_FLASH_UPDATE;
+ DEBUG ((EFI_D_ERROR, "Setting BootMode to BOOT_ON_FLASH_UPDATE\n"));
Status = (*PeiServices)->SetBootMode((const EFI_PEI_SERVICES **)PeiServices, BootMode);
ASSERT_EFI_ERROR (Status);
}
@@ -93,98 +92,6 @@ CapsulePpiNotifyCallback (
return Status;
}
-#ifdef NOCS_S3_SUPPORT
-EFI_STATUS
-UpdateBootMode (
- IN CONST EFI_PEI_SERVICES **PeiServices
- )
-{
- EFI_STATUS Status;
- EFI_BOOT_MODE BootMode;
- UINT16 SleepType;
- CHAR16 *strBootMode;
-
- Status = (*PeiServices)->GetBootMode(PeiServices, &BootMode);
- ASSERT_EFI_ERROR (Status);
- if (BootMode == BOOT_IN_RECOVERY_MODE){
- return Status;
- }
-
- //
- // Let's assume things are OK if not told otherwise
- //
- BootMode = BOOT_WITH_FULL_CONFIGURATION;
-
- if (GetSleepTypeAfterWakeup (PeiServices, &SleepType)) {
- switch (SleepType) {
- case V_PCH_ACPI_PM1_CNT_S3:
- BootMode = BOOT_ON_S3_RESUME;
- Status = (*PeiServices)->NotifyPpi (PeiServices, &mCapsuleNotifyList[0]);
- ASSERT_EFI_ERROR (Status);
- break;
-
- case V_PCH_ACPI_PM1_CNT_S4:
- BootMode = BOOT_ON_S4_RESUME;
- break;
-
- case V_PCH_ACPI_PM1_CNT_S5:
- BootMode = BOOT_ON_S5_RESUME;
- break;
- } // switch (SleepType)
- }
-
- if (IsFastBootEnabled (PeiServices)) {
- DEBUG ((EFI_D_INFO, "Prioritizing Boot mode to BOOT_WITH_MINIMAL_CONFIGURATION\n"));
- PrioritizeBootMode (&BootMode, BOOT_WITH_MINIMAL_CONFIGURATION);
- }
-
- switch (BootMode) {
- case BOOT_WITH_FULL_CONFIGURATION:
- strBootMode = L"BOOT_WITH_FULL_CONFIGURATION";
- break;
- case BOOT_WITH_MINIMAL_CONFIGURATION:
- strBootMode = L"BOOT_WITH_MINIMAL_CONFIGURATION";
- break;
- case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES:
- strBootMode = L"BOOT_ASSUMING_NO_CONFIGURATION_CHANGES";
- break;
- case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS:
- strBootMode = L"BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS";
- break;
- case BOOT_WITH_DEFAULT_SETTINGS:
- strBootMode = L"BOOT_WITH_DEFAULT_SETTINGS";
- break;
- case BOOT_ON_S4_RESUME:
- strBootMode = L"BOOT_ON_S4_RESUME";
- break;
- case BOOT_ON_S5_RESUME:
- strBootMode = L"BOOT_ON_S5_RESUME";
- break;
- case BOOT_ON_S2_RESUME:
- strBootMode = L"BOOT_ON_S2_RESUME";
- break;
- case BOOT_ON_S3_RESUME:
- strBootMode = L"BOOT_ON_S3_RESUME";
-
- break;
- case BOOT_ON_FLASH_UPDATE:
- strBootMode = L"BOOT_ON_FLASH_UPDATE";
- break;
- case BOOT_IN_RECOVERY_MODE:
- strBootMode = L"BOOT_IN_RECOVERY_MODE";
- break;
- default:
- strBootMode = L"Unknown boot mode";
- } // switch (BootMode)
-
- DEBUG ((EFI_D_ERROR, "Setting BootMode to %s\n", strBootMode));
- Status = (*PeiServices)->SetBootMode(PeiServices, BootMode);
- ASSERT_EFI_ERROR (Status);
-
- return Status;
-}
-#endif
-
/**
Get sleep type after wakeup
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
index aa03f6ea95..90998871dc 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
@@ -813,14 +813,6 @@ PeiInitPlatform (
sizeof (EFI_PLATFORM_INFO_HOB)
);
- //
- // Set the new boot mode for MRC
- //
-#ifdef NOCS_S3_SUPPORT
- Status = UpdateBootMode (PeiServices);
- ASSERT_EFI_ERROR (Status);
-#endif
-
DEBUG((EFI_D_INFO, "Setup MMIO size ... \n\n"));
//
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h
index e1817b28c6..4f71e519e0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h
@@ -1,12 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
**/
@@ -24,26 +21,6 @@ typedef struct {
#define STALL_PEIM_FROM_THIS(a) CR (a, STALL_CALLBACK_STATE_INFORMATION, StallNotify, STALL_PEIM_SIGNATURE)
-#ifdef NOCS_S3_SUPPORT
-
-/**
- Peform the boot mode determination logic
- If the box is closed, then
- 1. If it's first time to boot, it's boot with full config .
- 2. If the ChassisIntrution is selected, force to be a boot with full config
- 3. Otherwise it's boot with no change.
-
- @param PeiServices General purpose services available to every PEIM.
- @param BootMode The detected boot mode.
-
- @retval EFI_SUCCESS if the boot mode could be set
-**/
-EFI_STATUS
-UpdateBootMode (
- IN CONST EFI_PEI_SERVICES **PeiServices
- );
-#endif
-
/**
This function reset the entire platform, including all processor and devices, and
reboots the system.
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index 5b255f4b05..a5c7062cbb 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -161,6 +161,14 @@ [PcdsDynamic,PcdsDynamicEx]
gPlatformModuleTokenSpaceGuid.PcdInConfigMode|FALSE|BOOLEAN|0x80000001
gPlatformModuleTokenSpaceGuid.PcdConnectUSBKeyboardonWaitForKeyStroke|FALSE|BOOLEAN|0x80000002
gPlatformModuleTokenSpaceGuid.PcdEnableWatchdogSwSmiInputValue|0|UINT8|0x80000003
+
+ ## Indicates if the machine has completed one boot cycle before.
+ # After the complete boot, BootState will be set to FALSE.<BR><BR>
+ # TRUE - The complete boot cycle has not happened before.<BR>
+ # FALSE - The complete boot cycle has happened before.<BR>
+ # @Prompt Boot State Flag
+ gPlatformModuleTokenSpaceGuid.PcdBootState|TRUE|BOOLEAN|0x80000004
+
#
#device firmware update support
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index e4c6750c70..2123745ccd 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -680,6 +680,7 @@ [PcdsPatchableInModule.common]
[PcdsDynamicHii.common.DEFAULT]
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|5 # Variable: L"Timeout"
gEfiMdePkgTokenSpaceGuid.PcdHardwareErrorRecordLevel|L"HwErrRecSupport"|gEfiGlobalVariableGuid|0x0|1 # Variable: L"HwErrRecSupport"
+ gPlatformModuleTokenSpaceGuid.PcdBootState|L"BootState"|gPlatformModuleTokenSpaceGuid|0x0|TRUE
[PcdsDynamicDefault.common.DEFAULT]
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0x0
@@ -733,6 +734,7 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
+ gEfiSecurityPkgTokenSpaceGuid.PcdUserPhysicalPresence|TRUE
[PcdsDynamicExDefault.X64.DEFAULT]
!if $(RECOVERY_ENABLE)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index f5795e5ab0..086668d570 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -677,6 +677,7 @@ [PcdsPatchableInModule.common]
[PcdsDynamicHii.common.DEFAULT]
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|5 # Variable: L"Timeout"
gEfiMdePkgTokenSpaceGuid.PcdHardwareErrorRecordLevel|L"HwErrRecSupport"|gEfiGlobalVariableGuid|0x0|1 # Variable: L"HwErrRecSupport"
+ gPlatformModuleTokenSpaceGuid.PcdBootState|L"BootState"|gPlatformModuleTokenSpaceGuid|0x0|TRUE
[PcdsDynamicDefault.common.DEFAULT]
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0x0
@@ -730,6 +731,7 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
+ gEfiSecurityPkgTokenSpaceGuid.PcdUserPhysicalPresence|TRUE
[PcdsDynamicExDefault.X64.DEFAULT]
!if $(RECOVERY_ENABLE)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index a930a85a35..5f2dd65ec8 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -679,6 +679,7 @@ [PcdsPatchableInModule.common]
[PcdsDynamicHii.common.DEFAULT]
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|5 # Variable: L"Timeout"
gEfiMdePkgTokenSpaceGuid.PcdHardwareErrorRecordLevel|L"HwErrRecSupport"|gEfiGlobalVariableGuid|0x0|1 # Variable: L"HwErrRecSupport"
+ gPlatformModuleTokenSpaceGuid.PcdBootState|L"BootState"|gPlatformModuleTokenSpaceGuid|0x0|TRUE
[PcdsDynamicDefault.common.DEFAULT]
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0x0
@@ -732,6 +733,7 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
+ gEfiSecurityPkgTokenSpaceGuid.PcdUserPhysicalPresence|TRUE
[PcdsDynamicExDefault.X64.DEFAULT]
!if $(RECOVERY_ENABLE)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
index b745574421..85e8b1e8d6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
@@ -93,7 +93,6 @@ [Guids]
gEfiIfrTianoGuid ## CONSUMES ## Guid
gEfiPlatformInfoGuid
gEfiNormalSetupGuid
- gEfiSecureBootEnableDisableGuid
gOsSelectionVariableGuid
gEfiGlobalVariableGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
index efd4a723e1..be99356d0f 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
@@ -1448,60 +1448,9 @@ CheckSystemConfigLoad(SYSTEM_CONFIGURATION *SystemConfigPtr)
}
}
-
-//
-// "SecureBootEnable" variable for the Secure boot feature enable/disable.
-//
-#define EFI_SECURE_BOOT_ENABLE_NAME L"SecureBootEnable"
-extern EFI_GUID gEfiSecureBootEnableDisableGuid;
-
-
VOID
CheckSystemConfigSave(SYSTEM_CONFIGURATION *SystemConfigPtr)
{
- EFI_STATUS Status;
- UINT8 SecureBootCfg;
- BOOLEAN SecureBootNotFound;
- UINTN DataSize;
-
-
- //
- // Secure Boot configuration changes
- //
- DataSize = sizeof(SecureBootCfg);
- SecureBootNotFound = FALSE;
- Status = gRT->GetVariable (
- EFI_SECURE_BOOT_ENABLE_NAME,
- &gEfiSecureBootEnableDisableGuid,
- NULL,
- &DataSize,
- &SecureBootCfg
- );
-
- if (EFI_ERROR(Status)) {
- SecureBootNotFound = TRUE;
- }
- if (SecureBootNotFound) {
- Status = gRT->GetVariable (
- EFI_SECURE_BOOT_ENABLE_NAME,
- &gEfiSecureBootEnableDisableGuid,
- NULL,
- &DataSize,
- &SecureBootCfg
- );
- ASSERT_EFI_ERROR(Status);
- }
- if ((SecureBootCfg) != SystemConfigPtr->SecureBoot) {
- SecureBootCfg = !SecureBootCfg;
- Status = gRT->SetVariable (
- EFI_SECURE_BOOT_ENABLE_NAME,
- &gEfiSecureBootEnableDisableGuid,
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
- sizeof (UINT8),
- &SecureBootCfg
- );
- }
-
}
VOID
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 11/14] Vlv2TbltDevicePkg: Update boot mode/state behaviors
2019-07-01 2:55 ` [edk2-platforms Patch 11/14] Vlv2TbltDevicePkg: Update boot mode/state behaviors Michael D Kinney
@ 2019-07-01 4:08 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:08 UTC (permalink / raw)
To: devel@edk2.groups.io, Kinney, Michael D; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Michael D Kinney
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-devel] [edk2-platforms Patch 11/14] Vlv2TbltDevicePkg: Update boot mode/state behaviors
* Add platform specific PcdBootState PCD to remove Intel Framework
dependency
* Set PcdUserPhysicalPresence to TRUE to Enable UEFI Secure Boot
Setup Menus
* Remove unused code when NOCS_S3_SUPPORT is not set
* Update PlatformBootManagerLib to not perform a connect all
when FastBoot is enabled.
* Add support for BOOT_ON_FLASH_UPDATE
* Remove logic in CheckSystemConfigSave() that was generating
an ASSERT() when setup changes were saved.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../DxePlatformBootManagerLib/BdsPlatform.c | 33 ++++++-
.../DxePlatformBootManagerLib.inf | 4 +-
.../PlatformDxe/PlatformDxe.inf | 1 -
.../Vlv2TbltDevicePkg/PlatformPei/BootMode.c | 99 +------------------ .../Vlv2TbltDevicePkg/PlatformPei/Platform.c | 8 -- .../Vlv2TbltDevicePkg/PlatformPei/Platform.h | 27 +----
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 8 ++
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 2 +
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 2 +
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 2 +
.../PlatformSetupDxe/PlatformSetupDxe.inf | 1 -
.../PlatformSetupDxe/SetupInfoRecords.c | 51 ----------
12 files changed, 51 insertions(+), 187 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
index 4dd3827a6e..7fbbf281c6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib
+++ /BdsPlatform.c
@@ -1,7 +1,7 @@
/** @file
This file include all platform action which can be customized by IBV/OEM.
-Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -1164,7 +1164,7 @@ PlatformBootManagerBeforeConsole (
// Fill ConIn/ConOut in Full Configuration boot mode
//
gBootMode = GetBootModeHob();
- DEBUG ((DEBUG_INFO, "PlatformBootManagerInit - %x\n", gBootMode));
+ DEBUG ((DEBUG_INFO, "PlatformBootManagerBeforeConsole: BootMode =
+ %x\n", gBootMode));
if (gBootMode == BOOT_WITH_FULL_CONFIGURATION ||
gBootMode == BOOT_WITH_DEFAULT_SETTINGS || @@ -1263,7 +1263,18 @@ ConnectSequence (
IN EFI_BOOT_MODE BootMode
)
{
- EfiBootManagerConnectAll ();
+ switch (BootMode) {
+ case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES:
+ case BOOT_WITH_MINIMAL_CONFIGURATION:
+ case BOOT_ON_S4_RESUME:
+ break;
+ case BOOT_WITH_FULL_CONFIGURATION:
+ case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS:
+ case BOOT_WITH_DEFAULT_SETTINGS:
+ default:
+ EfiBootManagerConnectAll ();
+ break;
+ }
}
/**
@@ -1311,6 +1322,7 @@ PlatformBootManagerAfterConsole (
VOID
)
{
+ EFI_STATUS Status;
EFI_BOOT_MODE LocalBootMode;
DEBUG ((DEBUG_INFO, "PlatformBootManagerAfterConsole\n"));
@@ -1319,7 +1331,7 @@ PlatformBootManagerAfterConsole (
// Get current Boot Mode
//
LocalBootMode = gBootMode;
- DEBUG ((DEBUG_INFO, "Current local bootmode - %x\n", LocalBootMode));
+ DEBUG ((DEBUG_INFO, "PlatformBootManagerAfterConsole: BootMode =
+ %x\n", gBootMode));
//
// Logo show
@@ -1372,6 +1384,19 @@ PlatformBootManagerAfterConsole (
break;
}
+ //
+ // Use a DynamicHii type pcd to save the boot status, which is used
+ to // control configuration mode, such as FULL/MINIMAL/NO_CHANGES configuration.
+ //
+ DEBUG ((DEBUG_INFO, "PcdBootState = %d\n",
+ PcdGetBool(PcdBootState))); if (PcdGetBool(PcdBootState)) {
+ Status = PcdSetBoolS(PcdBootState, FALSE);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Set PcdBootState to FALSE failed.\n"));
+ }
+ DEBUG ((DEBUG_INFO, "PcdBootState = %d\n",
+ PcdGetBool(PcdBootState))); }
+
Print (L"Press F7 for BootMenu!\n");
EfiBootManagerRefreshAllBootOption (); diff --git a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
index b04169ad33..0579a18660 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib
+++ /DxePlatformBootManagerLib.inf
@@ -1,7 +1,7 @@
### @file
# Component name for module DxePlatformBootManagerLib # -# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2017 - 2019, Intel Corporation. All rights
+reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -48,6 +48,7 @@ [Packages]
MdeModulePkg/MdeModulePkg.dec
SecurityPkg/SecurityPkg.dec
MinPlatformPkg/MinPlatformPkg.dec
+ Vlv2TbltDevicePkg/PlatformPkg.dec
[Pcd]
gMinPlatformPkgTokenSpaceGuid.PcdTpm2Enable ## CONSUMES
@@ -66,6 +67,7 @@ [Pcd]
gMinPlatformPkgTokenSpaceGuid.PcdTrustedConsoleInputDevicePath ## CONSUMES
gMinPlatformPkgTokenSpaceGuid.PcdTrustedConsoleOutputDevicePath ## CONSUMES
gMinPlatformPkgTokenSpaceGuid.PcdTrustedStorageDevicePath ## CONSUMES
+ gPlatformModuleTokenSpaceGuid.PcdBootState
[Sources]
BdsPlatform.c
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
index a9ef744ef7..9fee691365 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.inf
@@ -84,7 +84,6 @@ [Guids]
gEfiGlobalVariableGuid
gEfiEventExitBootServicesGuid
gEfiVlv2VariableGuid
- gEfiSecureBootEnableDisableGuid
gEfiEndOfDxeEventGroupGuid
[Protocols]
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
index 9fdcb620a3..5269b1ed39 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights
+ reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -84,6 +82,7 @@ CapsulePpiNotifyCallback (
if (Status == EFI_SUCCESS) {
if (Capsule->CheckCapsuleUpdate ((EFI_PEI_SERVICES**)PeiServices) == EFI_SUCCESS) {
BootMode = BOOT_ON_FLASH_UPDATE;
+ DEBUG ((EFI_D_ERROR, "Setting BootMode to
+ BOOT_ON_FLASH_UPDATE\n"));
Status = (*PeiServices)->SetBootMode((const EFI_PEI_SERVICES **)PeiServices, BootMode);
ASSERT_EFI_ERROR (Status);
}
@@ -93,98 +92,6 @@ CapsulePpiNotifyCallback (
return Status;
}
-#ifdef NOCS_S3_SUPPORT
-EFI_STATUS
-UpdateBootMode (
- IN CONST EFI_PEI_SERVICES **PeiServices
- )
-{
- EFI_STATUS Status;
- EFI_BOOT_MODE BootMode;
- UINT16 SleepType;
- CHAR16 *strBootMode;
-
- Status = (*PeiServices)->GetBootMode(PeiServices, &BootMode);
- ASSERT_EFI_ERROR (Status);
- if (BootMode == BOOT_IN_RECOVERY_MODE){
- return Status;
- }
-
- //
- // Let's assume things are OK if not told otherwise
- //
- BootMode = BOOT_WITH_FULL_CONFIGURATION;
-
- if (GetSleepTypeAfterWakeup (PeiServices, &SleepType)) {
- switch (SleepType) {
- case V_PCH_ACPI_PM1_CNT_S3:
- BootMode = BOOT_ON_S3_RESUME;
- Status = (*PeiServices)->NotifyPpi (PeiServices, &mCapsuleNotifyList[0]);
- ASSERT_EFI_ERROR (Status);
- break;
-
- case V_PCH_ACPI_PM1_CNT_S4:
- BootMode = BOOT_ON_S4_RESUME;
- break;
-
- case V_PCH_ACPI_PM1_CNT_S5:
- BootMode = BOOT_ON_S5_RESUME;
- break;
- } // switch (SleepType)
- }
-
- if (IsFastBootEnabled (PeiServices)) {
- DEBUG ((EFI_D_INFO, "Prioritizing Boot mode to BOOT_WITH_MINIMAL_CONFIGURATION\n"));
- PrioritizeBootMode (&BootMode, BOOT_WITH_MINIMAL_CONFIGURATION);
- }
-
- switch (BootMode) {
- case BOOT_WITH_FULL_CONFIGURATION:
- strBootMode = L"BOOT_WITH_FULL_CONFIGURATION";
- break;
- case BOOT_WITH_MINIMAL_CONFIGURATION:
- strBootMode = L"BOOT_WITH_MINIMAL_CONFIGURATION";
- break;
- case BOOT_ASSUMING_NO_CONFIGURATION_CHANGES:
- strBootMode = L"BOOT_ASSUMING_NO_CONFIGURATION_CHANGES";
- break;
- case BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS:
- strBootMode = L"BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS";
- break;
- case BOOT_WITH_DEFAULT_SETTINGS:
- strBootMode = L"BOOT_WITH_DEFAULT_SETTINGS";
- break;
- case BOOT_ON_S4_RESUME:
- strBootMode = L"BOOT_ON_S4_RESUME";
- break;
- case BOOT_ON_S5_RESUME:
- strBootMode = L"BOOT_ON_S5_RESUME";
- break;
- case BOOT_ON_S2_RESUME:
- strBootMode = L"BOOT_ON_S2_RESUME";
- break;
- case BOOT_ON_S3_RESUME:
- strBootMode = L"BOOT_ON_S3_RESUME";
-
- break;
- case BOOT_ON_FLASH_UPDATE:
- strBootMode = L"BOOT_ON_FLASH_UPDATE";
- break;
- case BOOT_IN_RECOVERY_MODE:
- strBootMode = L"BOOT_IN_RECOVERY_MODE";
- break;
- default:
- strBootMode = L"Unknown boot mode";
- } // switch (BootMode)
-
- DEBUG ((EFI_D_ERROR, "Setting BootMode to %s\n", strBootMode));
- Status = (*PeiServices)->SetBootMode(PeiServices, BootMode);
- ASSERT_EFI_ERROR (Status);
-
- return Status;
-}
-#endif
-
/**
Get sleep type after wakeup
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
index aa03f6ea95..90998871dc 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.c
@@ -813,14 +813,6 @@ PeiInitPlatform (
sizeof (EFI_PLATFORM_INFO_HOB)
);
- //
- // Set the new boot mode for MRC
- //
-#ifdef NOCS_S3_SUPPORT
- Status = UpdateBootMode (PeiServices);
- ASSERT_EFI_ERROR (Status);
-#endif
-
DEBUG((EFI_D_INFO, "Setup MMIO size ... \n\n"));
//
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h
index e1817b28c6..4f71e519e0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPei/Platform.h
@@ -1,12 +1,9 @@
/*++
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights
+ reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
-
**/
@@ -24,26 +21,6 @@ typedef struct {
#define STALL_PEIM_FROM_THIS(a) CR (a, STALL_CALLBACK_STATE_INFORMATION, StallNotify, STALL_PEIM_SIGNATURE)
-#ifdef NOCS_S3_SUPPORT
-
-/**
- Peform the boot mode determination logic
- If the box is closed, then
- 1. If it's first time to boot, it's boot with full config .
- 2. If the ChassisIntrution is selected, force to be a boot with full config
- 3. Otherwise it's boot with no change.
-
- @param PeiServices General purpose services available to every PEIM.
- @param BootMode The detected boot mode.
-
- @retval EFI_SUCCESS if the boot mode could be set -**/ -EFI_STATUS -UpdateBootMode (
- IN CONST EFI_PEI_SERVICES **PeiServices
- );
-#endif
-
/**
This function reset the entire platform, including all processor and devices, and
reboots the system.
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index 5b255f4b05..a5c7062cbb 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -161,6 +161,14 @@ [PcdsDynamic,PcdsDynamicEx]
gPlatformModuleTokenSpaceGuid.PcdInConfigMode|FALSE|BOOLEAN|0x80000001
gPlatformModuleTokenSpaceGuid.PcdConnectUSBKeyboardonWaitForKeyStroke|FALSE|BOOLEAN|0x80000002
gPlatformModuleTokenSpaceGuid.PcdEnableWatchdogSwSmiInputValue|0|UINT8|0x80000003
+
+ ## Indicates if the machine has completed one boot cycle before.
+ # After the complete boot, BootState will be set to FALSE.<BR><BR>
+ # TRUE - The complete boot cycle has not happened before.<BR>
+ # FALSE - The complete boot cycle has happened before.<BR>
+ # @Prompt Boot State Flag
+ gPlatformModuleTokenSpaceGuid.PcdBootState|TRUE|BOOLEAN|0x80000004
+
#
#device firmware update support
#
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index e4c6750c70..2123745ccd 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -680,6 +680,7 @@ [PcdsPatchableInModule.common] [PcdsDynamicHii.common.DEFAULT]
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|5 # Variable: L"Timeout"
gEfiMdePkgTokenSpaceGuid.PcdHardwareErrorRecordLevel|L"HwErrRecSupport"|gEfiGlobalVariableGuid|0x0|1 # Variable: L"HwErrRecSupport"
+
+ gPlatformModuleTokenSpaceGuid.PcdBootState|L"BootState"|gPlatformModul
+ eTokenSpaceGuid|0x0|TRUE
[PcdsDynamicDefault.common.DEFAULT]
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0x0
@@ -733,6 +734,7 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
+ gEfiSecurityPkgTokenSpaceGuid.PcdUserPhysicalPresence|TRUE
[PcdsDynamicExDefault.X64.DEFAULT]
!if $(RECOVERY_ENABLE)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index f5795e5ab0..086668d570 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -677,6 +677,7 @@ [PcdsPatchableInModule.common] [PcdsDynamicHii.common.DEFAULT]
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|5 # Variable: L"Timeout"
gEfiMdePkgTokenSpaceGuid.PcdHardwareErrorRecordLevel|L"HwErrRecSupport"|gEfiGlobalVariableGuid|0x0|1 # Variable: L"HwErrRecSupport"
+
+ gPlatformModuleTokenSpaceGuid.PcdBootState|L"BootState"|gPlatformModul
+ eTokenSpaceGuid|0x0|TRUE
[PcdsDynamicDefault.common.DEFAULT]
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0x0
@@ -730,6 +731,7 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
+ gEfiSecurityPkgTokenSpaceGuid.PcdUserPhysicalPresence|TRUE
[PcdsDynamicExDefault.X64.DEFAULT]
!if $(RECOVERY_ENABLE)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index a930a85a35..5f2dd65ec8 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -679,6 +679,7 @@ [PcdsPatchableInModule.common] [PcdsDynamicHii.common.DEFAULT]
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|5 # Variable: L"Timeout"
gEfiMdePkgTokenSpaceGuid.PcdHardwareErrorRecordLevel|L"HwErrRecSupport"|gEfiGlobalVariableGuid|0x0|1 # Variable: L"HwErrRecSupport"
+
+ gPlatformModuleTokenSpaceGuid.PcdBootState|L"BootState"|gPlatformModul
+ eTokenSpaceGuid|0x0|TRUE
[PcdsDynamicDefault.common.DEFAULT]
gEfiMdeModulePkgTokenSpaceGuid.PcdS3BootScriptTablePrivateDataPtr|0x0
@@ -732,6 +733,7 @@ [PcdsDynamicExDefault.common.DEFAULT]
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuSmramCpuDataAddress|0
gEfiVLVTokenSpaceGuid.PcdCpuLockBoxSize|0
+ gEfiSecurityPkgTokenSpaceGuid.PcdUserPhysicalPresence|TRUE
[PcdsDynamicExDefault.X64.DEFAULT]
!if $(RECOVERY_ENABLE)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
index b745574421..85e8b1e8d6 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe
+++ .inf
@@ -93,7 +93,6 @@ [Guids]
gEfiIfrTianoGuid ## CONSUMES ## Guid
gEfiPlatformInfoGuid
gEfiNormalSetupGuid
- gEfiSecureBootEnableDisableGuid
gOsSelectionVariableGuid
gEfiGlobalVariableGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
index efd4a723e1..be99356d0f 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords
+++ .c
@@ -1448,60 +1448,9 @@ CheckSystemConfigLoad(SYSTEM_CONFIGURATION *SystemConfigPtr)
}
}
-
-//
-// "SecureBootEnable" variable for the Secure boot feature enable/disable.
-//
-#define EFI_SECURE_BOOT_ENABLE_NAME L"SecureBootEnable"
-extern EFI_GUID gEfiSecureBootEnableDisableGuid;
-
-
VOID
CheckSystemConfigSave(SYSTEM_CONFIGURATION *SystemConfigPtr) {
- EFI_STATUS Status;
- UINT8 SecureBootCfg;
- BOOLEAN SecureBootNotFound;
- UINTN DataSize;
-
-
- //
- // Secure Boot configuration changes
- //
- DataSize = sizeof(SecureBootCfg);
- SecureBootNotFound = FALSE;
- Status = gRT->GetVariable (
- EFI_SECURE_BOOT_ENABLE_NAME,
- &gEfiSecureBootEnableDisableGuid,
- NULL,
- &DataSize,
- &SecureBootCfg
- );
-
- if (EFI_ERROR(Status)) {
- SecureBootNotFound = TRUE;
- }
- if (SecureBootNotFound) {
- Status = gRT->GetVariable (
- EFI_SECURE_BOOT_ENABLE_NAME,
- &gEfiSecureBootEnableDisableGuid,
- NULL,
- &DataSize,
- &SecureBootCfg
- );
- ASSERT_EFI_ERROR(Status);
- }
- if ((SecureBootCfg) != SystemConfigPtr->SecureBoot) {
- SecureBootCfg = !SecureBootCfg;
- Status = gRT->SetVariable (
- EFI_SECURE_BOOT_ENABLE_NAME,
- &gEfiSecureBootEnableDisableGuid,
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
- sizeof (UINT8),
- &SecureBootCfg
- );
- }
-
}
VOID
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 12/14] Vlv2TbltDevicePkg/PlatformSmm: Switch to PI SMM Protocols
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (10 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 11/14] Vlv2TbltDevicePkg: Update boot mode/state behaviors Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:08 ` [edk2-devel] " Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 13/14] Vlv2TbltDevicePkg: Change to PI Spec ACPI Table Protocol Michael D Kinney
` (2 subsequent siblings)
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
Change use of Intel Framework SMM Protocols to PI SMM
Protocols. This removes Intel Framework dependencies.
The PI SMM Protocols added are:
* gEfiSmmPowerButtonDispatch2ProtocolGuid
* gEfiSmmSxDispatch2ProtocolGuid
* gEfiSmmSwDispatch2ProtocolGuid
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Vlv2TbltDevicePkg/PlatformSmm/Platform.c | 112 +++++++++++-------
.../PlatformSmm/PlatformSmm.inf | 16 +--
.../PlatformSmm/SmmPlatform.h | 104 +++++++---------
3 files changed, 114 insertions(+), 118 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
index fb9d090ada..c78174ed08 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
@@ -101,14 +101,14 @@ InitializePlatformSmm (
EFI_STATUS Status;
UINT8 Index;
EFI_HANDLE Handle;
- EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT PowerButtonContext;
- EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL *PowerButtonDispatch;
+ EFI_SMM_POWER_BUTTON_REGISTER_CONTEXT PowerButtonContext;
+ EFI_SMM_POWER_BUTTON_DISPATCH2_PROTOCOL *PowerButtonDispatch;
EFI_SMM_ICHN_DISPATCH_CONTEXT IchnContext;
EFI_SMM_ICHN_DISPATCH_PROTOCOL *IchnDispatch;
- EFI_SMM_SX_DISPATCH_PROTOCOL *SxDispatch;
- EFI_SMM_SX_DISPATCH_CONTEXT EntryDispatchContext;
- EFI_SMM_SW_DISPATCH_PROTOCOL *SwDispatch;
- EFI_SMM_SW_DISPATCH_CONTEXT SwContext;
+ EFI_SMM_SX_DISPATCH2_PROTOCOL *SxDispatch;
+ EFI_SMM_SX_REGISTER_CONTEXT EntryDispatchContext;
+ EFI_SMM_SW_DISPATCH2_PROTOCOL *SwDispatch;
+ EFI_SMM_SW_REGISTER_CONTEXT SwContext;
UINTN VarSize;
EFI_BOOT_MODE BootMode;
@@ -171,18 +171,18 @@ InitializePlatformSmm (
//
// Get the Power Button protocol
//
- Status = gBS->LocateProtocol(
- &gEfiSmmPowerButtonDispatchProtocolGuid,
- NULL,
- (void **)&PowerButtonDispatch
- );
+ Status = gSmst->SmmLocateProtocol(
+ &gEfiSmmPowerButtonDispatch2ProtocolGuid,
+ NULL,
+ (VOID **)&PowerButtonDispatch
+ );
ASSERT_EFI_ERROR(Status);
if (BootMode != BOOT_ON_FLASH_UPDATE) {
//
// Register for the power button event
//
- PowerButtonContext.Phase = PowerButtonEntry;
+ PowerButtonContext.Phase = EfiPowerButtonEntry;
Status = PowerButtonDispatch->Register(
PowerButtonDispatch,
PowerButtonCallback,
@@ -194,11 +194,11 @@ InitializePlatformSmm (
//
// Get the Sx dispatch protocol
//
- Status = gBS->LocateProtocol (
- &gEfiSmmSxDispatchProtocolGuid,
- NULL,
- (void **)&SxDispatch
- );
+ Status = gSmst->SmmLocateProtocol(
+ &gEfiSmmSxDispatch2ProtocolGuid,
+ NULL,
+ (VOID **)&SxDispatch
+ );
ASSERT_EFI_ERROR(Status);
//
@@ -209,7 +209,7 @@ InitializePlatformSmm (
Status = SxDispatch->Register (
SxDispatch,
- (EFI_SMM_SX_DISPATCH)SxSleepEntryCallBack,
+ SxSleepEntryCallBack,
&EntryDispatchContext,
&Handle
);
@@ -247,11 +247,11 @@ InitializePlatformSmm (
//
// Get the Sw dispatch protocol
//
- Status = gBS->LocateProtocol (
- &gEfiSmmSwDispatchProtocolGuid,
- NULL,
- (void **)&SwDispatch
- );
+ Status = gSmst->SmmLocateProtocol (
+ &gEfiSmmSwDispatch2ProtocolGuid,
+ NULL,
+ (VOID **)&SwDispatch
+ );
ASSERT_EFI_ERROR(Status);
//
@@ -341,11 +341,13 @@ InitializePlatformSmm (
return EFI_SUCCESS;
}
-VOID
+EFI_STATUS
EFIAPI
SmmReadyToBootCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
EFI_STATUS Status;
@@ -371,6 +373,7 @@ SmmReadyToBootCallback (
mSetSmmVariableProtocolSmiAllowed = FALSE;
}
+ return EFI_SUCCESS;
}
/**
@@ -385,8 +388,10 @@ SmmReadyToBootCallback (
EFI_STATUS
EFIAPI
SxSleepEntryCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
EFI_STATUS Status;
@@ -479,11 +484,13 @@ SetAfterG3On (
When a power button event happens, it shuts off the machine
**/
-VOID
+EFI_STATUS
EFIAPI
PowerButtonCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
//
@@ -538,6 +545,8 @@ PowerButtonCallback (
// Should not return
//
CpuDeadLoop();
+
+ return EFI_SUCCESS;
}
@@ -547,11 +556,13 @@ PowerButtonCallback (
@param DispatchContext - The predefined context which contained sleep type and phase
**/
-VOID
+EFI_STATUS
EFIAPI
S5SleepAcLossCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
//
@@ -561,6 +572,7 @@ S5SleepAcLossCallBack (
if (mAcLossVariable == 1) {
SetAfterG3On (TRUE);
}
+ return EFI_SUCCESS;
}
/**
@@ -571,11 +583,13 @@ S5SleepAcLossCallBack (
@retval Clears the Save State bit in the clock.
**/
-VOID
+EFI_STATUS
EFIAPI
S4S5CallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
@@ -590,6 +604,7 @@ S4S5CallBack (
IoWrite32(GPIO_BASE_ADDRESS + R_PCH_GPIO_SC_LVL, Data32);
}
+ return EFI_SUCCESS;
}
@@ -624,16 +639,18 @@ S4S5ProgClock()
Enable SCI
@param DispatchHandle - EFI Handle
- @param DispatchContext - Pointer to the EFI_SMM_SW_DISPATCH_CONTEXT
+ @param DispatchContext - Pointer to the EFI_SMM_SW_REGISTER_CONTEXT
@retval Nothing
**/
-VOID
+EFI_STATUS
EFIAPI
EnableAcpiCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
UINT32 SmiEn;
@@ -690,7 +707,7 @@ EnableAcpiCallback (
Pm1Cnt |= B_PCH_ACPI_PM1_CNT_SCI_EN;
IoWrite16(mAcpiBaseAddr + R_PCH_ACPI_PM1_CNT, Pm1Cnt);
-
+ return EFI_SUCCESS;
}
/**
@@ -710,16 +727,18 @@ EnableAcpiCallback (
Disable SCI
@param DispatchHandle - EFI Handle
- @param DispatchContext - Pointer to the EFI_SMM_SW_DISPATCH_CONTEXT
+ @param DispatchContext - Pointer to the EFI_SMM_SW_REGISTER_CONTEXT
@retval Nothing
**/
-VOID
+EFI_STATUS
EFIAPI
DisableAcpiCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
UINT16 Pm1Cnt;
@@ -737,6 +756,7 @@ DisableAcpiCallback (
Pm1Cnt &= ~B_PCH_ACPI_PM1_CNT_SCI_EN;
IoWrite16(mAcpiBaseAddr + R_PCH_ACPI_PM1_CNT, Pm1Cnt);
+ return EFI_SUCCESS;
}
/**
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
index 73c3b6f2d0..9aff4a4895 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
@@ -36,6 +36,7 @@ [Sources]
[LibraryClasses]
UefiDriverEntryPoint
UefiBootServicesTableLib
+ SmmServicesTableLib
DebugLib
IoLib
BaseLib
@@ -52,15 +53,14 @@ [Guids]
[Protocols]
gEfiSmmIchnDispatchProtocolGuid
gEfiGlobalNvsAreaProtocolGuid
- gEfiSmmSwDispatchProtocolGuid
- gEfiSmmPowerButtonDispatchProtocolGuid
- gEfiSmmSxDispatchProtocolGuid
+ gEfiSmmSwDispatch2ProtocolGuid
+ gEfiSmmPowerButtonDispatch2ProtocolGuid
+ gEfiSmmSxDispatch2ProtocolGuid
gEfiSmmVariableProtocolGuid
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -68,11 +68,11 @@ [Pcd.common]
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
[Depex]
- gEfiSmmAccess2ProtocolGuid AND
- gEfiSmmPowerButtonDispatchProtocolGuid AND
- gEfiSmmSxDispatchProtocolGuid AND
+ gEfiSmmAccess2ProtocolGuid AND
+ gEfiSmmPowerButtonDispatch2ProtocolGuid AND
+ gEfiSmmSxDispatch2ProtocolGuid AND
gEfiSmmIchnDispatchProtocolGuid AND
- gEfiSmmSwDispatchProtocolGuid AND
+ gEfiSmmSwDispatch2ProtocolGuid AND
gEfiVariableArchProtocolGuid AND
gEfiVariableWriteArchProtocolGuid AND
gEfiGlobalNvsAreaProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
index bcb1d8ae92..735a562e3e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
@@ -21,18 +21,16 @@ Abstract:
-#include <Protocol/SmmBase.h>
-#include <Protocol/FirmwareVolume.h>
-#include <Protocol/SmmPowerButtonDispatch.h>
-#include <Protocol/SmmSxDispatch.h>
-#include <Protocol/SmmSwDispatch.h>
+#include <Protocol/SmmBase2.h>
+#include <Protocol/SmmPowerButtonDispatch2.h>
+#include <Protocol/SmmSxDispatch2.h>
#include <Protocol/SmmSwDispatch2.h>
#include <Protocol/SmmIchnDispatch.h>
-#include <Protocol/SmmAccess.h>
+#include <Protocol/SmmAccess2.h>
#include <Protocol/SmmVariable.h>
#include <Protocol/PciRootBridgeIo.h>
#include <Protocol/LoadedImage.h>
-#include "Protocol/GlobalNvsArea.h"
+#include <Protocol/GlobalNvsArea.h>
#include <Guid/SetupVariable.h>
#include <Guid/EfiVpdData.h>
#include <Guid/PciLanInfo.h>
@@ -42,6 +40,7 @@ Abstract:
#include "PlatformBaseAddresses.h"
#include <Library/UefiBootServicesTableLib.h>
+#include <Library/SmmServicesTableLib.h>
#include <Library/S3BootScriptLib.h>
#include <Library/IoLib.h>
#include <Library/DebugLib.h>
@@ -130,53 +129,59 @@ extern EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *mPciRootBridgeIo;
//
// Callback function prototypes
//
-VOID
+EFI_STATUS
EFIAPI
PowerButtonCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
-VOID
-S5SleepWakeOnLanCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
- );
-
-VOID
+EFI_STATUS
EFIAPI
S5SleepAcLossCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
-VOID
+EFI_STATUS
EFIAPI
S4S5CallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
-VOID
+EFI_STATUS
EFIAPI
EnableAcpiCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
-VOID
+EFI_STATUS
EFIAPI
DisableAcpiCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
-VOID
+EFI_STATUS
EFIAPI
SmmReadyToBootCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
VOID
@@ -185,46 +190,18 @@ DummyTco1Callback (
IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext
);
-
-VOID
-PerrSerrCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext
- );
-
-VOID
-RiCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext
- );
-
-
VOID
SetAfterG3On (
BOOLEAN Enable
);
-VOID
-TurnOffVregUsb (
- );
-
-VOID
-PStateSupportCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
- );
-
-VOID
-PStateTransitionCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
- );
-
EFI_STATUS
EFIAPI
SxSleepEntryCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
EFI_STATUS
@@ -232,6 +209,5 @@ SaveRuntimeScriptTable (
VOID
);
-
#endif
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 12/14] Vlv2TbltDevicePkg/PlatformSmm: Switch to PI SMM Protocols
2019-07-01 2:55 ` [edk2-platforms Patch 12/14] Vlv2TbltDevicePkg/PlatformSmm: Switch to PI SMM Protocols Michael D Kinney
@ 2019-07-01 4:08 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:08 UTC (permalink / raw)
To: devel@edk2.groups.io, Kinney, Michael D; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Michael D Kinney
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-devel] [edk2-platforms Patch 12/14] Vlv2TbltDevicePkg/PlatformSmm: Switch to PI SMM Protocols
Change use of Intel Framework SMM Protocols to PI SMM Protocols. This removes Intel Framework dependencies.
The PI SMM Protocols added are:
* gEfiSmmPowerButtonDispatch2ProtocolGuid
* gEfiSmmSxDispatch2ProtocolGuid
* gEfiSmmSwDispatch2ProtocolGuid
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../Vlv2TbltDevicePkg/PlatformSmm/Platform.c | 112 +++++++++++-------
.../PlatformSmm/PlatformSmm.inf | 16 +--
.../PlatformSmm/SmmPlatform.h | 104 +++++++---------
3 files changed, 114 insertions(+), 118 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
index fb9d090ada..c78174ed08 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
@@ -101,14 +101,14 @@ InitializePlatformSmm (
EFI_STATUS Status;
UINT8 Index;
EFI_HANDLE Handle;
- EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT PowerButtonContext;
- EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL *PowerButtonDispatch;
+ EFI_SMM_POWER_BUTTON_REGISTER_CONTEXT PowerButtonContext;
+ EFI_SMM_POWER_BUTTON_DISPATCH2_PROTOCOL *PowerButtonDispatch;
EFI_SMM_ICHN_DISPATCH_CONTEXT IchnContext;
EFI_SMM_ICHN_DISPATCH_PROTOCOL *IchnDispatch;
- EFI_SMM_SX_DISPATCH_PROTOCOL *SxDispatch;
- EFI_SMM_SX_DISPATCH_CONTEXT EntryDispatchContext;
- EFI_SMM_SW_DISPATCH_PROTOCOL *SwDispatch;
- EFI_SMM_SW_DISPATCH_CONTEXT SwContext;
+ EFI_SMM_SX_DISPATCH2_PROTOCOL *SxDispatch;
+ EFI_SMM_SX_REGISTER_CONTEXT EntryDispatchContext;
+ EFI_SMM_SW_DISPATCH2_PROTOCOL *SwDispatch;
+ EFI_SMM_SW_REGISTER_CONTEXT SwContext;
UINTN VarSize;
EFI_BOOT_MODE BootMode;
@@ -171,18 +171,18 @@ InitializePlatformSmm (
//
// Get the Power Button protocol
//
- Status = gBS->LocateProtocol(
- &gEfiSmmPowerButtonDispatchProtocolGuid,
- NULL,
- (void **)&PowerButtonDispatch
- );
+ Status = gSmst->SmmLocateProtocol(
+ &gEfiSmmPowerButtonDispatch2ProtocolGuid,
+ NULL,
+ (VOID **)&PowerButtonDispatch
+ );
ASSERT_EFI_ERROR(Status);
if (BootMode != BOOT_ON_FLASH_UPDATE) {
//
// Register for the power button event
//
- PowerButtonContext.Phase = PowerButtonEntry;
+ PowerButtonContext.Phase = EfiPowerButtonEntry;
Status = PowerButtonDispatch->Register(
PowerButtonDispatch,
PowerButtonCallback, @@ -194,11 +194,11 @@ InitializePlatformSmm (
//
// Get the Sx dispatch protocol
//
- Status = gBS->LocateProtocol (
- &gEfiSmmSxDispatchProtocolGuid,
- NULL,
- (void **)&SxDispatch
- );
+ Status = gSmst->SmmLocateProtocol(
+ &gEfiSmmSxDispatch2ProtocolGuid,
+ NULL,
+ (VOID **)&SxDispatch
+ );
ASSERT_EFI_ERROR(Status);
//
@@ -209,7 +209,7 @@ InitializePlatformSmm (
Status = SxDispatch->Register (
SxDispatch,
- (EFI_SMM_SX_DISPATCH)SxSleepEntryCallBack,
+ SxSleepEntryCallBack,
&EntryDispatchContext,
&Handle
);
@@ -247,11 +247,11 @@ InitializePlatformSmm (
//
// Get the Sw dispatch protocol
//
- Status = gBS->LocateProtocol (
- &gEfiSmmSwDispatchProtocolGuid,
- NULL,
- (void **)&SwDispatch
- );
+ Status = gSmst->SmmLocateProtocol (
+ &gEfiSmmSwDispatch2ProtocolGuid,
+ NULL,
+ (VOID **)&SwDispatch
+ );
ASSERT_EFI_ERROR(Status);
//
@@ -341,11 +341,13 @@ InitializePlatformSmm (
return EFI_SUCCESS;
}
-VOID
+EFI_STATUS
EFIAPI
SmmReadyToBootCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
EFI_STATUS Status;
@@ -371,6 +373,7 @@ SmmReadyToBootCallback (
mSetSmmVariableProtocolSmiAllowed = FALSE;
}
+ return EFI_SUCCESS;
}
/**
@@ -385,8 +388,10 @@ SmmReadyToBootCallback ( EFI_STATUS
EFIAPI
SxSleepEntryCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
EFI_STATUS Status;
@@ -479,11 +484,13 @@ SetAfterG3On (
When a power button event happens, it shuts off the machine
**/
-VOID
+EFI_STATUS
EFIAPI
PowerButtonCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
//
@@ -538,6 +545,8 @@ PowerButtonCallback (
// Should not return
//
CpuDeadLoop();
+
+ return EFI_SUCCESS;
}
@@ -547,11 +556,13 @@ PowerButtonCallback (
@param DispatchContext - The predefined context which contained sleep type and phase
**/
-VOID
+EFI_STATUS
EFIAPI
S5SleepAcLossCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
//
@@ -561,6 +572,7 @@ S5SleepAcLossCallBack (
if (mAcLossVariable == 1) {
SetAfterG3On (TRUE);
}
+ return EFI_SUCCESS;
}
/**
@@ -571,11 +583,13 @@ S5SleepAcLossCallBack (
@retval Clears the Save State bit in the clock.
**/
-VOID
+EFI_STATUS
EFIAPI
S4S5CallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
@@ -590,6 +604,7 @@ S4S5CallBack (
IoWrite32(GPIO_BASE_ADDRESS + R_PCH_GPIO_SC_LVL, Data32);
}
+ return EFI_SUCCESS;
}
@@ -624,16 +639,18 @@ S4S5ProgClock()
Enable SCI
@param DispatchHandle - EFI Handle
- @param DispatchContext - Pointer to the EFI_SMM_SW_DISPATCH_CONTEXT
+ @param DispatchContext - Pointer to the EFI_SMM_SW_REGISTER_CONTEXT
@retval Nothing
**/
-VOID
+EFI_STATUS
EFIAPI
EnableAcpiCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
UINT32 SmiEn;
@@ -690,7 +707,7 @@ EnableAcpiCallback (
Pm1Cnt |= B_PCH_ACPI_PM1_CNT_SCI_EN;
IoWrite16(mAcpiBaseAddr + R_PCH_ACPI_PM1_CNT, Pm1Cnt);
-
+ return EFI_SUCCESS;
}
/**
@@ -710,16 +727,18 @@ EnableAcpiCallback (
Disable SCI
@param DispatchHandle - EFI Handle
- @param DispatchContext - Pointer to the EFI_SMM_SW_DISPATCH_CONTEXT
+ @param DispatchContext - Pointer to the EFI_SMM_SW_REGISTER_CONTEXT
@retval Nothing
**/
-VOID
+EFI_STATUS
EFIAPI
DisableAcpiCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
)
{
UINT16 Pm1Cnt;
@@ -737,6 +756,7 @@ DisableAcpiCallback (
Pm1Cnt &= ~B_PCH_ACPI_PM1_CNT_SCI_EN;
IoWrite16(mAcpiBaseAddr + R_PCH_ACPI_PM1_CNT, Pm1Cnt);
+ return EFI_SUCCESS;
}
/**
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
index 73c3b6f2d0..9aff4a4895 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/PlatformSmm.inf
@@ -36,6 +36,7 @@ [Sources]
[LibraryClasses]
UefiDriverEntryPoint
UefiBootServicesTableLib
+ SmmServicesTableLib
DebugLib
IoLib
BaseLib
@@ -52,15 +53,14 @@ [Guids]
[Protocols]
gEfiSmmIchnDispatchProtocolGuid
gEfiGlobalNvsAreaProtocolGuid
- gEfiSmmSwDispatchProtocolGuid
- gEfiSmmPowerButtonDispatchProtocolGuid
- gEfiSmmSxDispatchProtocolGuid
+ gEfiSmmSwDispatch2ProtocolGuid
+ gEfiSmmPowerButtonDispatch2ProtocolGuid
+ gEfiSmmSxDispatch2ProtocolGuid
gEfiSmmVariableProtocolGuid
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -68,11 +68,11 @@ [Pcd.common]
gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
[Depex]
- gEfiSmmAccess2ProtocolGuid AND
- gEfiSmmPowerButtonDispatchProtocolGuid AND
- gEfiSmmSxDispatchProtocolGuid AND
+ gEfiSmmAccess2ProtocolGuid AND
+ gEfiSmmPowerButtonDispatch2ProtocolGuid AND
+ gEfiSmmSxDispatch2ProtocolGuid AND
gEfiSmmIchnDispatchProtocolGuid AND
- gEfiSmmSwDispatchProtocolGuid AND
+ gEfiSmmSwDispatch2ProtocolGuid AND
gEfiVariableArchProtocolGuid AND
gEfiVariableWriteArchProtocolGuid AND
gEfiGlobalNvsAreaProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
index bcb1d8ae92..735a562e3e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmPlatform.h
@@ -21,18 +21,16 @@ Abstract:
-#include <Protocol/SmmBase.h>
-#include <Protocol/FirmwareVolume.h>
-#include <Protocol/SmmPowerButtonDispatch.h>
-#include <Protocol/SmmSxDispatch.h>
-#include <Protocol/SmmSwDispatch.h>
+#include <Protocol/SmmBase2.h>
+#include <Protocol/SmmPowerButtonDispatch2.h>
+#include <Protocol/SmmSxDispatch2.h>
#include <Protocol/SmmSwDispatch2.h>
#include <Protocol/SmmIchnDispatch.h>
-#include <Protocol/SmmAccess.h>
+#include <Protocol/SmmAccess2.h>
#include <Protocol/SmmVariable.h>
#include <Protocol/PciRootBridgeIo.h>
#include <Protocol/LoadedImage.h>
-#include "Protocol/GlobalNvsArea.h"
+#include <Protocol/GlobalNvsArea.h>
#include <Guid/SetupVariable.h>
#include <Guid/EfiVpdData.h>
#include <Guid/PciLanInfo.h>
@@ -42,6 +40,7 @@ Abstract:
#include "PlatformBaseAddresses.h"
#include <Library/UefiBootServicesTableLib.h>
+#include <Library/SmmServicesTableLib.h>
#include <Library/S3BootScriptLib.h>
#include <Library/IoLib.h>
#include <Library/DebugLib.h>
@@ -130,53 +129,59 @@ extern EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *mPciRootBridgeIo; // // Callback function prototypes // -VOID
+EFI_STATUS
EFIAPI
PowerButtonCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
-VOID
-S5SleepWakeOnLanCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
- );
-
-VOID
+EFI_STATUS
EFIAPI
S5SleepAcLossCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
-VOID
+EFI_STATUS
EFIAPI
S4S5CallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
-VOID
+EFI_STATUS
EFIAPI
EnableAcpiCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
-VOID
+EFI_STATUS
EFIAPI
DisableAcpiCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
-VOID
+EFI_STATUS
EFIAPI
SmmReadyToBootCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
VOID
@@ -185,46 +190,18 @@ DummyTco1Callback (
IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext
);
-
-VOID
-PerrSerrCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext
- );
-
-VOID
-RiCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext
- );
-
-
VOID
SetAfterG3On (
BOOLEAN Enable
);
-VOID
-TurnOffVregUsb (
- );
-
-VOID
-PStateSupportCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
- );
-
-VOID
-PStateTransitionCallback (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext
- );
-
EFI_STATUS
EFIAPI
SxSleepEntryCallBack (
- IN EFI_HANDLE DispatchHandle,
- IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext
+ IN EFI_HANDLE DispatchHandle,
+ IN CONST VOID *Context OPTIONAL,
+ IN OUT VOID *CommBuffer OPTIONAL,
+ IN OUT UINTN *CommBufferSize OPTIONAL
);
EFI_STATUS
@@ -232,6 +209,5 @@ SaveRuntimeScriptTable (
VOID
);
-
#endif
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 13/14] Vlv2TbltDevicePkg: Change to PI Spec ACPI Table Protocol
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (11 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 12/14] Vlv2TbltDevicePkg/PlatformSmm: Switch to PI SMM Protocols Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:08 ` Sun, Zailiang
2019-07-01 2:55 ` [edk2-platforms Patch 14/14] Vlv2TbltDevicePkg/PlatformInitPei: Update MemoryTypeInformation Michael D Kinney
2019-07-01 4:04 ` [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Gary Lin
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
Remove use of ACPI Support Protocol from IntelFrameworkPkg
and use the ACPI Table Protocol and ACPI SDT Protocol from
the MdePkg.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../AcpiPlatform/AcpiPlatform.c | 72 +++++--------------
.../AcpiPlatform/AcpiPlatform.h | 2 +-
.../AcpiPlatform/AcpiPlatform.inf | 5 +-
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 1 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 2 +-
9 files changed, 26 insertions(+), 64 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
index 13d904b834..962baf561d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
@@ -35,8 +35,7 @@ Abstract:
#include <Guid/SetupVariable.h>
#include <Guid/PlatformInfo.h>
#include <Guid/BoardFeatures.h>
-#include <Protocol/AcpiSupport.h>
-#include <Protocol/AcpiS3Save.h>
+#include <Protocol/AcpiTable.h>
#include <Library/CpuIA32.h>
#include <SetupMode.h>
#include <Guid/AcpiTableStorage.h>
@@ -142,15 +141,15 @@ LocateSupportProtocol (
//
// See if it has the ACPI storage file.
//
- Status = ((EFI_FIRMWARE_VOLUME_PROTOCOL *) (*Instance))->ReadFile (
- *Instance,
- &gEfiAcpiTableStorageGuid,
- NULL,
- &Size,
- &FileType,
- &Attributes,
- &FvStatus
- );
+ Status = ((EFI_FIRMWARE_VOLUME2_PROTOCOL *) (*Instance))->ReadFile (
+ *Instance,
+ &gEfiAcpiTableStorageGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
//
// If we found it, then we are done.
@@ -633,13 +632,11 @@ OnReadyToBoot (
)
{
EFI_STATUS Status;
- EFI_ACPI_TABLE_VERSION TableVersion;
- EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
SYSTEM_CONFIGURATION SetupVarBuffer;
UINTN VariableSize;
EFI_PLATFORM_CPU_INFO *PlatformCpuInfoPtr = NULL;
EFI_PLATFORM_CPU_INFO PlatformCpuInfo;
- EFI_PEI_HOB_POINTERS GuidHob;
+ EFI_PEI_HOB_POINTERS GuidHob;
if (mFirstNotify) {
return;
@@ -701,23 +698,6 @@ OnReadyToBoot (
);
ASSERT_EFI_ERROR (Status);
}
-
- //
- // Find the AcpiSupport protocol.
- //
- Status = LocateSupportProtocol (&gEfiAcpiSupportProtocolGuid, (VOID **) &AcpiSupport, 0);
- ASSERT_EFI_ERROR (Status);
-
- TableVersion = EFI_ACPI_TABLE_VERSION_2_0;
-
- //
- // Publish ACPI 1.0 or 2.0 Tables.
- //
- Status = AcpiSupport->PublishTables (
- AcpiSupport,
- TableVersion
- );
- ASSERT_EFI_ERROR (Status);
}
VOID
@@ -759,8 +739,8 @@ AcpiPlatformEntryPoint (
{
EFI_STATUS Status;
EFI_STATUS AcpiStatus;
- EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol;
+ EFI_ACPI_TABLE_PROTOCOL *AcpiTable;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol;
INTN Instance;
EFI_ACPI_COMMON_HEADER *CurrentTable;
UINTN TableHandle;
@@ -821,9 +801,9 @@ AcpiPlatformEntryPoint (
}
//
- // Find the AcpiSupport protocol.
+ // Find the AcpiTable protocol.
//
- Status = LocateSupportProtocol (&gEfiAcpiSupportProtocolGuid, (VOID **) &AcpiSupport, 0);
+ Status = LocateSupportProtocol (&gEfiAcpiTableProtocolGuid, (VOID **) &AcpiTable, 0);
ASSERT_EFI_ERROR (Status);
//
@@ -1171,11 +1151,10 @@ AcpiPlatformEntryPoint (
// Add the table.
//
TableHandle = 0;
- AcpiStatus = AcpiSupport->SetAcpiTable (
- AcpiSupport,
+ AcpiStatus = AcpiTable->InstallAcpiTable (
+ AcpiTable,
CurrentTable,
- TRUE,
- TableVersion,
+ Size,
&TableHandle
);
ASSERT_EFI_ERROR (AcpiStatus);
@@ -1189,21 +1168,6 @@ AcpiPlatformEntryPoint (
}
}
- //
- // Publish ACPI 1.0 or 2.0 Tables.
- //
-// Status = AcpiSupport->PublishTables (
-// AcpiSupport,
-// TableVersion
-// );
-// ASSERT_EFI_ERROR (Status);
-
-// Status = EfiCreateEventReadyToBootEx (
-// TPL_NOTIFY,
-// OnReadyToBoot,
-// NULL,
-// &Event
-// );
Event = NULL;
OnReadyToBoot (Event, NULL);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
index b27ca661ff..8289eecc6d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
@@ -30,7 +30,7 @@ Abstract:
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/DebugLib.h>
-#include <Protocol/FirmwareVolume.h>
+#include <Protocol/FirmwareVolume2.h>
#include <Library/PcdLib.h>
#include <IndustryStandard/HighPrecisionEventTimerTable.h>
#include <IndustryStandard/Acpi.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
index ce4db9fa85..6f843d6d2e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
@@ -34,7 +34,6 @@ [sources.common]
[Packages]
Vlv2TbltDevicePkg/PlatformPkg.dec
MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -64,7 +63,7 @@ [Guids]
[Protocols]
gEnhancedSpeedstepProtocolGuid
gEfiPlatformCpuProtocolGuid
- gEfiAcpiSupportProtocolGuid
+ gEfiAcpiTableProtocolGuid
gEfiFirmwareVolume2ProtocolGuid
gEfiMpServiceProtocolGuid
gEfiGlobalNvsAreaProtocolGuid
@@ -78,5 +77,5 @@ [Pcd]
[Depex]
gEfiVariableArchProtocolGuid AND
gEfiVariableWriteArchProtocolGuid AND
- gEfiAcpiSupportProtocolGuid AND
+ gEfiAcpiTableProtocolGuid AND
gEfiMpServiceProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index a5c7062cbb..abe9d7e3a0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -44,7 +44,6 @@ [Guids]
gEfiSetupVariableGuid = { 0xec87d643, 0xeba4, 0x4bb5, { 0xa1, 0xe5, 0x3f, 0x3e, 0x36, 0xb2, 0x0d, 0xa9 } }
gEfiPlatformInfoGuid = { 0x1e2acc41, 0xe26a, 0x483d, { 0xaf, 0xc7, 0xa0, 0x56, 0xc3, 0x4e, 0x08, 0x7b } }
gMfgModeVariableGuid = { 0xEF14FD78, 0x0793, 0x4e2b, { 0xAC, 0x6D, 0x06, 0x28, 0x47, 0xE0, 0x17, 0x91 } }
- gEfiAcpiTableStorageGuid = { 0x7e374e25, 0x8e01, 0x4fee, { 0x87, 0xf2, 0x39, 0x0c, 0x23, 0xc6, 0x06, 0xcd } }
gACPIOSFRMfgStringVariableGuid = { 0x72234213, 0x0fd7, 0x48a1, { 0xa5, 0x9f, 0xb4, 0x1b, 0xc1, 0x07, 0xfb, 0xcd } }
gACPIOSFRRefDataBlockVariableGuid = { 0x72234213, 0x0fd7, 0x48a1, { 0xa5, 0x9f, 0xb4, 0x1b, 0xc1, 0x07, 0xfb, 0xcd } }
gACPIOSFRModelStringVariableGuid = { 0xca1bcad9, 0xe021, 0x4547, { 0xa1, 0xb0, 0x5b, 0x22, 0xc7, 0xf6, 0x87, 0xf4 } }
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index b0fbbdb9cb..0661c778c1 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -504,7 +504,7 @@ [FV.FVMAIN]
#
INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
-INF IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
+INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
INF RuleOverride = ACPITABLE2 Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
INF RuleOverride = ACPITABLE Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index 107c160b76..06bdebb10b 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -453,7 +453,7 @@ [FV.FVMAIN]
#
INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
-INF IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
+INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
INF RuleOverride = ACPITABLE2 Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
INF RuleOverride = ACPITABLE Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index 2123745ccd..b558caa61f 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -1108,7 +1108,7 @@ [Components.X64]
}
MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
+ MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index 086668d570..99ada0ef0a 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -1092,7 +1092,7 @@ [Components.IA32]
}
MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
+ MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index 5f2dd65ec8..87404d2d82 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -1107,7 +1107,7 @@ [Components.X64]
}
MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
+ MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-platforms Patch 13/14] Vlv2TbltDevicePkg: Change to PI Spec ACPI Table Protocol
2019-07-01 2:55 ` [edk2-platforms Patch 13/14] Vlv2TbltDevicePkg: Change to PI Spec ACPI Table Protocol Michael D Kinney
@ 2019-07-01 4:08 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:08 UTC (permalink / raw)
To: Kinney, Michael D, devel@edk2.groups.io; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: Kinney, Michael D
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-platforms Patch 13/14] Vlv2TbltDevicePkg: Change to PI Spec ACPI Table Protocol
Remove use of ACPI Support Protocol from IntelFrameworkPkg and use the ACPI Table Protocol and ACPI SDT Protocol from the MdePkg.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../AcpiPlatform/AcpiPlatform.c | 72 +++++--------------
.../AcpiPlatform/AcpiPlatform.h | 2 +-
.../AcpiPlatform/AcpiPlatform.inf | 5 +-
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 1 -
.../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 2 +-
.../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 2 +-
9 files changed, 26 insertions(+), 64 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
index 13d904b834..962baf561d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
@@ -35,8 +35,7 @@ Abstract:
#include <Guid/SetupVariable.h>
#include <Guid/PlatformInfo.h>
#include <Guid/BoardFeatures.h>
-#include <Protocol/AcpiSupport.h>
-#include <Protocol/AcpiS3Save.h>
+#include <Protocol/AcpiTable.h>
#include <Library/CpuIA32.h>
#include <SetupMode.h>
#include <Guid/AcpiTableStorage.h>
@@ -142,15 +141,15 @@ LocateSupportProtocol (
//
// See if it has the ACPI storage file.
//
- Status = ((EFI_FIRMWARE_VOLUME_PROTOCOL *) (*Instance))->ReadFile (
- *Instance,
- &gEfiAcpiTableStorageGuid,
- NULL,
- &Size,
- &FileType,
- &Attributes,
- &FvStatus
- );
+ Status = ((EFI_FIRMWARE_VOLUME2_PROTOCOL *) (*Instance))->ReadFile (
+ *Instance,
+ &gEfiAcpiTableStorageGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
//
// If we found it, then we are done.
@@ -633,13 +632,11 @@ OnReadyToBoot (
)
{
EFI_STATUS Status;
- EFI_ACPI_TABLE_VERSION TableVersion;
- EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
SYSTEM_CONFIGURATION SetupVarBuffer;
UINTN VariableSize;
EFI_PLATFORM_CPU_INFO *PlatformCpuInfoPtr = NULL;
EFI_PLATFORM_CPU_INFO PlatformCpuInfo;
- EFI_PEI_HOB_POINTERS GuidHob;
+ EFI_PEI_HOB_POINTERS GuidHob;
if (mFirstNotify) {
return;
@@ -701,23 +698,6 @@ OnReadyToBoot (
);
ASSERT_EFI_ERROR (Status);
}
-
- //
- // Find the AcpiSupport protocol.
- //
- Status = LocateSupportProtocol (&gEfiAcpiSupportProtocolGuid, (VOID **) &AcpiSupport, 0);
- ASSERT_EFI_ERROR (Status);
-
- TableVersion = EFI_ACPI_TABLE_VERSION_2_0;
-
- //
- // Publish ACPI 1.0 or 2.0 Tables.
- //
- Status = AcpiSupport->PublishTables (
- AcpiSupport,
- TableVersion
- );
- ASSERT_EFI_ERROR (Status);
}
VOID
@@ -759,8 +739,8 @@ AcpiPlatformEntryPoint ( {
EFI_STATUS Status;
EFI_STATUS AcpiStatus;
- EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol;
+ EFI_ACPI_TABLE_PROTOCOL *AcpiTable;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol;
INTN Instance;
EFI_ACPI_COMMON_HEADER *CurrentTable;
UINTN TableHandle;
@@ -821,9 +801,9 @@ AcpiPlatformEntryPoint (
}
//
- // Find the AcpiSupport protocol.
+ // Find the AcpiTable protocol.
//
- Status = LocateSupportProtocol (&gEfiAcpiSupportProtocolGuid, (VOID **) &AcpiSupport, 0);
+ Status = LocateSupportProtocol (&gEfiAcpiTableProtocolGuid, (VOID **)
+ &AcpiTable, 0);
ASSERT_EFI_ERROR (Status);
//
@@ -1171,11 +1151,10 @@ AcpiPlatformEntryPoint (
// Add the table.
//
TableHandle = 0;
- AcpiStatus = AcpiSupport->SetAcpiTable (
- AcpiSupport,
+ AcpiStatus = AcpiTable->InstallAcpiTable (
+ AcpiTable,
CurrentTable,
- TRUE,
- TableVersion,
+ Size,
&TableHandle
);
ASSERT_EFI_ERROR (AcpiStatus); @@ -1189,21 +1168,6 @@ AcpiPlatformEntryPoint (
}
}
- //
- // Publish ACPI 1.0 or 2.0 Tables.
- //
-// Status = AcpiSupport->PublishTables (
-// AcpiSupport,
-// TableVersion
-// );
-// ASSERT_EFI_ERROR (Status);
-
-// Status = EfiCreateEventReadyToBootEx (
-// TPL_NOTIFY,
-// OnReadyToBoot,
-// NULL,
-// &Event
-// );
Event = NULL;
OnReadyToBoot (Event, NULL);
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
index b27ca661ff..8289eecc6d 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
@@ -30,7 +30,7 @@ Abstract:
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/DebugLib.h>
-#include <Protocol/FirmwareVolume.h>
+#include <Protocol/FirmwareVolume2.h>
#include <Library/PcdLib.h>
#include <IndustryStandard/HighPrecisionEventTimerTable.h>
#include <IndustryStandard/Acpi.h>
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
index ce4db9fa85..6f843d6d2e 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
@@ -34,7 +34,6 @@ [sources.common]
[Packages]
Vlv2TbltDevicePkg/PlatformPkg.dec
MdePkg/MdePkg.dec
- IntelFrameworkPkg/IntelFrameworkPkg.dec
MdeModulePkg/MdeModulePkg.dec
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -64,7 +63,7 @@ [Guids]
[Protocols]
gEnhancedSpeedstepProtocolGuid
gEfiPlatformCpuProtocolGuid
- gEfiAcpiSupportProtocolGuid
+ gEfiAcpiTableProtocolGuid
gEfiFirmwareVolume2ProtocolGuid
gEfiMpServiceProtocolGuid
gEfiGlobalNvsAreaProtocolGuid
@@ -78,5 +77,5 @@ [Pcd]
[Depex]
gEfiVariableArchProtocolGuid AND
gEfiVariableWriteArchProtocolGuid AND
- gEfiAcpiSupportProtocolGuid AND
+ gEfiAcpiTableProtocolGuid AND
gEfiMpServiceProtocolGuid
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
index a5c7062cbb..abe9d7e3a0 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.dec
@@ -44,7 +44,6 @@ [Guids]
gEfiSetupVariableGuid = { 0xec87d643, 0xeba4, 0x4bb5, { 0xa1, 0xe5, 0x3f, 0x3e, 0x36, 0xb2, 0x0d, 0xa9 } }
gEfiPlatformInfoGuid = { 0x1e2acc41, 0xe26a, 0x483d, { 0xaf, 0xc7, 0xa0, 0x56, 0xc3, 0x4e, 0x08, 0x7b } }
gMfgModeVariableGuid = { 0xEF14FD78, 0x0793, 0x4e2b, { 0xAC, 0x6D, 0x06, 0x28, 0x47, 0xE0, 0x17, 0x91 } }
- gEfiAcpiTableStorageGuid = { 0x7e374e25, 0x8e01, 0x4fee, { 0x87, 0xf2, 0x39, 0x0c, 0x23, 0xc6, 0x06, 0xcd } }
gACPIOSFRMfgStringVariableGuid = { 0x72234213, 0x0fd7, 0x48a1, { 0xa5, 0x9f, 0xb4, 0x1b, 0xc1, 0x07, 0xfb, 0xcd } }
gACPIOSFRRefDataBlockVariableGuid = { 0x72234213, 0x0fd7, 0x48a1, { 0xa5, 0x9f, 0xb4, 0x1b, 0xc1, 0x07, 0xfb, 0xcd } }
gACPIOSFRModelStringVariableGuid = { 0xca1bcad9, 0xe021, 0x4547, { 0xa1, 0xb0, 0x5b, 0x22, 0xc7, 0xf6, 0x87, 0xf4 } }
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
index b0fbbdb9cb..0661c778c1 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf
@@ -504,7 +504,7 @@ [FV.FVMAIN]
#
INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
-INF IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
+INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
INF RuleOverride = ACPITABLE2 Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
INF RuleOverride = ACPITABLE Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
index 107c160b76..06bdebb10b 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGcc.fdf
@@ -453,7 +453,7 @@ [FV.FVMAIN]
#
INF MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
INF MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
-INF IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
+INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
INF RuleOverride = ACPITABLE2 Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
INF RuleOverride = ACPITABLE Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
index 2123745ccd..b558caa61f 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc
@@ -1108,7 +1108,7 @@ [Components.X64]
}
MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
+ MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
index 086668d570..99ada0ef0a 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc
@@ -1092,7 +1092,7 @@ [Components.IA32]
}
MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
+ MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
index 5f2dd65ec8..87404d2d82 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformPkgX64.dsc
@@ -1107,7 +1107,7 @@ [Components.X64]
}
MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
- IntelFrameworkModulePkg/Universal/Acpi/AcpiSupportDxe/AcpiSupportDxe.inf
+ MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
Vlv2DeviceRefCodePkg/ValleyView2Soc/CPU/PowerManagement/AcpiTables/PowerManagementAcpiTables.inf
Vlv2DeviceRefCodePkg/AcpiTablesPCAT/AcpiTables.inf
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* [edk2-platforms Patch 14/14] Vlv2TbltDevicePkg/PlatformInitPei: Update MemoryTypeInformation
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (12 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 13/14] Vlv2TbltDevicePkg: Change to PI Spec ACPI Table Protocol Michael D Kinney
@ 2019-07-01 2:55 ` Michael D Kinney
2019-07-01 4:08 ` Sun, Zailiang
2019-07-01 4:04 ` [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Gary Lin
14 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 2:55 UTC (permalink / raw)
To: devel; +Cc: Zailiang Sun, Yi Qian
Reduce extra reboots when UEFI Shell is run followed by an OS boot.
The extra reboot is due to use of EfiLoaderCode that exceeds the
MemoryTypeInformation bin size. EfiLoaderCode should not be tracked.
Remove all memory types that should not be tracked, and update the
remaining bin sizes based on observed memory usage on an X64 DEBUG
profile.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../PlatformInitPei/MemoryPeim.c | 21 +++++--------------
1 file changed, 5 insertions(+), 16 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryPeim.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryPeim.c
index e6189b7713..64b606637a 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryPeim.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryPeim.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -40,19 +38,10 @@ Abstract:
EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = {
{ EfiACPIReclaimMemory, 0x40 }, // 0x40 pages = 256k for ASL
- { EfiACPIMemoryNVS, 0x100 }, // 0x100 pages = 1 MB for S3, SMM, HII, etc
- { EfiReservedMemoryType, 0x600 }, // 48k for BIOS Reserved
- { EfiMemoryMappedIO, 0 },
- { EfiMemoryMappedIOPortSpace, 0 },
- { EfiPalCode, 0 },
- { EfiRuntimeServicesCode, 0x200 },
+ { EfiACPIMemoryNVS, 0x40 }, // 0x40 pages = 256k MB for S3, SMM, HII, etc
+ { EfiReservedMemoryType, 0x80 }, // 512k for BIOS Reserved
+ { EfiRuntimeServicesCode, 0x100 },
{ EfiRuntimeServicesData, 0x100 },
- { EfiLoaderCode, 0x100 },
- { EfiLoaderData, 0x100 },
- { EfiBootServicesCode, 0x800 },
- { EfiBootServicesData, 0x2500},
- { EfiConventionalMemory, 0 },
- { EfiUnusableMemory, 0 },
{ EfiMaxMemoryType, 0 }
};
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-platforms Patch 14/14] Vlv2TbltDevicePkg/PlatformInitPei: Update MemoryTypeInformation
2019-07-01 2:55 ` [edk2-platforms Patch 14/14] Vlv2TbltDevicePkg/PlatformInitPei: Update MemoryTypeInformation Michael D Kinney
@ 2019-07-01 4:08 ` Sun, Zailiang
0 siblings, 0 replies; 42+ messages in thread
From: Sun, Zailiang @ 2019-07-01 4:08 UTC (permalink / raw)
To: Kinney, Michael D, devel@edk2.groups.io; +Cc: Qian, Yi
Reviewed-By: Zailiang Sun <zailiang.sun@intel.com>
-----Original Message-----
From: Kinney, Michael D
Sent: Monday, July 01, 2019 10:56 AM
To: devel@edk2.groups.io
Cc: Sun, Zailiang <zailiang.sun@intel.com>; Qian, Yi <yi.qian@intel.com>
Subject: [edk2-platforms Patch 14/14] Vlv2TbltDevicePkg/PlatformInitPei: Update MemoryTypeInformation
Reduce extra reboots when UEFI Shell is run followed by an OS boot.
The extra reboot is due to use of EfiLoaderCode that exceeds the MemoryTypeInformation bin size. EfiLoaderCode should not be tracked.
Remove all memory types that should not be tracked, and update the remaining bin sizes based on observed memory usage on an X64 DEBUG profile.
Cc: Zailiang Sun <zailiang.sun@intel.com>
Cc: Yi Qian <yi.qian@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
.../PlatformInitPei/MemoryPeim.c | 21 +++++--------------
1 file changed, 5 insertions(+), 16 deletions(-)
diff --git a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryPeim.c b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryPeim.c
index e6189b7713..64b606637a 100644
--- a/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryPeim.c
+++ b/Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/MemoryPeim.c
@@ -1,11 +1,9 @@
/** @file
- Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
-
+ Copyright (c) 2004 - 2019, Intel Corporation. All rights
+ reserved.<BR>
+
SPDX-License-Identifier: BSD-2-Clause-Patent
-
-
Module Name:
@@ -40,19 +38,10 @@ Abstract:
EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = {
{ EfiACPIReclaimMemory, 0x40 }, // 0x40 pages = 256k for ASL
- { EfiACPIMemoryNVS, 0x100 }, // 0x100 pages = 1 MB for S3, SMM, HII, etc
- { EfiReservedMemoryType, 0x600 }, // 48k for BIOS Reserved
- { EfiMemoryMappedIO, 0 },
- { EfiMemoryMappedIOPortSpace, 0 },
- { EfiPalCode, 0 },
- { EfiRuntimeServicesCode, 0x200 },
+ { EfiACPIMemoryNVS, 0x40 }, // 0x40 pages = 256k MB for S3, SMM, HII, etc
+ { EfiReservedMemoryType, 0x80 }, // 512k for BIOS Reserved
+ { EfiRuntimeServicesCode, 0x100 },
{ EfiRuntimeServicesData, 0x100 },
- { EfiLoaderCode, 0x100 },
- { EfiLoaderData, 0x100 },
- { EfiBootServicesCode, 0x800 },
- { EfiBootServicesData, 0x2500},
- { EfiConventionalMemory, 0 },
- { EfiUnusableMemory, 0 },
{ EfiMaxMemoryType, 0 }
};
--
2.21.0.windows.1
^ permalink raw reply related [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-01 2:55 [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Michael D Kinney
` (13 preceding siblings ...)
2019-07-01 2:55 ` [edk2-platforms Patch 14/14] Vlv2TbltDevicePkg/PlatformInitPei: Update MemoryTypeInformation Michael D Kinney
@ 2019-07-01 4:04 ` Gary Lin
2019-07-01 23:07 ` Michael D Kinney
14 siblings, 1 reply; 42+ messages in thread
From: Gary Lin @ 2019-07-01 4:04 UTC (permalink / raw)
To: devel@edk2.groups.io, michael.d.kinney@intel.com; +Cc: Yi Qian, Zailiang Sun
On Sun, Jun 30, 2019 at 07:55:39PM -0700, Michael D Kinney wrote:
> The following changes remove all dependencies on the IntelFrameworkPkg and
> IntelFrameworkModulePkg from the Vlv2TbltDevicePkg platform builds. These
> changes do depend on updates binaries on the edk2-non-osi repository.
>
Hi Michael,
I am amending the bash scripts for gcc. The firmware I built is using the
binaries from Development190216 and could boot into Linux successfully with
some workarounds for Wpce791, Bds, and InteFspWrapper. The patches you posted
eliminate those parts I have to work around.
Just want to know if you need any assistance for the gcc build? I could
rebase my work upon your patches and send them later.
Thanks,
Gary Lin
> * Vlv2DeviceRefCodePkg: Add gEfiSmmIchnDispatchProtocolGuid
> * Vlv2TbltDevicePkg: Reduce Intel Framework dependencies
> * Vlv2TbltDevicePkg: Remove unused modules/libraries
> * Vlv2TbltDevicePkg: Switch from ISA to SIO modules
> * Vlv2TbltDevicePkg: Switch to CPU I/O 2 Protocol
> * Vlv2TbltDevicePkg: Remove use of PS/2 Policy Protocol
> * Vlv2TbltDevicePkg: Remove use of BIOS ID tools
> * Vlv2TbltDevicePkg: Remove use of Data Hub Protocol
> * Vlv2TbltDevicePkg: Use PI Spec SMBUS2 PPI
> * Vlv2TbltDevicePkg: Switch to MdeModulePkg BdsDxe
> * Vlv2TbltDevicePkg: Update boot mode/state behaviors
> * Vlv2TbltDevicePkg/PlatformSmm: Switch to PI SMM Protocols
> * Vlv2TbltDevicePkg: Change to PI Spec ACPI Table Protocol
>
> Cc: Zailiang Sun <zailiang.sun@intel.com>
> Cc: Yi Qian <yi.qian@intel.com>
> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
>
> Michael D Kinney (14):
> Vlv2DeviceRefCodePkg: Add gEfiSmmIchnDispatchProtocolGuid
> Vlv2TbltDevicePkg: Reduce Intel Framework dependencies
> Vlv2TbltDevicePkg: Remove unused modules/libraries
> Vlv2TbltDevicePkg: Switch from ISA to SIO modules
> Vlv2TbltDevicePkg: Switch to CPU I/O 2 Protocol
> Vlv2TbltDevicePkg: Remove use of PS/2 Policy Protocol
> Vlv2TbltDevicePkg: Remove use of BIOS ID tools
> Vlv2TbltDevicePkg: Remove use of Data Hub Protocol
> Vlv2TbltDevicePkg: Use PI Spec SMBUS2 PPI
> Vlv2TbltDevicePkg: Switch to MdeModulePkg BdsDxe
> Vlv2TbltDevicePkg: Update boot mode/state behaviors
> Vlv2TbltDevicePkg/PlatformSmm: Switch to PI SMM Protocols
> Vlv2TbltDevicePkg: Change to PI Spec ACPI Table Protocol
> Vlv2TbltDevicePkg/PlatformInitPei: Update MemoryTypeInformation
>
> .../AcpiPlatform/AcpiPlatform.c | 137 +-
> .../AcpiPlatform/AcpiPlatform.h | 11 +-
> .../AcpiPlatform/AcpiPlatform.inf | 14 +-
> Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env | 25 -
> Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env | 25 -
> .../Intel/Vlv2TbltDevicePkg/BiosIdx64D.env | 25 -
> .../Intel/Vlv2TbltDevicePkg/BiosIdx64R.env | 25 -
> .../BootScriptSaveDxe/BootScriptSaveDxe.inf | 60 -
> .../InternalBootScriptSave.h | 102 -
> .../BootScriptSaveDxe/ScriptSave.c | 626 ---
> .../Intel/Vlv2TbltDevicePkg/Build_IFWI.bat | 33 -
> .../Library/FmpDeviceLib/FmpDeviceLib.c | 12 +-
> .../FspAzaliaConfigData/AzaliaConfig.bin | Bin 3708 -> 0 bytes
> .../FspSupport/BootModePei/BootModePei.c | 42 -
> .../FspSupport/BootModePei/BootModePei.inf | 40 -
> .../FspHobProcessLibVlv2.c | 421 --
> .../FspHobProcessLibVlv2.inf | 74 -
> .../FspPlatformSecLibVlv2.c | 144 -
> .../FspPlatformSecLibVlv2.inf | 82 -
> .../Ia32/AsmSaveSecContext.asm | 45 -
> .../SecFspPlatformSecLibVlv2/Ia32/Fsp.inc | 45 -
> .../Ia32/PeiCoreEntry.asm | 135 -
> .../Ia32/SecEntry.asm | 338 --
> .../SecFspPlatformSecLibVlv2/Ia32/Stack.S | 71 -
> .../SecFspPlatformSecLibVlv2/Ia32/Stack.asm | 76 -
> .../SecFspPlatformSecLibVlv2/PlatformInit.c | 36 -
> .../SecFspPlatformSecLibVlv2/SaveSecContext.c | 108 -
> .../SecGetPerformance.c | 83 -
> .../SecPlatformInformation.c | 77 -
> .../SecFspPlatformSecLibVlv2/SecRamInitData.c | 16 -
> .../SecTempRamSupport.c | 149 -
> .../SecFspPlatformSecLibVlv2/UartInit.c | 192 -
> Platform/Intel/Vlv2TbltDevicePkg/GenBiosId | Bin 12236 -> 0 bytes
> .../Intel/Vlv2TbltDevicePkg/GenBiosId.exe | Bin 384000 -> 0 bytes
> .../Vlv2TbltDevicePkg/Include/Guid/BiosId.h | 30 -
> .../Vlv2TbltDevicePkg/Include/Guid/IdccData.h | 104 -
> .../Vlv2TbltDevicePkg/Include/Guid/ItkData.h | 18 +-
> .../Include/Guid/PlatformInfo.h | 9 +-
> .../Include/Library/BiosIdLib.h | 22 +-
> .../Include/Library/EfiRegTableLib.h | 51 +-
> .../Include/Protocol/LpcWpc83627Policy.h | 92 -
> .../Include/Protocol/LpcWpce791Policy.h | 55 -
> .../Include/Protocol/TpmMp.h | 136 -
> .../Include/Protocol/UsbPolicy.h | 126 -
> .../Library/BiosIdLib/BiosIdLib.c | 279 +-
> .../Library/BiosIdLib/BiosIdLib.inf | 21 +-
> .../DxePlatformBootManagerLib/BdsPlatform.c | 1434 ++++++
> .../DxePlatformBootManagerLib/BdsPlatform.h | 253 +
> .../DxePlatformBootManagerLib.inf | 97 +
> .../DxePlatformBootManagerLib/MemoryTest.c | 83 +
> .../PlatformBootOption.c | 559 ++
> .../Library/EfiRegTableLib/EfiRegTableLib.c | 57 +-
> .../Library/EfiRegTableLib/EfiRegTableLib.inf | 12 +-
> .../Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c | 46 -
> .../Library/I2CLib/I2CLibNull.inf | 39 -
> .../Library/I2CLibDxe/I2CLib.c | 735 ---
> .../Library/I2CLibDxe/I2CLibDxe.inf | 39 -
> .../Library/I2CLibDxe/I2CRegs.h | 126 -
> .../Library/I2CLibPei/I2CAccess.h | 44 -
> .../Library/I2CLibPei/I2CDelayPei.c | 46 -
> .../Library/I2CLibPei/I2CDelayPei.h | 30 -
> .../Library/I2CLibPei/I2CIoLibPei.c | 178 -
> .../Library/I2CLibPei/I2CIoLibPei.h | 153 -
> .../Library/I2CLibPei/I2CLibPei.c | 638 ---
> .../Library/I2CLibPei/I2CLibPei.h | 280 -
> .../Library/I2CLibPei/I2CLibPei.inf | 40 -
> .../BoardClkGens/BoardClkGens.c | 23 +-
> .../BoardClkGens/BoardClkGens.h | 8 +-
> .../MultiPlatformLib/BoardGpios/BoardGpios.c | 12 +-
> .../MultiPlatformLib/BoardGpios/BoardGpios.h | 7 +-
> .../MultiPlatformLib/MultiPlatformLib.h | 11 +-
> .../MultiPlatformLib/MultiPlatformLib.inf | 11 +-
> .../Library/PlatformBdsLib/BdsPlatform.c | 3098 ------------
> .../Library/PlatformBdsLib/BdsPlatform.h | 516 --
> .../Library/PlatformBdsLib/PlatformBdsLib.inf | 128 -
> .../PlatformBdsLib/PlatformBdsStrings.uni | 30 -
> .../Library/PlatformBdsLib/PlatformData.c | 306 --
> .../Library/PlatformFspLib/PlatformFspLib.c | 44 -
> .../Library/PlatformFspLib/PlatformFspLib.inf | 49 -
> .../SerialPortLib/PlatformSerialPortLib.h | 53 -
> .../Library/SerialPortLib/SerialPortLib.c | 246 -
> .../Library/SerialPortLib/SerialPortLib.inf | 52 -
> .../Library/SerialPortLib/SioInit.c | 127 -
> .../Library/SerialPortLib/SioInit.h | 62 -
> .../Library/SmbusLib/CommonHeader.h | 26 -
> .../Library/SmbusLib/SmbusLib.c | 873 ----
> .../Library/SmbusLib/SmbusLib.inf | 46 -
> .../Metronome/LegacyMetronome.c | 185 -
> .../Metronome/LegacyMetronome.h | 64 -
> .../Vlv2TbltDevicePkg/Metronome/Metronome.inf | 49 -
> .../MonoStatusCode/MonoStatusCode.h | 47 +-
> .../MonoStatusCode/MonoStatusCode.inf | 9 +-
> .../Library/GenericBdsLib/BdsBoot.c | 4490 -----------------
> .../Library/GenericBdsLib/BdsConnect.c | 429 --
> .../Library/GenericBdsLib/BdsConsole.c | 1061 ----
> .../Library/GenericBdsLib/BdsMisc.c | 1575 ------
> .../Library/GenericBdsLib/DevicePath.c | 27 -
> .../Library/GenericBdsLib/GenericBdsLib.inf | 143 -
> .../Library/GenericBdsLib/GenericBdsLib.uni | 19 -
> .../GenericBdsLib/GenericBdsStrings.uni | 30 -
> .../Library/GenericBdsLib/InternalBdsLib.h | 173 -
> .../Library/GenericBdsLib/String.c | 26 -
> .../Library/GenericBdsLib/String.h | 42 -
> .../PciPlatform/PciPlatform.c | 7 +-
> .../PciPlatform/PciPlatform.inf | 9 +-
> .../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c | 951 ++++
> .../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h | 363 ++
> .../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf | 38 +
> .../PlatformCpuInfoDxe/PlatformCpuInfoDxe.c | 8 +-
> .../PlatformCpuInfoDxe/PlatformCpuInfoDxe.h | 17 +-
> .../PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf | 8 +-
> .../Vlv2TbltDevicePkg/PlatformDxe/BoardId.c | 45 +-
> .../PlatformDxe/ClockControl.c | 80 +-
> .../PlatformDxe/Configuration.h | 8 +-
> .../PlatformDxe/IchRegTable.c | 8 +-
> .../Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c | 72 -
> .../Vlv2TbltDevicePkg/PlatformDxe/Platform.c | 533 +-
> .../PlatformDxe/PlatformDxe.h | 521 +-
> .../PlatformDxe/PlatformDxe.inf | 28 +-
> .../PlatformDxe/SioPlatformPolicy.c | 82 -
> .../PlatformGopPolicy/PlatformGopPolicy.inf | 15 +-
> .../Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c | 319 --
> .../PlatformInitPei/MemoryCallback.c | 8 +-
> .../PlatformInitPei/MemoryPeim.c | 21 +-
> .../PlatformInitPei/PchInitPeim.c | 10 +-
> .../PlatformInitPei/PlatformEarlyInit.c | 209 +-
> .../PlatformInitPei/PlatformEarlyInit.h | 31 +-
> .../PlatformInitPei/PlatformInitPei.inf | 29 +-
> .../Vlv2TbltDevicePkg/PlatformPei/BootMode.c | 99 +-
> .../PlatformPei/CommonHeader.h | 12 +-
> .../PlatformPei/MemoryCallback.c | 8 +-
> .../Vlv2TbltDevicePkg/PlatformPei/Platform.c | 24 +-
> .../Vlv2TbltDevicePkg/PlatformPei/Platform.h | 27 +-
> .../PlatformPei/PlatformPei.inf | 12 +-
> .../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 28 +-
> .../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 286 +-
> .../Vlv2TbltDevicePkg/PlatformPkgConfig.dsc | 22 +-
> .../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 299 +-
> .../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 561 +-
> .../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 562 +--
> .../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 563 +--
> .../PlatformSetupDxe/PlatformSetupDxe.h | 30 +-
> .../PlatformSetupDxe/PlatformSetupDxe.inf | 17 +-
> .../PlatformSetupDxe/SetupFunctions.c | 38 +-
> .../PlatformSetupDxe/SetupInfoRecords.c | 572 +--
> .../Vlv2TbltDevicePkg/PlatformSmm/Platform.c | 196 +-
> .../PlatformSmm/PlatformSmm.inf | 34 +-
> .../Vlv2TbltDevicePkg/PlatformSmm/S3Save.c | 53 +-
> .../PlatformSmm/SmmPlatform.h | 111 +-
> .../PlatformSmm/SmmScriptSave.c | 252 -
> .../PlatformSmm/SmmScriptSave.h | 50 -
> .../Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf | 6 +-
> .../SmBiosMiscDxe/CommonHeader.h | 10 +-
> .../SmBiosMiscDxe/DataHubRecords.h | 2934 +++++++++++
> .../MiscBaseBoardManufacturerFunction.c | 8 +-
> .../SmBiosMiscDxe/MiscBiosVendorFunction.c | 9 +-
> .../SmBiosMiscDxe/MiscMemoryDeviceFunction.c | 318 +-
> .../SmBiosMiscDxe/MiscOemType0x94Function.c | 45 +-
> .../SmBiosMiscDxe/MiscProcessorCacheData.c | 11 +-
> .../MiscProcessorCacheFunction.c | 273 +-
> .../MiscProcessorInformationFunction.c | 203 +-
> .../MiscSubclassDriverDataTable.c | 14 +-
> .../MiscSubclassDriverEntryPoint.c | 13 +-
> .../MiscSystemManufacturerFunction.c | 10 +-
> .../SmBiosMiscDxe/SmBiosMiscDxe.inf | 18 +-
> .../SmmSwDispatch2OnSmmSwDispatchThunk.c | 459 --
> .../SmmSwDispatch2OnSmmSwDispatchThunk.inf | 54 -
> .../SmramSaveInfoHandlerSmm.c | 164 -
> .../SmramSaveInfoHandlerSmm.inf | 60 -
> .../Stitch/IFWIHeader/Vacant.bin | Bin 3928064 -> 0 bytes
> .../Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat | 270 -
> .../Stitch/MNW2_Stitch_Config.txt | 10 -
> .../Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c | 33 -
> .../Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf | 32 -
> .../VlvPlatformInitDxe/IgdOpRegion.c | 20 +-
> .../VlvPlatformInitDxe/IgdOpRegion.h | 27 +-
> .../VlvPlatformInitDxe/VlvPlatformInitDxe.inf | 14 +-
> .../Vlv2TbltDevicePkg/Wpce791/LpcDriver.c | 340 --
> .../Vlv2TbltDevicePkg/Wpce791/LpcDriver.h | 112 -
> .../Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c | 366 --
> .../Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h | 103 -
> .../Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c | 126 -
> .../Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h | 101 -
> .../Vlv2TbltDevicePkg/Wpce791/Wpce791.inf | 63 -
> Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat | 47 +-
> Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh | 52 +-
> .../Include/Protocol/SmmIchnDispatch.h | 183 +
> .../Vlv2DeviceRefCodePkg.dec | 5 +-
> 188 files changed, 8321 insertions(+), 28666 deletions(-)
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64D.env
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64R.env
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/BootScriptSaveDxe.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/InternalBootScriptSave.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/ScriptSave.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspAzaliaConfigData/AzaliaConfig.bin
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/BootModePei.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiFspHobProcessLibVlv2/FspHobProcessLibVlv2.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/FspPlatformSecLibVlv2.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/AsmSaveSecContext.asm
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Fsp.inc
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/PeiCoreEntry.asm
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/SecEntry.asm
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.S
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.asm
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/PlatformInit.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SaveSecContext.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecGetPerformance.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecPlatformInformation.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecRamInitData.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/SecTempRamSupport.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/UartInit.c
> delete mode 100755 Platform/Intel/Vlv2TbltDevicePkg/GenBiosId
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/GenBiosId.exe
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/BiosId.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpc83627Policy.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpce791Policy.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/TpmMp.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/UsbPolicy.h
> create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.c
> create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/BdsPlatform.h
> create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
> create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/MemoryTest.c
> create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBootManagerLib/PlatformBootOption.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNull.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLib.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLibDxe.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CRegs.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CAccess.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDelayPei.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIoLibPei.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLibPei.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsStrings.uni
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformData.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/PlatformFspLib.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/PlatformSerialPortLib.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SerialPortLib.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/SioInit.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/CommonHeader.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusLib.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Metronome/Metronome.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsBoot.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConnect.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsConsole.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/BdsMisc.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/DevicePath.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.uni
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsStrings.uni
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/InternalBdsLib.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFrameworkModulePkg/Library/GenericBdsLib/String.h
> create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c
> create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h
> create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/SioPlatformPolicy.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSave.h
> create mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRecords.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDispatchThunk/SmmSwDispatch2OnSmmSwDispatchThunk.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm/SmramSaveInfoHandlerSmm.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIHeader/Vacant.bin
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Stitch/MNW2_Stitch_Config.txt
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h
> delete mode 100644 Platform/Intel/Vlv2TbltDevicePkg/Wpce791/Wpce791.inf
> create mode 100644 Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/SmmIchnDispatch.h
>
> --
> 2.21.0.windows.1
>
>
>
>
>
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-01 4:04 ` [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies Gary Lin
@ 2019-07-01 23:07 ` Michael D Kinney
2019-07-02 9:48 ` Gary Lin
0 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-01 23:07 UTC (permalink / raw)
To: Gary Lin, devel@edk2.groups.io, Kinney, Michael D; +Cc: Qian, Yi, Sun, Zailiang
Hi Gary,
I recommend you rebase on top of this series.
I have verified Linux boots and I have been working
on the GCC and Linux build scripts as well.
Please let me know if you see any issues with this
series applied and I can help get them fixed.
Thanks,
Mike
> -----Original Message-----
> From: Gary Lin [mailto:GLin@suse.com]
> Sent: Sunday, June 30, 2019 9:04 PM
> To: devel@edk2.groups.io; Kinney, Michael D
> <michael.d.kinney@intel.com>
> Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> <zailiang.sun@intel.com>
> Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> Vlv2TbltDevicePkg: Remove Intel Framework dependencies
>
> On Sun, Jun 30, 2019 at 07:55:39PM -0700, Michael D
> Kinney wrote:
> > The following changes remove all dependencies on the
> IntelFrameworkPkg
> > and IntelFrameworkModulePkg from the Vlv2TbltDevicePkg
> platform
> > builds. These changes do depend on updates binaries
> on the edk2-non-osi repository.
> >
> Hi Michael,
>
> I am amending the bash scripts for gcc. The firmware I
> built is using the binaries from Development190216 and
> could boot into Linux successfully with some workarounds
> for Wpce791, Bds, and InteFspWrapper. The patches you
> posted eliminate those parts I have to work around.
>
> Just want to know if you need any assistance for the gcc
> build? I could rebase my work upon your patches and send
> them later.
>
> Thanks,
>
> Gary Lin
>
> > * Vlv2DeviceRefCodePkg: Add
> gEfiSmmIchnDispatchProtocolGuid
> > * Vlv2TbltDevicePkg: Reduce Intel Framework
> dependencies
> > * Vlv2TbltDevicePkg: Remove unused modules/libraries
> > * Vlv2TbltDevicePkg: Switch from ISA to SIO modules
> > * Vlv2TbltDevicePkg: Switch to CPU I/O 2 Protocol
> > * Vlv2TbltDevicePkg: Remove use of PS/2 Policy
> Protocol
> > * Vlv2TbltDevicePkg: Remove use of BIOS ID tools
> > * Vlv2TbltDevicePkg: Remove use of Data Hub Protocol
> > * Vlv2TbltDevicePkg: Use PI Spec SMBUS2 PPI
> > * Vlv2TbltDevicePkg: Switch to MdeModulePkg BdsDxe
> > * Vlv2TbltDevicePkg: Update boot mode/state behaviors
> > * Vlv2TbltDevicePkg/PlatformSmm: Switch to PI SMM
> Protocols
> > * Vlv2TbltDevicePkg: Change to PI Spec ACPI Table
> Protocol
> >
> > Cc: Zailiang Sun <zailiang.sun@intel.com>
> > Cc: Yi Qian <yi.qian@intel.com>
> > Signed-off-by: Michael D Kinney
> <michael.d.kinney@intel.com>
> >
> > Michael D Kinney (14):
> > Vlv2DeviceRefCodePkg: Add
> gEfiSmmIchnDispatchProtocolGuid
> > Vlv2TbltDevicePkg: Reduce Intel Framework
> dependencies
> > Vlv2TbltDevicePkg: Remove unused modules/libraries
> > Vlv2TbltDevicePkg: Switch from ISA to SIO modules
> > Vlv2TbltDevicePkg: Switch to CPU I/O 2 Protocol
> > Vlv2TbltDevicePkg: Remove use of PS/2 Policy
> Protocol
> > Vlv2TbltDevicePkg: Remove use of BIOS ID tools
> > Vlv2TbltDevicePkg: Remove use of Data Hub Protocol
> > Vlv2TbltDevicePkg: Use PI Spec SMBUS2 PPI
> > Vlv2TbltDevicePkg: Switch to MdeModulePkg BdsDxe
> > Vlv2TbltDevicePkg: Update boot mode/state behaviors
> > Vlv2TbltDevicePkg/PlatformSmm: Switch to PI SMM
> Protocols
> > Vlv2TbltDevicePkg: Change to PI Spec ACPI Table
> Protocol
> > Vlv2TbltDevicePkg/PlatformInitPei: Update
> MemoryTypeInformation
> >
> > .../AcpiPlatform/AcpiPlatform.c | 137
> +-
> > .../AcpiPlatform/AcpiPlatform.h | 11
> +-
> > .../AcpiPlatform/AcpiPlatform.inf | 14
> +-
> > Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env | 25
> -
> > Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env | 25
> -
> > .../Intel/Vlv2TbltDevicePkg/BiosIdx64D.env | 25
> -
> > .../Intel/Vlv2TbltDevicePkg/BiosIdx64R.env | 25
> -
> > .../BootScriptSaveDxe/BootScriptSaveDxe.inf | 60
> -
> > .../InternalBootScriptSave.h | 102
> -
> > .../BootScriptSaveDxe/ScriptSave.c | 626
> ---
> > .../Intel/Vlv2TbltDevicePkg/Build_IFWI.bat | 33
> -
> > .../Library/FmpDeviceLib/FmpDeviceLib.c | 12
> +-
> > .../FspAzaliaConfigData/AzaliaConfig.bin | Bin
> 3708 -> 0 bytes
> > .../FspSupport/BootModePei/BootModePei.c | 42
> -
> > .../FspSupport/BootModePei/BootModePei.inf | 40
> -
> > .../FspHobProcessLibVlv2.c | 421
> --
> > .../FspHobProcessLibVlv2.inf | 74
> -
> > .../FspPlatformSecLibVlv2.c | 144
> -
> > .../FspPlatformSecLibVlv2.inf | 82
> -
> > .../Ia32/AsmSaveSecContext.asm | 45
> -
> > .../SecFspPlatformSecLibVlv2/Ia32/Fsp.inc | 45
> -
> > .../Ia32/PeiCoreEntry.asm | 135
> -
> > .../Ia32/SecEntry.asm | 338
> --
> > .../SecFspPlatformSecLibVlv2/Ia32/Stack.S | 71
> -
> > .../SecFspPlatformSecLibVlv2/Ia32/Stack.asm | 76
> -
> > .../SecFspPlatformSecLibVlv2/PlatformInit.c | 36
> -
> > .../SecFspPlatformSecLibVlv2/SaveSecContext.c | 108
> -
> > .../SecGetPerformance.c | 83
> -
> > .../SecPlatformInformation.c | 77
> -
> > .../SecFspPlatformSecLibVlv2/SecRamInitData.c | 16
> -
> > .../SecTempRamSupport.c | 149
> -
> > .../SecFspPlatformSecLibVlv2/UartInit.c | 192
> -
> > Platform/Intel/Vlv2TbltDevicePkg/GenBiosId | Bin
> 12236 -> 0 bytes
> > .../Intel/Vlv2TbltDevicePkg/GenBiosId.exe | Bin
> 384000 -> 0 bytes
> > .../Vlv2TbltDevicePkg/Include/Guid/BiosId.h | 30
> -
> > .../Vlv2TbltDevicePkg/Include/Guid/IdccData.h | 104
> -
> > .../Vlv2TbltDevicePkg/Include/Guid/ItkData.h | 18
> +-
> > .../Include/Guid/PlatformInfo.h | 9
> +-
> > .../Include/Library/BiosIdLib.h | 22
> +-
> > .../Include/Library/EfiRegTableLib.h | 51
> +-
> > .../Include/Protocol/LpcWpc83627Policy.h | 92
> -
> > .../Include/Protocol/LpcWpce791Policy.h | 55
> -
> > .../Include/Protocol/TpmMp.h | 136
> -
> > .../Include/Protocol/UsbPolicy.h | 126
> -
> > .../Library/BiosIdLib/BiosIdLib.c | 279
> +-
> > .../Library/BiosIdLib/BiosIdLib.inf | 21
> +-
> > .../DxePlatformBootManagerLib/BdsPlatform.c | 1434
> ++++++
> > .../DxePlatformBootManagerLib/BdsPlatform.h | 253
> +
> > .../DxePlatformBootManagerLib.inf | 97
> +
> > .../DxePlatformBootManagerLib/MemoryTest.c | 83
> +
> > .../PlatformBootOption.c | 559
> ++
> > .../Library/EfiRegTableLib/EfiRegTableLib.c | 57
> +-
> > .../Library/EfiRegTableLib/EfiRegTableLib.inf | 12
> +-
> > .../Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c | 46
> -
> > .../Library/I2CLib/I2CLibNull.inf | 39
> -
> > .../Library/I2CLibDxe/I2CLib.c | 735
> ---
> > .../Library/I2CLibDxe/I2CLibDxe.inf | 39
> -
> > .../Library/I2CLibDxe/I2CRegs.h | 126
> -
> > .../Library/I2CLibPei/I2CAccess.h | 44
> -
> > .../Library/I2CLibPei/I2CDelayPei.c | 46
> -
> > .../Library/I2CLibPei/I2CDelayPei.h | 30
> -
> > .../Library/I2CLibPei/I2CIoLibPei.c | 178
> -
> > .../Library/I2CLibPei/I2CIoLibPei.h | 153
> -
> > .../Library/I2CLibPei/I2CLibPei.c | 638
> ---
> > .../Library/I2CLibPei/I2CLibPei.h | 280
> -
> > .../Library/I2CLibPei/I2CLibPei.inf | 40
> -
> > .../BoardClkGens/BoardClkGens.c | 23
> +-
> > .../BoardClkGens/BoardClkGens.h | 8
> +-
> > .../MultiPlatformLib/BoardGpios/BoardGpios.c | 12
> +-
> > .../MultiPlatformLib/BoardGpios/BoardGpios.h | 7
> +-
> > .../MultiPlatformLib/MultiPlatformLib.h | 11
> +-
> > .../MultiPlatformLib/MultiPlatformLib.inf | 11
> +-
> > .../Library/PlatformBdsLib/BdsPlatform.c | 3098
> ------------
> > .../Library/PlatformBdsLib/BdsPlatform.h | 516
> --
> > .../Library/PlatformBdsLib/PlatformBdsLib.inf | 128
> -
> > .../PlatformBdsLib/PlatformBdsStrings.uni | 30
> -
> > .../Library/PlatformBdsLib/PlatformData.c | 306
> --
> > .../Library/PlatformFspLib/PlatformFspLib.c | 44
> -
> > .../Library/PlatformFspLib/PlatformFspLib.inf | 49
> -
> > .../SerialPortLib/PlatformSerialPortLib.h | 53
> -
> > .../Library/SerialPortLib/SerialPortLib.c | 246
> -
> > .../Library/SerialPortLib/SerialPortLib.inf | 52
> -
> > .../Library/SerialPortLib/SioInit.c | 127
> -
> > .../Library/SerialPortLib/SioInit.h | 62
> -
> > .../Library/SmbusLib/CommonHeader.h | 26
> -
> > .../Library/SmbusLib/SmbusLib.c | 873
> ----
> > .../Library/SmbusLib/SmbusLib.inf | 46
> -
> > .../Metronome/LegacyMetronome.c | 185
> -
> > .../Metronome/LegacyMetronome.h | 64
> -
> > .../Vlv2TbltDevicePkg/Metronome/Metronome.inf | 49
> -
> > .../MonoStatusCode/MonoStatusCode.h | 47
> +-
> > .../MonoStatusCode/MonoStatusCode.inf | 9
> +-
> > .../Library/GenericBdsLib/BdsBoot.c | 4490
> -----------------
> > .../Library/GenericBdsLib/BdsConnect.c | 429
> --
> > .../Library/GenericBdsLib/BdsConsole.c | 1061
> ----
> > .../Library/GenericBdsLib/BdsMisc.c | 1575
> ------
> > .../Library/GenericBdsLib/DevicePath.c | 27
> -
> > .../Library/GenericBdsLib/GenericBdsLib.inf | 143
> -
> > .../Library/GenericBdsLib/GenericBdsLib.uni | 19
> -
> > .../GenericBdsLib/GenericBdsStrings.uni | 30
> -
> > .../Library/GenericBdsLib/InternalBdsLib.h | 173
> -
> > .../Library/GenericBdsLib/String.c | 26
> -
> > .../Library/GenericBdsLib/String.h | 42
> -
> > .../PciPlatform/PciPlatform.c | 7
> +-
> > .../PciPlatform/PciPlatform.inf | 9
> +-
> > .../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c | 951
> ++++
> > .../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h | 363
> ++
> > .../Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf | 38
> +
> > .../PlatformCpuInfoDxe/PlatformCpuInfoDxe.c | 8
> +-
> > .../PlatformCpuInfoDxe/PlatformCpuInfoDxe.h | 17
> +-
> > .../PlatformCpuInfoDxe/PlatformCpuInfoDxe.inf | 8
> +-
> > .../Vlv2TbltDevicePkg/PlatformDxe/BoardId.c | 45
> +-
> > .../PlatformDxe/ClockControl.c | 80
> +-
> > .../PlatformDxe/Configuration.h | 8
> +-
> > .../PlatformDxe/IchRegTable.c | 8
> +-
> > .../Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c | 72
> -
> > .../Vlv2TbltDevicePkg/PlatformDxe/Platform.c | 533
> +-
> > .../PlatformDxe/PlatformDxe.h | 521
> +-
> > .../PlatformDxe/PlatformDxe.inf | 28
> +-
> > .../PlatformDxe/SioPlatformPolicy.c | 82
> -
> > .../PlatformGopPolicy/PlatformGopPolicy.inf | 15
> +-
> > .../Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c | 319
> --
> > .../PlatformInitPei/MemoryCallback.c | 8
> +-
> > .../PlatformInitPei/MemoryPeim.c | 21
> +-
> > .../PlatformInitPei/PchInitPeim.c | 10
> +-
> > .../PlatformInitPei/PlatformEarlyInit.c | 209
> +-
> > .../PlatformInitPei/PlatformEarlyInit.h | 31
> +-
> > .../PlatformInitPei/PlatformInitPei.inf | 29
> +-
> > .../Vlv2TbltDevicePkg/PlatformPei/BootMode.c | 99
> +-
> > .../PlatformPei/CommonHeader.h | 12
> +-
> > .../PlatformPei/MemoryCallback.c | 8
> +-
> > .../Vlv2TbltDevicePkg/PlatformPei/Platform.c | 24
> +-
> > .../Vlv2TbltDevicePkg/PlatformPei/Platform.h | 27
> +-
> > .../PlatformPei/PlatformPei.inf | 12
> +-
> > .../Intel/Vlv2TbltDevicePkg/PlatformPkg.dec | 28
> +-
> > .../Intel/Vlv2TbltDevicePkg/PlatformPkg.fdf | 286
> +-
> > .../Vlv2TbltDevicePkg/PlatformPkgConfig.dsc | 22
> +-
> > .../Vlv2TbltDevicePkg/PlatformPkgGcc.fdf | 299
> +-
> > .../Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 561
> +-
> > .../Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 562
> +--
> > .../Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 563
> +--
> > .../PlatformSetupDxe/PlatformSetupDxe.h | 30
> +-
> > .../PlatformSetupDxe/PlatformSetupDxe.inf | 17
> +-
> > .../PlatformSetupDxe/SetupFunctions.c | 38
> +-
> > .../PlatformSetupDxe/SetupInfoRecords.c | 572
> +--
> > .../Vlv2TbltDevicePkg/PlatformSmm/Platform.c | 196
> +-
> > .../PlatformSmm/PlatformSmm.inf | 34
> +-
> > .../Vlv2TbltDevicePkg/PlatformSmm/S3Save.c | 53
> +-
> > .../PlatformSmm/SmmPlatform.h | 111
> +-
> > .../PlatformSmm/SmmScriptSave.c | 252
> -
> > .../PlatformSmm/SmmScriptSave.h | 50
> -
> > .../Vlv2TbltDevicePkg/PpmPolicy/PpmPolicy.inf | 6
> +-
> > .../SmBiosMiscDxe/CommonHeader.h | 10
> +-
> > .../SmBiosMiscDxe/DataHubRecords.h | 2934
> +++++++++++
> > .../MiscBaseBoardManufacturerFunction.c | 8
> +-
> > .../SmBiosMiscDxe/MiscBiosVendorFunction.c | 9
> +-
> > .../SmBiosMiscDxe/MiscMemoryDeviceFunction.c | 318
> +-
> > .../SmBiosMiscDxe/MiscOemType0x94Function.c | 45
> +-
> > .../SmBiosMiscDxe/MiscProcessorCacheData.c | 11
> +-
> > .../MiscProcessorCacheFunction.c | 273
> +-
> > .../MiscProcessorInformationFunction.c | 203
> +-
> > .../MiscSubclassDriverDataTable.c | 14
> +-
> > .../MiscSubclassDriverEntryPoint.c | 13
> +-
> > .../MiscSystemManufacturerFunction.c | 10
> +-
> > .../SmBiosMiscDxe/SmBiosMiscDxe.inf | 18
> +-
> > .../SmmSwDispatch2OnSmmSwDispatchThunk.c | 459
> --
> > .../SmmSwDispatch2OnSmmSwDispatchThunk.inf | 54
> -
> > .../SmramSaveInfoHandlerSmm.c | 164
> -
> > .../SmramSaveInfoHandlerSmm.inf | 60
> -
> > .../Stitch/IFWIHeader/Vacant.bin | Bin
> 3928064 -> 0 bytes
> > .../Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat | 270
> -
> > .../Stitch/MNW2_Stitch_Config.txt | 10
> -
> > .../Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c | 33
> -
> > .../Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf | 32
> -
> > .../VlvPlatformInitDxe/IgdOpRegion.c | 20
> +-
> > .../VlvPlatformInitDxe/IgdOpRegion.h | 27
> +-
> > .../VlvPlatformInitDxe/VlvPlatformInitDxe.inf | 14
> +-
> > .../Vlv2TbltDevicePkg/Wpce791/LpcDriver.c | 340
> --
> > .../Vlv2TbltDevicePkg/Wpce791/LpcDriver.h | 112
> -
> > .../Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c | 366
> --
> > .../Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h | 103
> -
> > .../Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c | 126
> -
> > .../Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h | 101 -
> > .../Vlv2TbltDevicePkg/Wpce791/Wpce791.inf | 63
> -
> > Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.bat | 47
> +-
> > Platform/Intel/Vlv2TbltDevicePkg/bld_vlv.sh | 52
> +-
> > .../Include/Protocol/SmmIchnDispatch.h | 183
> +
> > .../Vlv2DeviceRefCodePkg.dec | 5
> +-
> > 188 files changed, 8321 insertions(+), 28666
> deletions(-) delete
> > mode 100644
> Platform/Intel/Vlv2TbltDevicePkg/BiosIdD.env
> > delete mode 100644
> Platform/Intel/Vlv2TbltDevicePkg/BiosIdR.env
> > delete mode 100644
> Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64D.env
> > delete mode 100644
> Platform/Intel/Vlv2TbltDevicePkg/BiosIdx64R.env
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/BootS
> criptSaveDxe.i
> > nf delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/Inter
> nalBootScriptS
> > ave.h delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/BootScriptSaveDxe/Scrip
> tSave.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspAzaliaConfigData/Aza
> liaConfig.bin
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/
> BootModePei.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/BootModePei/
> BootModePei.in
> > f delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiF
> spHobProcessLi
> > bVlv2/FspHobProcessLibVlv2.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/PeiF
> spHobProcessLi
> > bVlv2/FspHobProcessLibVlv2.inf delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/FspPlatformSecLibVlv2.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/FspPlatformSecLibVlv2.inf delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/Ia32/AsmSaveSecContext.asm delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/Ia32/Fsp.inc delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/Ia32/PeiCoreEntry.asm delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/Ia32/SecEntry.asm delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/Ia32/Stack.S delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/Ia32/Stack.asm delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/PlatformInit.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/SaveSecContext.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/SecGetPerformance.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/SecPlatformInformation.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/SecRamInitData.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/SecTempRamSupport.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/FspSupport/Library/SecF
> spPlatformSecL
> > ibVlv2/UartInit.c delete mode 100755
> > Platform/Intel/Vlv2TbltDevicePkg/GenBiosId
> > delete mode 100644
> Platform/Intel/Vlv2TbltDevicePkg/GenBiosId.exe
> > delete mode 100644
> > Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/BiosId.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Include/Guid/IdccData.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpc
> 83627Policy.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/LpcWpc
> e791Policy.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/TpmMp.
> h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Include/Protocol/UsbPol
> icy.h
> > create mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBoot
> ManagerLib/Bds
> > Platform.c create mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBoot
> ManagerLib/Bds
> > Platform.h create mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBoot
> ManagerLib/Dxe
> > PlatformBootManagerLib.inf create mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBoot
> ManagerLib/Mem
> > oryTest.c create mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/DxePlatformBoot
> ManagerLib/Pla
> > tformBootOption.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLib.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLib/I2CLibNu
> ll.inf
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLi
> b.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CLi
> bDxe.inf
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibDxe/I2CRe
> gs.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CAc
> cess.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDe
> layPei.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CDe
> layPei.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIo
> LibPei.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CIo
> LibPei.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLi
> bPei.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLi
> bPei.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/I2CLibPei/I2CLi
> bPei.inf
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/
> BdsPlatform.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/
> BdsPlatform.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/
> PlatformBdsLib
> > .inf delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/
> PlatformBdsStr
> > ings.uni delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformBdsLib/
> PlatformData.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/
> PlatformFspLib
> > .c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/PlatformFspLib/
> PlatformFspLib
> > .inf delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/P
> latformSerialP
> > ortLib.h delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/S
> erialPortLib.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/S
> erialPortLib.i
> > nf delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/S
> ioInit.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/SerialPortLib/S
> ioInit.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/Common
> Header.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusL
> ib.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Library/SmbusLib/SmbusL
> ib.inf
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetrono
> me.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Metronome/LegacyMetrono
> me.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Metronome/Metronome.inf
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFramework
> ModulePkg/Libr
> > ary/GenericBdsLib/BdsBoot.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFramework
> ModulePkg/Libr
> > ary/GenericBdsLib/BdsConnect.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFramework
> ModulePkg/Libr
> > ary/GenericBdsLib/BdsConsole.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFramework
> ModulePkg/Libr
> > ary/GenericBdsLib/BdsMisc.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFramework
> ModulePkg/Libr
> > ary/GenericBdsLib/DevicePath.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFramework
> ModulePkg/Libr
> > ary/GenericBdsLib/GenericBdsLib.inf
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFramework
> ModulePkg/Libr
> > ary/GenericBdsLib/GenericBdsLib.uni
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFramework
> ModulePkg/Libr
> > ary/GenericBdsLib/GenericBdsStrings.uni
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFramework
> ModulePkg/Libr
> > ary/GenericBdsLib/InternalBdsLib.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFramework
> ModulePkg/Libr
> > ary/GenericBdsLib/String.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Override/IntelFramework
> ModulePkg/Libr
> > ary/GenericBdsLib/String.h create mode 100644
> > Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.c
> > create mode 100644
> Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.h
> > create mode 100644
> Platform/Intel/Vlv2TbltDevicePkg/PcuSio/PcuSio.inf
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/IdccInfo.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/PlatformDxe/SioPlatform
> Policy.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/PlatformInitPei/Dimm.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSa
> ve.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/PlatformSmm/SmmScriptSa
> ve.h
> > create mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/SmBiosMiscDxe/DataHubRe
> cords.h
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDi
> spatchThunk/Sm
> > mSwDispatch2OnSmmSwDispatchThunk.c
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/SmmSwDispatch2OnSmmSwDi
> spatchThunk/Sm
> > mSwDispatch2OnSmmSwDispatchThunk.inf
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm
> /SmramSaveInfo
> > HandlerSmm.c delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/SmramSaveInfoHandlerSmm
> /SmramSaveInfo
> > HandlerSmm.inf delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIHeader/Vacan
> t.bin
> > delete mode 100644
> > Platform/Intel/Vlv2TbltDevicePkg/Stitch/IFWIStitch.bat
> > delete mode 100644
> >
> Platform/Intel/Vlv2TbltDevicePkg/Stitch/MNW2_Stitch_Conf
> ig.txt
> > delete mode 100644
> Platform/Intel/Vlv2TbltDevicePkg/UiApp/FrontPage.c
> > delete mode 100644
> Platform/Intel/Vlv2TbltDevicePkg/UiApp/UiApp.inf
> > delete mode 100644
> > Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.c
> > delete mode 100644
> > Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcDriver.h
> > delete mode 100644
> > Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.c
> > delete mode 100644
> > Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcIsaAcpi.h
> > delete mode 100644
> Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.c
> > delete mode 100644
> Platform/Intel/Vlv2TbltDevicePkg/Wpce791/LpcSio.h
> > delete mode 100644
> > Platform/Intel/Vlv2TbltDevicePkg/Wpce791/Wpce791.inf
> > create mode 100644
> >
> Silicon/Intel/Vlv2DeviceRefCodePkg/Include/Protocol/SmmI
> chnDispatch.h
> >
> > --
> > 2.21.0.windows.1
> >
> >
> >
> >
> >
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-01 23:07 ` Michael D Kinney
@ 2019-07-02 9:48 ` Gary Lin
2019-07-02 16:49 ` Michael D Kinney
0 siblings, 1 reply; 42+ messages in thread
From: Gary Lin @ 2019-07-02 9:48 UTC (permalink / raw)
To: devel@edk2.groups.io, michael.d.kinney@intel.com; +Cc: Yi Qian, Zailiang Sun
On Mon, Jul 01, 2019 at 11:07:11PM +0000, Michael D Kinney wrote:
> Hi Gary,
>
> I recommend you rebase on top of this series.
>
> I have verified Linux boots and I have been working
> on the GCC and Linux build scripts as well.
>
> Please let me know if you see any issues with this
> series applied and I can help get them fixed.
>
Hi Mike,
I'm rebasing my patches and they are available in my branch:
https://github.com/lcp/edk2-platforms/commits/vlv2-fixes-wip
It's based on edk2(dcce9cbd48e07fcd11f7ef34cad48faf7bb61e6e)
and edk2-non-osi(de0a6bc19c4ee0468f04e4d37035cdc59558137f).
There are 3 problems I currently encountered, and maybe you can give me
some suggestions.
1. Missing DSDT
When compiling DSDT, iasl failed with this error:
DSDT.iiii 6077: Or(ShiftLeft(Derefof(Index(CDCT, \_SB.PCI0.GFX0.MCHK.DCFE)), 21),PARM, PARM)
Error 6163 - ^ Object is created temporarily in another method and cannot be accessed (\_SB.PCI0.GFX0. MCHK.DCFE)
The code is from Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGBDA.ASL
I have to comment out the line or iasl won't generate the aml file and
the OS would fail to get DSDT.
My acpica version is 20190509, and I vaguely remember that the older
acpica seems to be more tolerant to this error.
2. Crash at SMBIOS driver
When booting the system, I got the following error:
Loading driver at 0x00078DBA000 EntryPoint=0x00078DBEC3C MiscSubclass.efi
InstallProtocolInterface: BC62157E-3E33-4FEC-9920-2D3B36D750DF 78FE8D18
ProtectUefiImageCommon - 0x78FE8040
- 0x0000000078DBA000 - 0x0000000000007B80
PlatformInfoHob->BoardId [0xB0]
GetBiosVersionDateTime :MNW2MAX1.X64.0084.D01 01/01/2019 00:00
SmbiosAdd: Smbios type 0 with size 0x48 is added to 32-bit table
SmbiosAdd: Smbios type 0 with size 0x48 is added to 64-bit table
SmbiosCreateTable: Initialize 32-bit entry point structure
SmbiosCreateTable() re-allocate SMBIOS 32-bit table
SmbiosCreateTable: Initialize 64-bit entry point structure
SmbiosCreate64BitTable() re-allocate SMBIOS 64-bit table
Create Smbios Manu callback.
!!!! X64 Exception Type - 06(#UD - Invalid Opcode) CPU Apic ID - 00000000 !!!!
RIP - 0000000078DBEC26, CS - 0000000000000038, RFLAGS - 0000000000010206
RAX - 0000000000000000, RCX - 000000007984A5A0, RDX - 000000007A46E5FF
RBX - 000000007A46E920, RSP - 000000007A46E8B0, RBP - 0000000078DC0EC0
RSI - 0000000000000012, RDI - 0000000000000003
R8 - 800000000000000E, R9 - 000000007A46E920, R10 - 0000000078FE8398
R11 - 0000000000000001, R12 - 0000000078FE8798, R13 - 0000000078FE8898
R14 - 0000000078FE8818, R15 - 000000007A46EC60
DS - 0000000000000030, ES - 0000000000000030, FS - 0000000000000030
GS - 0000000000000030, SS - 0000000000000030
CR0 - 0000000080010013, CR2 - 0000000000000000, CR3 - 000000007A201000
CR4 - 0000000000000628, CR8 - 0000000000000000
DR0 - 0000000000000000, DR1 - 0000000000000000, DR2 - 0000000000000000
DR3 - 0000000000000000, DR6 - 00000000FFFF0FF8, DR7 - 0000000000000400
GDTR - 0000000079FFDA98 0000000000000047, LDTR - 0000000000000000
IDTR - 0000000079862018 0000000000000FFF, TR - 0000000000000000
FXSAVE_STATE - 000000007A46E510
!!!! Find image based on IP(0x78DBEC26) /home/gary/git/edk2-workspace/Build/Vlv2TbltDevicePkg/DEBUG_GCC5/X64/Vlv2TbltDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe/DEBUG/MiscSubclass.
dll (ImageBase=0000000078DBA000, EntryPoint=0000000078DBEC3C) !!!!
I disaseembled MiscSubclass.debug and found that the address is a "ud2"
instruction at
SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c:MiscBaseBoardManufacturer()
After adding a few more debug messages, the system crashed at another
function:
SmBiosMiscDxe/MiscSystemManufacturerFunction.c:AddSmbiosManuCallback()
If I added debug messages to both functions, the system booted
successfully. I currently didn't have any clue on this.
3. The firmware always booted into EFI shell.
I guess something went wrong with BDS. I haven't looked into this issue
yet.
Thanks,
Gary Lin
> Thanks,
>
> Mike
>
> > -----Original Message-----
> > From: Gary Lin [mailto:GLin@suse.com]
> > Sent: Sunday, June 30, 2019 9:04 PM
> > To: devel@edk2.groups.io; Kinney, Michael D
> > <michael.d.kinney@intel.com>
> > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > <zailiang.sun@intel.com>
> > Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> > Vlv2TbltDevicePkg: Remove Intel Framework dependencies
> >
> > On Sun, Jun 30, 2019 at 07:55:39PM -0700, Michael D
> > Kinney wrote:
> > > The following changes remove all dependencies on the
> > IntelFrameworkPkg
> > > and IntelFrameworkModulePkg from the Vlv2TbltDevicePkg
> > platform
> > > builds. These changes do depend on updates binaries
> > on the edk2-non-osi repository.
> > >
> > Hi Michael,
> >
> > I am amending the bash scripts for gcc. The firmware I
> > built is using the binaries from Development190216 and
> > could boot into Linux successfully with some workarounds
> > for Wpce791, Bds, and InteFspWrapper. The patches you
> > posted eliminate those parts I have to work around.
> >
> > Just want to know if you need any assistance for the gcc
> > build? I could rebase my work upon your patches and send
> > them later.
> >
> > Thanks,
> >
> > Gary Lin
> >
>
>
>
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-02 9:48 ` Gary Lin
@ 2019-07-02 16:49 ` Michael D Kinney
2019-07-02 21:11 ` Michael D Kinney
0 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-02 16:49 UTC (permalink / raw)
To: Gary Lin, devel@edk2.groups.io, Kinney, Michael D; +Cc: Qian, Yi, Sun, Zailiang
Hi Gary,
Thanks for the branch. I have the build working and
have reproduced the SMBIOS issue and am debugging that now.
Mike
> -----Original Message-----
> From: Gary Lin [mailto:GLin@suse.com]
> Sent: Tuesday, July 2, 2019 2:48 AM
> To: devel@edk2.groups.io; Kinney, Michael D
> <michael.d.kinney@intel.com>
> Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> <zailiang.sun@intel.com>
> Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> Vlv2TbltDevicePkg: Remove Intel Framework dependencies
>
> On Mon, Jul 01, 2019 at 11:07:11PM +0000, Michael D
> Kinney wrote:
> > Hi Gary,
> >
> > I recommend you rebase on top of this series.
> >
> > I have verified Linux boots and I have been working on
> the GCC and
> > Linux build scripts as well.
> >
> > Please let me know if you see any issues with this
> series applied and
> > I can help get them fixed.
> >
> Hi Mike,
>
> I'm rebasing my patches and they are available in my
> branch:
>
> https://github.com/lcp/edk2-platforms/commits/vlv2-
> fixes-wip
>
> It's based on
> edk2(dcce9cbd48e07fcd11f7ef34cad48faf7bb61e6e)
> and edk2-non-
> osi(de0a6bc19c4ee0468f04e4d37035cdc59558137f).
>
> There are 3 problems I currently encountered, and maybe
> you can give me some suggestions.
>
> 1. Missing DSDT
>
> When compiling DSDT, iasl failed with this error:
>
> DSDT.iiii 6077:
> Or(ShiftLeft(Derefof(Index(CDCT,
> \_SB.PCI0.GFX0.MCHK.DCFE)), 21),PARM, PARM)
> Error 6163 -
> ^ Object is created temporarily in another method and
> cannot be accessed (\_SB.PCI0.GFX0. MCHK.DCFE)
>
> The code is from
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGB
> DA.ASL
>
> I have to comment out the line or iasl won't generate
> the aml file and the OS would fail to get DSDT.
>
> My acpica version is 20190509, and I vaguely remember
> that the older acpica seems to be more tolerant to this
> error.
>
> 2. Crash at SMBIOS driver
>
> When booting the system, I got the following error:
>
> Loading driver at 0x00078DBA000 EntryPoint=0x00078DBEC3C
> MiscSubclass.efi
> InstallProtocolInterface: BC62157E-3E33-4FEC-9920-
> 2D3B36D750DF 78FE8D18 ProtectUefiImageCommon -
> 0x78FE8040
> - 0x0000000078DBA000 - 0x0000000000007B80
> PlatformInfoHob->BoardId [0xB0]
> GetBiosVersionDateTime :MNW2MAX1.X64.0084.D01 01/01/2019
> 00:00
> SmbiosAdd: Smbios type 0 with size 0x48 is added to 32-
> bit table
> SmbiosAdd: Smbios type 0 with size 0x48 is added to 64-
> bit table
> SmbiosCreateTable: Initialize 32-bit entry point
> structure
> SmbiosCreateTable() re-allocate SMBIOS 32-bit table
> SmbiosCreateTable: Initialize 64-bit entry point
> structure
> SmbiosCreate64BitTable() re-allocate SMBIOS 64-bit table
> Create Smbios Manu callback.
> !!!! X64 Exception Type - 06(#UD - Invalid Opcode) CPU
> Apic ID - 00000000 !!!!
> RIP - 0000000078DBEC26, CS - 0000000000000038, RFLAGS
> - 0000000000010206 RAX - 0000000000000000, RCX -
> 000000007984A5A0, RDX - 000000007A46E5FF RBX -
> 000000007A46E920, RSP - 000000007A46E8B0, RBP -
> 0000000078DC0EC0 RSI - 0000000000000012, RDI -
> 0000000000000003
> R8 - 800000000000000E, R9 - 000000007A46E920, R10 -
> 0000000078FE8398
> R11 - 0000000000000001, R12 - 0000000078FE8798, R13 -
> 0000000078FE8898
> R14 - 0000000078FE8818, R15 - 000000007A46EC60
> DS - 0000000000000030, ES - 0000000000000030, FS -
> 0000000000000030
> GS - 0000000000000030, SS - 0000000000000030
> CR0 - 0000000080010013, CR2 - 0000000000000000, CR3 -
> 000000007A201000
> CR4 - 0000000000000628, CR8 - 0000000000000000
> DR0 - 0000000000000000, DR1 - 0000000000000000, DR2 -
> 0000000000000000
> DR3 - 0000000000000000, DR6 - 00000000FFFF0FF8, DR7 -
> 0000000000000400 GDTR - 0000000079FFDA98
> 0000000000000047, LDTR - 0000000000000000
> IDTR - 0000000079862018 0000000000000FFF, TR -
> 0000000000000000
> FXSAVE_STATE - 000000007A46E510
> !!!! Find image based on IP(0x78DBEC26)
> /home/gary/git/edk2-
> workspace/Build/Vlv2TbltDevicePkg/DEBUG_GCC5/X64/Vlv2Tbl
> tDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe/DEBUG/MiscSubclas
> s.
> dll (ImageBase=0000000078DBA000,
> EntryPoint=0000000078DBEC3C) !!!!
>
> I disaseembled MiscSubclass.debug and found that the
> address is a "ud2"
> instruction at
> SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c:MiscBa
> seBoardManufacturer()
>
> After adding a few more debug messages, the system
> crashed at another
> function:
> SmBiosMiscDxe/MiscSystemManufacturerFunction.c:AddSmbios
> ManuCallback()
>
> If I added debug messages to both functions, the system
> booted successfully. I currently didn't have any clue on
> this.
>
> 3. The firmware always booted into EFI shell.
>
> I guess something went wrong with BDS. I haven't looked
> into this issue yet.
>
> Thanks,
>
> Gary Lin
>
> > Thanks,
> >
> > Mike
> >
> > > -----Original Message-----
> > > From: Gary Lin [mailto:GLin@suse.com]
> > > Sent: Sunday, June 30, 2019 9:04 PM
> > > To: devel@edk2.groups.io; Kinney, Michael D
> > > <michael.d.kinney@intel.com>
> > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > <zailiang.sun@intel.com>
> > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> 00/14]
> > > Vlv2TbltDevicePkg: Remove Intel Framework
> dependencies
> > >
> > > On Sun, Jun 30, 2019 at 07:55:39PM -0700, Michael D
> Kinney wrote:
> > > > The following changes remove all dependencies on
> the
> > > IntelFrameworkPkg
> > > > and IntelFrameworkModulePkg from the
> Vlv2TbltDevicePkg
> > > platform
> > > > builds. These changes do depend on updates
> binaries
> > > on the edk2-non-osi repository.
> > > >
> > > Hi Michael,
> > >
> > > I am amending the bash scripts for gcc. The firmware
> I built is
> > > using the binaries from Development190216 and could
> boot into Linux
> > > successfully with some workarounds for Wpce791, Bds,
> and
> > > InteFspWrapper. The patches you posted eliminate
> those parts I have
> > > to work around.
> > >
> > > Just want to know if you need any assistance for the
> gcc build? I
> > > could rebase my work upon your patches and send them
> later.
> > >
> > > Thanks,
> > >
> > > Gary Lin
> > >
> >
> >
> >
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-02 16:49 ` Michael D Kinney
@ 2019-07-02 21:11 ` Michael D Kinney
2019-07-03 3:57 ` Gary Lin
0 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-02 21:11 UTC (permalink / raw)
To: Gary Lin, devel@edk2.groups.io, Kinney, Michael D; +Cc: Qian, Yi, Sun, Zailiang
Hi Gary,
I have posted an update to your patches the removes the setting of WORKSPACE
and accesses all files relative to WORKSPACE in the Linux shell scripts.
It also fixes null pointer bugs in the SmbiosMiscDxe module.
https://github.com/mdkinney/edk2-platforms/tree/Bug_xxx_Vlv2_Linux_And_Smbios_Fixes
With these changes I can boot to the UEFI Shell and to Linux. Please verify from
your environments.
I see you have added the SDMMC modules, but I do not see that peripheral yet.
That feature looks like it needs some more debug. We may need to back out those
changes for now.
I agree there are ASL issues. The ASL code needs to be updated to the
latest ASL compiler.
Thanks,
Mike
> -----Original Message-----
> From: Kinney, Michael D
> Sent: Tuesday, July 2, 2019 9:50 AM
> To: Gary Lin <GLin@suse.com>; devel@edk2.groups.io;
> Kinney, Michael D <michael.d.kinney@intel.com>
> Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> <zailiang.sun@intel.com>
> Subject: RE: [edk2-devel] [edk2-platforms Patch 00/14]
> Vlv2TbltDevicePkg: Remove Intel Framework dependencies
>
> Hi Gary,
>
> Thanks for the branch. I have the build working and have
> reproduced the SMBIOS issue and am debugging that now.
>
> Mike
>
> > -----Original Message-----
> > From: Gary Lin [mailto:GLin@suse.com]
> > Sent: Tuesday, July 2, 2019 2:48 AM
> > To: devel@edk2.groups.io; Kinney, Michael D
> > <michael.d.kinney@intel.com>
> > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > <zailiang.sun@intel.com>
> > Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> > Vlv2TbltDevicePkg: Remove Intel Framework dependencies
> >
> > On Mon, Jul 01, 2019 at 11:07:11PM +0000, Michael D
> Kinney wrote:
> > > Hi Gary,
> > >
> > > I recommend you rebase on top of this series.
> > >
> > > I have verified Linux boots and I have been working
> on
> > the GCC and
> > > Linux build scripts as well.
> > >
> > > Please let me know if you see any issues with this
> > series applied and
> > > I can help get them fixed.
> > >
> > Hi Mike,
> >
> > I'm rebasing my patches and they are available in my
> > branch:
> >
> > https://github.com/lcp/edk2-platforms/commits/vlv2-
> > fixes-wip
> >
> > It's based on
> > edk2(dcce9cbd48e07fcd11f7ef34cad48faf7bb61e6e)
> > and edk2-non-
> > osi(de0a6bc19c4ee0468f04e4d37035cdc59558137f).
> >
> > There are 3 problems I currently encountered, and maybe
> you can give
> > me some suggestions.
> >
> > 1. Missing DSDT
> >
> > When compiling DSDT, iasl failed with this error:
> >
> > DSDT.iiii 6077:
> > Or(ShiftLeft(Derefof(Index(CDCT,
> > \_SB.PCI0.GFX0.MCHK.DCFE)), 21),PARM, PARM)
> > Error 6163 -
> > ^ Object is created temporarily in another method and
> cannot be
> > accessed (\_SB.PCI0.GFX0. MCHK.DCFE)
> >
> > The code is from
> >
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGB
> > DA.ASL
> >
> > I have to comment out the line or iasl won't generate
> the aml file and
> > the OS would fail to get DSDT.
> >
> > My acpica version is 20190509, and I vaguely remember
> that the older
> > acpica seems to be more tolerant to this error.
> >
> > 2. Crash at SMBIOS driver
> >
> > When booting the system, I got the following error:
> >
> > Loading driver at 0x00078DBA000
> EntryPoint=0x00078DBEC3C
> > MiscSubclass.efi
> > InstallProtocolInterface: BC62157E-3E33-4FEC-9920-
> 2D3B36D750DF
> > 78FE8D18 ProtectUefiImageCommon -
> > 0x78FE8040
> > - 0x0000000078DBA000 - 0x0000000000007B80
> > PlatformInfoHob->BoardId [0xB0]
> > GetBiosVersionDateTime :MNW2MAX1.X64.0084.D01
> 01/01/2019
> > 00:00
> > SmbiosAdd: Smbios type 0 with size 0x48 is added to 32-
> bit table
> > SmbiosAdd: Smbios type 0 with size 0x48 is added to 64-
> bit table
> > SmbiosCreateTable: Initialize 32-bit entry point
> structure
> > SmbiosCreateTable() re-allocate SMBIOS 32-bit table
> > SmbiosCreateTable: Initialize 64-bit entry point
> structure
> > SmbiosCreate64BitTable() re-allocate SMBIOS 64-bit
> table Create Smbios
> > Manu callback.
> > !!!! X64 Exception Type - 06(#UD - Invalid Opcode) CPU
> Apic ID -
> > 00000000 !!!!
> > RIP - 0000000078DBEC26, CS - 0000000000000038, RFLAGS
> > - 0000000000010206 RAX - 0000000000000000, RCX -
> 000000007984A5A0,
> > RDX - 000000007A46E5FF RBX - 000000007A46E920, RSP -
> > 000000007A46E8B0, RBP -
> > 0000000078DC0EC0 RSI - 0000000000000012, RDI -
> > 0000000000000003
> > R8 - 800000000000000E, R9 - 000000007A46E920, R10 -
> > 0000000078FE8398
> > R11 - 0000000000000001, R12 - 0000000078FE8798, R13 -
> > 0000000078FE8898
> > R14 - 0000000078FE8818, R15 - 000000007A46EC60
> > DS - 0000000000000030, ES - 0000000000000030, FS -
> > 0000000000000030
> > GS - 0000000000000030, SS - 0000000000000030
> > CR0 - 0000000080010013, CR2 - 0000000000000000, CR3 -
> > 000000007A201000
> > CR4 - 0000000000000628, CR8 - 0000000000000000
> > DR0 - 0000000000000000, DR1 - 0000000000000000, DR2 -
> > 0000000000000000
> > DR3 - 0000000000000000, DR6 - 00000000FFFF0FF8, DR7 -
> > 0000000000000400 GDTR - 0000000079FFDA98
> 0000000000000047, LDTR -
> > 0000000000000000
> > IDTR - 0000000079862018 0000000000000FFF, TR -
> > 0000000000000000
> > FXSAVE_STATE - 000000007A46E510
> > !!!! Find image based on IP(0x78DBEC26)
> > /home/gary/git/edk2-
> >
> workspace/Build/Vlv2TbltDevicePkg/DEBUG_GCC5/X64/Vlv2Tbl
> >
> tDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe/DEBUG/MiscSubclas
> > s.
> > dll (ImageBase=0000000078DBA000,
> > EntryPoint=0000000078DBEC3C) !!!!
> >
> > I disaseembled MiscSubclass.debug and found that the
> address is a
> > "ud2"
> > instruction at
> >
> SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c:MiscBa
> > seBoardManufacturer()
> >
> > After adding a few more debug messages, the system
> crashed at another
> > function:
> >
> SmBiosMiscDxe/MiscSystemManufacturerFunction.c:AddSmbios
> > ManuCallback()
> >
> > If I added debug messages to both functions, the system
> booted
> > successfully. I currently didn't have any clue on this.
> >
> > 3. The firmware always booted into EFI shell.
> >
> > I guess something went wrong with BDS. I haven't looked
> into this
> > issue yet.
> >
> > Thanks,
> >
> > Gary Lin
> >
> > > Thanks,
> > >
> > > Mike
> > >
> > > > -----Original Message-----
> > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > Sent: Sunday, June 30, 2019 9:04 PM
> > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > <michael.d.kinney@intel.com>
> > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > <zailiang.sun@intel.com>
> > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > 00/14]
> > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > dependencies
> > > >
> > > > On Sun, Jun 30, 2019 at 07:55:39PM -0700, Michael
> D
> > Kinney wrote:
> > > > > The following changes remove all dependencies on
> > the
> > > > IntelFrameworkPkg
> > > > > and IntelFrameworkModulePkg from the
> > Vlv2TbltDevicePkg
> > > > platform
> > > > > builds. These changes do depend on updates
> > binaries
> > > > on the edk2-non-osi repository.
> > > > >
> > > > Hi Michael,
> > > >
> > > > I am amending the bash scripts for gcc. The
> firmware
> > I built is
> > > > using the binaries from Development190216 and could
> > boot into Linux
> > > > successfully with some workarounds for Wpce791,
> Bds,
> > and
> > > > InteFspWrapper. The patches you posted eliminate
> > those parts I have
> > > > to work around.
> > > >
> > > > Just want to know if you need any assistance for
> the
> > gcc build? I
> > > > could rebase my work upon your patches and send
> them
> > later.
> > > >
> > > > Thanks,
> > > >
> > > > Gary Lin
> > > >
> > >
> > >
> > >
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-02 21:11 ` Michael D Kinney
@ 2019-07-03 3:57 ` Gary Lin
2019-07-09 3:52 ` Michael D Kinney
0 siblings, 1 reply; 42+ messages in thread
From: Gary Lin @ 2019-07-03 3:57 UTC (permalink / raw)
To: Kinney, Michael D ; +Cc: devel@edk2.groups.io, Yi Qian, Zailiang Sun
On Tue, Jul 02, 2019 at 09:11:06PM +0000, Kinney, Michael D wrote:
> Hi Gary,
>
Hi Mike,
> I have posted an update to your patches the removes the setting of WORKSPACE
> and accesses all files relative to WORKSPACE in the Linux shell scripts.
> It also fixes null pointer bugs in the SmbiosMiscDxe module.
>
> https://github.com/mdkinney/edk2-platforms/tree/Bug_xxx_Vlv2_Linux_And_Smbios_Fixes
>
> With these changes I can boot to the UEFI Shell and to Linux. Please verify from
> your environments.
>
The fix for SmbiosMiscDxe works for me. Thanks for that!
I pushed another commit to my branch to check WORKSPACE to notify the
user:
https://github.com/lcp/edk2-platforms/commit/fc530689e913e3de25ca2c553d616b9cef28901c
We probably have to update Readme.md later. It's already dated.
> I see you have added the SDMMC modules, but I do not see that peripheral yet.
> That feature looks like it needs some more debug. We may need to back out those
> changes for now.
>
I saw the SD card settings in the South Cluster Configuration menu even
without those SDMMC modules, so they are probably from the edk2-non-osi
drivers. However, the SD card didn't work until I added the drivers from
MdeModulePkg, so I need those drivers at least for my Minnowboard Turbot.
Thanks,
Gary Lin
> I agree there are ASL issues. The ASL code needs to be updated to the
> latest ASL compiler.
>
> Thanks,
>
> Mike
>
> > -----Original Message-----
> > From: Kinney, Michael D
> > Sent: Tuesday, July 2, 2019 9:50 AM
> > To: Gary Lin <GLin@suse.com>; devel@edk2.groups.io;
> > Kinney, Michael D <michael.d.kinney@intel.com>
> > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > <zailiang.sun@intel.com>
> > Subject: RE: [edk2-devel] [edk2-platforms Patch 00/14]
> > Vlv2TbltDevicePkg: Remove Intel Framework dependencies
> >
> > Hi Gary,
> >
> > Thanks for the branch. I have the build working and have
> > reproduced the SMBIOS issue and am debugging that now.
> >
> > Mike
> >
> > > -----Original Message-----
> > > From: Gary Lin [mailto:GLin@suse.com]
> > > Sent: Tuesday, July 2, 2019 2:48 AM
> > > To: devel@edk2.groups.io; Kinney, Michael D
> > > <michael.d.kinney@intel.com>
> > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > <zailiang.sun@intel.com>
> > > Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> > > Vlv2TbltDevicePkg: Remove Intel Framework dependencies
> > >
> > > On Mon, Jul 01, 2019 at 11:07:11PM +0000, Michael D
> > Kinney wrote:
> > > > Hi Gary,
> > > >
> > > > I recommend you rebase on top of this series.
> > > >
> > > > I have verified Linux boots and I have been working
> > on
> > > the GCC and
> > > > Linux build scripts as well.
> > > >
> > > > Please let me know if you see any issues with this
> > > series applied and
> > > > I can help get them fixed.
> > > >
> > > Hi Mike,
> > >
> > > I'm rebasing my patches and they are available in my
> > > branch:
> > >
> > > https://github.com/lcp/edk2-platforms/commits/vlv2-
> > > fixes-wip
> > >
> > > It's based on
> > > edk2(dcce9cbd48e07fcd11f7ef34cad48faf7bb61e6e)
> > > and edk2-non-
> > > osi(de0a6bc19c4ee0468f04e4d37035cdc59558137f).
> > >
> > > There are 3 problems I currently encountered, and maybe
> > you can give
> > > me some suggestions.
> > >
> > > 1. Missing DSDT
> > >
> > > When compiling DSDT, iasl failed with this error:
> > >
> > > DSDT.iiii 6077:
> > > Or(ShiftLeft(Derefof(Index(CDCT,
> > > \_SB.PCI0.GFX0.MCHK.DCFE)), 21),PARM, PARM)
> > > Error 6163 -
> > > ^ Object is created temporarily in another method and
> > cannot be
> > > accessed (\_SB.PCI0.GFX0. MCHK.DCFE)
> > >
> > > The code is from
> > >
> > Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGB
> > > DA.ASL
> > >
> > > I have to comment out the line or iasl won't generate
> > the aml file and
> > > the OS would fail to get DSDT.
> > >
> > > My acpica version is 20190509, and I vaguely remember
> > that the older
> > > acpica seems to be more tolerant to this error.
> > >
> > > 2. Crash at SMBIOS driver
> > >
> > > When booting the system, I got the following error:
> > >
> > > Loading driver at 0x00078DBA000
> > EntryPoint=0x00078DBEC3C
> > > MiscSubclass.efi
> > > InstallProtocolInterface: BC62157E-3E33-4FEC-9920-
> > 2D3B36D750DF
> > > 78FE8D18 ProtectUefiImageCommon -
> > > 0x78FE8040
> > > - 0x0000000078DBA000 - 0x0000000000007B80
> > > PlatformInfoHob->BoardId [0xB0]
> > > GetBiosVersionDateTime :MNW2MAX1.X64.0084.D01
> > 01/01/2019
> > > 00:00
> > > SmbiosAdd: Smbios type 0 with size 0x48 is added to 32-
> > bit table
> > > SmbiosAdd: Smbios type 0 with size 0x48 is added to 64-
> > bit table
> > > SmbiosCreateTable: Initialize 32-bit entry point
> > structure
> > > SmbiosCreateTable() re-allocate SMBIOS 32-bit table
> > > SmbiosCreateTable: Initialize 64-bit entry point
> > structure
> > > SmbiosCreate64BitTable() re-allocate SMBIOS 64-bit
> > table Create Smbios
> > > Manu callback.
> > > !!!! X64 Exception Type - 06(#UD - Invalid Opcode) CPU
> > Apic ID -
> > > 00000000 !!!!
> > > RIP - 0000000078DBEC26, CS - 0000000000000038, RFLAGS
> > > - 0000000000010206 RAX - 0000000000000000, RCX -
> > 000000007984A5A0,
> > > RDX - 000000007A46E5FF RBX - 000000007A46E920, RSP -
> > > 000000007A46E8B0, RBP -
> > > 0000000078DC0EC0 RSI - 0000000000000012, RDI -
> > > 0000000000000003
> > > R8 - 800000000000000E, R9 - 000000007A46E920, R10 -
> > > 0000000078FE8398
> > > R11 - 0000000000000001, R12 - 0000000078FE8798, R13 -
> > > 0000000078FE8898
> > > R14 - 0000000078FE8818, R15 - 000000007A46EC60
> > > DS - 0000000000000030, ES - 0000000000000030, FS -
> > > 0000000000000030
> > > GS - 0000000000000030, SS - 0000000000000030
> > > CR0 - 0000000080010013, CR2 - 0000000000000000, CR3 -
> > > 000000007A201000
> > > CR4 - 0000000000000628, CR8 - 0000000000000000
> > > DR0 - 0000000000000000, DR1 - 0000000000000000, DR2 -
> > > 0000000000000000
> > > DR3 - 0000000000000000, DR6 - 00000000FFFF0FF8, DR7 -
> > > 0000000000000400 GDTR - 0000000079FFDA98
> > 0000000000000047, LDTR -
> > > 0000000000000000
> > > IDTR - 0000000079862018 0000000000000FFF, TR -
> > > 0000000000000000
> > > FXSAVE_STATE - 000000007A46E510
> > > !!!! Find image based on IP(0x78DBEC26)
> > > /home/gary/git/edk2-
> > >
> > workspace/Build/Vlv2TbltDevicePkg/DEBUG_GCC5/X64/Vlv2Tbl
> > >
> > tDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe/DEBUG/MiscSubclas
> > > s.
> > > dll (ImageBase=0000000078DBA000,
> > > EntryPoint=0000000078DBEC3C) !!!!
> > >
> > > I disaseembled MiscSubclass.debug and found that the
> > address is a
> > > "ud2"
> > > instruction at
> > >
> > SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c:MiscBa
> > > seBoardManufacturer()
> > >
> > > After adding a few more debug messages, the system
> > crashed at another
> > > function:
> > >
> > SmBiosMiscDxe/MiscSystemManufacturerFunction.c:AddSmbios
> > > ManuCallback()
> > >
> > > If I added debug messages to both functions, the system
> > booted
> > > successfully. I currently didn't have any clue on this.
> > >
> > > 3. The firmware always booted into EFI shell.
> > >
> > > I guess something went wrong with BDS. I haven't looked
> > into this
> > > issue yet.
> > >
> > > Thanks,
> > >
> > > Gary Lin
> > >
> > > > Thanks,
> > > >
> > > > Mike
> > > >
> > > > > -----Original Message-----
> > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > Sent: Sunday, June 30, 2019 9:04 PM
> > > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > > <michael.d.kinney@intel.com>
> > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > > <zailiang.sun@intel.com>
> > > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > > 00/14]
> > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > dependencies
> > > > >
> > > > > On Sun, Jun 30, 2019 at 07:55:39PM -0700, Michael
> > D
> > > Kinney wrote:
> > > > > > The following changes remove all dependencies on
> > > the
> > > > > IntelFrameworkPkg
> > > > > > and IntelFrameworkModulePkg from the
> > > Vlv2TbltDevicePkg
> > > > > platform
> > > > > > builds. These changes do depend on updates
> > > binaries
> > > > > on the edk2-non-osi repository.
> > > > > >
> > > > > Hi Michael,
> > > > >
> > > > > I am amending the bash scripts for gcc. The
> > firmware
> > > I built is
> > > > > using the binaries from Development190216 and could
> > > boot into Linux
> > > > > successfully with some workarounds for Wpce791,
> > Bds,
> > > and
> > > > > InteFspWrapper. The patches you posted eliminate
> > > those parts I have
> > > > > to work around.
> > > > >
> > > > > Just want to know if you need any assistance for
> > the
> > > gcc build? I
> > > > > could rebase my work upon your patches and send
> > them
> > > later.
> > > > >
> > > > > Thanks,
> > > > >
> > > > > Gary Lin
> > > > >
> > > >
> > > >
> > > >
>
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-03 3:57 ` Gary Lin
@ 2019-07-09 3:52 ` Michael D Kinney
2019-07-09 6:04 ` Gary Lin
0 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-09 3:52 UTC (permalink / raw)
To: devel@edk2.groups.io, glin@suse.com, Kinney, Michael D
Cc: Qian, Yi, Sun, Zailiang
Hi Gary,
I picked up the changes on your branch. I re-enabled the BIOS ID
Feature and added support for IA32 GCC builds, so the builds
available from Windows and Linux are matched now.
I have posted my updated branch here:
https://github.com/mdkinney/edk2-platforms/tree/Bug_xxx_Vlv2_Linux_And_Smbios_Fixes_V2
I also verified that the SD Card support does work, so I am
keeping that change.
I agree the Readme is out of date. I will work on that and
add to the branch referenced above tomorrow.
Thanks,
Mike
> -----Original Message-----
> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io]
> On Behalf Of Gary Lin
> Sent: Tuesday, July 2, 2019 8:57 PM
> To: Kinney, Michael D <michael.d.kinney@intel.com>
> Cc: devel@edk2.groups.io; Qian, Yi <yi.qian@intel.com>;
> Sun, Zailiang <zailiang.sun@intel.com>
> Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> Vlv2TbltDevicePkg: Remove Intel Framework dependencies
>
> On Tue, Jul 02, 2019 at 09:11:06PM +0000, Kinney,
> Michael D wrote:
> > Hi Gary,
> >
> Hi Mike,
>
> > I have posted an update to your patches the removes the
> setting of
> > WORKSPACE and accesses all files relative to WORKSPACE
> in the Linux shell scripts.
> > It also fixes null pointer bugs in the SmbiosMiscDxe
> module.
> >
> > https://github.com/mdkinney/edk2-
> platforms/tree/Bug_xxx_Vlv2_Linux_And
> > _Smbios_Fixes
> >
> > With these changes I can boot to the UEFI Shell and to
> Linux. Please
> > verify from your environments.
> >
> The fix for SmbiosMiscDxe works for me. Thanks for that!
>
> I pushed another commit to my branch to check WORKSPACE
> to notify the
> user:
>
> https://github.com/lcp/edk2-
> platforms/commit/fc530689e913e3de25ca2c553d616b9cef28901c
>
> We probably have to update Readme.md later. It's already
> dated.
>
> > I see you have added the SDMMC modules, but I do not
> see that peripheral yet.
> > That feature looks like it needs some more debug. We
> may need to back
> > out those changes for now.
> >
> I saw the SD card settings in the South Cluster
> Configuration menu even without those SDMMC modules, so
> they are probably from the edk2-non-osi drivers. However,
> the SD card didn't work until I added the drivers from
> MdeModulePkg, so I need those drivers at least for my
> Minnowboard Turbot.
>
> Thanks,
>
> Gary Lin
>
> > I agree there are ASL issues. The ASL code needs to be
> updated to the
> > latest ASL compiler.
> >
> > Thanks,
> >
> > Mike
> >
> > > -----Original Message-----
> > > From: Kinney, Michael D
> > > Sent: Tuesday, July 2, 2019 9:50 AM
> > > To: Gary Lin <GLin@suse.com>; devel@edk2.groups.io;
> Kinney, Michael
> > > D <michael.d.kinney@intel.com>
> > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > <zailiang.sun@intel.com>
> > > Subject: RE: [edk2-devel] [edk2-platforms Patch
> 00/14]
> > > Vlv2TbltDevicePkg: Remove Intel Framework
> dependencies
> > >
> > > Hi Gary,
> > >
> > > Thanks for the branch. I have the build working and
> have reproduced
> > > the SMBIOS issue and am debugging that now.
> > >
> > > Mike
> > >
> > > > -----Original Message-----
> > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > Sent: Tuesday, July 2, 2019 2:48 AM
> > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > <michael.d.kinney@intel.com>
> > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > <zailiang.sun@intel.com>
> > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> 00/14]
> > > > Vlv2TbltDevicePkg: Remove Intel Framework
> dependencies
> > > >
> > > > On Mon, Jul 01, 2019 at 11:07:11PM +0000, Michael
> D
> > > Kinney wrote:
> > > > > Hi Gary,
> > > > >
> > > > > I recommend you rebase on top of this series.
> > > > >
> > > > > I have verified Linux boots and I have been
> working
> > > on
> > > > the GCC and
> > > > > Linux build scripts as well.
> > > > >
> > > > > Please let me know if you see any issues with
> this
> > > > series applied and
> > > > > I can help get them fixed.
> > > > >
> > > > Hi Mike,
> > > >
> > > > I'm rebasing my patches and they are available in
> my
> > > > branch:
> > > >
> > > > https://github.com/lcp/edk2-platforms/commits/vlv2-
> > > > fixes-wip
> > > >
> > > > It's based on
> > > > edk2(dcce9cbd48e07fcd11f7ef34cad48faf7bb61e6e)
> > > > and edk2-non-
> > > > osi(de0a6bc19c4ee0468f04e4d37035cdc59558137f).
> > > >
> > > > There are 3 problems I currently encountered, and
> maybe
> > > you can give
> > > > me some suggestions.
> > > >
> > > > 1. Missing DSDT
> > > >
> > > > When compiling DSDT, iasl failed with this error:
> > > >
> > > > DSDT.iiii 6077:
> > > > Or(ShiftLeft(Derefof(Index(CDCT,
> > > > \_SB.PCI0.GFX0.MCHK.DCFE)), 21),PARM, PARM)
> > > > Error 6163 -
> > > > ^ Object is created temporarily in another method
> and
> > > cannot be
> > > > accessed (\_SB.PCI0.GFX0. MCHK.DCFE)
> > > >
> > > > The code is from
> > > >
> > >
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGB
> > > > DA.ASL
> > > >
> > > > I have to comment out the line or iasl won't
> generate
> > > the aml file and
> > > > the OS would fail to get DSDT.
> > > >
> > > > My acpica version is 20190509, and I vaguely
> remember
> > > that the older
> > > > acpica seems to be more tolerant to this error.
> > > >
> > > > 2. Crash at SMBIOS driver
> > > >
> > > > When booting the system, I got the following error:
> > > >
> > > > Loading driver at 0x00078DBA000
> > > EntryPoint=0x00078DBEC3C
> > > > MiscSubclass.efi
> > > > InstallProtocolInterface: BC62157E-3E33-4FEC-9920-
> > > 2D3B36D750DF
> > > > 78FE8D18 ProtectUefiImageCommon -
> > > > 0x78FE8040
> > > > - 0x0000000078DBA000 - 0x0000000000007B80
> > > > PlatformInfoHob->BoardId [0xB0]
> > > > GetBiosVersionDateTime :MNW2MAX1.X64.0084.D01
> > > 01/01/2019
> > > > 00:00
> > > > SmbiosAdd: Smbios type 0 with size 0x48 is added to
> 32-
> > > bit table
> > > > SmbiosAdd: Smbios type 0 with size 0x48 is added to
> 64-
> > > bit table
> > > > SmbiosCreateTable: Initialize 32-bit entry point
> > > structure
> > > > SmbiosCreateTable() re-allocate SMBIOS 32-bit table
> > > > SmbiosCreateTable: Initialize 64-bit entry point
> > > structure
> > > > SmbiosCreate64BitTable() re-allocate SMBIOS 64-bit
> > > table Create Smbios
> > > > Manu callback.
> > > > !!!! X64 Exception Type - 06(#UD - Invalid Opcode)
> CPU
> > > Apic ID -
> > > > 00000000 !!!!
> > > > RIP - 0000000078DBEC26, CS - 0000000000000038,
> RFLAGS
> > > > - 0000000000010206 RAX - 0000000000000000, RCX -
> > > 000000007984A5A0,
> > > > RDX - 000000007A46E5FF RBX - 000000007A46E920, RSP
> -
> > > > 000000007A46E8B0, RBP -
> > > > 0000000078DC0EC0 RSI - 0000000000000012, RDI -
> > > > 0000000000000003
> > > > R8 - 800000000000000E, R9 - 000000007A46E920,
> R10 -
> > > > 0000000078FE8398
> > > > R11 - 0000000000000001, R12 - 0000000078FE8798,
> R13 -
> > > > 0000000078FE8898
> > > > R14 - 0000000078FE8818, R15 - 000000007A46EC60
> > > > DS - 0000000000000030, ES - 0000000000000030, FS
> -
> > > > 0000000000000030
> > > > GS - 0000000000000030, SS - 0000000000000030
> > > > CR0 - 0000000080010013, CR2 - 0000000000000000,
> CR3 -
> > > > 000000007A201000
> > > > CR4 - 0000000000000628, CR8 - 0000000000000000
> > > > DR0 - 0000000000000000, DR1 - 0000000000000000,
> DR2 -
> > > > 0000000000000000
> > > > DR3 - 0000000000000000, DR6 - 00000000FFFF0FF8,
> DR7 -
> > > > 0000000000000400 GDTR - 0000000079FFDA98
> > > 0000000000000047, LDTR -
> > > > 0000000000000000
> > > > IDTR - 0000000079862018 0000000000000FFF, TR -
> > > > 0000000000000000
> > > > FXSAVE_STATE - 000000007A46E510
> > > > !!!! Find image based on IP(0x78DBEC26)
> > > > /home/gary/git/edk2-
> > > >
> > >
> workspace/Build/Vlv2TbltDevicePkg/DEBUG_GCC5/X64/Vlv2Tbl
> > > >
> > >
> tDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe/DEBUG/MiscSubclas
> > > > s.
> > > > dll (ImageBase=0000000078DBA000,
> > > > EntryPoint=0000000078DBEC3C) !!!!
> > > >
> > > > I disaseembled MiscSubclass.debug and found that
> the
> > > address is a
> > > > "ud2"
> > > > instruction at
> > > >
> > >
> SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c:MiscBa
> > > > seBoardManufacturer()
> > > >
> > > > After adding a few more debug messages, the system
> > > crashed at another
> > > > function:
> > > >
> > >
> SmBiosMiscDxe/MiscSystemManufacturerFunction.c:AddSmbios
> > > > ManuCallback()
> > > >
> > > > If I added debug messages to both functions, the
> system
> > > booted
> > > > successfully. I currently didn't have any clue on
> this.
> > > >
> > > > 3. The firmware always booted into EFI shell.
> > > >
> > > > I guess something went wrong with BDS. I haven't
> looked
> > > into this
> > > > issue yet.
> > > >
> > > > Thanks,
> > > >
> > > > Gary Lin
> > > >
> > > > > Thanks,
> > > > >
> > > > > Mike
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > > Sent: Sunday, June 30, 2019 9:04 PM
> > > > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > > > <michael.d.kinney@intel.com>
> > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > > > <zailiang.sun@intel.com>
> > > > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > > > 00/14]
> > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > dependencies
> > > > > >
> > > > > > On Sun, Jun 30, 2019 at 07:55:39PM -0700,
> Michael
> > > D
> > > > Kinney wrote:
> > > > > > > The following changes remove all dependencies
> on
> > > > the
> > > > > > IntelFrameworkPkg
> > > > > > > and IntelFrameworkModulePkg from the
> > > > Vlv2TbltDevicePkg
> > > > > > platform
> > > > > > > builds. These changes do depend on updates
> > > > binaries
> > > > > > on the edk2-non-osi repository.
> > > > > > >
> > > > > > Hi Michael,
> > > > > >
> > > > > > I am amending the bash scripts for gcc. The
> > > firmware
> > > > I built is
> > > > > > using the binaries from Development190216 and
> could
> > > > boot into Linux
> > > > > > successfully with some workarounds for Wpce791,
> > > Bds,
> > > > and
> > > > > > InteFspWrapper. The patches you posted
> eliminate
> > > > those parts I have
> > > > > > to work around.
> > > > > >
> > > > > > Just want to know if you need any assistance
> for
> > > the
> > > > gcc build? I
> > > > > > could rebase my work upon your patches and send
> > > them
> > > > later.
> > > > > >
> > > > > > Thanks,
> > > > > >
> > > > > > Gary Lin
> > > > > >
> > > > >
> > > > >
> > > > >
> >
>
>
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-09 3:52 ` Michael D Kinney
@ 2019-07-09 6:04 ` Gary Lin
2019-07-10 3:38 ` Michael D Kinney
0 siblings, 1 reply; 42+ messages in thread
From: Gary Lin @ 2019-07-09 6:04 UTC (permalink / raw)
To: devel@edk2.groups.io, michael.d.kinney@intel.com; +Cc: Yi Qian, Zailiang Sun
On Tue, Jul 09, 2019 at 03:52:37AM +0000, Michael D Kinney wrote:
> Hi Gary,
>
Hi Mike,
> I picked up the changes on your branch. I re-enabled the BIOS ID
> Feature and added support for IA32 GCC builds, so the builds
> available from Windows and Linux are matched now.
>
> I have posted my updated branch here:
>
> https://github.com/mdkinney/edk2-platforms/tree/Bug_xxx_Vlv2_Linux_And_Smbios_Fixes_V2
>
> I also verified that the SD Card support does work, so I am
> keeping that change.
>
I tested the branch + my ASL workaround and booted into Linux
successfully.
> I agree the Readme is out of date. I will work on that and
> add to the branch referenced above tomorrow.
>
Thanks!
Gary Lin
> Thanks,
>
> Mike
>
> > -----Original Message-----
> > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io]
> > On Behalf Of Gary Lin
> > Sent: Tuesday, July 2, 2019 8:57 PM
> > To: Kinney, Michael D <michael.d.kinney@intel.com>
> > Cc: devel@edk2.groups.io; Qian, Yi <yi.qian@intel.com>;
> > Sun, Zailiang <zailiang.sun@intel.com>
> > Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> > Vlv2TbltDevicePkg: Remove Intel Framework dependencies
> >
> > On Tue, Jul 02, 2019 at 09:11:06PM +0000, Kinney,
> > Michael D wrote:
> > > Hi Gary,
> > >
> > Hi Mike,
> >
> > > I have posted an update to your patches the removes the
> > setting of
> > > WORKSPACE and accesses all files relative to WORKSPACE
> > in the Linux shell scripts.
> > > It also fixes null pointer bugs in the SmbiosMiscDxe
> > module.
> > >
> > > https://github.com/mdkinney/edk2-
> > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > _Smbios_Fixes
> > >
> > > With these changes I can boot to the UEFI Shell and to
> > Linux. Please
> > > verify from your environments.
> > >
> > The fix for SmbiosMiscDxe works for me. Thanks for that!
> >
> > I pushed another commit to my branch to check WORKSPACE
> > to notify the
> > user:
> >
> > https://github.com/lcp/edk2-
> > platforms/commit/fc530689e913e3de25ca2c553d616b9cef28901c
> >
> > We probably have to update Readme.md later. It's already
> > dated.
> >
> > > I see you have added the SDMMC modules, but I do not
> > see that peripheral yet.
> > > That feature looks like it needs some more debug. We
> > may need to back
> > > out those changes for now.
> > >
> > I saw the SD card settings in the South Cluster
> > Configuration menu even without those SDMMC modules, so
> > they are probably from the edk2-non-osi drivers. However,
> > the SD card didn't work until I added the drivers from
> > MdeModulePkg, so I need those drivers at least for my
> > Minnowboard Turbot.
> >
> > Thanks,
> >
> > Gary Lin
> >
> > > I agree there are ASL issues. The ASL code needs to be
> > updated to the
> > > latest ASL compiler.
> > >
> > > Thanks,
> > >
> > > Mike
> > >
> > > > -----Original Message-----
> > > > From: Kinney, Michael D
> > > > Sent: Tuesday, July 2, 2019 9:50 AM
> > > > To: Gary Lin <GLin@suse.com>; devel@edk2.groups.io;
> > Kinney, Michael
> > > > D <michael.d.kinney@intel.com>
> > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > <zailiang.sun@intel.com>
> > > > Subject: RE: [edk2-devel] [edk2-platforms Patch
> > 00/14]
> > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > dependencies
> > > >
> > > > Hi Gary,
> > > >
> > > > Thanks for the branch. I have the build working and
> > have reproduced
> > > > the SMBIOS issue and am debugging that now.
> > > >
> > > > Mike
> > > >
> > > > > -----Original Message-----
> > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > Sent: Tuesday, July 2, 2019 2:48 AM
> > > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > > <michael.d.kinney@intel.com>
> > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > > <zailiang.sun@intel.com>
> > > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > 00/14]
> > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > dependencies
> > > > >
> > > > > On Mon, Jul 01, 2019 at 11:07:11PM +0000, Michael
> > D
> > > > Kinney wrote:
> > > > > > Hi Gary,
> > > > > >
> > > > > > I recommend you rebase on top of this series.
> > > > > >
> > > > > > I have verified Linux boots and I have been
> > working
> > > > on
> > > > > the GCC and
> > > > > > Linux build scripts as well.
> > > > > >
> > > > > > Please let me know if you see any issues with
> > this
> > > > > series applied and
> > > > > > I can help get them fixed.
> > > > > >
> > > > > Hi Mike,
> > > > >
> > > > > I'm rebasing my patches and they are available in
> > my
> > > > > branch:
> > > > >
> > > > > https://github.com/lcp/edk2-platforms/commits/vlv2-
> > > > > fixes-wip
> > > > >
> > > > > It's based on
> > > > > edk2(dcce9cbd48e07fcd11f7ef34cad48faf7bb61e6e)
> > > > > and edk2-non-
> > > > > osi(de0a6bc19c4ee0468f04e4d37035cdc59558137f).
> > > > >
> > > > > There are 3 problems I currently encountered, and
> > maybe
> > > > you can give
> > > > > me some suggestions.
> > > > >
> > > > > 1. Missing DSDT
> > > > >
> > > > > When compiling DSDT, iasl failed with this error:
> > > > >
> > > > > DSDT.iiii 6077:
> > > > > Or(ShiftLeft(Derefof(Index(CDCT,
> > > > > \_SB.PCI0.GFX0.MCHK.DCFE)), 21),PARM, PARM)
> > > > > Error 6163 -
> > > > > ^ Object is created temporarily in another method
> > and
> > > > cannot be
> > > > > accessed (\_SB.PCI0.GFX0. MCHK.DCFE)
> > > > >
> > > > > The code is from
> > > > >
> > > >
> > Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGB
> > > > > DA.ASL
> > > > >
> > > > > I have to comment out the line or iasl won't
> > generate
> > > > the aml file and
> > > > > the OS would fail to get DSDT.
> > > > >
> > > > > My acpica version is 20190509, and I vaguely
> > remember
> > > > that the older
> > > > > acpica seems to be more tolerant to this error.
> > > > >
> > > > > 2. Crash at SMBIOS driver
> > > > >
> > > > > When booting the system, I got the following error:
> > > > >
> > > > > Loading driver at 0x00078DBA000
> > > > EntryPoint=0x00078DBEC3C
> > > > > MiscSubclass.efi
> > > > > InstallProtocolInterface: BC62157E-3E33-4FEC-9920-
> > > > 2D3B36D750DF
> > > > > 78FE8D18 ProtectUefiImageCommon -
> > > > > 0x78FE8040
> > > > > - 0x0000000078DBA000 - 0x0000000000007B80
> > > > > PlatformInfoHob->BoardId [0xB0]
> > > > > GetBiosVersionDateTime :MNW2MAX1.X64.0084.D01
> > > > 01/01/2019
> > > > > 00:00
> > > > > SmbiosAdd: Smbios type 0 with size 0x48 is added to
> > 32-
> > > > bit table
> > > > > SmbiosAdd: Smbios type 0 with size 0x48 is added to
> > 64-
> > > > bit table
> > > > > SmbiosCreateTable: Initialize 32-bit entry point
> > > > structure
> > > > > SmbiosCreateTable() re-allocate SMBIOS 32-bit table
> > > > > SmbiosCreateTable: Initialize 64-bit entry point
> > > > structure
> > > > > SmbiosCreate64BitTable() re-allocate SMBIOS 64-bit
> > > > table Create Smbios
> > > > > Manu callback.
> > > > > !!!! X64 Exception Type - 06(#UD - Invalid Opcode)
> > CPU
> > > > Apic ID -
> > > > > 00000000 !!!!
> > > > > RIP - 0000000078DBEC26, CS - 0000000000000038,
> > RFLAGS
> > > > > - 0000000000010206 RAX - 0000000000000000, RCX -
> > > > 000000007984A5A0,
> > > > > RDX - 000000007A46E5FF RBX - 000000007A46E920, RSP
> > -
> > > > > 000000007A46E8B0, RBP -
> > > > > 0000000078DC0EC0 RSI - 0000000000000012, RDI -
> > > > > 0000000000000003
> > > > > R8 - 800000000000000E, R9 - 000000007A46E920,
> > R10 -
> > > > > 0000000078FE8398
> > > > > R11 - 0000000000000001, R12 - 0000000078FE8798,
> > R13 -
> > > > > 0000000078FE8898
> > > > > R14 - 0000000078FE8818, R15 - 000000007A46EC60
> > > > > DS - 0000000000000030, ES - 0000000000000030, FS
> > -
> > > > > 0000000000000030
> > > > > GS - 0000000000000030, SS - 0000000000000030
> > > > > CR0 - 0000000080010013, CR2 - 0000000000000000,
> > CR3 -
> > > > > 000000007A201000
> > > > > CR4 - 0000000000000628, CR8 - 0000000000000000
> > > > > DR0 - 0000000000000000, DR1 - 0000000000000000,
> > DR2 -
> > > > > 0000000000000000
> > > > > DR3 - 0000000000000000, DR6 - 00000000FFFF0FF8,
> > DR7 -
> > > > > 0000000000000400 GDTR - 0000000079FFDA98
> > > > 0000000000000047, LDTR -
> > > > > 0000000000000000
> > > > > IDTR - 0000000079862018 0000000000000FFF, TR -
> > > > > 0000000000000000
> > > > > FXSAVE_STATE - 000000007A46E510
> > > > > !!!! Find image based on IP(0x78DBEC26)
> > > > > /home/gary/git/edk2-
> > > > >
> > > >
> > workspace/Build/Vlv2TbltDevicePkg/DEBUG_GCC5/X64/Vlv2Tbl
> > > > >
> > > >
> > tDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe/DEBUG/MiscSubclas
> > > > > s.
> > > > > dll (ImageBase=0000000078DBA000,
> > > > > EntryPoint=0000000078DBEC3C) !!!!
> > > > >
> > > > > I disaseembled MiscSubclass.debug and found that
> > the
> > > > address is a
> > > > > "ud2"
> > > > > instruction at
> > > > >
> > > >
> > SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c:MiscBa
> > > > > seBoardManufacturer()
> > > > >
> > > > > After adding a few more debug messages, the system
> > > > crashed at another
> > > > > function:
> > > > >
> > > >
> > SmBiosMiscDxe/MiscSystemManufacturerFunction.c:AddSmbios
> > > > > ManuCallback()
> > > > >
> > > > > If I added debug messages to both functions, the
> > system
> > > > booted
> > > > > successfully. I currently didn't have any clue on
> > this.
> > > > >
> > > > > 3. The firmware always booted into EFI shell.
> > > > >
> > > > > I guess something went wrong with BDS. I haven't
> > looked
> > > > into this
> > > > > issue yet.
> > > > >
> > > > > Thanks,
> > > > >
> > > > > Gary Lin
> > > > >
> > > > > > Thanks,
> > > > > >
> > > > > > Mike
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > > > Sent: Sunday, June 30, 2019 9:04 PM
> > > > > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > > > > <michael.d.kinney@intel.com>
> > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > > > > <zailiang.sun@intel.com>
> > > > > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > > > > 00/14]
> > > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > > dependencies
> > > > > > >
> > > > > > > On Sun, Jun 30, 2019 at 07:55:39PM -0700,
> > Michael
> > > > D
> > > > > Kinney wrote:
> > > > > > > > The following changes remove all dependencies
> > on
> > > > > the
> > > > > > > IntelFrameworkPkg
> > > > > > > > and IntelFrameworkModulePkg from the
> > > > > Vlv2TbltDevicePkg
> > > > > > > platform
> > > > > > > > builds. These changes do depend on updates
> > > > > binaries
> > > > > > > on the edk2-non-osi repository.
> > > > > > > >
> > > > > > > Hi Michael,
> > > > > > >
> > > > > > > I am amending the bash scripts for gcc. The
> > > > firmware
> > > > > I built is
> > > > > > > using the binaries from Development190216 and
> > could
> > > > > boot into Linux
> > > > > > > successfully with some workarounds for Wpce791,
> > > > Bds,
> > > > > and
> > > > > > > InteFspWrapper. The patches you posted
> > eliminate
> > > > > those parts I have
> > > > > > > to work around.
> > > > > > >
> > > > > > > Just want to know if you need any assistance
> > for
> > > > the
> > > > > gcc build? I
> > > > > > > could rebase my work upon your patches and send
> > > > them
> > > > > later.
> > > > > > >
> > > > > > > Thanks,
> > > > > > >
> > > > > > > Gary Lin
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > >
> >
> >
>
>
>
>
>
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-09 6:04 ` Gary Lin
@ 2019-07-10 3:38 ` Michael D Kinney
2019-07-10 4:14 ` Gary Lin
0 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-10 3:38 UTC (permalink / raw)
To: devel@edk2.groups.io, glin@suse.com, Kinney, Michael D
Cc: Qian, Yi, Sun, Zailiang
Hi Gary,
I have pushed 2 more patches to my branch. One fixes the
ASL issue without removing the code. The second is a clean
up to all the DSC files and build scripts to make everything
more consistent and remove more unused content.
https://github.com/mdkinney/edk2-platforms/tree/Bug_xxx_Vlv2_Linux_And_Smbios_Fixes_V2
Please test this to make sure it still works.
I will work on the Readme and will review the series to prepare
for sending the patch email review tomorrow.
Thanks for all your help and testing.
Mike
> -----Original Message-----
> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io]
> On Behalf Of Gary Lin
> Sent: Monday, July 8, 2019 11:04 PM
> To: devel@edk2.groups.io; Kinney, Michael D
> <michael.d.kinney@intel.com>
> Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> <zailiang.sun@intel.com>
> Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> Vlv2TbltDevicePkg: Remove Intel Framework dependencies
>
> On Tue, Jul 09, 2019 at 03:52:37AM +0000, Michael D
> Kinney wrote:
> > Hi Gary,
> >
> Hi Mike,
>
> > I picked up the changes on your branch. I re-enabled
> the BIOS ID
> > Feature and added support for IA32 GCC builds, so the
> builds available
> > from Windows and Linux are matched now.
> >
> > I have posted my updated branch here:
> >
> > https://github.com/mdkinney/edk2-
> platforms/tree/Bug_xxx_Vlv2_Linux_And
> > _Smbios_Fixes_V2
> >
> > I also verified that the SD Card support does work, so
> I am keeping
> > that change.
> >
> I tested the branch + my ASL workaround and booted into
> Linux successfully.
>
> > I agree the Readme is out of date. I will work on that
> and add to the
> > branch referenced above tomorrow.
> >
> Thanks!
>
> Gary Lin
>
> > Thanks,
> >
> > Mike
> >
> > > -----Original Message-----
> > > From: devel@edk2.groups.io
> [mailto:devel@edk2.groups.io] On Behalf
> > > Of Gary Lin
> > > Sent: Tuesday, July 2, 2019 8:57 PM
> > > To: Kinney, Michael D <michael.d.kinney@intel.com>
> > > Cc: devel@edk2.groups.io; Qian, Yi
> <yi.qian@intel.com>; Sun,
> > > Zailiang <zailiang.sun@intel.com>
> > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> 00/14]
> > > Vlv2TbltDevicePkg: Remove Intel Framework
> dependencies
> > >
> > > On Tue, Jul 02, 2019 at 09:11:06PM +0000, Kinney,
> Michael D wrote:
> > > > Hi Gary,
> > > >
> > > Hi Mike,
> > >
> > > > I have posted an update to your patches the removes
> the
> > > setting of
> > > > WORKSPACE and accesses all files relative to
> WORKSPACE
> > > in the Linux shell scripts.
> > > > It also fixes null pointer bugs in the
> SmbiosMiscDxe
> > > module.
> > > >
> > > > https://github.com/mdkinney/edk2-
> > > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > > _Smbios_Fixes
> > > >
> > > > With these changes I can boot to the UEFI Shell and
> to
> > > Linux. Please
> > > > verify from your environments.
> > > >
> > > The fix for SmbiosMiscDxe works for me. Thanks for
> that!
> > >
> > > I pushed another commit to my branch to check
> WORKSPACE to notify
> > > the
> > > user:
> > >
> > > https://github.com/lcp/edk2-
> > >
> platforms/commit/fc530689e913e3de25ca2c553d616b9cef28901c
> > >
> > > We probably have to update Readme.md later. It's
> already dated.
> > >
> > > > I see you have added the SDMMC modules, but I do
> not
> > > see that peripheral yet.
> > > > That feature looks like it needs some more debug.
> We
> > > may need to back
> > > > out those changes for now.
> > > >
> > > I saw the SD card settings in the South Cluster
> Configuration menu
> > > even without those SDMMC modules, so they are
> probably from the
> > > edk2-non-osi drivers. However, the SD card didn't
> work until I added
> > > the drivers from MdeModulePkg, so I need those
> drivers at least for
> > > my Minnowboard Turbot.
> > >
> > > Thanks,
> > >
> > > Gary Lin
> > >
> > > > I agree there are ASL issues. The ASL code needs
> to be
> > > updated to the
> > > > latest ASL compiler.
> > > >
> > > > Thanks,
> > > >
> > > > Mike
> > > >
> > > > > -----Original Message-----
> > > > > From: Kinney, Michael D
> > > > > Sent: Tuesday, July 2, 2019 9:50 AM
> > > > > To: Gary Lin <GLin@suse.com>;
> devel@edk2.groups.io;
> > > Kinney, Michael
> > > > > D <michael.d.kinney@intel.com>
> > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > > <zailiang.sun@intel.com>
> > > > > Subject: RE: [edk2-devel] [edk2-platforms Patch
> > > 00/14]
> > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > dependencies
> > > > >
> > > > > Hi Gary,
> > > > >
> > > > > Thanks for the branch. I have the build working
> and
> > > have reproduced
> > > > > the SMBIOS issue and am debugging that now.
> > > > >
> > > > > Mike
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > > Sent: Tuesday, July 2, 2019 2:48 AM
> > > > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > > > <michael.d.kinney@intel.com>
> > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > > > <zailiang.sun@intel.com>
> > > > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > > 00/14]
> > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > dependencies
> > > > > >
> > > > > > On Mon, Jul 01, 2019 at 11:07:11PM +0000,
> Michael
> > > D
> > > > > Kinney wrote:
> > > > > > > Hi Gary,
> > > > > > >
> > > > > > > I recommend you rebase on top of this series.
> > > > > > >
> > > > > > > I have verified Linux boots and I have been
> > > working
> > > > > on
> > > > > > the GCC and
> > > > > > > Linux build scripts as well.
> > > > > > >
> > > > > > > Please let me know if you see any issues with
> > > this
> > > > > > series applied and
> > > > > > > I can help get them fixed.
> > > > > > >
> > > > > > Hi Mike,
> > > > > >
> > > > > > I'm rebasing my patches and they are available
> in
> > > my
> > > > > > branch:
> > > > > >
> > > > > > https://github.com/lcp/edk2-
> platforms/commits/vlv2-
> > > > > > fixes-wip
> > > > > >
> > > > > > It's based on
> > > > > > edk2(dcce9cbd48e07fcd11f7ef34cad48faf7bb61e6e)
> > > > > > and edk2-non-
> > > > > > osi(de0a6bc19c4ee0468f04e4d37035cdc59558137f).
> > > > > >
> > > > > > There are 3 problems I currently encountered,
> and
> > > maybe
> > > > > you can give
> > > > > > me some suggestions.
> > > > > >
> > > > > > 1. Missing DSDT
> > > > > >
> > > > > > When compiling DSDT, iasl failed with this
> error:
> > > > > >
> > > > > > DSDT.iiii 6077:
> > > > > > Or(ShiftLeft(Derefof(Index(CDCT,
> \_SB.PCI0.GFX0.MCHK.DCFE)),
> > > > > > 21),PARM, PARM)
> > > > > > Error 6163 -
> > > > > > ^ Object is created temporarily in another
> method
> > > and
> > > > > cannot be
> > > > > > accessed (\_SB.PCI0.GFX0. MCHK.DCFE)
> > > > > >
> > > > > > The code is from
> > > > > >
> > > > >
> > >
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGB
> > > > > > DA.ASL
> > > > > >
> > > > > > I have to comment out the line or iasl won't
> > > generate
> > > > > the aml file and
> > > > > > the OS would fail to get DSDT.
> > > > > >
> > > > > > My acpica version is 20190509, and I vaguely
> > > remember
> > > > > that the older
> > > > > > acpica seems to be more tolerant to this error.
> > > > > >
> > > > > > 2. Crash at SMBIOS driver
> > > > > >
> > > > > > When booting the system, I got the following
> error:
> > > > > >
> > > > > > Loading driver at 0x00078DBA000
> > > > > EntryPoint=0x00078DBEC3C
> > > > > > MiscSubclass.efi
> > > > > > InstallProtocolInterface: BC62157E-3E33-4FEC-
> 9920-
> > > > > 2D3B36D750DF
> > > > > > 78FE8D18 ProtectUefiImageCommon -
> > > > > > 0x78FE8040
> > > > > > - 0x0000000078DBA000 - 0x0000000000007B80
> > > > > > PlatformInfoHob->BoardId [0xB0]
> > > > > > GetBiosVersionDateTime :MNW2MAX1.X64.0084.D01
> > > > > 01/01/2019
> > > > > > 00:00
> > > > > > SmbiosAdd: Smbios type 0 with size 0x48 is
> added to
> > > 32-
> > > > > bit table
> > > > > > SmbiosAdd: Smbios type 0 with size 0x48 is
> added to
> > > 64-
> > > > > bit table
> > > > > > SmbiosCreateTable: Initialize 32-bit entry
> point
> > > > > structure
> > > > > > SmbiosCreateTable() re-allocate SMBIOS 32-bit
> table
> > > > > > SmbiosCreateTable: Initialize 64-bit entry
> point
> > > > > structure
> > > > > > SmbiosCreate64BitTable() re-allocate SMBIOS 64-
> bit
> > > > > table Create Smbios
> > > > > > Manu callback.
> > > > > > !!!! X64 Exception Type - 06(#UD - Invalid
> Opcode)
> > > CPU
> > > > > Apic ID -
> > > > > > 00000000 !!!!
> > > > > > RIP - 0000000078DBEC26, CS -
> 0000000000000038,
> > > RFLAGS
> > > > > > - 0000000000010206 RAX - 0000000000000000, RCX
> -
> > > > > 000000007984A5A0,
> > > > > > RDX - 000000007A46E5FF RBX - 000000007A46E920,
> RSP
> > > -
> > > > > > 000000007A46E8B0, RBP -
> > > > > > 0000000078DC0EC0 RSI - 0000000000000012, RDI -
> > > > > > 0000000000000003
> > > > > > R8 - 800000000000000E, R9 -
> 000000007A46E920,
> > > R10 -
> > > > > > 0000000078FE8398
> > > > > > R11 - 0000000000000001, R12 -
> 0000000078FE8798,
> > > R13 -
> > > > > > 0000000078FE8898
> > > > > > R14 - 0000000078FE8818, R15 - 000000007A46EC60
> > > > > > DS - 0000000000000030, ES -
> 0000000000000030, FS
> > > -
> > > > > > 0000000000000030
> > > > > > GS - 0000000000000030, SS - 0000000000000030
> > > > > > CR0 - 0000000080010013, CR2 -
> 0000000000000000,
> > > CR3 -
> > > > > > 000000007A201000
> > > > > > CR4 - 0000000000000628, CR8 - 0000000000000000
> > > > > > DR0 - 0000000000000000, DR1 -
> 0000000000000000,
> > > DR2 -
> > > > > > 0000000000000000
> > > > > > DR3 - 0000000000000000, DR6 -
> 00000000FFFF0FF8,
> > > DR7 -
> > > > > > 0000000000000400 GDTR - 0000000079FFDA98
> > > > > 0000000000000047, LDTR -
> > > > > > 0000000000000000
> > > > > > IDTR - 0000000079862018 0000000000000FFF, TR
> -
> > > > > > 0000000000000000
> > > > > > FXSAVE_STATE - 000000007A46E510 !!!! Find image
> based on
> > > > > > IP(0x78DBEC26)
> > > > > > /home/gary/git/edk2-
> > > > > >
> > > > >
> > >
> workspace/Build/Vlv2TbltDevicePkg/DEBUG_GCC5/X64/Vlv2Tbl
> > > > > >
> > > > >
> > >
> tDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe/DEBUG/MiscSubclas
> > > > > > s.
> > > > > > dll (ImageBase=0000000078DBA000,
> > > > > > EntryPoint=0000000078DBEC3C) !!!!
> > > > > >
> > > > > > I disaseembled MiscSubclass.debug and found
> that
> > > the
> > > > > address is a
> > > > > > "ud2"
> > > > > > instruction at
> > > > > >
> > > > >
> > >
> SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c:MiscBa
> > > > > > seBoardManufacturer()
> > > > > >
> > > > > > After adding a few more debug messages, the
> system
> > > > > crashed at another
> > > > > > function:
> > > > > >
> > > > >
> > >
> SmBiosMiscDxe/MiscSystemManufacturerFunction.c:AddSmbios
> > > > > > ManuCallback()
> > > > > >
> > > > > > If I added debug messages to both functions,
> the
> > > system
> > > > > booted
> > > > > > successfully. I currently didn't have any clue
> on
> > > this.
> > > > > >
> > > > > > 3. The firmware always booted into EFI shell.
> > > > > >
> > > > > > I guess something went wrong with BDS. I
> haven't
> > > looked
> > > > > into this
> > > > > > issue yet.
> > > > > >
> > > > > > Thanks,
> > > > > >
> > > > > > Gary Lin
> > > > > >
> > > > > > > Thanks,
> > > > > > >
> > > > > > > Mike
> > > > > > >
> > > > > > > > -----Original Message-----
> > > > > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > > > > Sent: Sunday, June 30, 2019 9:04 PM
> > > > > > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > > > > > <michael.d.kinney@intel.com>
> > > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun,
> Zailiang
> > > > > > > > <zailiang.sun@intel.com>
> > > > > > > > Subject: Re: [edk2-devel] [edk2-platforms
> Patch
> > > > > > 00/14]
> > > > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > > > dependencies
> > > > > > > >
> > > > > > > > On Sun, Jun 30, 2019 at 07:55:39PM -0700,
> > > Michael
> > > > > D
> > > > > > Kinney wrote:
> > > > > > > > > The following changes remove all
> dependencies
> > > on
> > > > > > the
> > > > > > > > IntelFrameworkPkg
> > > > > > > > > and IntelFrameworkModulePkg from the
> > > > > > Vlv2TbltDevicePkg
> > > > > > > > platform
> > > > > > > > > builds. These changes do depend on
> updates
> > > > > > binaries
> > > > > > > > on the edk2-non-osi repository.
> > > > > > > > >
> > > > > > > > Hi Michael,
> > > > > > > >
> > > > > > > > I am amending the bash scripts for gcc. The
> > > > > firmware
> > > > > > I built is
> > > > > > > > using the binaries from Development190216
> and
> > > could
> > > > > > boot into Linux
> > > > > > > > successfully with some workarounds for
> Wpce791,
> > > > > Bds,
> > > > > > and
> > > > > > > > InteFspWrapper. The patches you posted
> > > eliminate
> > > > > > those parts I have
> > > > > > > > to work around.
> > > > > > > >
> > > > > > > > Just want to know if you need any
> assistance
> > > for
> > > > > the
> > > > > > gcc build? I
> > > > > > > > could rebase my work upon your patches and
> send
> > > > > them
> > > > > > later.
> > > > > > > >
> > > > > > > > Thanks,
> > > > > > > >
> > > > > > > > Gary Lin
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > >
> > >
> > >
> >
> >
> >
> >
> >
>
>
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-10 3:38 ` Michael D Kinney
@ 2019-07-10 4:14 ` Gary Lin
2019-07-10 5:01 ` Michael D Kinney
0 siblings, 1 reply; 42+ messages in thread
From: Gary Lin @ 2019-07-10 4:14 UTC (permalink / raw)
To: devel@edk2.groups.io, michael.d.kinney@intel.com; +Cc: Yi Qian, Zailiang Sun
On Wed, Jul 10, 2019 at 03:38:01AM +0000, Michael D Kinney wrote:
> Hi Gary,
>
> I have pushed 2 more patches to my branch. One fixes the
> ASL issue without removing the code. The second is a clean
> up to all the DSC files and build scripts to make everything
> more consistent and remove more unused content.
>
> https://github.com/mdkinney/edk2-platforms/tree/Bug_xxx_Vlv2_Linux_And_Smbios_Fixes_V2
>
> Please test this to make sure it still works.
>
It works great! I don't need to comment out the problematic line
anymore.
> I will work on the Readme and will review the series to prepare
> for sending the patch email review tomorrow.
>
> Thanks for all your help and testing.
Thanks for fixing the gcc build :)
Gary Lin
>
> Mike
>
> > -----Original Message-----
> > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io]
> > On Behalf Of Gary Lin
> > Sent: Monday, July 8, 2019 11:04 PM
> > To: devel@edk2.groups.io; Kinney, Michael D
> > <michael.d.kinney@intel.com>
> > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > <zailiang.sun@intel.com>
> > Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> > Vlv2TbltDevicePkg: Remove Intel Framework dependencies
> >
> > On Tue, Jul 09, 2019 at 03:52:37AM +0000, Michael D
> > Kinney wrote:
> > > Hi Gary,
> > >
> > Hi Mike,
> >
> > > I picked up the changes on your branch. I re-enabled
> > the BIOS ID
> > > Feature and added support for IA32 GCC builds, so the
> > builds available
> > > from Windows and Linux are matched now.
> > >
> > > I have posted my updated branch here:
> > >
> > > https://github.com/mdkinney/edk2-
> > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > _Smbios_Fixes_V2
> > >
> > > I also verified that the SD Card support does work, so
> > I am keeping
> > > that change.
> > >
> > I tested the branch + my ASL workaround and booted into
> > Linux successfully.
> >
> > > I agree the Readme is out of date. I will work on that
> > and add to the
> > > branch referenced above tomorrow.
> > >
> > Thanks!
> >
> > Gary Lin
> >
> > > Thanks,
> > >
> > > Mike
> > >
> > > > -----Original Message-----
> > > > From: devel@edk2.groups.io
> > [mailto:devel@edk2.groups.io] On Behalf
> > > > Of Gary Lin
> > > > Sent: Tuesday, July 2, 2019 8:57 PM
> > > > To: Kinney, Michael D <michael.d.kinney@intel.com>
> > > > Cc: devel@edk2.groups.io; Qian, Yi
> > <yi.qian@intel.com>; Sun,
> > > > Zailiang <zailiang.sun@intel.com>
> > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > 00/14]
> > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > dependencies
> > > >
> > > > On Tue, Jul 02, 2019 at 09:11:06PM +0000, Kinney,
> > Michael D wrote:
> > > > > Hi Gary,
> > > > >
> > > > Hi Mike,
> > > >
> > > > > I have posted an update to your patches the removes
> > the
> > > > setting of
> > > > > WORKSPACE and accesses all files relative to
> > WORKSPACE
> > > > in the Linux shell scripts.
> > > > > It also fixes null pointer bugs in the
> > SmbiosMiscDxe
> > > > module.
> > > > >
> > > > > https://github.com/mdkinney/edk2-
> > > > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > > > _Smbios_Fixes
> > > > >
> > > > > With these changes I can boot to the UEFI Shell and
> > to
> > > > Linux. Please
> > > > > verify from your environments.
> > > > >
> > > > The fix for SmbiosMiscDxe works for me. Thanks for
> > that!
> > > >
> > > > I pushed another commit to my branch to check
> > WORKSPACE to notify
> > > > the
> > > > user:
> > > >
> > > > https://github.com/lcp/edk2-
> > > >
> > platforms/commit/fc530689e913e3de25ca2c553d616b9cef28901c
> > > >
> > > > We probably have to update Readme.md later. It's
> > already dated.
> > > >
> > > > > I see you have added the SDMMC modules, but I do
> > not
> > > > see that peripheral yet.
> > > > > That feature looks like it needs some more debug.
> > We
> > > > may need to back
> > > > > out those changes for now.
> > > > >
> > > > I saw the SD card settings in the South Cluster
> > Configuration menu
> > > > even without those SDMMC modules, so they are
> > probably from the
> > > > edk2-non-osi drivers. However, the SD card didn't
> > work until I added
> > > > the drivers from MdeModulePkg, so I need those
> > drivers at least for
> > > > my Minnowboard Turbot.
> > > >
> > > > Thanks,
> > > >
> > > > Gary Lin
> > > >
> > > > > I agree there are ASL issues. The ASL code needs
> > to be
> > > > updated to the
> > > > > latest ASL compiler.
> > > > >
> > > > > Thanks,
> > > > >
> > > > > Mike
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Kinney, Michael D
> > > > > > Sent: Tuesday, July 2, 2019 9:50 AM
> > > > > > To: Gary Lin <GLin@suse.com>;
> > devel@edk2.groups.io;
> > > > Kinney, Michael
> > > > > > D <michael.d.kinney@intel.com>
> > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > > > <zailiang.sun@intel.com>
> > > > > > Subject: RE: [edk2-devel] [edk2-platforms Patch
> > > > 00/14]
> > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > dependencies
> > > > > >
> > > > > > Hi Gary,
> > > > > >
> > > > > > Thanks for the branch. I have the build working
> > and
> > > > have reproduced
> > > > > > the SMBIOS issue and am debugging that now.
> > > > > >
> > > > > > Mike
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > > > Sent: Tuesday, July 2, 2019 2:48 AM
> > > > > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > > > > <michael.d.kinney@intel.com>
> > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > > > > <zailiang.sun@intel.com>
> > > > > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > > > 00/14]
> > > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > dependencies
> > > > > > >
> > > > > > > On Mon, Jul 01, 2019 at 11:07:11PM +0000,
> > Michael
> > > > D
> > > > > > Kinney wrote:
> > > > > > > > Hi Gary,
> > > > > > > >
> > > > > > > > I recommend you rebase on top of this series.
> > > > > > > >
> > > > > > > > I have verified Linux boots and I have been
> > > > working
> > > > > > on
> > > > > > > the GCC and
> > > > > > > > Linux build scripts as well.
> > > > > > > >
> > > > > > > > Please let me know if you see any issues with
> > > > this
> > > > > > > series applied and
> > > > > > > > I can help get them fixed.
> > > > > > > >
> > > > > > > Hi Mike,
> > > > > > >
> > > > > > > I'm rebasing my patches and they are available
> > in
> > > > my
> > > > > > > branch:
> > > > > > >
> > > > > > > https://github.com/lcp/edk2-
> > platforms/commits/vlv2-
> > > > > > > fixes-wip
> > > > > > >
> > > > > > > It's based on
> > > > > > > edk2(dcce9cbd48e07fcd11f7ef34cad48faf7bb61e6e)
> > > > > > > and edk2-non-
> > > > > > > osi(de0a6bc19c4ee0468f04e4d37035cdc59558137f).
> > > > > > >
> > > > > > > There are 3 problems I currently encountered,
> > and
> > > > maybe
> > > > > > you can give
> > > > > > > me some suggestions.
> > > > > > >
> > > > > > > 1. Missing DSDT
> > > > > > >
> > > > > > > When compiling DSDT, iasl failed with this
> > error:
> > > > > > >
> > > > > > > DSDT.iiii 6077:
> > > > > > > Or(ShiftLeft(Derefof(Index(CDCT,
> > \_SB.PCI0.GFX0.MCHK.DCFE)),
> > > > > > > 21),PARM, PARM)
> > > > > > > Error 6163 -
> > > > > > > ^ Object is created temporarily in another
> > method
> > > > and
> > > > > > cannot be
> > > > > > > accessed (\_SB.PCI0.GFX0. MCHK.DCFE)
> > > > > > >
> > > > > > > The code is from
> > > > > > >
> > > > > >
> > > >
> > Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGB
> > > > > > > DA.ASL
> > > > > > >
> > > > > > > I have to comment out the line or iasl won't
> > > > generate
> > > > > > the aml file and
> > > > > > > the OS would fail to get DSDT.
> > > > > > >
> > > > > > > My acpica version is 20190509, and I vaguely
> > > > remember
> > > > > > that the older
> > > > > > > acpica seems to be more tolerant to this error.
> > > > > > >
> > > > > > > 2. Crash at SMBIOS driver
> > > > > > >
> > > > > > > When booting the system, I got the following
> > error:
> > > > > > >
> > > > > > > Loading driver at 0x00078DBA000
> > > > > > EntryPoint=0x00078DBEC3C
> > > > > > > MiscSubclass.efi
> > > > > > > InstallProtocolInterface: BC62157E-3E33-4FEC-
> > 9920-
> > > > > > 2D3B36D750DF
> > > > > > > 78FE8D18 ProtectUefiImageCommon -
> > > > > > > 0x78FE8040
> > > > > > > - 0x0000000078DBA000 - 0x0000000000007B80
> > > > > > > PlatformInfoHob->BoardId [0xB0]
> > > > > > > GetBiosVersionDateTime :MNW2MAX1.X64.0084.D01
> > > > > > 01/01/2019
> > > > > > > 00:00
> > > > > > > SmbiosAdd: Smbios type 0 with size 0x48 is
> > added to
> > > > 32-
> > > > > > bit table
> > > > > > > SmbiosAdd: Smbios type 0 with size 0x48 is
> > added to
> > > > 64-
> > > > > > bit table
> > > > > > > SmbiosCreateTable: Initialize 32-bit entry
> > point
> > > > > > structure
> > > > > > > SmbiosCreateTable() re-allocate SMBIOS 32-bit
> > table
> > > > > > > SmbiosCreateTable: Initialize 64-bit entry
> > point
> > > > > > structure
> > > > > > > SmbiosCreate64BitTable() re-allocate SMBIOS 64-
> > bit
> > > > > > table Create Smbios
> > > > > > > Manu callback.
> > > > > > > !!!! X64 Exception Type - 06(#UD - Invalid
> > Opcode)
> > > > CPU
> > > > > > Apic ID -
> > > > > > > 00000000 !!!!
> > > > > > > RIP - 0000000078DBEC26, CS -
> > 0000000000000038,
> > > > RFLAGS
> > > > > > > - 0000000000010206 RAX - 0000000000000000, RCX
> > -
> > > > > > 000000007984A5A0,
> > > > > > > RDX - 000000007A46E5FF RBX - 000000007A46E920,
> > RSP
> > > > -
> > > > > > > 000000007A46E8B0, RBP -
> > > > > > > 0000000078DC0EC0 RSI - 0000000000000012, RDI -
> > > > > > > 0000000000000003
> > > > > > > R8 - 800000000000000E, R9 -
> > 000000007A46E920,
> > > > R10 -
> > > > > > > 0000000078FE8398
> > > > > > > R11 - 0000000000000001, R12 -
> > 0000000078FE8798,
> > > > R13 -
> > > > > > > 0000000078FE8898
> > > > > > > R14 - 0000000078FE8818, R15 - 000000007A46EC60
> > > > > > > DS - 0000000000000030, ES -
> > 0000000000000030, FS
> > > > -
> > > > > > > 0000000000000030
> > > > > > > GS - 0000000000000030, SS - 0000000000000030
> > > > > > > CR0 - 0000000080010013, CR2 -
> > 0000000000000000,
> > > > CR3 -
> > > > > > > 000000007A201000
> > > > > > > CR4 - 0000000000000628, CR8 - 0000000000000000
> > > > > > > DR0 - 0000000000000000, DR1 -
> > 0000000000000000,
> > > > DR2 -
> > > > > > > 0000000000000000
> > > > > > > DR3 - 0000000000000000, DR6 -
> > 00000000FFFF0FF8,
> > > > DR7 -
> > > > > > > 0000000000000400 GDTR - 0000000079FFDA98
> > > > > > 0000000000000047, LDTR -
> > > > > > > 0000000000000000
> > > > > > > IDTR - 0000000079862018 0000000000000FFF, TR
> > -
> > > > > > > 0000000000000000
> > > > > > > FXSAVE_STATE - 000000007A46E510 !!!! Find image
> > based on
> > > > > > > IP(0x78DBEC26)
> > > > > > > /home/gary/git/edk2-
> > > > > > >
> > > > > >
> > > >
> > workspace/Build/Vlv2TbltDevicePkg/DEBUG_GCC5/X64/Vlv2Tbl
> > > > > > >
> > > > > >
> > > >
> > tDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe/DEBUG/MiscSubclas
> > > > > > > s.
> > > > > > > dll (ImageBase=0000000078DBA000,
> > > > > > > EntryPoint=0000000078DBEC3C) !!!!
> > > > > > >
> > > > > > > I disaseembled MiscSubclass.debug and found
> > that
> > > > the
> > > > > > address is a
> > > > > > > "ud2"
> > > > > > > instruction at
> > > > > > >
> > > > > >
> > > >
> > SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c:MiscBa
> > > > > > > seBoardManufacturer()
> > > > > > >
> > > > > > > After adding a few more debug messages, the
> > system
> > > > > > crashed at another
> > > > > > > function:
> > > > > > >
> > > > > >
> > > >
> > SmBiosMiscDxe/MiscSystemManufacturerFunction.c:AddSmbios
> > > > > > > ManuCallback()
> > > > > > >
> > > > > > > If I added debug messages to both functions,
> > the
> > > > system
> > > > > > booted
> > > > > > > successfully. I currently didn't have any clue
> > on
> > > > this.
> > > > > > >
> > > > > > > 3. The firmware always booted into EFI shell.
> > > > > > >
> > > > > > > I guess something went wrong with BDS. I
> > haven't
> > > > looked
> > > > > > into this
> > > > > > > issue yet.
> > > > > > >
> > > > > > > Thanks,
> > > > > > >
> > > > > > > Gary Lin
> > > > > > >
> > > > > > > > Thanks,
> > > > > > > >
> > > > > > > > Mike
> > > > > > > >
> > > > > > > > > -----Original Message-----
> > > > > > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > > > > > Sent: Sunday, June 30, 2019 9:04 PM
> > > > > > > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > > > > > > <michael.d.kinney@intel.com>
> > > > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun,
> > Zailiang
> > > > > > > > > <zailiang.sun@intel.com>
> > > > > > > > > Subject: Re: [edk2-devel] [edk2-platforms
> > Patch
> > > > > > > 00/14]
> > > > > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > > > > dependencies
> > > > > > > > >
> > > > > > > > > On Sun, Jun 30, 2019 at 07:55:39PM -0700,
> > > > Michael
> > > > > > D
> > > > > > > Kinney wrote:
> > > > > > > > > > The following changes remove all
> > dependencies
> > > > on
> > > > > > > the
> > > > > > > > > IntelFrameworkPkg
> > > > > > > > > > and IntelFrameworkModulePkg from the
> > > > > > > Vlv2TbltDevicePkg
> > > > > > > > > platform
> > > > > > > > > > builds. These changes do depend on
> > updates
> > > > > > > binaries
> > > > > > > > > on the edk2-non-osi repository.
> > > > > > > > > >
> > > > > > > > > Hi Michael,
> > > > > > > > >
> > > > > > > > > I am amending the bash scripts for gcc. The
> > > > > > firmware
> > > > > > > I built is
> > > > > > > > > using the binaries from Development190216
> > and
> > > > could
> > > > > > > boot into Linux
> > > > > > > > > successfully with some workarounds for
> > Wpce791,
> > > > > > Bds,
> > > > > > > and
> > > > > > > > > InteFspWrapper. The patches you posted
> > > > eliminate
> > > > > > > those parts I have
> > > > > > > > > to work around.
> > > > > > > > >
> > > > > > > > > Just want to know if you need any
> > assistance
> > > > for
> > > > > > the
> > > > > > > gcc build? I
> > > > > > > > > could rebase my work upon your patches and
> > send
> > > > > > them
> > > > > > > later.
> > > > > > > > >
> > > > > > > > > Thanks,
> > > > > > > > >
> > > > > > > > > Gary Lin
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> > >
> > >
> > >
> >
> >
>
>
>
>
>
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-10 4:14 ` Gary Lin
@ 2019-07-10 5:01 ` Michael D Kinney
2019-07-10 7:10 ` Gary Lin
0 siblings, 1 reply; 42+ messages in thread
From: Michael D Kinney @ 2019-07-10 5:01 UTC (permalink / raw)
To: devel@edk2.groups.io, glin@suse.com, Kinney, Michael D
Cc: Qian, Yi, Sun, Zailiang
Hi Gary,
I have added 2 more patches. One to disable capsule generation
for IA32 builds. There are several places the output directory
is hard coded for X64. Will require converting the POST_BUILD
scripts to python to make this much better.
The second patch is for the Readme.md. Please review and
verify the instructions.
Thanks,
Mike
> -----Original Message-----
> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io]
> On Behalf Of Gary Lin
> Sent: Tuesday, July 9, 2019 9:14 PM
> To: devel@edk2.groups.io; Kinney, Michael D
> <michael.d.kinney@intel.com>
> Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> <zailiang.sun@intel.com>
> Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> Vlv2TbltDevicePkg: Remove Intel Framework dependencies
>
> On Wed, Jul 10, 2019 at 03:38:01AM +0000, Michael D
> Kinney wrote:
> > Hi Gary,
> >
> > I have pushed 2 more patches to my branch. One fixes
> the ASL issue
> > without removing the code. The second is a clean up to
> all the DSC
> > files and build scripts to make everything more
> consistent and remove
> > more unused content.
> >
> > https://github.com/mdkinney/edk2-
> platforms/tree/Bug_xxx_Vlv2_Linux_And
> > _Smbios_Fixes_V2
> >
> > Please test this to make sure it still works.
> >
> It works great! I don't need to comment out the
> problematic line anymore.
>
> > I will work on the Readme and will review the series to
> prepare for
> > sending the patch email review tomorrow.
> >
> > Thanks for all your help and testing.
> Thanks for fixing the gcc build :)
>
> Gary Lin
>
> >
> > Mike
> >
> > > -----Original Message-----
> > > From: devel@edk2.groups.io
> [mailto:devel@edk2.groups.io] On Behalf
> > > Of Gary Lin
> > > Sent: Monday, July 8, 2019 11:04 PM
> > > To: devel@edk2.groups.io; Kinney, Michael D
> > > <michael.d.kinney@intel.com>
> > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > <zailiang.sun@intel.com>
> > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> 00/14]
> > > Vlv2TbltDevicePkg: Remove Intel Framework
> dependencies
> > >
> > > On Tue, Jul 09, 2019 at 03:52:37AM +0000, Michael D
> Kinney wrote:
> > > > Hi Gary,
> > > >
> > > Hi Mike,
> > >
> > > > I picked up the changes on your branch. I re-
> enabled
> > > the BIOS ID
> > > > Feature and added support for IA32 GCC builds, so
> the
> > > builds available
> > > > from Windows and Linux are matched now.
> > > >
> > > > I have posted my updated branch here:
> > > >
> > > > https://github.com/mdkinney/edk2-
> > > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > > _Smbios_Fixes_V2
> > > >
> > > > I also verified that the SD Card support does work,
> so
> > > I am keeping
> > > > that change.
> > > >
> > > I tested the branch + my ASL workaround and booted
> into Linux
> > > successfully.
> > >
> > > > I agree the Readme is out of date. I will work on
> that
> > > and add to the
> > > > branch referenced above tomorrow.
> > > >
> > > Thanks!
> > >
> > > Gary Lin
> > >
> > > > Thanks,
> > > >
> > > > Mike
> > > >
> > > > > -----Original Message-----
> > > > > From: devel@edk2.groups.io
> > > [mailto:devel@edk2.groups.io] On Behalf
> > > > > Of Gary Lin
> > > > > Sent: Tuesday, July 2, 2019 8:57 PM
> > > > > To: Kinney, Michael D
> <michael.d.kinney@intel.com>
> > > > > Cc: devel@edk2.groups.io; Qian, Yi
> > > <yi.qian@intel.com>; Sun,
> > > > > Zailiang <zailiang.sun@intel.com>
> > > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > > 00/14]
> > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > dependencies
> > > > >
> > > > > On Tue, Jul 02, 2019 at 09:11:06PM +0000,
> Kinney,
> > > Michael D wrote:
> > > > > > Hi Gary,
> > > > > >
> > > > > Hi Mike,
> > > > >
> > > > > > I have posted an update to your patches the
> removes
> > > the
> > > > > setting of
> > > > > > WORKSPACE and accesses all files relative to
> > > WORKSPACE
> > > > > in the Linux shell scripts.
> > > > > > It also fixes null pointer bugs in the
> > > SmbiosMiscDxe
> > > > > module.
> > > > > >
> > > > > > https://github.com/mdkinney/edk2-
> > > > > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > > > > _Smbios_Fixes
> > > > > >
> > > > > > With these changes I can boot to the UEFI Shell
> and
> > > to
> > > > > Linux. Please
> > > > > > verify from your environments.
> > > > > >
> > > > > The fix for SmbiosMiscDxe works for me. Thanks
> for
> > > that!
> > > > >
> > > > > I pushed another commit to my branch to check
> > > WORKSPACE to notify
> > > > > the
> > > > > user:
> > > > >
> > > > > https://github.com/lcp/edk2-
> > > > >
> > >
> platforms/commit/fc530689e913e3de25ca2c553d616b9cef28901c
> > > > >
> > > > > We probably have to update Readme.md later. It's
> > > already dated.
> > > > >
> > > > > > I see you have added the SDMMC modules, but I
> do
> > > not
> > > > > see that peripheral yet.
> > > > > > That feature looks like it needs some more
> debug.
> > > We
> > > > > may need to back
> > > > > > out those changes for now.
> > > > > >
> > > > > I saw the SD card settings in the South Cluster
> > > Configuration menu
> > > > > even without those SDMMC modules, so they are
> > > probably from the
> > > > > edk2-non-osi drivers. However, the SD card didn't
> > > work until I added
> > > > > the drivers from MdeModulePkg, so I need those
> > > drivers at least for
> > > > > my Minnowboard Turbot.
> > > > >
> > > > > Thanks,
> > > > >
> > > > > Gary Lin
> > > > >
> > > > > > I agree there are ASL issues. The ASL code
> needs
> > > to be
> > > > > updated to the
> > > > > > latest ASL compiler.
> > > > > >
> > > > > > Thanks,
> > > > > >
> > > > > > Mike
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: Kinney, Michael D
> > > > > > > Sent: Tuesday, July 2, 2019 9:50 AM
> > > > > > > To: Gary Lin <GLin@suse.com>;
> > > devel@edk2.groups.io;
> > > > > Kinney, Michael
> > > > > > > D <michael.d.kinney@intel.com>
> > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun,
> Zailiang
> > > > > > > <zailiang.sun@intel.com>
> > > > > > > Subject: RE: [edk2-devel] [edk2-platforms
> Patch
> > > > > 00/14]
> > > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > > dependencies
> > > > > > >
> > > > > > > Hi Gary,
> > > > > > >
> > > > > > > Thanks for the branch. I have the build
> working
> > > and
> > > > > have reproduced
> > > > > > > the SMBIOS issue and am debugging that now.
> > > > > > >
> > > > > > > Mike
> > > > > > >
> > > > > > > > -----Original Message-----
> > > > > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > > > > Sent: Tuesday, July 2, 2019 2:48 AM
> > > > > > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > > > > > <michael.d.kinney@intel.com>
> > > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun,
> Zailiang
> > > > > > > > <zailiang.sun@intel.com>
> > > > > > > > Subject: Re: [edk2-devel] [edk2-platforms
> Patch
> > > > > 00/14]
> > > > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > > dependencies
> > > > > > > >
> > > > > > > > On Mon, Jul 01, 2019 at 11:07:11PM +0000,
> > > Michael
> > > > > D
> > > > > > > Kinney wrote:
> > > > > > > > > Hi Gary,
> > > > > > > > >
> > > > > > > > > I recommend you rebase on top of this
> series.
> > > > > > > > >
> > > > > > > > > I have verified Linux boots and I have
> been
> > > > > working
> > > > > > > on
> > > > > > > > the GCC and
> > > > > > > > > Linux build scripts as well.
> > > > > > > > >
> > > > > > > > > Please let me know if you see any issues
> with
> > > > > this
> > > > > > > > series applied and
> > > > > > > > > I can help get them fixed.
> > > > > > > > >
> > > > > > > > Hi Mike,
> > > > > > > >
> > > > > > > > I'm rebasing my patches and they are
> available
> > > in
> > > > > my
> > > > > > > > branch:
> > > > > > > >
> > > > > > > > https://github.com/lcp/edk2-
> > > platforms/commits/vlv2-
> > > > > > > > fixes-wip
> > > > > > > >
> > > > > > > > It's based on
> > > > > > > >
> edk2(dcce9cbd48e07fcd11f7ef34cad48faf7bb61e6e)
> > > > > > > > and edk2-non-
> > > > > > > >
> osi(de0a6bc19c4ee0468f04e4d37035cdc59558137f).
> > > > > > > >
> > > > > > > > There are 3 problems I currently
> encountered,
> > > and
> > > > > maybe
> > > > > > > you can give
> > > > > > > > me some suggestions.
> > > > > > > >
> > > > > > > > 1. Missing DSDT
> > > > > > > >
> > > > > > > > When compiling DSDT, iasl failed with this
> > > error:
> > > > > > > >
> > > > > > > > DSDT.iiii 6077:
> > > > > > > > Or(ShiftLeft(Derefof(Index(CDCT,
> > > \_SB.PCI0.GFX0.MCHK.DCFE)),
> > > > > > > > 21),PARM, PARM)
> > > > > > > > Error 6163 -
> > > > > > > > ^ Object is created temporarily in another
> > > method
> > > > > and
> > > > > > > cannot be
> > > > > > > > accessed (\_SB.PCI0.GFX0. MCHK.DCFE)
> > > > > > > >
> > > > > > > > The code is from
> > > > > > > >
> > > > > > >
> > > > >
> > >
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGB
> > > > > > > > DA.ASL
> > > > > > > >
> > > > > > > > I have to comment out the line or iasl
> won't
> > > > > generate
> > > > > > > the aml file and
> > > > > > > > the OS would fail to get DSDT.
> > > > > > > >
> > > > > > > > My acpica version is 20190509, and I
> vaguely
> > > > > remember
> > > > > > > that the older
> > > > > > > > acpica seems to be more tolerant to this
> error.
> > > > > > > >
> > > > > > > > 2. Crash at SMBIOS driver
> > > > > > > >
> > > > > > > > When booting the system, I got the
> following
> > > error:
> > > > > > > >
> > > > > > > > Loading driver at 0x00078DBA000
> > > > > > > EntryPoint=0x00078DBEC3C
> > > > > > > > MiscSubclass.efi
> > > > > > > > InstallProtocolInterface: BC62157E-3E33-
> 4FEC-
> > > 9920-
> > > > > > > 2D3B36D750DF
> > > > > > > > 78FE8D18 ProtectUefiImageCommon -
> > > > > > > > 0x78FE8040
> > > > > > > > - 0x0000000078DBA000 - 0x0000000000007B80
> > > > > > > > PlatformInfoHob->BoardId [0xB0]
> > > > > > > > GetBiosVersionDateTime
> :MNW2MAX1.X64.0084.D01
> > > > > > > 01/01/2019
> > > > > > > > 00:00
> > > > > > > > SmbiosAdd: Smbios type 0 with size 0x48 is
> > > added to
> > > > > 32-
> > > > > > > bit table
> > > > > > > > SmbiosAdd: Smbios type 0 with size 0x48 is
> > > added to
> > > > > 64-
> > > > > > > bit table
> > > > > > > > SmbiosCreateTable: Initialize 32-bit entry
> > > point
> > > > > > > structure
> > > > > > > > SmbiosCreateTable() re-allocate SMBIOS 32-
> bit
> > > table
> > > > > > > > SmbiosCreateTable: Initialize 64-bit entry
> > > point
> > > > > > > structure
> > > > > > > > SmbiosCreate64BitTable() re-allocate SMBIOS
> 64-
> > > bit
> > > > > > > table Create Smbios
> > > > > > > > Manu callback.
> > > > > > > > !!!! X64 Exception Type - 06(#UD - Invalid
> > > Opcode)
> > > > > CPU
> > > > > > > Apic ID -
> > > > > > > > 00000000 !!!!
> > > > > > > > RIP - 0000000078DBEC26, CS -
> > > 0000000000000038,
> > > > > RFLAGS
> > > > > > > > - 0000000000010206 RAX - 0000000000000000,
> RCX
> > > -
> > > > > > > 000000007984A5A0,
> > > > > > > > RDX - 000000007A46E5FF RBX -
> 000000007A46E920,
> > > RSP
> > > > > -
> > > > > > > > 000000007A46E8B0, RBP -
> > > > > > > > 0000000078DC0EC0 RSI - 0000000000000012,
> RDI -
> > > > > > > > 0000000000000003
> > > > > > > > R8 - 800000000000000E, R9 -
> > > 000000007A46E920,
> > > > > R10 -
> > > > > > > > 0000000078FE8398
> > > > > > > > R11 - 0000000000000001, R12 -
> > > 0000000078FE8798,
> > > > > R13 -
> > > > > > > > 0000000078FE8898
> > > > > > > > R14 - 0000000078FE8818, R15 -
> 000000007A46EC60
> > > > > > > > DS - 0000000000000030, ES -
> > > 0000000000000030, FS
> > > > > -
> > > > > > > > 0000000000000030
> > > > > > > > GS - 0000000000000030, SS -
> 0000000000000030
> > > > > > > > CR0 - 0000000080010013, CR2 -
> > > 0000000000000000,
> > > > > CR3 -
> > > > > > > > 000000007A201000
> > > > > > > > CR4 - 0000000000000628, CR8 -
> 0000000000000000
> > > > > > > > DR0 - 0000000000000000, DR1 -
> > > 0000000000000000,
> > > > > DR2 -
> > > > > > > > 0000000000000000
> > > > > > > > DR3 - 0000000000000000, DR6 -
> > > 00000000FFFF0FF8,
> > > > > DR7 -
> > > > > > > > 0000000000000400 GDTR - 0000000079FFDA98
> > > > > > > 0000000000000047, LDTR -
> > > > > > > > 0000000000000000
> > > > > > > > IDTR - 0000000079862018 0000000000000FFF,
> TR
> > > -
> > > > > > > > 0000000000000000
> > > > > > > > FXSAVE_STATE - 000000007A46E510 !!!! Find
> image
> > > based on
> > > > > > > > IP(0x78DBEC26)
> > > > > > > > /home/gary/git/edk2-
> > > > > > > >
> > > > > > >
> > > > >
> > >
> workspace/Build/Vlv2TbltDevicePkg/DEBUG_GCC5/X64/Vlv2Tbl
> > > > > > > >
> > > > > > >
> > > > >
> > >
> tDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe/DEBUG/MiscSubclas
> > > > > > > > s.
> > > > > > > > dll (ImageBase=0000000078DBA000,
> > > > > > > > EntryPoint=0000000078DBEC3C) !!!!
> > > > > > > >
> > > > > > > > I disaseembled MiscSubclass.debug and found
> > > that
> > > > > the
> > > > > > > address is a
> > > > > > > > "ud2"
> > > > > > > > instruction at
> > > > > > > >
> > > > > > >
> > > > >
> > >
> SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c:MiscBa
> > > > > > > > seBoardManufacturer()
> > > > > > > >
> > > > > > > > After adding a few more debug messages, the
> > > system
> > > > > > > crashed at another
> > > > > > > > function:
> > > > > > > >
> > > > > > >
> > > > >
> > >
> SmBiosMiscDxe/MiscSystemManufacturerFunction.c:AddSmbios
> > > > > > > > ManuCallback()
> > > > > > > >
> > > > > > > > If I added debug messages to both
> functions,
> > > the
> > > > > system
> > > > > > > booted
> > > > > > > > successfully. I currently didn't have any
> clue
> > > on
> > > > > this.
> > > > > > > >
> > > > > > > > 3. The firmware always booted into EFI
> shell.
> > > > > > > >
> > > > > > > > I guess something went wrong with BDS. I
> > > haven't
> > > > > looked
> > > > > > > into this
> > > > > > > > issue yet.
> > > > > > > >
> > > > > > > > Thanks,
> > > > > > > >
> > > > > > > > Gary Lin
> > > > > > > >
> > > > > > > > > Thanks,
> > > > > > > > >
> > > > > > > > > Mike
> > > > > > > > >
> > > > > > > > > > -----Original Message-----
> > > > > > > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > > > > > > Sent: Sunday, June 30, 2019 9:04 PM
> > > > > > > > > > To: devel@edk2.groups.io; Kinney,
> Michael D
> > > > > > > > > > <michael.d.kinney@intel.com>
> > > > > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun,
> > > Zailiang
> > > > > > > > > > <zailiang.sun@intel.com>
> > > > > > > > > > Subject: Re: [edk2-devel] [edk2-
> platforms
> > > Patch
> > > > > > > > 00/14]
> > > > > > > > > > Vlv2TbltDevicePkg: Remove Intel
> Framework
> > > > > > > > dependencies
> > > > > > > > > >
> > > > > > > > > > On Sun, Jun 30, 2019 at 07:55:39PM -
> 0700,
> > > > > Michael
> > > > > > > D
> > > > > > > > Kinney wrote:
> > > > > > > > > > > The following changes remove all
> > > dependencies
> > > > > on
> > > > > > > > the
> > > > > > > > > > IntelFrameworkPkg
> > > > > > > > > > > and IntelFrameworkModulePkg from the
> > > > > > > > Vlv2TbltDevicePkg
> > > > > > > > > > platform
> > > > > > > > > > > builds. These changes do depend on
> > > updates
> > > > > > > > binaries
> > > > > > > > > > on the edk2-non-osi repository.
> > > > > > > > > > >
> > > > > > > > > > Hi Michael,
> > > > > > > > > >
> > > > > > > > > > I am amending the bash scripts for gcc.
> The
> > > > > > > firmware
> > > > > > > > I built is
> > > > > > > > > > using the binaries from
> Development190216
> > > and
> > > > > could
> > > > > > > > boot into Linux
> > > > > > > > > > successfully with some workarounds for
> > > Wpce791,
> > > > > > > Bds,
> > > > > > > > and
> > > > > > > > > > InteFspWrapper. The patches you posted
> > > > > eliminate
> > > > > > > > those parts I have
> > > > > > > > > > to work around.
> > > > > > > > > >
> > > > > > > > > > Just want to know if you need any
> > > assistance
> > > > > for
> > > > > > > the
> > > > > > > > gcc build? I
> > > > > > > > > > could rebase my work upon your patches
> and
> > > send
> > > > > > > them
> > > > > > > > later.
> > > > > > > > > >
> > > > > > > > > > Thanks,
> > > > > > > > > >
> > > > > > > > > > Gary Lin
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> >
> >
> >
> >
> >
>
>
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-10 5:01 ` Michael D Kinney
@ 2019-07-10 7:10 ` Gary Lin
2019-07-10 19:27 ` Michael D Kinney
0 siblings, 1 reply; 42+ messages in thread
From: Gary Lin @ 2019-07-10 7:10 UTC (permalink / raw)
To: devel@edk2.groups.io, michael.d.kinney@intel.com; +Cc: Yi Qian, Zailiang Sun
On Wed, Jul 10, 2019 at 05:01:32AM +0000, Michael D Kinney wrote:
> Hi Gary,
>
> I have added 2 more patches. One to disable capsule generation
> for IA32 builds. There are several places the output directory
> is hard coded for X64. Will require converting the POST_BUILD
> scripts to python to make this much better.
>
> The second patch is for the Readme.md. Please review and
> verify the instructions.
I found some typos in the Readme.md:
1. The path to the capsules:
- apt-get install libc:i386
+`Build\Vlv2TbltDevicePkgIA32\RELEASE_VS2015x86\FV\Vlv.ROM`
+
+The X64 CapsuleApp and generated UEFI Capsules are in the directory
+
+`Build/Vlv2TbltDevicePkg/Capsules`
+
+# Linux Pre-requisites
# Download and Build MinnowMax using Linux/GCC
Since it's still in the section of windows, so the path needs the fix:
Build/Vlv2TbltDevicePkg/Capsules => Build\Vlv2TbltDevicePkg\Capsules
2. The name of gcc script:
Once the environment is setup, the MinnowBoard MAX firmware and capsules can be
rebuilt using the following commands.
+* Build X64 Debug Image with report file
+
+```
+cd edk2-platforms/Platform/Intel/Vlv2TbltDevicePkg
+Build_IFWI.bat /m /y MNW2 Debug
+```
-* Build Debug Image
+* Build X64 Release Image with build log
```
-cd Vlv2TbltDevicePkg
-./Build_IFWI.sh MNW2 Debug
+cd edk2-platforms/Platform/Intel/Vlv2TbltDevicePkg
+Build_IFWI.bat /m /l MNW2 Release
```
-* Build Release Image
+* Build IA32 Debug Image
```
-cd Vlv2TbltDevicePkg
-./Build_IFWI.sh MNW2 Release
+cd edk2-platforms/Platform/Intel/Vlv2TbltDevicePkg
+Build_IFWI.bat /m /IA32 MNW2 Debug
```
This is the section of Linux, so the build script is Build_IFWI.sh, not
Build_IFWI.bat.
Gary Lin
>
> Thanks,
>
> Mike
>
> > -----Original Message-----
> > From: devel@edk2.groups.io [mailto:devel@edk2.groups.io]
> > On Behalf Of Gary Lin
> > Sent: Tuesday, July 9, 2019 9:14 PM
> > To: devel@edk2.groups.io; Kinney, Michael D
> > <michael.d.kinney@intel.com>
> > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > <zailiang.sun@intel.com>
> > Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> > Vlv2TbltDevicePkg: Remove Intel Framework dependencies
> >
> > On Wed, Jul 10, 2019 at 03:38:01AM +0000, Michael D
> > Kinney wrote:
> > > Hi Gary,
> > >
> > > I have pushed 2 more patches to my branch. One fixes
> > the ASL issue
> > > without removing the code. The second is a clean up to
> > all the DSC
> > > files and build scripts to make everything more
> > consistent and remove
> > > more unused content.
> > >
> > > https://github.com/mdkinney/edk2-
> > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > _Smbios_Fixes_V2
> > >
> > > Please test this to make sure it still works.
> > >
> > It works great! I don't need to comment out the
> > problematic line anymore.
> >
> > > I will work on the Readme and will review the series to
> > prepare for
> > > sending the patch email review tomorrow.
> > >
> > > Thanks for all your help and testing.
> > Thanks for fixing the gcc build :)
> >
> > Gary Lin
> >
> > >
> > > Mike
> > >
> > > > -----Original Message-----
> > > > From: devel@edk2.groups.io
> > [mailto:devel@edk2.groups.io] On Behalf
> > > > Of Gary Lin
> > > > Sent: Monday, July 8, 2019 11:04 PM
> > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > <michael.d.kinney@intel.com>
> > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > <zailiang.sun@intel.com>
> > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > 00/14]
> > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > dependencies
> > > >
> > > > On Tue, Jul 09, 2019 at 03:52:37AM +0000, Michael D
> > Kinney wrote:
> > > > > Hi Gary,
> > > > >
> > > > Hi Mike,
> > > >
> > > > > I picked up the changes on your branch. I re-
> > enabled
> > > > the BIOS ID
> > > > > Feature and added support for IA32 GCC builds, so
> > the
> > > > builds available
> > > > > from Windows and Linux are matched now.
> > > > >
> > > > > I have posted my updated branch here:
> > > > >
> > > > > https://github.com/mdkinney/edk2-
> > > > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > > > _Smbios_Fixes_V2
> > > > >
> > > > > I also verified that the SD Card support does work,
> > so
> > > > I am keeping
> > > > > that change.
> > > > >
> > > > I tested the branch + my ASL workaround and booted
> > into Linux
> > > > successfully.
> > > >
> > > > > I agree the Readme is out of date. I will work on
> > that
> > > > and add to the
> > > > > branch referenced above tomorrow.
> > > > >
> > > > Thanks!
> > > >
> > > > Gary Lin
> > > >
> > > > > Thanks,
> > > > >
> > > > > Mike
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: devel@edk2.groups.io
> > > > [mailto:devel@edk2.groups.io] On Behalf
> > > > > > Of Gary Lin
> > > > > > Sent: Tuesday, July 2, 2019 8:57 PM
> > > > > > To: Kinney, Michael D
> > <michael.d.kinney@intel.com>
> > > > > > Cc: devel@edk2.groups.io; Qian, Yi
> > > > <yi.qian@intel.com>; Sun,
> > > > > > Zailiang <zailiang.sun@intel.com>
> > > > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > > > 00/14]
> > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > dependencies
> > > > > >
> > > > > > On Tue, Jul 02, 2019 at 09:11:06PM +0000,
> > Kinney,
> > > > Michael D wrote:
> > > > > > > Hi Gary,
> > > > > > >
> > > > > > Hi Mike,
> > > > > >
> > > > > > > I have posted an update to your patches the
> > removes
> > > > the
> > > > > > setting of
> > > > > > > WORKSPACE and accesses all files relative to
> > > > WORKSPACE
> > > > > > in the Linux shell scripts.
> > > > > > > It also fixes null pointer bugs in the
> > > > SmbiosMiscDxe
> > > > > > module.
> > > > > > >
> > > > > > > https://github.com/mdkinney/edk2-
> > > > > > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > > > > > _Smbios_Fixes
> > > > > > >
> > > > > > > With these changes I can boot to the UEFI Shell
> > and
> > > > to
> > > > > > Linux. Please
> > > > > > > verify from your environments.
> > > > > > >
> > > > > > The fix for SmbiosMiscDxe works for me. Thanks
> > for
> > > > that!
> > > > > >
> > > > > > I pushed another commit to my branch to check
> > > > WORKSPACE to notify
> > > > > > the
> > > > > > user:
> > > > > >
> > > > > > https://github.com/lcp/edk2-
> > > > > >
> > > >
> > platforms/commit/fc530689e913e3de25ca2c553d616b9cef28901c
> > > > > >
> > > > > > We probably have to update Readme.md later. It's
> > > > already dated.
> > > > > >
> > > > > > > I see you have added the SDMMC modules, but I
> > do
> > > > not
> > > > > > see that peripheral yet.
> > > > > > > That feature looks like it needs some more
> > debug.
> > > > We
> > > > > > may need to back
> > > > > > > out those changes for now.
> > > > > > >
> > > > > > I saw the SD card settings in the South Cluster
> > > > Configuration menu
> > > > > > even without those SDMMC modules, so they are
> > > > probably from the
> > > > > > edk2-non-osi drivers. However, the SD card didn't
> > > > work until I added
> > > > > > the drivers from MdeModulePkg, so I need those
> > > > drivers at least for
> > > > > > my Minnowboard Turbot.
> > > > > >
> > > > > > Thanks,
> > > > > >
> > > > > > Gary Lin
> > > > > >
> > > > > > > I agree there are ASL issues. The ASL code
> > needs
> > > > to be
> > > > > > updated to the
> > > > > > > latest ASL compiler.
> > > > > > >
> > > > > > > Thanks,
> > > > > > >
> > > > > > > Mike
> > > > > > >
> > > > > > > > -----Original Message-----
> > > > > > > > From: Kinney, Michael D
> > > > > > > > Sent: Tuesday, July 2, 2019 9:50 AM
> > > > > > > > To: Gary Lin <GLin@suse.com>;
> > > > devel@edk2.groups.io;
> > > > > > Kinney, Michael
> > > > > > > > D <michael.d.kinney@intel.com>
> > > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun,
> > Zailiang
> > > > > > > > <zailiang.sun@intel.com>
> > > > > > > > Subject: RE: [edk2-devel] [edk2-platforms
> > Patch
> > > > > > 00/14]
> > > > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > > > dependencies
> > > > > > > >
> > > > > > > > Hi Gary,
> > > > > > > >
> > > > > > > > Thanks for the branch. I have the build
> > working
> > > > and
> > > > > > have reproduced
> > > > > > > > the SMBIOS issue and am debugging that now.
> > > > > > > >
> > > > > > > > Mike
> > > > > > > >
> > > > > > > > > -----Original Message-----
> > > > > > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > > > > > Sent: Tuesday, July 2, 2019 2:48 AM
> > > > > > > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > > > > > > <michael.d.kinney@intel.com>
> > > > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun,
> > Zailiang
> > > > > > > > > <zailiang.sun@intel.com>
> > > > > > > > > Subject: Re: [edk2-devel] [edk2-platforms
> > Patch
> > > > > > 00/14]
> > > > > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > > > dependencies
> > > > > > > > >
> > > > > > > > > On Mon, Jul 01, 2019 at 11:07:11PM +0000,
> > > > Michael
> > > > > > D
> > > > > > > > Kinney wrote:
> > > > > > > > > > Hi Gary,
> > > > > > > > > >
> > > > > > > > > > I recommend you rebase on top of this
> > series.
> > > > > > > > > >
> > > > > > > > > > I have verified Linux boots and I have
> > been
> > > > > > working
> > > > > > > > on
> > > > > > > > > the GCC and
> > > > > > > > > > Linux build scripts as well.
> > > > > > > > > >
> > > > > > > > > > Please let me know if you see any issues
> > with
> > > > > > this
> > > > > > > > > series applied and
> > > > > > > > > > I can help get them fixed.
> > > > > > > > > >
> > > > > > > > > Hi Mike,
> > > > > > > > >
> > > > > > > > > I'm rebasing my patches and they are
> > available
> > > > in
> > > > > > my
> > > > > > > > > branch:
> > > > > > > > >
> > > > > > > > > https://github.com/lcp/edk2-
> > > > platforms/commits/vlv2-
> > > > > > > > > fixes-wip
> > > > > > > > >
> > > > > > > > > It's based on
> > > > > > > > >
> > edk2(dcce9cbd48e07fcd11f7ef34cad48faf7bb61e6e)
> > > > > > > > > and edk2-non-
> > > > > > > > >
> > osi(de0a6bc19c4ee0468f04e4d37035cdc59558137f).
> > > > > > > > >
> > > > > > > > > There are 3 problems I currently
> > encountered,
> > > > and
> > > > > > maybe
> > > > > > > > you can give
> > > > > > > > > me some suggestions.
> > > > > > > > >
> > > > > > > > > 1. Missing DSDT
> > > > > > > > >
> > > > > > > > > When compiling DSDT, iasl failed with this
> > > > error:
> > > > > > > > >
> > > > > > > > > DSDT.iiii 6077:
> > > > > > > > > Or(ShiftLeft(Derefof(Index(CDCT,
> > > > \_SB.PCI0.GFX0.MCHK.DCFE)),
> > > > > > > > > 21),PARM, PARM)
> > > > > > > > > Error 6163 -
> > > > > > > > > ^ Object is created temporarily in another
> > > > method
> > > > > > and
> > > > > > > > cannot be
> > > > > > > > > accessed (\_SB.PCI0.GFX0. MCHK.DCFE)
> > > > > > > > >
> > > > > > > > > The code is from
> > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> > Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGB
> > > > > > > > > DA.ASL
> > > > > > > > >
> > > > > > > > > I have to comment out the line or iasl
> > won't
> > > > > > generate
> > > > > > > > the aml file and
> > > > > > > > > the OS would fail to get DSDT.
> > > > > > > > >
> > > > > > > > > My acpica version is 20190509, and I
> > vaguely
> > > > > > remember
> > > > > > > > that the older
> > > > > > > > > acpica seems to be more tolerant to this
> > error.
> > > > > > > > >
> > > > > > > > > 2. Crash at SMBIOS driver
> > > > > > > > >
> > > > > > > > > When booting the system, I got the
> > following
> > > > error:
> > > > > > > > >
> > > > > > > > > Loading driver at 0x00078DBA000
> > > > > > > > EntryPoint=0x00078DBEC3C
> > > > > > > > > MiscSubclass.efi
> > > > > > > > > InstallProtocolInterface: BC62157E-3E33-
> > 4FEC-
> > > > 9920-
> > > > > > > > 2D3B36D750DF
> > > > > > > > > 78FE8D18 ProtectUefiImageCommon -
> > > > > > > > > 0x78FE8040
> > > > > > > > > - 0x0000000078DBA000 - 0x0000000000007B80
> > > > > > > > > PlatformInfoHob->BoardId [0xB0]
> > > > > > > > > GetBiosVersionDateTime
> > :MNW2MAX1.X64.0084.D01
> > > > > > > > 01/01/2019
> > > > > > > > > 00:00
> > > > > > > > > SmbiosAdd: Smbios type 0 with size 0x48 is
> > > > added to
> > > > > > 32-
> > > > > > > > bit table
> > > > > > > > > SmbiosAdd: Smbios type 0 with size 0x48 is
> > > > added to
> > > > > > 64-
> > > > > > > > bit table
> > > > > > > > > SmbiosCreateTable: Initialize 32-bit entry
> > > > point
> > > > > > > > structure
> > > > > > > > > SmbiosCreateTable() re-allocate SMBIOS 32-
> > bit
> > > > table
> > > > > > > > > SmbiosCreateTable: Initialize 64-bit entry
> > > > point
> > > > > > > > structure
> > > > > > > > > SmbiosCreate64BitTable() re-allocate SMBIOS
> > 64-
> > > > bit
> > > > > > > > table Create Smbios
> > > > > > > > > Manu callback.
> > > > > > > > > !!!! X64 Exception Type - 06(#UD - Invalid
> > > > Opcode)
> > > > > > CPU
> > > > > > > > Apic ID -
> > > > > > > > > 00000000 !!!!
> > > > > > > > > RIP - 0000000078DBEC26, CS -
> > > > 0000000000000038,
> > > > > > RFLAGS
> > > > > > > > > - 0000000000010206 RAX - 0000000000000000,
> > RCX
> > > > -
> > > > > > > > 000000007984A5A0,
> > > > > > > > > RDX - 000000007A46E5FF RBX -
> > 000000007A46E920,
> > > > RSP
> > > > > > -
> > > > > > > > > 000000007A46E8B0, RBP -
> > > > > > > > > 0000000078DC0EC0 RSI - 0000000000000012,
> > RDI -
> > > > > > > > > 0000000000000003
> > > > > > > > > R8 - 800000000000000E, R9 -
> > > > 000000007A46E920,
> > > > > > R10 -
> > > > > > > > > 0000000078FE8398
> > > > > > > > > R11 - 0000000000000001, R12 -
> > > > 0000000078FE8798,
> > > > > > R13 -
> > > > > > > > > 0000000078FE8898
> > > > > > > > > R14 - 0000000078FE8818, R15 -
> > 000000007A46EC60
> > > > > > > > > DS - 0000000000000030, ES -
> > > > 0000000000000030, FS
> > > > > > -
> > > > > > > > > 0000000000000030
> > > > > > > > > GS - 0000000000000030, SS -
> > 0000000000000030
> > > > > > > > > CR0 - 0000000080010013, CR2 -
> > > > 0000000000000000,
> > > > > > CR3 -
> > > > > > > > > 000000007A201000
> > > > > > > > > CR4 - 0000000000000628, CR8 -
> > 0000000000000000
> > > > > > > > > DR0 - 0000000000000000, DR1 -
> > > > 0000000000000000,
> > > > > > DR2 -
> > > > > > > > > 0000000000000000
> > > > > > > > > DR3 - 0000000000000000, DR6 -
> > > > 00000000FFFF0FF8,
> > > > > > DR7 -
> > > > > > > > > 0000000000000400 GDTR - 0000000079FFDA98
> > > > > > > > 0000000000000047, LDTR -
> > > > > > > > > 0000000000000000
> > > > > > > > > IDTR - 0000000079862018 0000000000000FFF,
> > TR
> > > > -
> > > > > > > > > 0000000000000000
> > > > > > > > > FXSAVE_STATE - 000000007A46E510 !!!! Find
> > image
> > > > based on
> > > > > > > > > IP(0x78DBEC26)
> > > > > > > > > /home/gary/git/edk2-
> > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> > workspace/Build/Vlv2TbltDevicePkg/DEBUG_GCC5/X64/Vlv2Tbl
> > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> > tDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe/DEBUG/MiscSubclas
> > > > > > > > > s.
> > > > > > > > > dll (ImageBase=0000000078DBA000,
> > > > > > > > > EntryPoint=0000000078DBEC3C) !!!!
> > > > > > > > >
> > > > > > > > > I disaseembled MiscSubclass.debug and found
> > > > that
> > > > > > the
> > > > > > > > address is a
> > > > > > > > > "ud2"
> > > > > > > > > instruction at
> > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> > SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c:MiscBa
> > > > > > > > > seBoardManufacturer()
> > > > > > > > >
> > > > > > > > > After adding a few more debug messages, the
> > > > system
> > > > > > > > crashed at another
> > > > > > > > > function:
> > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> > SmBiosMiscDxe/MiscSystemManufacturerFunction.c:AddSmbios
> > > > > > > > > ManuCallback()
> > > > > > > > >
> > > > > > > > > If I added debug messages to both
> > functions,
> > > > the
> > > > > > system
> > > > > > > > booted
> > > > > > > > > successfully. I currently didn't have any
> > clue
> > > > on
> > > > > > this.
> > > > > > > > >
> > > > > > > > > 3. The firmware always booted into EFI
> > shell.
> > > > > > > > >
> > > > > > > > > I guess something went wrong with BDS. I
> > > > haven't
> > > > > > looked
> > > > > > > > into this
> > > > > > > > > issue yet.
> > > > > > > > >
> > > > > > > > > Thanks,
> > > > > > > > >
> > > > > > > > > Gary Lin
> > > > > > > > >
> > > > > > > > > > Thanks,
> > > > > > > > > >
> > > > > > > > > > Mike
> > > > > > > > > >
> > > > > > > > > > > -----Original Message-----
> > > > > > > > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > > > > > > > Sent: Sunday, June 30, 2019 9:04 PM
> > > > > > > > > > > To: devel@edk2.groups.io; Kinney,
> > Michael D
> > > > > > > > > > > <michael.d.kinney@intel.com>
> > > > > > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun,
> > > > Zailiang
> > > > > > > > > > > <zailiang.sun@intel.com>
> > > > > > > > > > > Subject: Re: [edk2-devel] [edk2-
> > platforms
> > > > Patch
> > > > > > > > > 00/14]
> > > > > > > > > > > Vlv2TbltDevicePkg: Remove Intel
> > Framework
> > > > > > > > > dependencies
> > > > > > > > > > >
> > > > > > > > > > > On Sun, Jun 30, 2019 at 07:55:39PM -
> > 0700,
> > > > > > Michael
> > > > > > > > D
> > > > > > > > > Kinney wrote:
> > > > > > > > > > > > The following changes remove all
> > > > dependencies
> > > > > > on
> > > > > > > > > the
> > > > > > > > > > > IntelFrameworkPkg
> > > > > > > > > > > > and IntelFrameworkModulePkg from the
> > > > > > > > > Vlv2TbltDevicePkg
> > > > > > > > > > > platform
> > > > > > > > > > > > builds. These changes do depend on
> > > > updates
> > > > > > > > > binaries
> > > > > > > > > > > on the edk2-non-osi repository.
> > > > > > > > > > > >
> > > > > > > > > > > Hi Michael,
> > > > > > > > > > >
> > > > > > > > > > > I am amending the bash scripts for gcc.
> > The
> > > > > > > > firmware
> > > > > > > > > I built is
> > > > > > > > > > > using the binaries from
> > Development190216
> > > > and
> > > > > > could
> > > > > > > > > boot into Linux
> > > > > > > > > > > successfully with some workarounds for
> > > > Wpce791,
> > > > > > > > Bds,
> > > > > > > > > and
> > > > > > > > > > > InteFspWrapper. The patches you posted
> > > > > > eliminate
> > > > > > > > > those parts I have
> > > > > > > > > > > to work around.
> > > > > > > > > > >
> > > > > > > > > > > Just want to know if you need any
> > > > assistance
> > > > > > for
> > > > > > > > the
> > > > > > > > > gcc build? I
> > > > > > > > > > > could rebase my work upon your patches
> > and
> > > > send
> > > > > > > > them
> > > > > > > > > later.
> > > > > > > > > > >
> > > > > > > > > > > Thanks,
> > > > > > > > > > >
> > > > > > > > > > > Gary Lin
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> > >
> > >
> > >
> >
> >
>
>
>
>
>
^ permalink raw reply [flat|nested] 42+ messages in thread
* Re: [edk2-devel] [edk2-platforms Patch 00/14] Vlv2TbltDevicePkg: Remove Intel Framework dependencies
2019-07-10 7:10 ` Gary Lin
@ 2019-07-10 19:27 ` Michael D Kinney
0 siblings, 0 replies; 42+ messages in thread
From: Michael D Kinney @ 2019-07-10 19:27 UTC (permalink / raw)
To: Gary Lin, devel@edk2.groups.io, Kinney, Michael D; +Cc: Qian, Yi, Sun, Zailiang
Gary,
Thanks for the feedback. I fixes these in the patch email review
I sent out today.
Mike
> -----Original Message-----
> From: Gary Lin [mailto:GLin@suse.com]
> Sent: Wednesday, July 10, 2019 12:10 AM
> To: devel@edk2.groups.io; Kinney, Michael D
> <michael.d.kinney@intel.com>
> Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> <zailiang.sun@intel.com>
> Subject: Re: [edk2-devel] [edk2-platforms Patch 00/14]
> Vlv2TbltDevicePkg: Remove Intel Framework dependencies
>
> On Wed, Jul 10, 2019 at 05:01:32AM +0000, Michael D
> Kinney wrote:
> > Hi Gary,
> >
> > I have added 2 more patches. One to disable capsule
> generation for
> > IA32 builds. There are several places the output
> directory is hard
> > coded for X64. Will require converting the POST_BUILD
> scripts to
> > python to make this much better.
> >
> > The second patch is for the Readme.md. Please review
> and verify the
> > instructions.
> I found some typos in the Readme.md:
>
> 1. The path to the capsules:
>
> - apt-get install libc:i386
>
> +`Build\Vlv2TbltDevicePkgIA32\RELEASE_VS2015x86\FV\Vlv.RO
> M`
> +
> +The X64 CapsuleApp and generated UEFI Capsules are in
> the directory
> +
> +`Build/Vlv2TbltDevicePkg/Capsules`
> +
> +# Linux Pre-requisites
>
> # Download and Build MinnowMax using Linux/GCC
>
> Since it's still in the section of windows, so the path
> needs the fix:
>
> Build/Vlv2TbltDevicePkg/Capsules =>
> Build\Vlv2TbltDevicePkg\Capsules
>
> 2. The name of gcc script:
>
> Once the environment is setup, the MinnowBoard MAX
> firmware and capsules can be
> rebuilt using the following commands.
>
> +* Build X64 Debug Image with report file
> +
> +```
> +cd edk2-platforms/Platform/Intel/Vlv2TbltDevicePkg
> +Build_IFWI.bat /m /y MNW2 Debug
> +```
>
> -* Build Debug Image
> +* Build X64 Release Image with build log
>
> ```
> -cd Vlv2TbltDevicePkg
> -./Build_IFWI.sh MNW2 Debug
> +cd edk2-platforms/Platform/Intel/Vlv2TbltDevicePkg
> +Build_IFWI.bat /m /l MNW2 Release
> ```
>
> -* Build Release Image
> +* Build IA32 Debug Image
>
> ```
> -cd Vlv2TbltDevicePkg
> -./Build_IFWI.sh MNW2 Release
> +cd edk2-platforms/Platform/Intel/Vlv2TbltDevicePkg
> +Build_IFWI.bat /m /IA32 MNW2 Debug
> ```
>
> This is the section of Linux, so the build script is
> Build_IFWI.sh, not Build_IFWI.bat.
>
> Gary Lin
>
> >
> > Thanks,
> >
> > Mike
> >
> > > -----Original Message-----
> > > From: devel@edk2.groups.io
> [mailto:devel@edk2.groups.io] On Behalf
> > > Of Gary Lin
> > > Sent: Tuesday, July 9, 2019 9:14 PM
> > > To: devel@edk2.groups.io; Kinney, Michael D
> > > <michael.d.kinney@intel.com>
> > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > <zailiang.sun@intel.com>
> > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> 00/14]
> > > Vlv2TbltDevicePkg: Remove Intel Framework
> dependencies
> > >
> > > On Wed, Jul 10, 2019 at 03:38:01AM +0000, Michael D
> Kinney wrote:
> > > > Hi Gary,
> > > >
> > > > I have pushed 2 more patches to my branch. One
> fixes
> > > the ASL issue
> > > > without removing the code. The second is a clean
> up to
> > > all the DSC
> > > > files and build scripts to make everything more
> > > consistent and remove
> > > > more unused content.
> > > >
> > > > https://github.com/mdkinney/edk2-
> > > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > > _Smbios_Fixes_V2
> > > >
> > > > Please test this to make sure it still works.
> > > >
> > > It works great! I don't need to comment out the
> problematic line
> > > anymore.
> > >
> > > > I will work on the Readme and will review the
> series to
> > > prepare for
> > > > sending the patch email review tomorrow.
> > > >
> > > > Thanks for all your help and testing.
> > > Thanks for fixing the gcc build :)
> > >
> > > Gary Lin
> > >
> > > >
> > > > Mike
> > > >
> > > > > -----Original Message-----
> > > > > From: devel@edk2.groups.io
> > > [mailto:devel@edk2.groups.io] On Behalf
> > > > > Of Gary Lin
> > > > > Sent: Monday, July 8, 2019 11:04 PM
> > > > > To: devel@edk2.groups.io; Kinney, Michael D
> > > > > <michael.d.kinney@intel.com>
> > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun, Zailiang
> > > > > <zailiang.sun@intel.com>
> > > > > Subject: Re: [edk2-devel] [edk2-platforms Patch
> > > 00/14]
> > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > dependencies
> > > > >
> > > > > On Tue, Jul 09, 2019 at 03:52:37AM +0000,
> Michael D
> > > Kinney wrote:
> > > > > > Hi Gary,
> > > > > >
> > > > > Hi Mike,
> > > > >
> > > > > > I picked up the changes on your branch. I re-
> > > enabled
> > > > > the BIOS ID
> > > > > > Feature and added support for IA32 GCC builds,
> so
> > > the
> > > > > builds available
> > > > > > from Windows and Linux are matched now.
> > > > > >
> > > > > > I have posted my updated branch here:
> > > > > >
> > > > > > https://github.com/mdkinney/edk2-
> > > > > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > > > > _Smbios_Fixes_V2
> > > > > >
> > > > > > I also verified that the SD Card support does
> work,
> > > so
> > > > > I am keeping
> > > > > > that change.
> > > > > >
> > > > > I tested the branch + my ASL workaround and
> booted
> > > into Linux
> > > > > successfully.
> > > > >
> > > > > > I agree the Readme is out of date. I will work
> on
> > > that
> > > > > and add to the
> > > > > > branch referenced above tomorrow.
> > > > > >
> > > > > Thanks!
> > > > >
> > > > > Gary Lin
> > > > >
> > > > > > Thanks,
> > > > > >
> > > > > > Mike
> > > > > >
> > > > > > > -----Original Message-----
> > > > > > > From: devel@edk2.groups.io
> > > > > [mailto:devel@edk2.groups.io] On Behalf
> > > > > > > Of Gary Lin
> > > > > > > Sent: Tuesday, July 2, 2019 8:57 PM
> > > > > > > To: Kinney, Michael D
> > > <michael.d.kinney@intel.com>
> > > > > > > Cc: devel@edk2.groups.io; Qian, Yi
> > > > > <yi.qian@intel.com>; Sun,
> > > > > > > Zailiang <zailiang.sun@intel.com>
> > > > > > > Subject: Re: [edk2-devel] [edk2-platforms
> Patch
> > > > > 00/14]
> > > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > > dependencies
> > > > > > >
> > > > > > > On Tue, Jul 02, 2019 at 09:11:06PM +0000,
> > > Kinney,
> > > > > Michael D wrote:
> > > > > > > > Hi Gary,
> > > > > > > >
> > > > > > > Hi Mike,
> > > > > > >
> > > > > > > > I have posted an update to your patches the
> > > removes
> > > > > the
> > > > > > > setting of
> > > > > > > > WORKSPACE and accesses all files relative
> to
> > > > > WORKSPACE
> > > > > > > in the Linux shell scripts.
> > > > > > > > It also fixes null pointer bugs in the
> > > > > SmbiosMiscDxe
> > > > > > > module.
> > > > > > > >
> > > > > > > > https://github.com/mdkinney/edk2-
> > > > > > > platforms/tree/Bug_xxx_Vlv2_Linux_And
> > > > > > > > _Smbios_Fixes
> > > > > > > >
> > > > > > > > With these changes I can boot to the UEFI
> Shell
> > > and
> > > > > to
> > > > > > > Linux. Please
> > > > > > > > verify from your environments.
> > > > > > > >
> > > > > > > The fix for SmbiosMiscDxe works for me.
> Thanks
> > > for
> > > > > that!
> > > > > > >
> > > > > > > I pushed another commit to my branch to check
> > > > > WORKSPACE to notify
> > > > > > > the
> > > > > > > user:
> > > > > > >
> > > > > > > https://github.com/lcp/edk2-
> > > > > > >
> > > > >
> > >
> platforms/commit/fc530689e913e3de25ca2c553d616b9cef28901c
> > > > > > >
> > > > > > > We probably have to update Readme.md later.
> It's
> > > > > already dated.
> > > > > > >
> > > > > > > > I see you have added the SDMMC modules, but
> I
> > > do
> > > > > not
> > > > > > > see that peripheral yet.
> > > > > > > > That feature looks like it needs some more
> > > debug.
> > > > > We
> > > > > > > may need to back
> > > > > > > > out those changes for now.
> > > > > > > >
> > > > > > > I saw the SD card settings in the South
> Cluster
> > > > > Configuration menu
> > > > > > > even without those SDMMC modules, so they are
> > > > > probably from the
> > > > > > > edk2-non-osi drivers. However, the SD card
> didn't
> > > > > work until I added
> > > > > > > the drivers from MdeModulePkg, so I need
> those
> > > > > drivers at least for
> > > > > > > my Minnowboard Turbot.
> > > > > > >
> > > > > > > Thanks,
> > > > > > >
> > > > > > > Gary Lin
> > > > > > >
> > > > > > > > I agree there are ASL issues. The ASL code
> > > needs
> > > > > to be
> > > > > > > updated to the
> > > > > > > > latest ASL compiler.
> > > > > > > >
> > > > > > > > Thanks,
> > > > > > > >
> > > > > > > > Mike
> > > > > > > >
> > > > > > > > > -----Original Message-----
> > > > > > > > > From: Kinney, Michael D
> > > > > > > > > Sent: Tuesday, July 2, 2019 9:50 AM
> > > > > > > > > To: Gary Lin <GLin@suse.com>;
> > > > > devel@edk2.groups.io;
> > > > > > > Kinney, Michael
> > > > > > > > > D <michael.d.kinney@intel.com>
> > > > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun,
> > > Zailiang
> > > > > > > > > <zailiang.sun@intel.com>
> > > > > > > > > Subject: RE: [edk2-devel] [edk2-platforms
> > > Patch
> > > > > > > 00/14]
> > > > > > > > > Vlv2TbltDevicePkg: Remove Intel Framework
> > > > > > > dependencies
> > > > > > > > >
> > > > > > > > > Hi Gary,
> > > > > > > > >
> > > > > > > > > Thanks for the branch. I have the build
> > > working
> > > > > and
> > > > > > > have reproduced
> > > > > > > > > the SMBIOS issue and am debugging that
> now.
> > > > > > > > >
> > > > > > > > > Mike
> > > > > > > > >
> > > > > > > > > > -----Original Message-----
> > > > > > > > > > From: Gary Lin [mailto:GLin@suse.com]
> > > > > > > > > > Sent: Tuesday, July 2, 2019 2:48 AM
> > > > > > > > > > To: devel@edk2.groups.io; Kinney,
> Michael D
> > > > > > > > > > <michael.d.kinney@intel.com>
> > > > > > > > > > Cc: Qian, Yi <yi.qian@intel.com>; Sun,
> > > Zailiang
> > > > > > > > > > <zailiang.sun@intel.com>
> > > > > > > > > > Subject: Re: [edk2-devel] [edk2-
> platforms
> > > Patch
> > > > > > > 00/14]
> > > > > > > > > > Vlv2TbltDevicePkg: Remove Intel
> Framework
> > > > > > > dependencies
> > > > > > > > > >
> > > > > > > > > > On Mon, Jul 01, 2019 at 11:07:11PM
> +0000,
> > > > > Michael
> > > > > > > D
> > > > > > > > > Kinney wrote:
> > > > > > > > > > > Hi Gary,
> > > > > > > > > > >
> > > > > > > > > > > I recommend you rebase on top of this
> > > series.
> > > > > > > > > > >
> > > > > > > > > > > I have verified Linux boots and I
> have
> > > been
> > > > > > > working
> > > > > > > > > on
> > > > > > > > > > the GCC and
> > > > > > > > > > > Linux build scripts as well.
> > > > > > > > > > >
> > > > > > > > > > > Please let me know if you see any
> issues
> > > with
> > > > > > > this
> > > > > > > > > > series applied and
> > > > > > > > > > > I can help get them fixed.
> > > > > > > > > > >
> > > > > > > > > > Hi Mike,
> > > > > > > > > >
> > > > > > > > > > I'm rebasing my patches and they are
> > > available
> > > > > in
> > > > > > > my
> > > > > > > > > > branch:
> > > > > > > > > >
> > > > > > > > > > https://github.com/lcp/edk2-
> > > > > platforms/commits/vlv2-
> > > > > > > > > > fixes-wip
> > > > > > > > > >
> > > > > > > > > > It's based on
> > > > > > > > > >
> > > edk2(dcce9cbd48e07fcd11f7ef34cad48faf7bb61e6e)
> > > > > > > > > > and edk2-non-
> > > > > > > > > >
> > > osi(de0a6bc19c4ee0468f04e4d37035cdc59558137f).
> > > > > > > > > >
> > > > > > > > > > There are 3 problems I currently
> > > encountered,
> > > > > and
> > > > > > > maybe
> > > > > > > > > you can give
> > > > > > > > > > me some suggestions.
> > > > > > > > > >
> > > > > > > > > > 1. Missing DSDT
> > > > > > > > > >
> > > > > > > > > > When compiling DSDT, iasl failed with
> this
> > > > > error:
> > > > > > > > > >
> > > > > > > > > > DSDT.iiii 6077:
> > > > > > > > > > Or(ShiftLeft(Derefof(Index(CDCT,
> > > > > \_SB.PCI0.GFX0.MCHK.DCFE)),
> > > > > > > > > > 21),PARM, PARM)
> > > > > > > > > > Error 6163 -
> > > > > > > > > > ^ Object is created temporarily in
> another
> > > > > method
> > > > > > > and
> > > > > > > > > cannot be
> > > > > > > > > > accessed (\_SB.PCI0.GFX0. MCHK.DCFE)
> > > > > > > > > >
> > > > > > > > > > The code is from
> > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > >
> > >
> Silicon/Intel/Vlv2DeviceRefCodePkg/AcpiTablesPCAT/IgdOGB
> > > > > > > > > > DA.ASL
> > > > > > > > > >
> > > > > > > > > > I have to comment out the line or iasl
> > > won't
> > > > > > > generate
> > > > > > > > > the aml file and
> > > > > > > > > > the OS would fail to get DSDT.
> > > > > > > > > >
> > > > > > > > > > My acpica version is 20190509, and I
> > > vaguely
> > > > > > > remember
> > > > > > > > > that the older
> > > > > > > > > > acpica seems to be more tolerant to
> this
> > > error.
> > > > > > > > > >
> > > > > > > > > > 2. Crash at SMBIOS driver
> > > > > > > > > >
> > > > > > > > > > When booting the system, I got the
> > > following
> > > > > error:
> > > > > > > > > >
> > > > > > > > > > Loading driver at 0x00078DBA000
> > > > > > > > > EntryPoint=0x00078DBEC3C
> > > > > > > > > > MiscSubclass.efi
> > > > > > > > > > InstallProtocolInterface: BC62157E-
> 3E33-
> > > 4FEC-
> > > > > 9920-
> > > > > > > > > 2D3B36D750DF
> > > > > > > > > > 78FE8D18 ProtectUefiImageCommon -
> > > > > > > > > > 0x78FE8040
> > > > > > > > > > - 0x0000000078DBA000 -
> 0x0000000000007B80
> > > > > > > > > > PlatformInfoHob->BoardId [0xB0]
> > > > > > > > > > GetBiosVersionDateTime
> > > :MNW2MAX1.X64.0084.D01
> > > > > > > > > 01/01/2019
> > > > > > > > > > 00:00
> > > > > > > > > > SmbiosAdd: Smbios type 0 with size 0x48
> is
> > > > > added to
> > > > > > > 32-
> > > > > > > > > bit table
> > > > > > > > > > SmbiosAdd: Smbios type 0 with size 0x48
> is
> > > > > added to
> > > > > > > 64-
> > > > > > > > > bit table
> > > > > > > > > > SmbiosCreateTable: Initialize 32-bit
> entry
> > > > > point
> > > > > > > > > structure
> > > > > > > > > > SmbiosCreateTable() re-allocate SMBIOS
> 32-
> > > bit
> > > > > table
> > > > > > > > > > SmbiosCreateTable: Initialize 64-bit
> entry
> > > > > point
> > > > > > > > > structure
> > > > > > > > > > SmbiosCreate64BitTable() re-allocate
> SMBIOS
> > > 64-
> > > > > bit
> > > > > > > > > table Create Smbios
> > > > > > > > > > Manu callback.
> > > > > > > > > > !!!! X64 Exception Type - 06(#UD -
> Invalid
> > > > > Opcode)
> > > > > > > CPU
> > > > > > > > > Apic ID -
> > > > > > > > > > 00000000 !!!!
> > > > > > > > > > RIP - 0000000078DBEC26, CS -
> > > > > 0000000000000038,
> > > > > > > RFLAGS
> > > > > > > > > > - 0000000000010206 RAX -
> 0000000000000000,
> > > RCX
> > > > > -
> > > > > > > > > 000000007984A5A0,
> > > > > > > > > > RDX - 000000007A46E5FF RBX -
> > > 000000007A46E920,
> > > > > RSP
> > > > > > > -
> > > > > > > > > > 000000007A46E8B0, RBP -
> > > > > > > > > > 0000000078DC0EC0 RSI -
> 0000000000000012,
> > > RDI -
> > > > > > > > > > 0000000000000003
> > > > > > > > > > R8 - 800000000000000E, R9 -
> > > > > 000000007A46E920,
> > > > > > > R10 -
> > > > > > > > > > 0000000078FE8398
> > > > > > > > > > R11 - 0000000000000001, R12 -
> > > > > 0000000078FE8798,
> > > > > > > R13 -
> > > > > > > > > > 0000000078FE8898
> > > > > > > > > > R14 - 0000000078FE8818, R15 -
> > > 000000007A46EC60
> > > > > > > > > > DS - 0000000000000030, ES -
> > > > > 0000000000000030, FS
> > > > > > > -
> > > > > > > > > > 0000000000000030
> > > > > > > > > > GS - 0000000000000030, SS -
> > > 0000000000000030
> > > > > > > > > > CR0 - 0000000080010013, CR2 -
> > > > > 0000000000000000,
> > > > > > > CR3 -
> > > > > > > > > > 000000007A201000
> > > > > > > > > > CR4 - 0000000000000628, CR8 -
> > > 0000000000000000
> > > > > > > > > > DR0 - 0000000000000000, DR1 -
> > > > > 0000000000000000,
> > > > > > > DR2 -
> > > > > > > > > > 0000000000000000
> > > > > > > > > > DR3 - 0000000000000000, DR6 -
> > > > > 00000000FFFF0FF8,
> > > > > > > DR7 -
> > > > > > > > > > 0000000000000400 GDTR -
> 0000000079FFDA98
> > > > > > > > > 0000000000000047, LDTR -
> > > > > > > > > > 0000000000000000
> > > > > > > > > > IDTR - 0000000079862018
> 0000000000000FFF,
> > > TR
> > > > > -
> > > > > > > > > > 0000000000000000
> > > > > > > > > > FXSAVE_STATE - 000000007A46E510 !!!!
> Find
> > > image
> > > > > based on
> > > > > > > > > > IP(0x78DBEC26)
> > > > > > > > > > /home/gary/git/edk2-
> > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > >
> > >
> workspace/Build/Vlv2TbltDevicePkg/DEBUG_GCC5/X64/Vlv2Tbl
> > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > >
> > >
> tDevicePkg/SmBiosMiscDxe/SmBiosMiscDxe/DEBUG/MiscSubclas
> > > > > > > > > > s.
> > > > > > > > > > dll (ImageBase=0000000078DBA000,
> > > > > > > > > > EntryPoint=0000000078DBEC3C) !!!!
> > > > > > > > > >
> > > > > > > > > > I disaseembled MiscSubclass.debug and
> found
> > > > > that
> > > > > > > the
> > > > > > > > > address is a
> > > > > > > > > > "ud2"
> > > > > > > > > > instruction at
> > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > >
> > >
> SmBiosMiscDxe/MiscBaseBoardManufacturerFunction.c:MiscBa
> > > > > > > > > > seBoardManufacturer()
> > > > > > > > > >
> > > > > > > > > > After adding a few more debug messages,
> the
> > > > > system
> > > > > > > > > crashed at another
> > > > > > > > > > function:
> > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > >
> > >
> SmBiosMiscDxe/MiscSystemManufacturerFunction.c:AddSmbios
> > > > > > > > > > ManuCallback()
> > > > > > > > > >
> > > > > > > > > > If I added debug messages to both
> > > functions,
> > > > > the
> > > > > > > system
> > > > > > > > > booted
> > > > > > > > > > successfully. I currently didn't have
> any
> > > clue
> > > > > on
> > > > > > > this.
> > > > > > > > > >
> > > > > > > > > > 3. The firmware always booted into EFI
> > > shell.
> > > > > > > > > >
> > > > > > > > > > I guess something went wrong with BDS.
> I
> > > > > haven't
> > > > > > > looked
> > > > > > > > > into this
> > > > > > > > > > issue yet.
> > > > > > > > > >
> > > > > > > > > > Thanks,
> > > > > > > > > >
> > > > > > > > > > Gary Lin
> > > > > > > > > >
> > > > > > > > > > > Thanks,
> > > > > > > > > > >
> > > > > > > > > > > Mike
> > > > > > > > > > >
> > > > > > > > > > > > -----Original Message-----
> > > > > > > > > > > > From: Gary Lin
> [mailto:GLin@suse.com]
> > > > > > > > > > > > Sent: Sunday, June 30, 2019 9:04 PM
> > > > > > > > > > > > To: devel@edk2.groups.io; Kinney,
> > > Michael D
> > > > > > > > > > > > <michael.d.kinney@intel.com>
> > > > > > > > > > > > Cc: Qian, Yi <yi.qian@intel.com>;
> Sun,
> > > > > Zailiang
> > > > > > > > > > > > <zailiang.sun@intel.com>
> > > > > > > > > > > > Subject: Re: [edk2-devel] [edk2-
> > > platforms
> > > > > Patch
> > > > > > > > > > 00/14]
> > > > > > > > > > > > Vlv2TbltDevicePkg: Remove Intel
> > > Framework
> > > > > > > > > > dependencies
> > > > > > > > > > > >
> > > > > > > > > > > > On Sun, Jun 30, 2019 at 07:55:39PM
> -
> > > 0700,
> > > > > > > Michael
> > > > > > > > > D
> > > > > > > > > > Kinney wrote:
> > > > > > > > > > > > > The following changes remove all
> > > > > dependencies
> > > > > > > on
> > > > > > > > > > the
> > > > > > > > > > > > IntelFrameworkPkg
> > > > > > > > > > > > > and IntelFrameworkModulePkg from
> the
> > > > > > > > > > Vlv2TbltDevicePkg
> > > > > > > > > > > > platform
> > > > > > > > > > > > > builds. These changes do depend
> on
> > > > > updates
> > > > > > > > > > binaries
> > > > > > > > > > > > on the edk2-non-osi repository.
> > > > > > > > > > > > >
> > > > > > > > > > > > Hi Michael,
> > > > > > > > > > > >
> > > > > > > > > > > > I am amending the bash scripts for
> gcc.
> > > The
> > > > > > > > > firmware
> > > > > > > > > > I built is
> > > > > > > > > > > > using the binaries from
> > > Development190216
> > > > > and
> > > > > > > could
> > > > > > > > > > boot into Linux
> > > > > > > > > > > > successfully with some workarounds
> for
> > > > > Wpce791,
> > > > > > > > > Bds,
> > > > > > > > > > and
> > > > > > > > > > > > InteFspWrapper. The patches you
> posted
> > > > > > > eliminate
> > > > > > > > > > those parts I have
> > > > > > > > > > > > to work around.
> > > > > > > > > > > >
> > > > > > > > > > > > Just want to know if you need any
> > > > > assistance
> > > > > > > for
> > > > > > > > > the
> > > > > > > > > > gcc build? I
> > > > > > > > > > > > could rebase my work upon your
> patches
> > > and
> > > > > send
> > > > > > > > > them
> > > > > > > > > > later.
> > > > > > > > > > > >
> > > > > > > > > > > > Thanks,
> > > > > > > > > > > >
> > > > > > > > > > > > Gary Lin
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> >
> >
> >
> >
> >
^ permalink raw reply [flat|nested] 42+ messages in thread