summaryrefslogtreecommitdiff
path: root/Board/EM/Platform
diff options
context:
space:
mode:
Diffstat (limited to 'Board/EM/Platform')
-rw-r--r--Board/EM/Platform/AcpiAslWrap/AcpiAslWrap.cif12
-rw-r--r--Board/EM/Platform/AcpiAslWrap/AcpiAslWrap.sdl50
-rw-r--r--Board/EM/Platform/AcpiAslWrap/PlatformDock.asl47
-rw-r--r--Board/EM/Platform/AcpiAslWrap/PlatformEC.asl206
-rw-r--r--Board/EM/Platform/AcpiAslWrap/PlatformExternal.asl69
-rw-r--r--Board/EM/Platform/AcpiAslWrap/PlatformPS2Wake.asl47
-rw-r--r--Board/EM/Platform/AcpiIntelRC.h64
-rw-r--r--Board/EM/Platform/AcpiPlatform.c3285
-rw-r--r--Board/EM/Platform/AcpiPlatform.cif44
-rw-r--r--Board/EM/Platform/AcpiPlatform.dxs53
-rw-r--r--Board/EM/Platform/AcpiPlatform.h240
-rw-r--r--Board/EM/Platform/AcpiPlatform.mak170
-rw-r--r--Board/EM/Platform/AcpiPlatform.sd1877
-rw-r--r--Board/EM/Platform/AcpiPlatform.sdl483
-rw-r--r--Board/EM/Platform/AcpiPlatform.unibin0 -> 45840 bytes
-rw-r--r--Board/EM/Platform/AcpiPlatformCspLib.c150
-rw-r--r--Board/EM/Platform/AcpiPlatformPei.c231
-rw-r--r--Board/EM/Platform/AcpiPlatformPei.dxs50
-rw-r--r--Board/EM/Platform/AcpiPlatformSmi.c247
-rw-r--r--Board/EM/Platform/AcpiPlatformSmi.dxs61
-rw-r--r--Board/EM/Platform/EfiCombineImage/EfiCombineImage.c223
-rw-r--r--Board/EM/Platform/EfiCombineImage/EfiCombineImage.cif10
-rw-r--r--Board/EM/Platform/EfiCombineImage/EfiCombineImage.mak105
-rw-r--r--Board/EM/Platform/EfiCombineImage/EfiCombineImage.sdl203
-rw-r--r--Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.c218
-rw-r--r--Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.cif11
-rw-r--r--Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.dxs50
-rw-r--r--Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.mak29
-rw-r--r--Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.sdl80
-rw-r--r--Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.c512
-rw-r--r--Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.cif11
-rw-r--r--Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.dxs47
-rw-r--r--Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.mak55
-rw-r--r--Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.sdl68
-rw-r--r--Board/EM/Platform/GenAcpiTable.exebin0 -> 76088 bytes
-rw-r--r--Board/EM/Platform/Include/IntelPlatformInclude.cif10
-rw-r--r--Board/EM/Platform/Include/IntelPlatformInclude.sdl15
-rw-r--r--Board/EM/Platform/Include/Ppi/IntelPlatformPpi.cif9
-rw-r--r--Board/EM/Platform/Include/Ppi/IntelPlatformPpi.sdl15
-rw-r--r--Board/EM/Platform/Include/Ppi/TcgPeiDone.h43
-rw-r--r--Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.cif12
-rw-r--r--Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.mak105
-rw-r--r--Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.sd159
-rw-r--r--Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.sdl36
-rw-r--r--Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.unibin0 -> 10168 bytes
-rw-r--r--Board/EM/Platform/IntelRefVerDisplay/IntelRefVerSetup.c261
-rw-r--r--Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.c288
-rw-r--r--Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.cif11
-rw-r--r--Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.mak65
-rw-r--r--Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.sdl40
-rw-r--r--Board/EM/Platform/Library/Dxe/DxeKscLib/KscLib.h260
-rw-r--r--Board/EM/Platform/Library/IntelPlatformProtocolLib.cif13
-rw-r--r--Board/EM/Platform/Library/IntelPlatformProtocolLib.mak64
-rw-r--r--Board/EM/Platform/Library/IntelPlatformProtocolLib.sdl47
-rw-r--r--Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.c37
-rw-r--r--Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.h535
-rw-r--r--Board/EM/Platform/PlatformInfo/PlatformInfo.c166
-rw-r--r--Board/EM/Platform/PlatformInfo/PlatformInfo.cif12
-rw-r--r--Board/EM/Platform/PlatformInfo/PlatformInfo.dxs59
-rw-r--r--Board/EM/Platform/PlatformInfo/PlatformInfo.h74
-rw-r--r--Board/EM/Platform/PlatformInfo/PlatformInfo.mak82
-rw-r--r--Board/EM/Platform/PlatformInfo/PlatformInfo.sdl93
-rw-r--r--Board/EM/Platform/PlatformSetup.h101
-rw-r--r--Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.c866
-rw-r--r--Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.cif13
-rw-r--r--Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.h150
-rw-r--r--Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.mak82
-rw-r--r--Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.sd300
-rw-r--r--Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.sdl38
-rw-r--r--Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.unibin0 -> 20440 bytes
-rw-r--r--Board/EM/Platform/ReleaseNotes.chmbin0 -> 252673 bytes
-rw-r--r--Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.c731
-rw-r--r--Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.cif12
-rw-r--r--Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.dxs49
-rw-r--r--Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.mak77
-rw-r--r--Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.sdl24
-rw-r--r--Board/EM/Platform/SMBIOSUpdateData/SmbiosUpdateDataProtocol.h100
-rw-r--r--Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.asl52
-rw-r--r--Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.cif10
-rw-r--r--Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.mak80
-rw-r--r--Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.sdl31
-rw-r--r--Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.asl180
-rw-r--r--Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.cif10
-rw-r--r--Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.mak80
-rw-r--r--Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.sdl32
-rw-r--r--Board/EM/Platform/iasl.exebin0 -> 693248 bytes
86 files changed, 14537 insertions, 0 deletions
diff --git a/Board/EM/Platform/AcpiAslWrap/AcpiAslWrap.cif b/Board/EM/Platform/AcpiAslWrap/AcpiAslWrap.cif
new file mode 100644
index 0000000..5cd5058
--- /dev/null
+++ b/Board/EM/Platform/AcpiAslWrap/AcpiAslWrap.cif
@@ -0,0 +1,12 @@
+<component>
+ name = "AcpiAslWrap"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\AcpiAslWrap\"
+ RefName = "AcpiAslWrap"
+[files]
+"AcpiAslWrap.sdl"
+"PlatformPS2Wake.asl"
+"PlatformEC.asl"
+"PlatformDock.asl"
+"PlatformExternal.asl"
+<endComponent>
diff --git a/Board/EM/Platform/AcpiAslWrap/AcpiAslWrap.sdl b/Board/EM/Platform/AcpiAslWrap/AcpiAslWrap.sdl
new file mode 100644
index 0000000..1040bc2
--- /dev/null
+++ b/Board/EM/Platform/AcpiAslWrap/AcpiAslWrap.sdl
@@ -0,0 +1,50 @@
+TOKEN
+ Name = "AcpiAslWrap_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable Ref code AcpiAsl Wrap support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+End
+
+PATH
+ Name = "AcpiAslWrap_DIR"
+End
+
+ELINK
+ Name = "/I$(AcpiAslWrap_DIR)"
+ Parent = "ACPI_PLATFORM_INCLUDES"
+ InvokeOrder = AfterParent
+End
+
+#ELINK
+# Name = "$(AcpiAslWrap_DIR)\PlatformPS2Wake.ASL"
+# Parent = "INTEL_GENERIC_ASL"
+# Token = "CRB_SIO_SUPPORT" "=" "0"
+# InvokeOrder = AfterParent
+#End
+
+ELINK
+ Name = "$(AcpiAslWrap_DIR)\PlatformEC.asl"
+ Parent = "INTEL_EC_ASL"
+ Token = "PlatformAcpiTables_SUPPORT" "=" "1"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(AcpiAslWrap_DIR)\PlatformDock.asl"
+ Parent = "INTEL_GENERIC_ASL"
+ InvokeOrder = AfterParent
+ Token = "FACP_FLAG_DCK_CAP" "=" "0"
+ Token = "CRB_EC_SUPPORT" "=" "1"
+End
+
+
+ELINK
+ Name = "$(AcpiAslWrap_DIR)\PlatformExternal.asl"
+ Parent = "INTEL_GENERIC_ASL"
+ InvokeOrder = AfterParent
+ Priority = 10
+End
diff --git a/Board/EM/Platform/AcpiAslWrap/PlatformDock.asl b/Board/EM/Platform/AcpiAslWrap/PlatformDock.asl
new file mode 100644
index 0000000..32558c7
--- /dev/null
+++ b/Board/EM/Platform/AcpiAslWrap/PlatformDock.asl
@@ -0,0 +1,47 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: PlatformDock.asl
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+Device (\_SB.PCI0.DOCK)
+{
+ Name(_HID, "ABCD0000")
+ Name(_CID, EISAID("PNP0C15"))
+ Name(_UID,2)
+ Method(_STA)
+ {
+ Return(0x00)
+ }
+
+}
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/AcpiAslWrap/PlatformEC.asl b/Board/EM/Platform/AcpiAslWrap/PlatformEC.asl
new file mode 100644
index 0000000..3823368
--- /dev/null
+++ b/Board/EM/Platform/AcpiAslWrap/PlatformEC.asl
@@ -0,0 +1,206 @@
+/**************************************************************************;
+;* *;
+;* Intel Confidential *;
+;* *;
+;* Intel Corporation - ACPI Reference Code for the Sandy Bridge *;
+;* Family of Customer Reference Boards. *;
+;* *;
+;* *;
+;* Copyright (c) 1999 - 2010 Intel Corporation. All rights reserved *;
+;* This software and associated documentation (if any) is furnished *;
+;* under a license and may only be used or copied in accordance *;
+;* with the terms of the license. Except as permitted by such *;
+;* license, no part of this software or documentation may be *;
+;* reproduced, stored in a retrieval system, or transmitted in any *;
+;* form or by any means without the express written consent of *;
+;* Intel Corporation. *;
+;* *;
+;* *;
+;**************************************************************************/
+/*++
+ This file contains a 'Sample Driver' and is licensed as such
+ under the terms of your license agreement with Intel or your
+ vendor. This file may be modified by the user, subject to
+ the additional terms of the license agreement
+--*/
+
+Scope(\_SB.PCI0.LPCB)
+{
+
+Device(H_EC) // Hitachi Embedded Controller
+{
+ Name(_HID, EISAID("PNP0C09"))
+
+ Name(_UID,1)
+
+ Method(_STA)
+ {
+ Store(3, \_SB.PCI0.GFX0.CLID)
+ Return(0x00) //Hide device
+ }
+
+ Name(B1CC, 0)
+ Name(B1ST, 0)
+ Name(B2CC, 0)
+ Name(B2ST, 0)
+ Name(CFAN, 0)
+ Name(CMDR, 0)
+ Name(DOCK, 0)
+ Name(EJET, 0)
+ Name(MCAP, 0)
+ Name(PLMX, 0)
+ Name(PECH, 0)
+ Name(PECL, 0)
+ Name(PENV, 0)
+ Name(PINV, 0)
+ Name(PPSH, 0)
+ Name(PPSL, 0)
+ Name(PSTP, 0)
+ Name(RPWR, 0)
+ Name(LIDS, 0)
+ Name(LSTE, 0)
+ Name(SLPC, 0)
+ Name(VPWR, 0)
+ Name(WTMS, 0)
+ Name(AWT2, 0)
+ Name(AWT1, 0)
+ Name(AWT0, 0)
+ Name(DLED, 0)
+ Name(IBT1, 0)
+ Name(ECAV, Zero) // OS Bug Checks if EC OpRegion accessed before Embedded Controller Driver loaded
+ Name(SPT2, 0)
+ Name(PB10, 0)
+
+ // ECRD (Embedded Read Method)
+ //
+ // Handle all commands sent to EC by BIOS
+ //
+ // Arguments: (1)
+ // Arg0 - Object to Read
+ // Return Value:
+ // Read Value
+ //
+ Method(ECRD,1,Serialized, 0, IntObj, FieldUnitObj)
+ {
+ Return(DeRefOf(Arg0))
+ }
+
+ // ECWT (Embedded Write Method)
+ //
+ // Handle all commands sent to EC by BIOS
+ //
+ // Arguments: (2)
+ // Arg0 - Value to Write
+ // Arg1 - Object to Write to
+ //
+ Method(ECWT,2,Serialized,,,{IntObj, FieldUnitObj})
+ {
+ Store(Arg0,Arg1)
+ }
+
+
+ Method(ECMD,1,Serialized) // Handle all commands sent to EC by BIOS
+ {
+ If (\ECON)
+ {
+ While(\_SB.PCI0.LPCB.H_EC.CMDR){Stall(20)}
+ Store(Arg0, \_SB.PCI0.LPCB.H_EC.CMDR)
+ }
+ }
+
+ Device(BAT0)
+ {
+ Name(_HID,EISAID("PNP0C0A"))
+
+ Name(_UID,0)
+
+ Method(_STA,0)
+ {
+ Return(0) // Hide device
+ }
+ }
+
+ // Real battery code
+ //
+ Scope(\)
+ {
+ // these fields come from the Global NVS area
+ Field(GNVS,AnyAcc,Lock,Preserve)
+ {
+ Offset(30), // Battery Support Registers:
+ BNUM, 8, // (30) Battery Number Present
+ Offset(32),
+ B1SC, 8, // (32) Battery 1 Stored Capacity
+ Offset(35),
+ B1SS, 8, // (35) Battery 1 Stored Status
+ }
+ } // end Scope(\)
+
+ Device(BAT1)
+ {
+ Name(_HID,EISAID("PNP0C0A"))
+
+ Name(_UID,1)
+
+ Method(_STA,0)
+ {
+ Return(0) // Hide device
+ }
+ }
+
+ Scope(\)
+ {
+ // these fields come from the Global NVS area
+ Field(GNVS,AnyAcc,Lock,Preserve)
+ {
+ Offset(33),
+ B2SC, 8, // (33) Battery 2 Stored Capacity
+ Offset(36),
+ B2SS, 8 // (36) Battery 2 Stored Status
+ }
+ } // end Scope(\)
+ Device(BAT2)
+ {
+ Name(_HID,EISAID("PNP0C0A"))
+
+ Name(_UID,2)
+
+ Method(_STA,0)
+ {
+ Return(0) // Hide device
+ }
+ }
+
+ }
+}// end scope Scope(\_SB.PCI0.LPCB)
+ // System Bus
+
+Device (\_SB.PCI0.DOCK)
+{
+ Name(_HID, "ABCD0000")
+ Name(_CID, EISAID("PNP0C15"))
+ Name(_UID,2)
+ Method(_STA)
+ {
+ Return(0x00)
+ }
+
+}
+Scope(\_SB)
+{
+
+ // Define a Lid Switch.
+
+ Device(LID0)
+ {
+ Name(_HID,EISAID("PNP0C0D"))
+
+ Method(_STA)
+ {
+ Return(0x00)
+ }
+
+ }
+}//end scope _SB
+
+
diff --git a/Board/EM/Platform/AcpiAslWrap/PlatformExternal.asl b/Board/EM/Platform/AcpiAslWrap/PlatformExternal.asl
new file mode 100644
index 0000000..b83720e
--- /dev/null
+++ b/Board/EM/Platform/AcpiAslWrap/PlatformExternal.asl
@@ -0,0 +1,69 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2013, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: PlatformExternal.asl
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+#if !defined(ASL_Remove_SaSsdt_Data_To_Dsdt) || (ASL_Remove_SaSsdt_Data_To_Dsdt == 0)
+External(LHIH)
+External(LLOW)
+External(IGDS)
+External(LIDS)
+External(BRTL)
+External(ALSE)
+External(GSMI)
+External(\_SB.PCI0.GFX0.ALSI)
+External(\_SB.PCI0.GFX0.CDCK)
+External(\_SB.PCI0.GFX0.CBLV)
+External(\_SB.PCI0.GFX0.GSSE)
+External(\_SB.PCI0.PEG0, DeviceObj)
+External(\_SB.PCI0.PEG0.PEGP, DeviceObj)
+External(\_SB.PCI0.PEG1, DeviceObj)
+External(\_SB.PCI0.PEG2, DeviceObj)
+External(\_SB.PCI0.GFX0.DD1F, DeviceObj)
+External(\_SB.PCI0.GFX0.GDCK, MethodObj)
+External(\_SB.PCI0.GFX0.GHDS, MethodObj)
+External(\_SB.PCI0.GFX0.AINT, MethodObj)
+External(\_SB.PCI0.GFX0.GLID, MethodObj)
+External(\_SB.PCI0.GFX0.GSCI, MethodObj)
+#endif
+External(\_PR.CPU0, DeviceObj)
+External(\_PR.CPU0._PSS, MethodObj)
+External(\_PR.CPU0._PPC, IntObj)
+#if !defined(ASL_EC_SUPPORT) || (ASL_EC_SUPPORT == 0)
+#if !defined(ASL_Remove_SaSsdt_Data_To_Dsdt) || (ASL_Remove_SaSsdt_Data_To_Dsdt == 0)
+External(\_SB.PCI0.GFX0.CLID)
+External(\_SB.PCI0.GFX0.IUEH, MethodObj)
+#endif
+External(\_SB.IETM, DeviceObj)
+#endif // ASL_EC_SUPPORT
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/AcpiAslWrap/PlatformPS2Wake.asl b/Board/EM/Platform/AcpiAslWrap/PlatformPS2Wake.asl
new file mode 100644
index 0000000..7f71d5f
--- /dev/null
+++ b/Board/EM/Platform/AcpiAslWrap/PlatformPS2Wake.asl
@@ -0,0 +1,47 @@
+/**************************************************************************;
+;* *;
+;* Intel Confidential *;
+;* *;
+;* Intel Corporation - ACPI Reference Code for the Sandy Bridge *;
+;* Family of Customer Reference Boards. *;
+;* *;
+;* *;
+;* Copyright (c) 1999 - 2010 Intel Corporation. All rights reserved *;
+;* This software and associated documentation (if any) is furnished *;
+;* under a license and may only be used or copied in accordance *;
+;* with the terms of the license. Except as permitted by such *;
+;* license, no part of this software or documentation may be *;
+;* reproduced, stored in a retrieval system, or transmitted in any *;
+;* form or by any means without the express written consent of *;
+;* Intel Corporation. *;
+;* *;
+;* *;
+;**************************************************************************/
+/*++
+ This file contains a 'Sample Driver' and is licensed as such
+ under the terms of your license agreement with Intel or your
+ vendor. This file may be modified by the user, subject to
+ the additional terms of the license agreement
+--*/
+
+Scope(\_SB)
+{
+ Device(PWRB)
+ {
+ Name(_HID,EISAID("PNP0C0C"))
+
+ // GPI14 = GPE30 = Waketime SCI. The PRW isn't working when
+ // placed in any of the logical locations ( PS2K, PS2M,
+ // H_EC ), so a Power Button Device was created specifically
+ // for the WAKETIME_SCI PRW.
+
+ Name(_PRW, Package(){30,4})
+
+ Method(_STA)
+ {
+ Return(0x0F)
+ }
+ }//end device PWRB
+}//end scope _SB
+
+
diff --git a/Board/EM/Platform/AcpiIntelRC.h b/Board/EM/Platform/AcpiIntelRC.h
new file mode 100644
index 0000000..72de447
--- /dev/null
+++ b/Board/EM/Platform/AcpiIntelRC.h
@@ -0,0 +1,64 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiIntelRC.h 1 2/09/12 12:31a Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 2/09/12 12:31a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiIntelRC.h $
+//
+// 1 2/09/12 12:31a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: AcpiIntelRC.h
+//
+// Description: AcpiPlatform header file, Change ASL name
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+#ifndef __ACPIINTELRC_H__
+#define __ACPIINTELRC_H__
+
+// Change name "SBRG" to "LPCB" for Intel RC
+#define SBRG LPCB
+
+
+#endif
+
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+
diff --git a/Board/EM/Platform/AcpiPlatform.c b/Board/EM/Platform/AcpiPlatform.c
new file mode 100644
index 0000000..19b8d21
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatform.c
@@ -0,0 +1,3285 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2013, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/Projects/Intel/Haswell/LynxPoint_SharkBay-DT_Crb_1AQQW/Board/EM/Platform/AcpiPlatform.c 4 4/19/16 7:43a Chienhsieh $
+//
+// $Revision: 4 $
+//
+// $Date: 4/19/16 7:43a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/Projects/Intel/Haswell/LynxPoint_SharkBay-DT_Crb_1AQQW/Board/EM/Platform/AcpiPlatform.c $
+//
+// 4 4/19/16 7:43a Chienhsieh
+//
+// 34 7/11/14 4:00a Joshchou
+// [TAG] None
+// [Category] Improvement
+// [Description] Support Debug Port Table.
+// [Files] AcpiPlatform.c
+// AcpiPlatform.h
+// AcpiPlatform.cif
+//
+// 33 5/15/14 3:14a Joshchou
+// [TAG] EIP167036
+// [Category] Improvement
+// [Description] review the attributes of variable.
+// [Files] AcpiPlatform.c
+// AcpiPlatform.h
+// AcpiPlatform.sd
+// AcpiPlatform.cif
+//
+// 32 4/23/14 4:21a Joshchou
+//
+// 31 9/27/13 10:43a Joshchou
+// [TAG] EIP137454
+// [Category] New Feature
+// [Description] Follow Intel sample code to add LPIT table.
+//
+// 30 9/18/13 8:00a Joshchou
+// [TAG] None
+// [Category] Improvement
+// [Description] Fix the CppCheck error.
+//
+// 29 9/18/13 6:25a Joshchou
+// [TAG] EIP136411
+// [Category] Improvement
+// [Description] Support MWAIT LPI State Descriptor[1].
+//
+// 28 7/19/13 2:57a Alanlin
+// [TAG] None
+// [Category] Important
+// [Severity] Important
+// [Description] Fixed the system may hang up when DEBUG_MODE is ON.
+// While trying to use SetAcpiTable to create LPIT table, reture status is
+// EFI_INVALID_PARAMETER.
+// [Files] AcpiPlatform.c
+//
+// 27 7/16/13 5:58a Alanlin
+// [TAG] EIP125350
+// [Category] Normal
+// [Severity] Normal
+// [Description] System BIOS Support for the Hardware Button for Windows*
+// 8.1 - Rev.0.5
+// [Files] AcpiPlatform.c, AcpiPlatform.sd, AcpiPlatform.uni
+//
+// [TAG] EIP127540
+// [Category] Normal
+// [Severity] Normal
+// [Description] Windows* 8.1 Micro-PEP (uPEP) ASL Support Version 0.5
+// [Files] AcpiPlatform.c, AcpiPlatform.h
+//
+// 26 7/15/13 5:32a Alanlin
+// [TAG] EIP129086
+// [Category] Important
+// [Severity] Important
+// [Description] Update Shark Bay Client ACPI Reference Code Beta Version
+// 1.6.1
+//
+// 25 6/28/13 5:22a Alanlin
+// [TAG] None
+// [Category] Important
+// [Severity] Important
+// [Description] Fixed that Processors device are disappeared under OS
+// device manager.
+// [Files] AcpiPlatform.c, AcpiPlatform.h
+//
+// 24 6/04/13 10:18a Alanlin
+// [TAG] None
+// [Category] Improvement
+// [Severity] Normal
+// [Description] Follow Intel CRB BIOS v126 to set default configuraton
+// setting of RTD3 devices.
+// [Files] AcpiPlatform.c, AcpiPlatform.sd, AcpiPlatform.uni
+//
+// 23 3/26/13 9:30a Alanlin
+// [TAG] EIP119125
+// [Category] Important
+// [Severity] Important
+// [Description] Update Shark Bay Client ACPI Reference Code Beta Version
+// 1.3.1
+//
+// 22 3/15/13 6:59a Alanlin
+// [TAG] None
+// [Category] Normal
+// [Severity] Normal
+// [Description] Add a "Remove_SaSsdt_Data_To_Dsdt" token, it can remove
+// related Sa Ssdt acpi data to Dsdt.
+// [Files] PlatformExternal.asl, Acpiplatform.c, EC.asl, GloblNvs.asl,
+// Gpe.asl, Video.asl.
+//
+// 21 2/21/13 1:16a Alanlin
+// [TAG] EIP114876
+// [Category] Normal
+// [Severity] Normal
+// [Description] To close Readytoboot event-function : CallbackBootScript
+//
+// 20 2/15/13 1:12a Alanlin
+// [TAG] EIP114919
+// [Category] Important
+// [Severity] Important
+// [Description] Update Shark Bay Client ACPI Reference Code Beta Version
+// 1.1.0
+//
+// 19 1/28/13 11:13p Alanlin
+// [TAG] EIP113555
+// [Category] Important
+// [Severity] Important
+// [Description] Update Shark Bay Client ACPI Reference Code Beta Version
+// 1.0.0
+//
+// 18 1/18/13 3:57a Alanlin
+//
+// 17 1/15/13 5:46a Alanlin
+// [TAG] None
+// [Category] Normal
+// [Severity] Normal
+// [Description] Add setup item and setting for DPTF
+// [Files] Acpiplatform.c, Acpiplatform.sd, Acpiplatform.uni,
+// PlatformSetup.h
+//
+// 16 12/18/12 11:02p Alanlin
+// [TAG] EIP107188
+// [Category] Important
+// [Severity] Important
+// [Description] USB 3.0 port can't work when RTD3 is Enabled in setup
+// menu.
+// [Files] Acpiplatform.c, Acpiplatform.mak, Acpiplatform.sd,
+// Acpiplatform.uni.
+//
+// 15 11/26/12 6:04a Alanlin
+// [TAG] None
+// [Category] Improvement
+// [Severity] Normal
+// [Description] Include Rtd3FFRD.asl for Haswell - FFRD SKU Board.
+// BRRtd3.asl for Haswell - Basking Ridge Board.
+// [Files] SsdtRtd3.cif, SsdtRtd3.sdl, Rtd3FFRD.asl, BRRtd3.asl,
+// Acpiplatform.c
+//
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Fixed the system has blue screen when RTD3 is Enabled.
+// [Files] SsdtZpOdd.sdl, Acpiplatform.c
+//
+// 14 11/20/12 7:08a Alanlin
+// [TAG] None
+// [Category] New Feature
+// [Severity] Important
+// [Description] SensorHub SSDT acpi table support
+// [Files] Acpiplatform.c, Acpiplatform.cif, Acpiplatform.h,
+// SsdtSensorHub.asl, SsdtSensorHub.mak, SsdtSensorHub.sdl
+//
+// [TAG] None
+// [Category] Important
+// [Severity] Important
+// [Description] Update Shark Bay Client ACPI Reference Code Beta Version
+// 0.8.0
+//
+// 13 11/09/12 5:17a Alanlin
+// [TAG] None
+// [Category] New Feature
+// [Severity] Important
+// [Description] ZpOdd SSDT acpi table support
+// [Files] Acpiplatform.c, Acpiplatform.cif, Acpiplatform.h,
+// Acpiplatform.sd, Acpiplatform.uni
+//
+// 12 10/31/12 4:38a Alanlin
+// [TAG] None
+// [Category] Improvement
+// [Severity] Normal
+// [Description] Fine tune Platform Board Information.
+//
+// [TAG] None
+// [Category] New Feature
+// [Severity] Normal
+// [Description] Support Acpi Debug SSDT.
+//
+// [TAG] None
+// [Category] Improvement
+// [Severity] Normal
+// [Description] Removed all SaGlobalNvsArea Structure, move to SA module
+// to initial.
+//
+// 11 10/15/12 11:40a Alanlin
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Updated for RC 0.7.1
+//
+// 10 9/12/12 7:20a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Remove AOAC for Intel Smart Connect Technology module.
+// [Files] GlobalNvsArea.h, GloblNvs.asl
+//
+// 9 8/31/12 4:47a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Update Board ID for Haswell platform.
+// [Files] AcpiPlatform.c, AcpiPlatform.sdl, PlatformInfo.sdl,
+// AcpiAsl.sdl
+//
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Implement Runtime D3.
+// [Files] AcpiPlatform.c, AcpiPlatform.cif, AcpiPlatform.h,
+// AcpiPlatform.sd, AcpiPlatform.sdl, AcpiPlatform.uni, GlobalNvsArea.h,
+// SsdtRtd3.cif, SsdtRtd3.mak, Ult0Rtd3.asl, SsdtRtd3.sdl
+//
+// 8 8/14/12 9:19a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Remove useless Dppm policy.
+// [Files] AcpiPlatform.c
+//
+// 7 7/27/12 5:11a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Create DPTF and CPPC setup item.
+// [Files] AcpiPlatform.c, AcpiPlatform.sd, AcpiPlatform.uni,
+// PlatformSetup.h
+//
+// 6 7/03/12 1:28a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Update Shark Bay Client ACPI Reference Code Alpha 2
+// 0.6.0.
+// [Files] ReferenceCode\AcpiTables\*.*, GlobalNvsArea.h,
+// AcpiPlatform.c, PlatformInfo.c, PlatformEC.asl
+//
+// 5 4/25/12 1:28p Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Initilize ACPI DXE Platform Policy.
+// [Files] AcpiPlatform.c, AcpiPlatform.mak
+//
+// 3 4/05/12 7:46a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Fixed building error for Intel System Agent
+// Label:"4.6.5.3_Intel_SA-RC_055_004".
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.mak,
+// AcpiPlatform.c, PlatformInfo.c
+//
+// 1 2/09/12 12:30a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//---------------------------------------------------------------------------
+//
+// Name: AcpiPlatform.c
+//
+// Description: Installs EFI_GLOBAL_NVS_AREA_PROTOCOL_GUID
+//
+//---------------------------------------------------------------------------
+//<AMI_FHDR_END>
+#include <token.h>
+#include <Acpi11.h>
+#include <Acpi20.h>
+#include <Protocol\AcpiSupport.h>
+#include <AmiCspLib.h>
+#include <AmiDxeLib.h>
+///#include "CPUCspLib.h"
+//#include "EfiCommonLib.h"
+//#include "CpuFuncs.h"
+///#include "Cpu.h"
+//#include <Acpi.h>
+#include <AcpiRes.h>
+#include <SaGlobalNvsArea\SaGlobalNvsArea.h>
+#include <Protocol\GlobalNvsArea\GlobalNvsArea.h>
+#include <AcpiPlatform.h>
+#include <PlatformInfo.h>
+#include <Setup.h>
+#if CRB_EC_SUPPORT == 1
+#include <KscLib.h>
+#endif
+#include <Protocol\PchPlatformPolicy\PchPlatformPolicy.h>
+#include <PlatformSetup.h>
+
+#ifndef PPM_C3
+#define PPM_C3 0x8
+#endif
+
+#ifndef FADT_C3_LATENCY
+#define FADT_C3_LATENCY 57
+#endif
+
+EFI_GUID gEfiGlobalNvsAreaProtocolGuid = EFI_GLOBAL_NVS_AREA_PROTOCOL_GUID;
+EFI_GUID gEfiGlobalSaNvsAreaProtocolGuid = EFI_GLOBAL_SANVS_AREA_PROTOCOL_GUID;
+EFI_GUID gPlatformInfoProtocolGuid = EFI_PLATFORM_INFO_PROTOCOL_GUID;
+EFI_GUID gSetupGuid = SETUP_GUID;
+#if defined PTID_SUPPORT && PTID_SUPPORT
+EFI_GUID gAcpiPtidFfsTableStorageGuid = PTID_FFS_TABLE_STORAGE_GUID;
+#endif
+#if defined IntelRMT_SUPPORT && IntelRMT_SUPPORT
+EFI_GUID gAcpiIRMTFfsTableStorageGuid = IRMT_FFS_TABLE_STORAGE_GUID;
+#endif
+#if defined RTD3_SUPPORT && RTD3_SUPPORT
+EFI_GUID gAcpiRtd3FfsTableGuid = RTD3_FFS_TABLE_GUID;
+#endif
+#if defined ACPIDEBUG_SUPPORT && ACPIDEBUG_SUPPORT
+EFI_GUID gAcpiDebugFfsTableGuid = ACPIDEBUG_FFS_TABLE_GUID;
+#endif
+#if defined ZPODD_SUPPORT && ZPODD_SUPPORT
+EFI_GUID gAcpiZpOddFfsTableGuid = ZPODD_FFS_TABLE_GUID;
+#endif
+#if defined INTELSENSORHUB_SUPPORT && INTELSENSORHUB_SUPPORT
+EFI_GUID gAcpiIntelSensorHubFfsTableGuid = INTELSENSORHUB_FFS_TABLE_GUID;
+#endif
+#if defined LPIT_SUPPORT && LPIT_SUPPORT
+EFI_GUID gAcpiLpitGuid = LPIT_GUID;
+#endif
+
+EFI_GLOBAL_NVS_AREA_PROTOCOL mGlobalNvsArea;
+SYSTEM_AGENT_GLOBAL_NVS_AREA_PROTOCOL gSaGlobalNvsArea;
+
+VOID *GetDSDTTable ();
+EFI_ACPI_SUPPORT_PROTOCOL *gEfiAcpiSupport = 0;
+PLATFORM_INFO_PROTOCOL *gPlatformInfoProtocol;
+VOID CallbackBootScript(IN EFI_EVENT Event, IN VOID *Context);
+EFI_EVENT gEvtBootScript;
+static SETUP_DATA *gSetupData = NULL;
+
+VOID DsdtTableUpdate (PACPI_HDR DsdtTable);
+//VOID DsdtTableUpdate1 (PACPI_HDR DsdtTable);
+VOID LoadDbgpTable();
+
+#if defined LPIT_SUPPORT && LPIT_SUPPORT
+VOID LoadLpitTable ();
+#endif
+#if defined PTID_SUPPORT && PTID_SUPPORT
+VOID LoadSsdtPtidTable ();
+EFI_STATUS LocateSupportProtocol (IN EFI_GUID *Protocol,OUT VOID **Instance,IN BOOLEAN Type );
+#endif
+#if defined IntelRMT_SUPPORT && IntelRMT_SUPPORT
+VOID LoadSsdtIRMTTable ();
+EFI_STATUS LocateIRMTSupportProtocol (IN EFI_GUID *Protocol,OUT VOID **Instance,IN BOOLEAN Type );
+#endif
+#if defined RTD3_SUPPORT && RTD3_SUPPORT
+VOID LoadSsdtRtd3Table ();
+EFI_STATUS LocateRTD3SupportProtocol (IN EFI_GUID *Protocol,OUT VOID **Instance,IN BOOLEAN Type );
+#endif
+#if defined ACPIDEBUG_SUPPORT && ACPIDEBUG_SUPPORT
+VOID LoadSsdtAcpiDebugTable ();
+EFI_STATUS LocateAcpiDebugSupportProtocol (IN EFI_GUID *Protocol,OUT VOID **Instance,IN BOOLEAN Type );
+#define AcpiDebugBufferSize 0x10000 // 64k buffer data
+#define ACPI_DEBUG_STR "INTEL ACPI DEBUG"
+#define AML_NAME_OP 0x08
+#if defined ZPODD_SUPPORT && ZPODD_SUPPORT
+VOID LoadSsdtZpOddTable ();
+EFI_STATUS LocateZPODDSupportProtocol (IN EFI_GUID *Protocol,OUT VOID **Instance,IN BOOLEAN Type );
+#endif
+#if defined INTELSENSORHUB_SUPPORT && INTELSENSORHUB_SUPPORT
+VOID LoadSsdtIntelSensorHubTable ();
+EFI_STATUS LocateIntelSensorHubSupportProtocol (IN EFI_GUID *Protocol,OUT VOID **Instance,IN BOOLEAN Type );
+#endif
+
+//
+// ASL NAME structure
+//
+#pragma pack(1)
+typedef struct {
+ UINT8 NameOp; // Byte [0]=0x08:NameOp.
+ UINT32 NameString; // Byte [4:1]=Name of object.
+ UINT8 DWordPrefix; // Byte [5]=0x0C:DWord Prefix.
+ UINT32 Value; // 0 ; Value of named object.
+} NAME_LAYOUT;
+#pragma pack()
+#endif
+
+#include <AcpiInfo\AcpiInfo.h>
+#include <AcpiPlatformPolicy\AcpiPlatformPolicy.h>
+EFI_GUID gAcpiPlatformPolicyProtocolGuid = ACPI_PLATFORM_POLICY_PROTOCOL_GUID;
+
+// Protocols that are installed
+ACPI_PLATFORM_POLICY_PROTOCOL mAcpiPlatformPolicyProtocol = { 0 };
+EFI_ACPI_INFO_PROTOCOL mAcpiInfoProtocol = { 0 };
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: CheckPlatformSupportRtD3
+//
+// Description: Check if platform support RtD3
+//
+// Input: None
+//
+// Output: None
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+BOOLEAN CheckPlatformSupportRtD3 ()
+{
+ BOOLEAN RtD3Supported;
+ PCH_SERIES PchSeries = GetPchSeries();
+
+ RtD3Supported = FALSE;
+ if (IS_SA_DEVICE_ID_MOBILE (READ_PCI16_NB (R_SA_MC_DEVICE_ID))) {
+ if (PchSeries == PchLp) {
+ RtD3Supported = TRUE;
+ }
+ }
+
+ return RtD3Supported;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: CheckPlatformSupportCPPC
+//
+// Description: Check if platform support CPPC
+//
+// Input: None
+//
+// Output: None
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+BOOLEAN CheckPlatformSupportCPPC ()
+{
+ BOOLEAN CPPCSupported;
+
+ if (!(IS_SA_DEVICE_ID_MOBILE (READ_PCI16_NB (R_SA_MC_DEVICE_ID)))) {
+ CPPCSupported = FALSE;
+ } else {
+ CPPCSupported = TRUE;
+ }
+
+ return CPPCSupported;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: InstallAcpiDxePlatformPolicy
+//
+// Description: Initilize ACPI DXE Platform Policy.
+//
+// Input: None
+//
+// Output: None
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS InstallAcpiDxePlatformPolicy (IN UINT32 SetupAttributes)
+{
+ EFI_STATUS Status;
+ EFI_HANDLE Handle;
+ SETUP_PLATFORM_DATA SetupPlatformData;
+
+ ///
+ /// Initialize the EFI Driver Library
+ ///
+ mAcpiPlatformPolicyProtocol.Revision = ACPI_PLATFORM_POLICY_PROTOCOL_REVISION_1;
+ mAcpiPlatformPolicyProtocol.BoardId = gPlatformInfoProtocol->BoardId;
+
+ mAcpiPlatformPolicyProtocol.EnableDptf = 0;
+ mAcpiPlatformPolicyProtocol.EnableCppc = 0;
+ mAcpiPlatformPolicyProtocol.EnableCppcPlatformSCI = 0;
+
+ TRACE((TRACE_ALWAYS, "InstallAcpiDxePlatformPolicy setup variable attributes = %x \n", SetupAttributes));
+
+ SetupPlatformData.PlatformSupportCppc = 0;
+ SetupPlatformData.PlatformSupportRtD3 = 0;
+
+#if ACPIDEBUG_SUPPORT
+ if (gSetupData != NULL) {
+ mAcpiPlatformPolicyProtocol.EnableAcpiDebug = gSetupData->AcpiDebugSupport;
+ }
+#endif
+
+#if RTD3_SUPPORT
+ if (!CheckPlatformSupportRtD3()) {
+ mAcpiPlatformPolicyProtocol.EnableRtD3 = 0;
+ } else if (gSetupData != NULL) {
+ SetupPlatformData.PlatformSupportRtD3 = 1;
+ mAcpiPlatformPolicyProtocol.EnableRtD3 = gSetupData->Rtd3Support;
+ }
+#endif
+
+#if Dptf_SUPPORT
+ if (gSetupData != NULL) {
+ mAcpiPlatformPolicyProtocol.EnableDptf = gSetupData->EnableDptf;
+ if(gSetupData->EnableDptf==1){
+ if (gSetupData->EnableSaDevice==1){
+ gSetupData->SaDevice4=1;
+ }
+ else{
+ gSetupData->SaDevice4=0;
+ }
+ gSetupData->ThermalDeviceEnable=gSetupData->EnablePchDevice;
+ }
+
+ Status = pRS->SetVariable (
+ L"Setup",
+ &gSetupGuid,
+ SetupAttributes,
+ sizeof(SETUP_DATA),
+ gSetupData
+ );
+ }
+#endif
+
+#if CPPC_SUPPORT
+ if (!CheckPlatformSupportCPPC()) {
+ mAcpiPlatformPolicyProtocol.EnableCppc = 0;
+ mAcpiPlatformPolicyProtocol.EnableCppcPlatformSCI = 0;
+ } else if (gSetupData != NULL) {
+ SetupPlatformData.PlatformSupportCppc = 1;
+ mAcpiPlatformPolicyProtocol.EnableCppc = gSetupData->EnableCppc;
+ mAcpiPlatformPolicyProtocol.EnableCppcPlatformSCI = gSetupData->EnableCppcPlatformSCI;
+ }
+#endif
+
+ TRACE((TRACE_ALWAYS, "SetupPlatformData.PlatformSupportCppc = %x \n", SetupPlatformData.PlatformSupportCppc));
+ TRACE((TRACE_ALWAYS, "SetupPlatformData.PlatformSupportRtD3 = %x \n", SetupPlatformData.PlatformSupportRtD3));
+
+ Status = pRS->SetVariable (
+ L"SetupPlatformData",
+ &gSetupGuid,
+ EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ sizeof (SETUP_PLATFORM_DATA),
+ &SetupPlatformData
+ );
+ TRACE((TRACE_ALWAYS, "SetVariable SetupPlatformData Status = %r \n", Status));
+
+ Handle = NULL;
+ Status = pBS->InstallMultipleProtocolInterfaces (
+ &Handle,
+ &gAcpiPlatformPolicyProtocolGuid,
+ &mAcpiPlatformPolicyProtocol,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ ///
+ /// Install ACPI_INFO_PROTOCOL
+ ///
+ mAcpiInfoProtocol.Revision = ACPI_INFO_PROTOCOL_REVISION_1;
+ ///
+ /// RCVersion[32:0] is the release number.
+ /// For example:
+ /// Acpi Framework 0.5.0 should be 00 05 00 00 (0x00050000)
+ ///
+ mAcpiInfoProtocol.RCVersion = ACPI_RC_VERSION;
+
+ Handle = NULL;
+ Status = pBS->InstallMultipleProtocolInterfaces (
+ &Handle,
+ &gEfiAcpiInfoProtocolGuid,
+ &mAcpiInfoProtocol,
+ NULL
+ );
+
+
+ return Status;
+
+}
+
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: AcpiPlatformInit
+//
+// Description:
+//
+// Input:
+//
+// Output:
+// EFI_STATUS
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+// Here is the control flow of this function:
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+EFI_STATUS
+AcpiPlatformInit (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ EFI_GUID gAcpiSupportGuid = EFI_ACPI_SUPPORT_GUID;
+ PACPI_HDR DsdtTable;
+ UINT32 Length;
+ UINT8 *ptr;
+ UINT32 RegEax, RegEbx, RegEcx, RegEdx;
+ ASL_OBJ_INFO ObjInfo;
+ MSR_REGISTER MsrCoreThreadCount;
+#if CRB_EC_SUPPORT == 1
+ UINT8 PortDataOut = 0;
+#endif
+ UINT8 ECSmbusThermalReportingEnabled = 0;
+ UINT8 ECSMBusMsgLenth = 0;
+ UINT8 ECSMBusPECEnabled = 0;
+ NB_SETUP_DATA *NbSetupData = NULL;
+ SB_SETUP_DATA *SbSetupData = NULL;
+ UINTN VariableSize = NULL;
+ UINT16 McDeviceId;
+ UINT8 USBRTD3 = 0;
+ PCH_SERIES PchSeries = GetPchSeries();
+ UINT32 SetupAttributes = 0;
+
+ InitAmiLib(ImageHandle,SystemTable);
+
+ Status = pBS->AllocatePool (EfiACPIMemoryNVS,
+ sizeof (EFI_GLOBAL_NVS_AREA),
+ &mGlobalNvsArea.Area);
+ ASSERT_EFI_ERROR (Status);
+ pBS->SetMem (mGlobalNvsArea.Area, sizeof (EFI_GLOBAL_NVS_AREA), 0);
+
+#if defined Remove_SaSsdt_Data_To_Dsdt && Remove_SaSsdt_Data_To_Dsdt
+ Status = pBS->AllocatePool (EfiACPIMemoryNVS,
+ sizeof (SYSTEM_AGENT_GLOBAL_NVS_AREA),
+ &gSaGlobalNvsArea.Area);
+ ASSERT_EFI_ERROR (Status);
+ pBS->SetMem (gSaGlobalNvsArea.Area, sizeof (SYSTEM_AGENT_GLOBAL_NVS_AREA), 0);
+#endif
+ //
+ // mGlobalNvsArea.Area has the address of GNVS in ACPI NVS area
+ // update this as GNVS opRegion field of GNVS area in DSDT.
+ //
+ Status = pBS->LocateProtocol(&gAcpiSupportGuid, NULL, &gEfiAcpiSupport);
+ ASSERT_EFI_ERROR (Status);
+
+ // Read MC device ID
+ McDeviceId = READ_PCI16_NB(R_SA_MC_DEVICE_ID);
+
+ DsdtTable = GetDSDTTable();
+ if (DsdtTable) {
+ Length = DsdtTable->Length - sizeof(ACPI_HDR);
+ ptr = (UINT8*)DsdtTable + sizeof(ACPI_HDR);
+ Status = GetAslObj(ptr, Length, "GNVS", otOpReg, &ObjInfo);
+ ASSERT_EFI_ERROR (Status);
+
+ ptr = (UINT8*)ObjInfo.DataStart;
+ *(UINT32*)(ptr + 2) = (UINT32)(UINTN)mGlobalNvsArea.Area;
+ *(UINT16*)(ptr + 2 + 5) = sizeof (EFI_GLOBAL_NVS_AREA);
+ TRACE((TRACE_ALWAYS, "ACPI Global NVS Ptr=0x%X, Length=0x%X\n", (UINT32)(UINTN) mGlobalNvsArea.Area, sizeof (EFI_GLOBAL_NVS_AREA)));
+
+#if defined Remove_SaSsdt_Data_To_Dsdt && Remove_SaSsdt_Data_To_Dsdt
+ Length = DsdtTable->Length - sizeof(ACPI_HDR);
+ ptr = (UINT8*)DsdtTable + sizeof(ACPI_HDR);
+ Status = GetAslObj(ptr, Length, "SANV", otOpReg, &ObjInfo);
+ ASSERT_EFI_ERROR (Status);
+
+ ptr = (UINT8*)ObjInfo.DataStart;
+ *(UINT32*)(ptr + 2) = (UINT32)(UINTN)gSaGlobalNvsArea.Area;
+ *(UINT16*)(ptr + 2 + 5) = sizeof (SYSTEM_AGENT_GLOBAL_NVS_AREA);
+ TRACE((TRACE_ALWAYS, "ACPI Global SA NVS Ptr=0x%X, Length=0x%X\n", (UINT32)(UINTN) gSaGlobalNvsArea.Area, sizeof (SYSTEM_AGENT_GLOBAL_NVS_AREA)));
+#endif
+
+ if(!IS_SA_DEVICE_ID_MOBILE(McDeviceId)) {
+ DsdtTableUpdate (DsdtTable); // This DsdtTable update is for non-Mobile platform.
+ }
+ }
+
+ LoadDbgpTable();
+
+#if defined LPIT_SUPPORT && LPIT_SUPPORT
+ if (PchSeries == PchLp) {
+ LoadLpitTable();
+ }
+#endif
+
+ Status = pBS->LocateProtocol(&gPlatformInfoProtocolGuid, NULL, &gPlatformInfoProtocol);
+ ASSERT_EFI_ERROR (Status);
+
+ // Update the PlatformFlavor
+ mGlobalNvsArea.Area->PlatformFlavor = gPlatformInfoProtocol->PlatformFlavor;
+
+ // Update the Platform Board ID
+ mGlobalNvsArea.Area->BoardId = gPlatformInfoProtocol->BoardId;
+
+ // Update the Board Revision
+ mGlobalNvsArea.Area->BoardRev = gPlatformInfoProtocol->BoardRev;
+
+ // Initialize AMI Setup Data
+ Status = GetEfiVariable(
+ L"Setup",
+ &gSetupGuid,
+ &SetupAttributes,
+ &VariableSize,
+ &gSetupData
+ );
+
+ // Initilize ACPI DXE Platform Policy
+ Status = InstallAcpiDxePlatformPolicy (SetupAttributes);
+ ASSERT_EFI_ERROR(Status);
+
+#if LOW_POWER_S0_IDLE_CAPABLE == 1
+ mGlobalNvsArea.Area->LowPowerS0Idle = 0;
+ if (LOW_POWER_S0_IDLE_CAPABLE) {
+ if (gSetupData->AcpiLowPowerS0Idle == 1) {
+ mGlobalNvsArea.Area->LowPowerS0Idle = 1;
+ mGlobalNvsArea.Area->PB1E = gSetupData->PowerButton10SecOVR | BIT3; //Bit3: Slate/Laptop Mode Flag, 0: Slate, 1: Laptop
+ mGlobalNvsArea.Area->PEPC = mGlobalNvsArea.Area->PEPC | gSetupData->LowPowerIdleSATA;
+ mGlobalNvsArea.Area->ECNO = gSetupData->EcNotification;
+ mGlobalNvsArea.Area->ECDB = gSetupData->EcCSDebugLight;
+ mGlobalNvsArea.Area->SHSB = gSetupData->SensorStandby;
+ mGlobalNvsArea.Area->PL1LimitCS = gSetupData->CSPL1Limit;
+ mGlobalNvsArea.Area->PL1LimitCSValue = gSetupData->CSPL1Value;
+ }
+ }
+#endif
+
+ if (mGlobalNvsArea.Area->LowPowerS0Idle == 0) {
+// DsdtTableUpdate1 (DsdtTable);
+ } // mGlobalNvsArea.Area->LowPowerS0Idle = 0
+
+
+ if (EFI_ERROR (Status)) {
+ mGlobalNvsArea.Area->NativePCIESupport = 0;
+ } else {
+ mGlobalNvsArea.Area->NativePCIESupport = gSetupData->PciExpNative;
+ }
+
+#if Dptf_SUPPORT
+ mGlobalNvsArea.Area->EnableDptfDevice = gSetupData->EnableDptf;
+ if (gSetupData->EnableDptf) {
+ mGlobalNvsArea.Area->EnableSaDevice = gSetupData->EnableSaDevice;
+ mGlobalNvsArea.Area->ActiveThermalTripPointSA = gSetupData->ActiveThermalTripPointSa;
+ mGlobalNvsArea.Area->PassiveThermalTripPointSA = gSetupData->PassiveThermalTripPointSa;
+ mGlobalNvsArea.Area->CriticalThermalTripPointSA = gSetupData->CriticalThermalTripPointSa;
+ mGlobalNvsArea.Area->HotThermalTripPointSA = gSetupData->HotThermalTripPointSa;
+
+ mGlobalNvsArea.Area->EnablePchDevice = gSetupData->EnablePchDevice;
+ mGlobalNvsArea.Area->ActiveThermalTripPointPCH = gSetupData->ActiveThermalTripPointPch;
+ mGlobalNvsArea.Area->PassiveThermalTripPointPCH = gSetupData->PassiveThermalTripPointPch;
+ mGlobalNvsArea.Area->CriticalThermalTripPointPCH = gSetupData->CriticalThermalTripPointPch;
+ mGlobalNvsArea.Area->HotThermalTripPointPCH = gSetupData->HotThermalTripPointPch;
+
+ mGlobalNvsArea.Area->EnableMemoryDevice = gSetupData->EnableMemDevice;
+ mGlobalNvsArea.Area->ActiveThermalTripPointTMEM = gSetupData->ActiveThermalTripPointMem;
+ mGlobalNvsArea.Area->PassiveThermalTripPointTMEM = gSetupData->PassiveThermalTripPointMem;
+ mGlobalNvsArea.Area->CriticalThermalTripPointTMEM = gSetupData->CriticalThermalTripPointMem;
+ mGlobalNvsArea.Area->HotThermalTripPointTMEM = gSetupData->HotThermalTripPointMem;
+
+ mGlobalNvsArea.Area->EnableAmbientDevice = gSetupData->EnableAmbientDevice;
+ mGlobalNvsArea.Area->ActiveThermalTripPointAmbient = gSetupData->ActiveThermalTripPointAmbient;
+ mGlobalNvsArea.Area->PassiveThermalTripPointAmbient = gSetupData->PassiveThermalTripPointAmbient;
+ mGlobalNvsArea.Area->CriticalThermalTripPointAmbient = gSetupData->CriticalThermalTripPointAmbient;
+ mGlobalNvsArea.Area->HotThermalTripPointAmbient = gSetupData->HotThermalTripPointAmbient;
+
+ mGlobalNvsArea.Area->EnableSkinDevice = gSetupData->EnableSkinDevice;
+ mGlobalNvsArea.Area->ActiveThermalTripPointSkin = gSetupData->ActiveThermalTripPointSkin;
+ mGlobalNvsArea.Area->PassiveThermalTripPointSkin = gSetupData->PassiveThermalTripPointSkin;
+ mGlobalNvsArea.Area->CriticalThermalTripPointSkin = gSetupData->CriticalThermalTripPointSkin;
+ mGlobalNvsArea.Area->HotThermalTripPointSkin = gSetupData->HotThermalTripPointSkin;
+
+ mGlobalNvsArea.Area->EnableExhaustFanDevice = gSetupData->EnableExhaustDevice;
+ mGlobalNvsArea.Area->ActiveThermalTripPointExhaustFan = gSetupData->ActiveThermalTripPointExhaust;
+ mGlobalNvsArea.Area->PassiveThermalTripPointExhaustFan = gSetupData->PassiveThermalTripPointExhaust;
+ mGlobalNvsArea.Area->CriticalThermalTripPointExhaustFan = gSetupData->CriticalThermalTripPointExhaust;
+ mGlobalNvsArea.Area->HotThermalTripPointExhaustFan = gSetupData->HotThermalTripPointExhaust;
+
+ mGlobalNvsArea.Area->EnableVRDevice = gSetupData->EnableVRDevice;
+ mGlobalNvsArea.Area->ActiveThermalTripPointVR = gSetupData->ActiveThermalTripPointVR;
+ mGlobalNvsArea.Area->PassiveThermalTripPointVR = gSetupData->PassiveThermalTripPointVR;
+ mGlobalNvsArea.Area->CriticalThermalTripPointVR = gSetupData->CriticalThermalTripPointVR;
+ mGlobalNvsArea.Area->HotThermalTripPointVR = gSetupData->HotThermalTripPointVR;
+
+ mGlobalNvsArea.Area->PpccStepSize = gSetupData->PpccStepSize;
+ mGlobalNvsArea.Area->LPOEnable = gSetupData->LPOEnable;
+ mGlobalNvsArea.Area->LPOStartPState = gSetupData->LPOStartPState;
+ mGlobalNvsArea.Area->LPOStepSize = gSetupData->LPOStepSize;
+ mGlobalNvsArea.Area->LPOPowerControlSetting = gSetupData->LPOPowerControl;
+ mGlobalNvsArea.Area->LPOPerformanceControlSetting = gSetupData->LPOPerformanceControl;
+ mGlobalNvsArea.Area->EnableCtdpPolicy = gSetupData->EnableCTDP;
+ mGlobalNvsArea.Area->EnableLpmPolicy = gSetupData->EnableLPM;
+ mGlobalNvsArea.Area->CurrentLowPowerMode = gSetupData->LPMSetting;
+ mGlobalNvsArea.Area->EnableFan1Device = gSetupData->Fan1Device;
+ mGlobalNvsArea.Area->EnableFan2Device = gSetupData->Fan2Device;
+ mGlobalNvsArea.Area->EnableDisplayParticipant = gSetupData->DisplayParticipant;
+ mGlobalNvsArea.Area->EnablePowerDevice = gSetupData->PowerParticipant;
+ mGlobalNvsArea.Area->EnablePowerPolicy = gSetupData->PowerPolicy;
+ mGlobalNvsArea.Area->EnableActivePolicy = gSetupData->ActivePolicy;
+ mGlobalNvsArea.Area->EnablePassivePolicy = gSetupData->PassivePolicy;
+ mGlobalNvsArea.Area->EnableCriticalPolicy = gSetupData->CriticalPolicy;
+ mGlobalNvsArea.Area->EnableCoolingModePolicy = gSetupData->CoolingModePolicy;
+ mGlobalNvsArea.Area->EnableCurrentExecutionUnit = 1;
+ mGlobalNvsArea.Area->TargetGfxFreq = 400;
+ mGlobalNvsArea.Area->TrtRevision = gSetupData->TrtRevision;
+ }
+#endif
+
+ Status = pBS->AllocatePool (EfiBootServicesData, sizeof(NB_SETUP_DATA), (VOID **)&NbSetupData);
+ GetNbSetupData( pRS, NbSetupData, FALSE );
+ Status = pBS->AllocatePool (EfiBootServicesData, sizeof(SB_SETUP_DATA), (VOID **)&SbSetupData);
+ GetSbSetupData( pRS, SbSetupData, FALSE );
+
+ mGlobalNvsArea.Area->NFCEnable = SbSetupData->NFCE;
+
+ mGlobalNvsArea.Area->Ac0TripPoint = SbSetupData->Ac0TripPoint;
+ mGlobalNvsArea.Area->Ac0FanSpeed = SbSetupData->Ac0FanSpeed;
+ mGlobalNvsArea.Area->Ac1TripPoint = SbSetupData->Ac1TripPoint;
+ mGlobalNvsArea.Area->Ac1FanSpeed = SbSetupData->Ac1FanSpeed;
+
+ mGlobalNvsArea.Area->PassiveThermalTripPoint = SbSetupData->PassiveThermalTripPoint;
+ mGlobalNvsArea.Area->PassiveTc1Value = SbSetupData->PassiveTc1Value;
+ mGlobalNvsArea.Area->PassiveTc2Value = SbSetupData->PassiveTc2Value;
+ mGlobalNvsArea.Area->PassiveTspValue = SbSetupData->PassiveTspValue;
+ mGlobalNvsArea.Area->CriticalThermalTripPoint = SbSetupData->CriticalThermalTripPoint;
+
+#if CRB_EC_SUPPORT == 1
+ if(IS_SA_DEVICE_ID_MOBILE(McDeviceId)) {
+ mGlobalNvsArea.Area->EcAvailable = 1;
+ mGlobalNvsArea.Area->IUBE = 1;
+ mGlobalNvsArea.Area->IUCE = 1;
+ mGlobalNvsArea.Area->IUDE = 1;
+ }
+#endif
+
+#if defined ACPIDEBUG_SUPPORT && ACPIDEBUG_SUPPORT
+ if (gSetupData->AcpiDebugSupport){
+ LoadSsdtAcpiDebugTable();
+ }
+#endif
+
+#if defined PTID_SUPPORT && PTID_SUPPORT
+ mGlobalNvsArea.Area->PeciAccessMethod = gSetupData->PeciAccessMethod;
+ if (gSetupData->PtidSupport){
+ LoadSsdtPtidTable();
+ }
+#endif
+
+#if defined IntelRMT_SUPPORT && IntelRMT_SUPPORT
+ if (gSetupData->IRMTSupport){
+ LoadSsdtIRMTTable();
+ mGlobalNvsArea.Area->INSC = (gSetupData->IRMTHWNotification << 1) | (gSetupData->IRMTState);
+ }
+#endif
+
+#if defined INTELSENSORHUB_SUPPORT && INTELSENSORHUB_SUPPORT
+ LoadSsdtIntelSensorHubTable();
+#endif
+
+#if defined ZPODD_SUPPORT && ZPODD_SUPPORT
+ LoadSsdtZpOddTable();
+#endif
+
+#if defined RTD3_SUPPORT && RTD3_SUPPORT
+ mGlobalNvsArea.Area->Rtd3Support = gSetupData->Rtd3Support;
+ mGlobalNvsArea.Area->VRSD = gSetupData->VRStaggeringDelay;
+ mGlobalNvsArea.Area->VRRD = gSetupData->VRRampUpDelay;
+ mGlobalNvsArea.Area->Rtd3P0dl = gSetupData->Rtd3P0dl;
+ mGlobalNvsArea.Area->Rtd3P3dl = gSetupData->Rtd3P3dl;
+ mGlobalNvsArea.Area->AUDD = gSetupData->Rtd3Audio;
+ mGlobalNvsArea.Area->DSPD = gSetupData->Rtd3ADSP;
+ mGlobalNvsArea.Area->I20D = gSetupData->Rtd3I2C0;
+ mGlobalNvsArea.Area->IC0D = gSetupData->Rtd3SensorHub;
+ mGlobalNvsArea.Area->I21D = gSetupData->Rtd3I2C1;
+ mGlobalNvsArea.Area->IC1S = gSetupData->Rtd3I2C1PS0;
+ mGlobalNvsArea.Area->IC1D = gSetupData->Rtd3TouchPanel;
+
+ mGlobalNvsArea.Area->PepDevice = (gSetupData->PepSata << 1) | (gSetupData->PepGfx);
+ mGlobalNvsArea.Area->PSCP = gSetupData->PCapping;
+
+ if (gSetupData->XhciP0 == 1){
+ USBRTD3 = 1;
+ }else if (gSetupData->XhciP0 == 2){
+ USBRTD3 = 2;
+ }
+ if (gSetupData->XhciP1 == 1){
+ USBRTD3 += 0x10;
+ }else if (gSetupData->XhciP1 == 2){
+ USBRTD3 += 0x20;
+ }
+ mGlobalNvsArea.Area->UsbPowerResourceTest = USBRTD3;
+ mGlobalNvsArea.Area->RIC0 = gSetupData->RIC0;
+ mGlobalNvsArea.Area->RCG0 = 0;
+ if (gSetupData->RTD3ZPODD){
+ mGlobalNvsArea.Area->RCG0 = mGlobalNvsArea.Area->RCG0 | BIT0;
+ }
+ if (gSetupData->RTD3USBCamera){
+ mGlobalNvsArea.Area->RCG0 = mGlobalNvsArea.Area->RCG0 | BIT1;
+ }
+ if (gSetupData->RTD3MiniSataPort3 == 1){
+ mGlobalNvsArea.Area->RCG0 = mGlobalNvsArea.Area->RCG0 | BIT2;
+ }else if (gSetupData->RTD3MiniSataPort3 == 2){
+ mGlobalNvsArea.Area->RCG0 = mGlobalNvsArea.Area->RCG0 | BIT3;
+ }
+
+ mGlobalNvsArea.Area->RWAG = gSetupData->RTD3WaGpio;
+
+ if (gSetupData->Rtd3Support){
+ LoadSsdtRtd3Table();
+ } // (gSetupData->Rtd3Support)
+#endif
+
+#if defined iME_SUPPORT && iME_SUPPORT
+ ECSmbusThermalReportingEnabled = SbSetupData->TrEnabled;
+ ECSMBusMsgLenth = SbSetupData->SMBusECMsgLen;
+ ECSMBusPECEnabled = SbSetupData->SMBusECMsgPEC;
+#else
+#if CRB_EC_SUPPORT == 1
+ ECSmbusThermalReportingEnabled = 0x0;
+ ECSMBusMsgLenth = 0x0;
+ ECSMBusPECEnabled = 0x0;
+#endif
+#endif
+
+
+ // Enable TS-on-DIMM if present and enabled in SETUP, update NVS for use by DPPM code.
+#if defined (iME_SUPPORT) && (iME_SUPPORT==1)
+#if (DIMM_SLOT_NUM == 2)
+ if (SbSetupData->TrSmbusConfig > 0) {
+#endif
+
+#if (DIMM_SLOT_NUM == 4)
+ if((SbSetupData->TsOnDimm1) || (SbSetupData->TsOnDimm2) || \
+ (SbSetupData->TsOnDimm3) || (SbSetupData->TsOnDimm4)) {
+#endif
+ mGlobalNvsArea.Area->TsOnDimmEnabled = PCH_DEVICE_ENABLE;
+ } else {
+ mGlobalNvsArea.Area->TsOnDimmEnabled = PCH_DEVICE_DISABLE;
+ }
+
+#else
+ mGlobalNvsArea.Area->TsOnDimmEnabled = PCH_DEVICE_DISABLE;
+#endif
+
+#if CRB_EC_SUPPORT == 1
+ if (mGlobalNvsArea.Area->EcAvailable) {
+ // Locate KSC protocol.
+ Status = InitializeKscLib ();
+
+ if (Status == EFI_SUCCESS) {
+
+ if(ECSmbusThermalReportingEnabled) {
+
+ // SMBus Message length
+ Status = SendKscCommand (KSC_C_PCH_SMBUS_MSG_LENGTH);
+ if(Status == EFI_SUCCESS) {
+ SendKscData(ECSMBusMsgLenth);
+ }
+ // EC SMBus Packet Error Checking Enable (PEC) cmd
+ if(ECSMBusPECEnabled) {
+ SendKscCommand (KSC_C_PCH_SMBUS_PEC_EN);
+ }else {
+ SendKscCommand (KSC_C_PCH_SMBUS_PEC_DIS);
+ }
+
+ if (mGlobalNvsArea.Area->TsOnDimmEnabled) {
+ SendKscCommand (KSC_TS_ON_DIMM_EN); // TS-on-DIMM thermal monitoring enable command
+ } else {
+ SendKscCommand (KSC_TS_ON_DIMM_DIS); // TS-on-DIMM thermal monitoring Disable command
+ }
+
+ SendKscCommand (KSC_EC_PCH_SMBUS_EN); // EC PCH SMBus thermal monitoring Enable cmd
+ }else {
+
+ SendKscCommand (KSC_EC_PCH_SMBUS_DIS); // EC PCH SMBus thermal monitoring Disable cmd
+ }
+
+ }
+ }
+#endif
+ // Platform Thermal code end
+
+ //Get platform cpuid
+ CPULib_CpuID(1, &RegEax, &RegEbx, &RegEcx, &RegEdx);
+ mGlobalNvsArea.Area->PlatformCpuId = (RegEax & 0x0FFFFF);
+
+ //
+ // Nehalem MSR 0x35 CORE_THREAD_COUNT
+ // [31:16] - total number of enabled cores in the package
+ // [15:0] - total number of enabled threads in the package
+ //
+ MsrCoreThreadCount.Qword = ReadMsr (EFI_MSR_CORE_THREAD_COUNT);
+
+ //
+ // ThreadCount : Number of Enabled Threads
+ //
+ mGlobalNvsArea.Area->ThreadCount = MsrCoreThreadCount.Bytes.FirstByte;
+
+ // HPLL VCO = MCHBAR + C0Fh [2:0]
+ //SNB_TODO mGlobalNvsArea.Area->IgdHpllVco
+ //-jeff mGlobalNvsArea.Area->IgdHpllVco = READ_MEM8_MCH(0xC0F) & 0x07; // 189 HPLL VCO
+
+ mGlobalNvsArea.Area->ApicEnable = 1;
+ mGlobalNvsArea.Area->EmaEnable = 0;
+//For mobile platform, the number of batteries is updated by EC.asl
+ mGlobalNvsArea.Area->NumberOfBatteries = 0;
+ mGlobalNvsArea.Area->BatteryCapacity0 = 100;
+ mGlobalNvsArea.Area->BatteryStatus0 = 84;
+ mGlobalNvsArea.Area->SmscComPort = 1;
+ mGlobalNvsArea.Area->IdeMode = 0;
+
+ // Set default power state to AC.
+ // For mobile, EC.ASL, will update with current power state.
+ mGlobalNvsArea.Area->PowerState = 1;
+ mGlobalNvsArea.Area->PcieDockStatus = 0;
+
+#if CRB_EC_SUPPORT == 1
+ if (mGlobalNvsArea.Area->EcAvailable) {
+ // Initialize KSC library for later KSC Access
+ Status = InitializeKscLib ();
+ if (Status == EFI_SUCCESS) {
+
+ // Call KSC lib to get PCIe dock status
+ PortDataOut = 0;
+ Status = SendKscCommand (KSC_C_DOCK_STATUS);
+ if (Status == EFI_SUCCESS) {
+ Status = ReceiveKscData (&PortDataOut);
+ }
+
+ //
+ // the bit0 is PCIe Dock Status, 1 = docked
+ //
+ mGlobalNvsArea.Area->PcieDockStatus = (PortDataOut & 1);
+ }
+ }
+#endif
+
+ // Configure USB Sideband Deferring feature for ACPI
+ if (mGlobalNvsArea.Area->BoardId == BoardIdGraysReef){
+ mGlobalNvsArea.Area->HostAlertVector1 = 0x1F; // GPIO 15 for GPE _L1F
+ mGlobalNvsArea.Area->HostAlertVector2 = 0x1B; // GPIO 11 for GPE _L1B
+ }
+ else{
+ mGlobalNvsArea.Area->HostAlertVector1 = 0xFF; // dummy value to signal no USB SBD support
+ mGlobalNvsArea.Area->HostAlertVector2 = 0xFF; // dummy value to signal no USB SBD support
+ }
+
+ mGlobalNvsArea.Area->Revision = GLOBAL_NVS_AREA_REVISION_1;
+
+ Status = pBS->InstallMultipleProtocolInterfaces (&ImageHandle,
+ &gEfiGlobalNvsAreaProtocolGuid,
+ &mGlobalNvsArea,
+ NULL);
+
+#if defined Remove_SaSsdt_Data_To_Dsdt && Remove_SaSsdt_Data_To_Dsdt
+ Status = pBS->InstallMultipleProtocolInterfaces (&ImageHandle,
+ &gEfiGlobalSaNvsAreaProtocolGuid,
+ &gSaGlobalNvsArea,
+ NULL);
+#endif
+
+ Status = CreateReadyToBootEvent(
+ TPL_CALLBACK,
+ CallbackBootScript,
+ NULL,
+ &gEvtBootScript
+ );
+
+
+ pBS->FreePool(NbSetupData);
+ pBS->FreePool(SbSetupData);
+
+ return EFI_SUCCESS;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: CallbackBootScript
+//
+// This function will be called when ReadyToBoot event will be signaled and
+// will update related Platform information to global NVS area.
+//
+//
+// Input: Event - Event of callback
+// Context - Context of callback.
+//
+// Output: None
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+//**********************************************************************
+VOID CallbackBootScript (
+ IN EFI_EVENT Event,
+ IN VOID *Context )
+{
+ UINT32 ThermalBaseB = 0;
+ UINT32 PchFdRegSave = 0;
+ UINT16 OLD_IAPC_BOOT_ARCH;
+ PFACP_20 FadtPointer;
+ INTN Index;
+ PACPI_HDR Table;
+ EFI_ACPI_TABLE_VERSION Version;
+ UINTN TableHandle;
+ EFI_STATUS Status;
+ UINTN VariableSize = NULL;
+ SETUP_DATA *SetupData = NULL;
+ UINT8 Buffer8;
+
+ //
+ // Update TBARB and TBARBH if configured by DPPM
+ //
+ PchFdRegSave = READ_MEM32_RCRB(R_PCH_RCRB_FUNC_DIS);
+ RESET_MEM32_RCRB(R_PCH_RCRB_FUNC_DIS, B_PCH_RCRB_FUNC_DIS_THERMAL);
+ ThermalBaseB = READ_PCI32(THERMAL_BUS, THERMAL_DEV, THERMAL_FUN, R_PCH_THERMAL_TBARB) & B_PCH_THERMAL_TBARB_MASK;
+ WRITE_MEM32_RCRB(R_PCH_RCRB_FUNC_DIS, PchFdRegSave);
+
+ if ((ThermalBaseB != 0) && (ThermalBaseB != B_PCH_THERMAL_TBARB_MASK)) {
+ mGlobalNvsArea.Area->TBARB = (UINT32) ThermalBaseB;
+ mGlobalNvsArea.Area->TBARBH = (UINT32) 0;
+ } else {
+ mGlobalNvsArea.Area->TBARB = (UINT32) 0;
+ mGlobalNvsArea.Area->TBARBH = (UINT32) 0;
+ }
+
+ // Initialize AMI Setup Data
+ Status = GetEfiVariable(
+ L"Setup",
+ &gSetupGuid,
+ NULL,
+ &VariableSize,
+ &SetupData
+ );
+
+ Index = 0;
+ do {
+ Status = gEfiAcpiSupport->GetAcpiTable(gEfiAcpiSupport,
+ Index,
+ &Table,
+ &Version,
+ &TableHandle);
+
+ if (Status == EFI_NOT_FOUND) {
+ break;
+ }
+ if (Table->Signature == FACP_SIG) {
+ FadtPointer = (PFACP_20) Table;
+ if (mGlobalNvsArea.Area->PpmFlags & PPM_C3) {
+ FadtPointer->P_LVL3_LAT = FADT_C3_LATENCY;
+ }
+ OLD_IAPC_BOOT_ARCH = FadtPointer->IAPC_BOOT_ARCH;
+ //
+ // if Native ASPM is disabled, set FACP table to skip Native ASPM
+ //
+ if ((SetupData->PciExpNative == 0)|| (SetupData->NativeAspmEnable == 0x0)) {
+ FadtPointer->IAPC_BOOT_ARCH |= 0x10;
+ }
+
+ //if (FadtPointer->IAPC_BOOT_ARCH != OLD_IAPC_BOOT_ARCH) {
+ if ((FadtPointer->IAPC_BOOT_ARCH != OLD_IAPC_BOOT_ARCH) || (mGlobalNvsArea.Area->PpmFlags & PPM_C3)) {
+ Status = gEfiAcpiSupport->SetAcpiTable (gEfiAcpiSupport, Table, TRUE, Version, &TableHandle);
+ ASSERT_EFI_ERROR (Status);
+ }
+ pBS->FreePool (Table);
+ }
+ Index++;
+ } while (1);
+
+
+ if (READ_PCI32(SATA_BUS, SATA_DEV, SATA_FUN, PCI_VID) != 0xffffffff) {
+ Buffer8 = READ_PCI8(SATA_BUS, SATA_DEV, SATA_FUN, SATA_REG_PCS + 1 );
+ mGlobalNvsArea.Area->SPST = (Buffer8 & BIT0 );
+ mGlobalNvsArea.Area->SPST = mGlobalNvsArea.Area->SPST | (Buffer8 & BIT1);
+ mGlobalNvsArea.Area->SPST = mGlobalNvsArea.Area->SPST | (Buffer8 & BIT2);
+ mGlobalNvsArea.Area->SPST = mGlobalNvsArea.Area->SPST | (Buffer8 & BIT3);
+
+ }
+
+ // Kill the Event
+ pBS->CloseEvent(Event);
+}
+
+VOID LoadDbgpTable()
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ EFI_ACPI_DEBUG_PORT_DESCRIPTION_TABLE *DBGP;
+ EFI_ACPI_SUPPORT_PROTOCOL *As;
+ UINT8 OemId[6] = CONVERT_TO_STRING(T_ACPI_OEM_ID);
+ UINT8 OemTblId[8] = \
+ CONVERT_TO_STRING(T_ACPI_OEM_TBL_ID);
+ UINTN mDbgpTblHandle;
+
+
+ Status = pBS->LocateProtocol(&gEfiAcpiSupportGuid, NULL, &As);
+ DBGP = MallocZ(sizeof(EFI_ACPI_DEBUG_PORT_DESCRIPTION_TABLE));
+ ASSERT(DBGP);
+ if (DBGP) {
+ // Fill Table header;
+ DBGP->Header.Signature = EFI_ACPI_3_0_DEBUG_PORT_TABLE_SIGNATURE;
+ DBGP->Header.Length = sizeof(EFI_ACPI_DEBUG_PORT_DESCRIPTION_TABLE);
+ DBGP->Header.Revision = EFI_ACPI_DBGP_TABLE_REVISION;
+ DBGP->Header.Checksum = 0;
+ MemCpy(&(DBGP->Header.OemId[0]), OemId, 6);
+ MemCpy(&(DBGP->Header.OemTblId[0]), OemTblId, 8);
+ DBGP->Header.OemRev = EFI_ACPI_OEM_DBGP_REVISION;
+ DBGP->Header.CreatorId = EFI_ACPI_CREATOR_ID;
+ DBGP->Header.CreatorRev = CORE_REVISION;
+ // Fill DBGP Fields
+ DBGP->BaseAddress.AddressSpaceId = 1;
+ DBGP->BaseAddress.RegisterBitWidth = 8;
+ DBGP->BaseAddress.RegisterBitOffset = 0;
+ DBGP->BaseAddress.Reserved = 0;
+ DBGP->BaseAddress.Address = 0x3F8;
+
+ // Add table
+ mDbgpTblHandle = 0;
+ Status = As->SetAcpiTable( As, \
+ DBGP, \
+ TRUE, \
+ EFI_ACPI_TABLE_VERSION_ALL, \
+ &mDbgpTblHandle );
+ TRACE((-1,"ACPISupport.SetAcpiTable() = %r \n", Status));
+ ASSERT_EFI_ERROR(Status);
+
+ // Free memory used for table image
+ pBS->FreePool(DBGP);
+ }
+
+}
+
+#if defined LPIT_SUPPORT && LPIT_SUPPORT
+VOID LoadLpitTable()
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ UINTN Index;
+ EFI_FIRMWARE_VOLUME_PROTOCOL *FwVol;
+ INTN Instance;
+ EFI_ACPI_COMMON_HEADER *Table;
+ UINTN Size;
+ EFI_FV_FILETYPE FileType;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINT32 FvStatus;
+ UINTN TableHandle;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_ACPI_DESCRIPTION_HEADER *TableHeader;
+ EFI_ACPI_TABLE_PROTOCOL *AcpiTable;
+ BOOLEAN LoadTable;
+
+
+ FwVol = NULL;
+ Table = NULL;
+ //
+ // Locate FV protocol.
+ //
+
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiFirmwareVolumeProtocolGuid,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Look for FV with ACPI storage file
+ //
+ for (Index = 0; Index < NumberOfHandles; Index++) {
+
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[Index],
+ &gEfiFirmwareVolumeProtocolGuid,
+ &FwVol
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // See if it has the ACPI storage file
+ //
+ Size = 0;
+ FvStatus = 0;
+ Status = FwVol->ReadFile (
+ FwVol,
+ &gAcpiLpitGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+ //
+ // If we found it, then we are done
+ //
+
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ //
+ // Sanity check that we found our data file
+ //
+ ASSERT (FwVol);
+
+ //
+ // By default, a table belongs in all ACPI table versions published.
+ //
+ Version = EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0;
+
+ //
+ // Find the Table protocol
+ //
+ Status = pBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **)&AcpiTable);
+ ASSERT_EFI_ERROR (Status);
+
+
+
+ //
+ // Read tables from the storage file.
+ //
+ Instance = 0;
+
+ while (Status == EFI_SUCCESS) {
+ //
+ // Read the ACPI tables
+ //
+ Status = FwVol->ReadSection (
+ FwVol,
+ &gAcpiLpitGuid,
+ EFI_SECTION_RAW,
+ Instance,
+ &Table,
+ &Size,
+ &FvStatus
+ );
+
+ if (!EFI_ERROR (Status)) {
+
+ LoadTable = FALSE;
+ TableHeader = (EFI_ACPI_DESCRIPTION_HEADER *) Table;
+ ///
+ /// Check the Signature ID to modify the table
+ ///
+ if (!LoadTable) {
+ switch (((EFI_ACPI_DESCRIPTION_HEADER *) TableHeader)->Signature) {
+
+ case 0x5449504c: //EFI_ACPI_LOW_POWER_IDLE_TABLE_SIGNATURE
+ LoadTable = TRUE;
+ //LpitAcpiTable = (EFI_ACPI_DESCRIPTION_HEADER *) Table;
+ //LpitTableUpdate (LpitAcpiTable, &Version);
+ break;
+
+ default:
+ break;
+ }
+ }
+ ///
+ /// Update the LPIT table in the ACPI tables.
+ ///
+ if (LoadTable) {
+ TableHandle = 0;
+ Status = AcpiTable->InstallAcpiTable (
+ AcpiTable,
+ Table,
+ Table->Length,
+ &TableHandle
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ //
+ // Increment the instance
+ //
+ Instance++;
+ Table = NULL;
+ }
+ }
+}
+#endif
+
+#if defined PTID_SUPPORT && PTID_SUPPORT
+VOID LoadSsdtPtidTable()
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ UINTN Index;
+ EFI_FIRMWARE_VOLUME_PROTOCOL *FwVol;
+ EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
+ INTN Instance;
+ EFI_ACPI_COMMON_HEADER *Table;
+ UINTN Size;
+ EFI_FV_FILETYPE FileType;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINT32 FvStatus;
+ ACPI_HDR *TableHeader;
+ UINTN TableHandle;
+ EFI_ACPI_TABLE_VERSION Version;
+
+
+ AcpiSupport = NULL;
+ FwVol = NULL;
+ Table = NULL;
+
+ //
+ // Locate FV protocol.
+ //
+
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiFirmwareVolumeProtocolGuid,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Look for FV with ACPI storage file
+ //
+ for (Index = 0; Index < NumberOfHandles; Index++) {
+
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[Index],
+ &gEfiFirmwareVolumeProtocolGuid,
+ &FwVol
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // See if it has the ACPI storage file
+ //
+ Size = 0;
+ FvStatus = 0;
+ Status = FwVol->ReadFile (
+ FwVol,
+ &gAcpiPtidFfsTableStorageGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ //
+ // Sanity check that we found our data file
+ //
+ ASSERT (FwVol);
+
+ //
+ // By default, a table belongs in all ACPI table versions published.
+ //
+ Version = EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0;
+
+ //
+ // Find the AcpiSupport protocol
+ //
+ Status = LocateSupportProtocol (
+ &gEfiAcpiSupportGuid,
+ &AcpiSupport,
+ FALSE
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Read tables from the storage file.
+ //
+ Instance = 0;
+
+ while (Status == EFI_SUCCESS) {
+ //
+ // Read the ACPI tables
+ //
+ Status = FwVol->ReadSection (
+ FwVol,
+ &gAcpiPtidFfsTableStorageGuid,
+ EFI_SECTION_RAW,
+ Instance,
+ &Table,
+ &Size,
+ &FvStatus
+ );
+
+ if (!EFI_ERROR (Status)) {
+ //
+ // This should be a PTID SSDT table
+ //
+ TableHeader = (ACPI_HDR *) Table;
+ if (MemCmp (&TableHeader->OemTblId, "PtidDevc", 8) == 0) {
+ //
+ // This is PTID SSDT. We load the table
+ //
+ TableHandle = 0;
+ Status = AcpiSupport->SetAcpiTable (
+ AcpiSupport,
+ Table,
+ TRUE,
+ Version,
+ &TableHandle
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ //
+ // Increment the instance
+ //
+ Instance++;
+ Table = NULL;
+ }
+ }
+ Status = AcpiSupport->PublishTables (
+ AcpiSupport,
+ (EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0)
+ );
+ ASSERT_EFI_ERROR (Status);
+}
+
+EFI_STATUS
+LocateSupportProtocol (
+ IN EFI_GUID *Protocol,
+ OUT VOID **Instance,
+ IN BOOLEAN Type
+ )
+/*++
+
+Routine Description:
+
+ Locate the first instance of a protocol. If the protocol requested is an
+ FV protocol, then it will return the first FV that contains the ACPI table
+ storage file.
+
+Arguments:
+
+ Protocol The protocol to find.
+ Instance Return pointer to the first instance of the protocol
+ Type TRUE if the desired protocol is a FV protocol
+
+Returns:
+
+ EFI_SUCCESS The function completed successfully.
+ EFI_NOT_FOUND The protocol could not be located.
+ EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol.
+
+--*/
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ EFI_FV_FILETYPE FileType;
+ UINT32 FvStatus;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINTN Size;
+ UINTN i;
+
+ FvStatus = 0;
+ //
+ // Locate protocol.
+ //
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ Protocol,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // Defined errors at this time are not found and out of resources.
+ //
+ return Status;
+ }
+ //
+ // Looking for FV with ACPI storage file
+ //
+ for (i = 0; i < NumberOfHandles; i++) {
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[i],
+ Protocol,
+ Instance
+ );
+ ASSERT (!EFI_ERROR (Status));
+
+ if (!Type) {
+ //
+ // Not looking for the FV protocol, so find the first instance of the
+ // protocol. There should not be any errors because our handle buffer
+ // should always contain at least one or LocateHandleBuffer would have
+ // returned not found.
+ //
+ break;
+ }
+
+ //
+ // See if it has the ACPI storage file
+ //
+ Status = ((EFI_FIRMWARE_VOLUME_PROTOCOL *) (*Instance))->ReadFile (
+ *Instance,
+ &gAcpiPtidFfsTableStorageGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ return Status;
+}
+#endif
+
+#if defined IntelRMT_SUPPORT && IntelRMT_SUPPORT
+VOID LoadSsdtIRMTTable()
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ UINTN Index;
+ EFI_FIRMWARE_VOLUME_PROTOCOL *FwVol;
+ EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
+ INTN Instance;
+ EFI_ACPI_COMMON_HEADER *Table;
+ UINTN Size;
+ EFI_FV_FILETYPE FileType;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINT32 FvStatus;
+ ACPI_HDR *TableHeader;
+ UINTN TableHandle;
+ EFI_ACPI_TABLE_VERSION Version;
+
+
+ AcpiSupport = NULL;
+ FwVol = NULL;
+ Table = NULL;
+
+ //
+ // Locate FV protocol.
+ //
+
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiFirmwareVolumeProtocolGuid,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Look for FV with ACPI storage file
+ //
+ for (Index = 0; Index < NumberOfHandles; Index++) {
+
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[Index],
+ &gEfiFirmwareVolumeProtocolGuid,
+ &FwVol
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // See if it has the ACPI storage file
+ //
+ Size = 0;
+ FvStatus = 0;
+ Status = FwVol->ReadFile (
+ FwVol,
+ &gAcpiIRMTFfsTableStorageGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ //
+ // Sanity check that we found our data file
+ //
+ ASSERT (FwVol);
+
+ //
+ // By default, a table belongs in all ACPI table versions published.
+ //
+ Version = EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0;
+
+ //
+ // Find the AcpiSupport protocol
+ //
+ Status = LocateIRMTSupportProtocol (
+ &gEfiAcpiSupportGuid,
+ &AcpiSupport,
+ FALSE
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Read tables from the storage file.
+ //
+ Instance = 0;
+
+ while (Status == EFI_SUCCESS) {
+ //
+ // Read the ACPI tables
+ //
+ Status = FwVol->ReadSection (
+ FwVol,
+ &gAcpiIRMTFfsTableStorageGuid,
+ EFI_SECTION_RAW,
+ Instance,
+ &Table,
+ &Size,
+ &FvStatus
+ );
+
+ if (!EFI_ERROR (Status)) {
+ //
+ // This should be a PTID SSDT table
+ //
+ TableHeader = (ACPI_HDR *) Table;
+ if (MemCmp (&TableHeader->OemTblId, "IntelRMT", 8) == 0) {
+ //
+ // This is Intel RMT SSDT. We load the table
+ //
+ TableHandle = 0;
+ Status = AcpiSupport->SetAcpiTable (
+ AcpiSupport,
+ Table,
+ TRUE,
+ Version,
+ &TableHandle
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ //
+ // Increment the instance
+ //
+ Instance++;
+ Table = NULL;
+ }
+ }
+ Status = AcpiSupport->PublishTables (
+ AcpiSupport,
+ (EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0)
+ );
+ ASSERT_EFI_ERROR (Status);
+}
+
+EFI_STATUS
+LocateIRMTSupportProtocol (
+ IN EFI_GUID *Protocol,
+ OUT VOID **Instance,
+ IN BOOLEAN Type
+ )
+/*++
+
+Routine Description:
+
+ Locate the first instance of a protocol. If the protocol requested is an
+ FV protocol, then it will return the first FV that contains the ACPI table
+ storage file.
+
+Arguments:
+
+ Protocol The protocol to find.
+ Instance Return pointer to the first instance of the protocol
+ Type TRUE if the desired protocol is a FV protocol
+
+Returns:
+
+ EFI_SUCCESS The function completed successfully.
+ EFI_NOT_FOUND The protocol could not be located.
+ EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol.
+
+--*/
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ EFI_FV_FILETYPE FileType;
+ UINT32 FvStatus;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINTN Size;
+ UINTN i;
+
+ FvStatus = 0;
+ //
+ // Locate protocol.
+ //
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ Protocol,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // Defined errors at this time are not found and out of resources.
+ //
+ return Status;
+ }
+ //
+ // Looking for FV with ACPI storage file
+ //
+ for (i = 0; i < NumberOfHandles; i++) {
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[i],
+ Protocol,
+ Instance
+ );
+ ASSERT (!EFI_ERROR (Status));
+
+ if (!Type) {
+ //
+ // Not looking for the FV protocol, so find the first instance of the
+ // protocol. There should not be any errors because our handle buffer
+ // should always contain at least one or LocateHandleBuffer would have
+ // returned not found.
+ //
+ break;
+ }
+
+ //
+ // See if it has the ACPI storage file
+ //
+ Status = ((EFI_FIRMWARE_VOLUME_PROTOCOL *) (*Instance))->ReadFile (
+ *Instance,
+ &gAcpiPtidFfsTableStorageGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ return Status;
+}
+#endif
+
+
+#if defined INTELSENSORHUB_SUPPORT && INTELSENSORHUB_SUPPORT
+VOID LoadSsdtIntelSensorHubTable()
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ UINTN Index;
+ EFI_FIRMWARE_VOLUME_PROTOCOL *FwVol;
+ EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
+ INTN Instance;
+ EFI_ACPI_COMMON_HEADER *Table;
+ UINTN Size;
+ EFI_FV_FILETYPE FileType;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINT32 FvStatus;
+ ACPI_HDR *TableHeader;
+ UINTN TableHandle;
+ EFI_ACPI_TABLE_VERSION Version;
+
+
+ AcpiSupport = NULL;
+ FwVol = NULL;
+ Table = NULL;
+
+ //
+ // Locate FV protocol.
+ //
+
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiFirmwareVolumeProtocolGuid,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Look for FV with ACPI storage file
+ //
+ for (Index = 0; Index < NumberOfHandles; Index++) {
+
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[Index],
+ &gEfiFirmwareVolumeProtocolGuid,
+ &FwVol
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // See if it has the ACPI storage file
+ //
+ Size = 0;
+ FvStatus = 0;
+ Status = FwVol->ReadFile (
+ FwVol,
+ &gAcpiIntelSensorHubFfsTableGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ //
+ // Sanity check that we found our data file
+ //
+ ASSERT (FwVol);
+
+ //
+ // By default, a table belongs in all ACPI table versions published.
+ //
+ Version = EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0;
+
+ //
+ // Find the AcpiSupport protocol
+ //
+ Status = LocateIntelSensorHubSupportProtocol (
+ &gEfiAcpiSupportGuid,
+ &AcpiSupport,
+ FALSE
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Read tables from the storage file.
+ //
+ Instance = 0;
+
+ while (Status == EFI_SUCCESS) {
+ //
+ // Read the ACPI tables
+ //
+ Status = FwVol->ReadSection (
+ FwVol,
+ &gAcpiIntelSensorHubFfsTableGuid,
+ EFI_SECTION_RAW,
+ Instance,
+ &Table,
+ &Size,
+ &FvStatus
+ );
+
+ if (!EFI_ERROR (Status)) {
+ //
+ // This should be a PTID SSDT table
+ //
+ TableHeader = (ACPI_HDR *) Table;
+ if (MemCmp (&TableHeader->OemTblId, "sensrhub", 8) == 0) {
+ //
+ // This is PTID SSDT. We load the table
+ //
+ TableHandle = 0;
+ Status = AcpiSupport->SetAcpiTable (
+ AcpiSupport,
+ Table,
+ TRUE,
+ Version,
+ &TableHandle
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ //
+ // Increment the instance
+ //
+ Instance++;
+ Table = NULL;
+ }
+ }
+ Status = AcpiSupport->PublishTables (
+ AcpiSupport,
+ (EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0)
+ );
+ ASSERT_EFI_ERROR (Status);
+}
+
+EFI_STATUS
+LocateIntelSensorHubSupportProtocol (
+ IN EFI_GUID *Protocol,
+ OUT VOID **Instance,
+ IN BOOLEAN Type
+ )
+/*++
+
+Routine Description:
+
+ Locate the first instance of a protocol. If the protocol requested is an
+ FV protocol, then it will return the first FV that contains the ACPI table
+ storage file.
+
+Arguments:
+
+ Protocol The protocol to find.
+ Instance Return pointer to the first instance of the protocol
+ Type TRUE if the desired protocol is a FV protocol
+
+Returns:
+
+ EFI_SUCCESS The function completed successfully.
+ EFI_NOT_FOUND The protocol could not be located.
+ EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol.
+
+--*/
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ EFI_FV_FILETYPE FileType;
+ UINT32 FvStatus;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINTN Size;
+ UINTN i;
+
+ FvStatus = 0;
+ //
+ // Locate protocol.
+ //
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ Protocol,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // Defined errors at this time are not found and out of resources.
+ //
+ return Status;
+ }
+ //
+ // Looking for FV with ACPI storage file
+ //
+ for (i = 0; i < NumberOfHandles; i++) {
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[i],
+ Protocol,
+ Instance
+ );
+ ASSERT (!EFI_ERROR (Status));
+
+ if (!Type) {
+ //
+ // Not looking for the FV protocol, so find the first instance of the
+ // protocol. There should not be any errors because our handle buffer
+ // should always contain at least one or LocateHandleBuffer would have
+ // returned not found.
+ //
+ break;
+ }
+
+ //
+ // See if it has the ACPI storage file
+ //
+ Status = ((EFI_FIRMWARE_VOLUME_PROTOCOL *) (*Instance))->ReadFile (
+ *Instance,
+ &gAcpiIntelSensorHubFfsTableGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ return Status;
+}
+
+#endif
+
+#if defined ZPODD_SUPPORT && ZPODD_SUPPORT
+VOID LoadSsdtZpOddTable()
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ UINTN Index;
+ EFI_FIRMWARE_VOLUME_PROTOCOL *FwVol;
+ EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
+ INTN Instance;
+ EFI_ACPI_COMMON_HEADER *Table;
+ UINTN Size;
+ EFI_FV_FILETYPE FileType;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINT32 FvStatus;
+ ACPI_HDR *TableHeader;
+ UINTN TableHandle;
+ EFI_ACPI_TABLE_VERSION Version;
+ BOOLEAN LoadTable;
+ PCH_SERIES PchSeries = GetPchSeries();
+
+
+ AcpiSupport = NULL;
+ FwVol = NULL;
+ Table = NULL;
+
+ //
+ // Locate FV protocol.
+ //
+
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiFirmwareVolumeProtocolGuid,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Look for FV with ACPI storage file
+ //
+ for (Index = 0; Index < NumberOfHandles; Index++) {
+
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[Index],
+ &gEfiFirmwareVolumeProtocolGuid,
+ &FwVol
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // See if it has the ACPI storage file
+ //
+ Size = 0;
+ FvStatus = 0;
+ Status = FwVol->ReadFile (
+ FwVol,
+ &gAcpiZpOddFfsTableGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ //
+ // Sanity check that we found our data file
+ //
+ ASSERT (FwVol);
+
+ //
+ // By default, a table belongs in all ACPI table versions published.
+ //
+ Version = EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0;
+
+ //
+ // Find the AcpiSupport protocol
+ //
+ Status = LocateZPODDSupportProtocol (
+ &gEfiAcpiSupportGuid,
+ &AcpiSupport,
+ FALSE
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Read tables from the storage file.
+ //
+ Instance = 0;
+
+ while (Status == EFI_SUCCESS) {
+ //
+ // Read the ACPI tables
+ //
+ Status = FwVol->ReadSection (
+ FwVol,
+ &gAcpiZpOddFfsTableGuid,
+ EFI_SECTION_RAW,
+ Instance,
+ &Table,
+ &Size,
+ &FvStatus
+ );
+
+ if (!EFI_ERROR (Status)) {
+ //
+ // This should be a ZPODD SSDT table
+ //
+ LoadTable = FALSE;
+ TableHeader = (ACPI_HDR *) Table;
+#if defined STD_ZPODD_SUPPORT && STD_ZPODD_SUPPORT
+ if ((MemCmp (&TableHeader->OemTblId, "zpodd", 8) == 0) && (PchSeries == PchH)){
+ LoadTable = TRUE;
+ }
+#endif
+#if defined ULT_ZPODD_SUPPORT && ULT_ZPODD_SUPPORT
+ if ((MemCmp (&TableHeader->OemTblId, "zpoddult", 8) == 0) && (PchSeries == PchLp)) {
+ LoadTable = TRUE;
+ }
+#endif
+ //
+ // This is ZPODD SSDT. We load the table
+ //
+ if (LoadTable) {
+ TableHandle = 0;
+ Status = AcpiSupport->SetAcpiTable (
+ AcpiSupport,
+ Table,
+ TRUE,
+ Version,
+ &TableHandle
+ );
+ ASSERT_EFI_ERROR (Status);
+ Status = AcpiSupport->PublishTables (
+ AcpiSupport,
+ (EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0)
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ //
+ // Increment the instance
+ //
+ Instance++;
+ Table = NULL;
+ }
+ }
+}
+
+EFI_STATUS
+LocateZPODDSupportProtocol (
+ IN EFI_GUID *Protocol,
+ OUT VOID **Instance,
+ IN BOOLEAN Type
+ )
+/*++
+
+Routine Description:
+
+ Locate the first instance of a protocol. If the protocol requested is an
+ FV protocol, then it will return the first FV that contains the ACPI table
+ storage file.
+
+Arguments:
+
+ Protocol The protocol to find.
+ Instance Return pointer to the first instance of the protocol
+ Type TRUE if the desired protocol is a FV protocol
+
+Returns:
+
+ EFI_SUCCESS The function completed successfully.
+ EFI_NOT_FOUND The protocol could not be located.
+ EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol.
+
+--*/
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ EFI_FV_FILETYPE FileType;
+ UINT32 FvStatus;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINTN Size;
+ UINTN i;
+
+ FvStatus = 0;
+ //
+ // Locate protocol.
+ //
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ Protocol,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // Defined errors at this time are not found and out of resources.
+ //
+ return Status;
+ }
+ //
+ // Looking for FV with ACPI storage file
+ //
+ for (i = 0; i < NumberOfHandles; i++) {
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[i],
+ Protocol,
+ Instance
+ );
+ ASSERT (!EFI_ERROR (Status));
+
+ if (!Type) {
+ //
+ // Not looking for the FV protocol, so find the first instance of the
+ // protocol. There should not be any errors because our handle buffer
+ // should always contain at least one or LocateHandleBuffer would have
+ // returned not found.
+ //
+ break;
+ }
+
+ //
+ // See if it has the ACPI storage file
+ //
+ Status = ((EFI_FIRMWARE_VOLUME_PROTOCOL *) (*Instance))->ReadFile (
+ *Instance,
+ &gAcpiZpOddFfsTableGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ return Status;
+}
+
+#endif
+
+#if defined (RTD3_SUPPORT) && (RTD3_SUPPORT==1)
+VOID LoadSsdtRtd3Table()
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ UINTN Index;
+ EFI_FIRMWARE_VOLUME_PROTOCOL *FwVol;
+ EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
+ INTN Instance;
+ EFI_ACPI_COMMON_HEADER *Table;
+ UINTN Size;
+ EFI_FV_FILETYPE FileType;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINT32 FvStatus;
+ ACPI_HDR *TableHeader;
+ UINTN TableHandle;
+ EFI_ACPI_TABLE_VERSION Version;
+
+
+ AcpiSupport = NULL;
+ FwVol = NULL;
+ Table = NULL;
+
+ //
+ // Locate FV protocol.
+ //
+
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiFirmwareVolumeProtocolGuid,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Look for FV with ACPI RTD3 file
+ //
+ for (Index = 0; Index < NumberOfHandles; Index++) {
+
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[Index],
+ &gEfiFirmwareVolumeProtocolGuid,
+ &FwVol
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // See if it has the ACPI RTD3 file
+ //
+ Size = 0;
+ FvStatus = 0;
+ Status = FwVol->ReadFile (
+ FwVol,
+ &gAcpiRtd3FfsTableGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ //
+ // Sanity check that we found our data file
+ //
+ ASSERT (FwVol);
+
+ //
+ // By default, a table belongs in all ACPI table versions published.
+ //
+ Version = EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0;
+
+ //
+ // Find the AcpiSupport protocol
+ //
+ Status = LocateRTD3SupportProtocol (
+ &gEfiAcpiSupportGuid,
+ &AcpiSupport,
+ FALSE
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Read tables from the RTD3 file.
+ //
+ Instance = 0;
+
+ while (Status == EFI_SUCCESS) {
+ //
+ // Read the ACPI tables
+ //
+ Status = FwVol->ReadSection (
+ FwVol,
+ &gAcpiRtd3FfsTableGuid,
+ EFI_SECTION_RAW,
+ Instance,
+ &Table,
+ &Size,
+ &FvStatus
+ );
+
+ if (!EFI_ERROR (Status)) {
+ //
+ // This should be a RTD3 SSDT table
+ //
+ TableHeader = (ACPI_HDR *) Table;
+#if ULT0RTD3_SUPPORT
+ if (MemCmp (&TableHeader->OemTblId, "Ult0Rtd3", 8) == 0) {
+#endif
+#if BRRTD3_SUPPORT
+ if (MemCmp (&TableHeader->OemTblId, "BR0_Rtd3", 8) == 0) {
+#endif
+#if RTD3FFRD_SUPPORT
+ if (MemCmp (&TableHeader->OemTblId, "HSW-FFRD", 8) == 0) {
+#endif
+ //
+ // This is RTD3 SSDT. We load the table
+ //
+ TableHandle = 0;
+ Status = AcpiSupport->SetAcpiTable (
+ AcpiSupport,
+ Table,
+ TRUE,
+ Version,
+ &TableHandle
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ //
+ // Increment the instance
+ //
+ Instance++;
+ Table = NULL;
+ }
+ }
+ Status = AcpiSupport->PublishTables (
+ AcpiSupport,
+ (EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0)
+ );
+ ASSERT_EFI_ERROR (Status);
+}
+
+EFI_STATUS
+LocateRTD3SupportProtocol (
+ IN EFI_GUID *Protocol,
+ OUT VOID **Instance,
+ IN BOOLEAN Type
+ )
+/*++
+
+Routine Description:
+
+ Locate the first instance of a protocol. If the protocol requested is an
+ FV protocol, then it will return the first FV that contains the ACPI table
+ storage file.
+
+Arguments:
+
+ Protocol The protocol to find.
+ Instance Return pointer to the first instance of the protocol
+ Type TRUE if the desired protocol is a FV protocol
+
+Returns:
+
+ EFI_SUCCESS The function completed successfully.
+ EFI_NOT_FOUND The protocol could not be located.
+ EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol.
+
+--*/
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ EFI_FV_FILETYPE FileType;
+ UINT32 FvStatus;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINTN Size;
+ UINTN i;
+
+ FvStatus = 0;
+ //
+ // Locate protocol.
+ //
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ Protocol,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // Defined errors at this time are not found and out of resources.
+ //
+ return Status;
+ }
+ //
+ // Looking for FV with ACPI storage file
+ //
+ for (i = 0; i < NumberOfHandles; i++) {
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[i],
+ Protocol,
+ Instance
+ );
+ ASSERT (!EFI_ERROR (Status));
+
+ if (!Type) {
+ //
+ // Not looking for the FV protocol, so find the first instance of the
+ // protocol. There should not be any errors because our handle buffer
+ // should always contain at least one or LocateHandleBuffer would have
+ // returned not found.
+ //
+ break;
+ }
+
+ //
+ // See if it has the ACPI RTD3 file
+ //
+ Status = ((EFI_FIRMWARE_VOLUME_PROTOCOL *) (*Instance))->ReadFile (
+ *Instance,
+ &gAcpiRtd3FfsTableGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ return Status;
+}
+#endif
+
+#if defined ACPIDEBUG_SUPPORT && ACPIDEBUG_SUPPORT
+VOID LoadSsdtAcpiDebugTable()
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ UINTN Index;
+ EFI_FIRMWARE_VOLUME_PROTOCOL *FwVol;
+ EFI_ACPI_SUPPORT_PROTOCOL *AcpiSupport;
+ INTN Instance;
+ EFI_ACPI_COMMON_HEADER *Table;
+ UINTN Size;
+ EFI_FV_FILETYPE FileType;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINT32 FvStatus;
+ ACPI_HDR *TableHeader;
+ UINTN TableHandle;
+ EFI_ACPI_TABLE_VERSION Version;
+ EFI_PHYSICAL_ADDRESS BaseAddressMem = 0;
+ UINT32 BufferIndex;
+ UINT32 BufferEnd;
+ UINT8 *CurrPtr;
+ UINT32 *Signature;
+ NAME_LAYOUT *NamePtr;
+ UINT8 UpdateCounter;
+
+
+ AcpiSupport = NULL;
+ FwVol = NULL;
+ Table = NULL;
+
+ //
+ // Reserve 64kb buffer of system memory to store Acpi Debug data.
+ //
+ BaseAddressMem = 0xFFFFFFFF;
+ Status = pBS->AllocatePages (
+ AllocateMaxAddress,
+ EfiReservedMemoryType,
+ EFI_SIZE_TO_PAGES (AcpiDebugBufferSize),
+ &BaseAddressMem
+ );
+ ASSERT_EFI_ERROR(Status);
+
+ BufferIndex = (UINT32) BaseAddressMem;
+ BufferEnd = BufferIndex + AcpiDebugBufferSize;
+ //
+ // Clear the 64kb buffer
+ //
+ pBS->SetMem ((VOID *)(UINTN)BaseAddressMem, AcpiDebugBufferSize, 0x78);
+ //
+ // Write a signature to the first line of the buffer, "INTEL ACPI DEBUG".
+ //
+ pBS->CopyMem ((VOID *)(UINTN)BufferIndex, ACPI_DEBUG_STR, sizeof(ACPI_DEBUG_STR) - 1);
+ //
+ // leave the Index after the signature
+ //
+ BufferIndex += sizeof(ACPI_DEBUG_STR) - 1;
+ TRACE((TRACE_ALWAYS, "ACPI Debug address =0x%08X\n", BaseAddressMem));
+
+ //
+ // Locate FV protocol.
+ //
+
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ &gEfiFirmwareVolumeProtocolGuid,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Look for FV with ACPIDebug file
+ //
+ for (Index = 0; Index < NumberOfHandles; Index++) {
+
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[Index],
+ &gEfiFirmwareVolumeProtocolGuid,
+ &FwVol
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // See if it has the ACPI Debug file
+ //
+ Size = 0;
+ FvStatus = 0;
+ Status = FwVol->ReadFile (
+ FwVol,
+ &gAcpiDebugFfsTableGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ //
+ // Sanity check that we found our data file
+ //
+ ASSERT (FwVol);
+
+ //
+ // By default, a table belongs in all ACPI table versions published.
+ //
+ Version = EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0;
+
+ //
+ // Find the AcpiSupport protocol
+ //
+ Status = LocateAcpiDebugSupportProtocol (
+ &gEfiAcpiSupportGuid,
+ &AcpiSupport,
+ FALSE
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Read tables from the AcpiDebug file.
+ //
+ Instance = 0;
+
+ while (Status == EFI_SUCCESS) {
+ //
+ // Read the ACPI tables
+ //
+ Status = FwVol->ReadSection (
+ FwVol,
+ &gAcpiDebugFfsTableGuid,
+ EFI_SECTION_RAW,
+ Instance,
+ &Table,
+ &Size,
+ &FvStatus
+ );
+
+ if (!EFI_ERROR (Status)) {
+ //
+ // This should be a AcpiDebug SSDT table
+ //
+ TableHeader = (ACPI_HDR *) Table;
+ if (MemCmp (&TableHeader->OemTblId, "ADebTabl", 8) == 0) {
+ //
+ // Patch some pointers for the ASL code before loading the SSDT.
+ //
+ UpdateCounter = 1;
+ for (CurrPtr = (UINT8 *) TableHeader; CurrPtr <= ((UINT8 *) TableHeader + TableHeader->Length), UpdateCounter < 4; CurrPtr++) {
+ Signature = (UINT32 *) (CurrPtr + 1);
+ //
+ // patch DPTR (address of Acpi debug memory buffer)
+ //
+ if ((*CurrPtr == AML_NAME_OP) && *Signature == EFI_SIGNATURE_32 ('D', 'P', 'T', 'R')) {
+ NamePtr = (NAME_LAYOUT *) CurrPtr;
+ NamePtr->Value = (UINT32) BaseAddressMem;
+ UpdateCounter++;
+ }
+ //
+ // patch EPTR (end of Acpi debug memory buffer)
+ //
+ if ((*CurrPtr == AML_NAME_OP) && *Signature == EFI_SIGNATURE_32 ('E', 'P', 'T', 'R')) {
+ NamePtr = (NAME_LAYOUT *) CurrPtr;
+ NamePtr->Value = (UINT32) BufferEnd;
+ UpdateCounter++;
+ }
+ //
+ // patch CPTR (used as an index that starts after the buffer signature)
+ //
+ if ((*CurrPtr == AML_NAME_OP) && *Signature == EFI_SIGNATURE_32 ('C', 'P', 'T', 'R')) {
+ NamePtr = (NAME_LAYOUT *) CurrPtr;
+ NamePtr->Value = (UINT32) BufferIndex;
+ UpdateCounter++;
+ }
+ }
+ //
+ // This is AcpiDebug SSDT. We load the table
+ //
+ TableHandle = 0;
+ Status = AcpiSupport->SetAcpiTable (
+ AcpiSupport,
+ Table,
+ TRUE,
+ Version,
+ &TableHandle
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ //
+ // Increment the instance
+ //
+ Instance++;
+ Table = NULL;
+ }
+ }
+ Status = AcpiSupport->PublishTables (
+ AcpiSupport,
+ (EFI_ACPI_TABLE_VERSION_1_0B | EFI_ACPI_TABLE_VERSION_2_0 | EFI_ACPI_TABLE_VERSION_3_0)
+ );
+ ASSERT_EFI_ERROR (Status);
+}
+
+EFI_STATUS
+LocateAcpiDebugSupportProtocol (
+ IN EFI_GUID *Protocol,
+ OUT VOID **Instance,
+ IN BOOLEAN Type
+ )
+/*++
+
+Routine Description:
+
+ Locate the first instance of a protocol. If the protocol requested is an
+ FV protocol, then it will return the first FV that contains the ACPI table
+ storage file.
+
+Arguments:
+
+ Protocol The protocol to find.
+ Instance Return pointer to the first instance of the protocol
+ Type TRUE if the desired protocol is a FV protocol
+
+Returns:
+
+ EFI_SUCCESS The function completed successfully.
+ EFI_NOT_FOUND The protocol could not be located.
+ EFI_OUT_OF_RESOURCES There are not enough resources to find the protocol.
+
+--*/
+{
+ EFI_STATUS Status;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
+ EFI_FV_FILETYPE FileType;
+ UINT32 FvStatus;
+ EFI_FV_FILE_ATTRIBUTES Attributes;
+ UINTN Size;
+ UINTN i;
+
+ FvStatus = 0;
+ //
+ // Locate protocol.
+ //
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ Protocol,
+ NULL,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // Defined errors at this time are not found and out of resources.
+ //
+ return Status;
+ }
+ //
+ // Looking for FV with ACPI storage file
+ //
+ for (i = 0; i < NumberOfHandles; i++) {
+ //
+ // Get the protocol on this handle
+ // This should not fail because of LocateHandleBuffer
+ //
+ Status = pBS->HandleProtocol (
+ HandleBuffer[i],
+ Protocol,
+ Instance
+ );
+ ASSERT (!EFI_ERROR (Status));
+
+ if (!Type) {
+ //
+ // Not looking for the FV protocol, so find the first instance of the
+ // protocol. There should not be any errors because our handle buffer
+ // should always contain at least one or LocateHandleBuffer would have
+ // returned not found.
+ //
+ break;
+ }
+
+ //
+ // See if it has the ACPI RTD3 file
+ //
+ Status = ((EFI_FIRMWARE_VOLUME_PROTOCOL *) (*Instance))->ReadFile (
+ *Instance,
+ &gAcpiDebugFfsTableGuid,
+ NULL,
+ &Size,
+ &FileType,
+ &Attributes,
+ &FvStatus
+ );
+
+ //
+ // If we found it, then we are done
+ //
+ if (Status == EFI_SUCCESS) {
+ break;
+ }
+ }
+
+ //
+ // Our exit status is determined by the success of the previous operations
+ // If the protocol was found, Instance already points to it.
+ //
+
+ //
+ // Free any allocated buffers
+ //
+ pBS->FreePool (HandleBuffer);
+
+ return Status;
+}
+#endif
+
+VOID *GetDSDTTable ()
+{
+ INTN Index;
+ PACPI_HDR Table;
+ EFI_ACPI_TABLE_VERSION Version;
+ UINTN Handle;
+ EFI_STATUS Status;
+
+ for (Index = 0;;++Index) {
+ Status = gEfiAcpiSupport->GetAcpiTable(gEfiAcpiSupport,
+ Index,
+ &Table,
+ &Version,
+ &Handle);
+ if (EFI_ERROR(Status)) return 0;
+ if (((PACPI_HDR)Table)->Signature == FACP_SIG) return(VOID*)(UINTN)((PFACP32)Table)->DSDT;
+
+ }
+}
+
+VOID
+DsdtTableUpdate (
+ PACPI_HDR DsdtTable
+ )
+/*++
+
+ Routine Description:
+
+ Update the DSDT table
+
+ Arguments:
+
+ DsdtTable - The table points to DSDT table.
+
+ Returns:
+
+ None
+
+--*/
+{
+ UINT8 *CurrPtr;
+ UINT8 *DsdtPointer;
+ UINT32 *Signature;
+ UINT8 *Operation;
+ //
+ // Loop through the ASL looking for values that we must fix up.
+ //
+ CurrPtr = (UINT8 *) DsdtTable;
+ for (DsdtPointer = CurrPtr;
+ DsdtPointer <= (CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length);
+ DsdtPointer++
+ ) {
+ Signature = (UINT32 *) DsdtPointer;
+ //
+ // SNB_TODO
+ // SV Boards need it?
+ //
+
+ //
+ // Desktop specific update can be put here.
+ //
+ switch (*Signature) {
+ //
+ // GPIO14 is not used on desktop, so related stuff should be removed in DSDT.
+ //
+ case (EFI_SIGNATURE_32 ('_', 'P', 'R', 'W')):
+ //
+ // Check if the next object to signature is the NAME of PWRB device.
+ //
+ Operation = DsdtPointer - 1;
+ if ((*Operation == AML_NAME_OP) && (*(DsdtPointer + 8) == 0x1E)) {
+ //
+ // Rename _PRW (unrecognized name so OS will ignore)
+ //
+ *DsdtPointer = 'O';
+ }
+ break;
+ case (EFI_SIGNATURE_32 ('_', 'L', '1', 'E')):
+ //
+ // Rename _L1E method (unrecognized method so OS will ignore)
+ //
+ *DsdtPointer = 'O';
+ break;
+ default:
+ break;
+ }
+ }
+ return;
+}
+
+/*
+VOID
+DsdtTableUpdate1 (
+ PACPI_HDR DsdtTable
+ )
+{
+ UINT8 *CurrPtr;
+ UINT8 *DsdtPointer;
+ UINT32 *Signature, *Signature1;
+
+ CurrPtr = (UINT8 *) DsdtTable;
+
+ for (DsdtPointer = CurrPtr;
+ DsdtPointer <= (CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length);
+ DsdtPointer++
+ ) {
+ Signature = (UINT32 *) (DsdtPointer + 3);
+ Signature1 = (UINT32 *) (DsdtPointer + 14);
+ //
+ if ((*DsdtPointer == AML_EXT_OP) &&
+ (*(DsdtPointer + 1)== AML_EXT_PROCESSOR_OP) &&
+ (*(Signature1 ) == EFI_SIGNATURE_32 ('_', 'D', 'E', 'P'))
+ ) {
+ switch(*Signature){
+ case (EFI_SIGNATURE_32 ('C', 'P', 'U', '0')):
+ case (EFI_SIGNATURE_32 ('C', 'P', 'U', '1')):
+ case (EFI_SIGNATURE_32 ('C', 'P', 'U', '2')):
+ case (EFI_SIGNATURE_32 ('C', 'P', 'U', '3')):
+ case (EFI_SIGNATURE_32 ('C', 'P', 'U', '4')):
+ case (EFI_SIGNATURE_32 ('C', 'P', 'U', '5')):
+ case (EFI_SIGNATURE_32 ('C', 'P', 'U', '6')):
+ case (EFI_SIGNATURE_32 ('C', 'P', 'U', '7')):
+
+ TRACE((-1, "Processor CPU0 Point at 0x%08X\n", DsdtPointer));
+ *(DsdtPointer + 14) = 'X';
+ break;
+ default:
+ break;
+ }// end switch
+
+ }
+
+ }
+ return;
+}
+*/
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2013, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/AcpiPlatform.cif b/Board/EM/Platform/AcpiPlatform.cif
new file mode 100644
index 0000000..32c45ab
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatform.cif
@@ -0,0 +1,44 @@
+<component>
+ name = "Platform"
+ category = eModule
+ LocalRoot = "Board\EM\Platform"
+ RefName = "AcpiPlatform"
+[files]
+"ReleaseNotes.chm"
+"AcpiPlatform.sdl"
+"AcpiPlatformPei.c"
+"AcpiPlatformPei.dxs"
+"AcpiPlatform.c"
+"AcpiPlatformCspLib.c"
+"AcpiPlatform.dxs"
+"AcpiPlatformSmi.c"
+"AcpiPlatformSmi.dxs"
+"AcpiPlatform.mak"
+"AcpiPlatform.h"
+"AcpiPlatform.sd"
+"AcpiPlatform.uni"
+"PlatformSetup.h"
+"AcpiIntelRC.h"
+"iasl.exe"
+"GenAcpiTable.exe"
+[parts]
+"PlatformInfo"
+"AcpiAsl"
+"AcpiFvi"
+"SsdtAcpiDebug"
+"SsdtPtid"
+"SsdtRtd3"
+"SsdtZpOdd"
+"SsdtSensorHub"
+"AcpiProtocolLib"
+"SMBIOSUpdateData"
+"IntelPlatformInclude"
+"IntelPlatformProtocolLib"
+"IntelRefVerDisplay"
+"PlatformSetupInfo"
+"FvOnFv2Thunk"
+"FirmwareVerInfo"
+"EfiCombineImage"
+"lpit"
+"SsdtIRMT"
+<endComponent>
diff --git a/Board/EM/Platform/AcpiPlatform.dxs b/Board/EM/Platform/AcpiPlatform.dxs
new file mode 100644
index 0000000..350b726
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatform.dxs
@@ -0,0 +1,53 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatform.dxs 1 2/09/12 12:30a Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 2/09/12 12:30a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatform.dxs $
+//
+// 1 2/09/12 12:30a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+
+#include <Protocol\CpuIo.h>
+#include <protocol\AcpiSupport.h>
+#include <PlatformInfo.h>
+
+DEPENDENCY_START
+ EFI_CPU_IO_PROTOCOL_GUID AND
+ EFI_ACPI_SUPPORT_GUID AND
+ EFI_PLATFORM_INFO_PROTOCOL_GUID
+DEPENDENCY_END
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/AcpiPlatform.h b/Board/EM/Platform/AcpiPlatform.h
new file mode 100644
index 0000000..aa722b8
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatform.h
@@ -0,0 +1,240 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2013, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatform.h 12 7/11/14 4:00a Joshchou $
+//
+// $Revision: 12 $
+//
+// $Date: 7/11/14 4:00a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatform.h $
+//
+// 12 7/11/14 4:00a Joshchou
+// [TAG] None
+// [Category] Improvement
+// [Description] Support Debug Port Table.
+// [Files] AcpiPlatform.c
+// AcpiPlatform.h
+// AcpiPlatform.cif
+//
+// 11 4/23/14 4:21a Joshchou
+//
+// 10 9/27/13 10:43a Joshchou
+// [TAG] EIP137454
+// [Category] New Feature
+// [Description] Follow Intel sample code to add LPIT table.
+//
+// 9 9/18/13 6:26a Joshchou
+// [TAG] EIP136411
+// [Category] Improvement
+// [Description] Support MWAIT LPI State Descriptor[1].
+//
+// 8 7/16/13 6:00a Alanlin
+// [TAG] EIP127540
+// [Category] Normal
+// [Severity] Normal
+// [Description] Windows* 8.1 Micro-PEP (uPEP) ASL Support Version 0.5
+// [Files] AcpiPlatform.c, AcpiPlatform.h
+//
+// 7 6/28/13 5:22a Alanlin
+// [TAG] None
+// [Category] Important
+// [Severity] Important
+// [Description] Fixed that Processors device are disappeared under OS
+// device manager.
+// [Files] AcpiPlatform.c, AcpiPlatform.h
+//
+// 6 11/20/12 7:08a Alanlin
+// [TAG] None
+// [Category] New Feature
+// [Severity] Important
+// [Description] SensorHub SSDT acpi table support
+// [Files] Acpiplatform.c, Acpiplatform.cif, Acpiplatform.h,
+// SsdtSensorHub.asl, SsdtSensorHub.mak, SsdtSensorHub.sdl
+//
+// [TAG] None
+// [Category] Important
+// [Severity] Important
+// [Description] Update Shark Bay Client ACPI Reference Code Beta Version
+// 0.8.0
+//
+// 5 11/09/12 5:18a Alanlin
+// [TAG] None
+// [Category] New Feature
+// [Severity] Important
+// [Description] ZpOdd SSDT acpi table support
+// [Files] Acpiplatform.c, Acpiplatform.cif, Acpiplatform.h,
+// Acpiplatform.sd, Acpiplatform.uni
+//
+// 4 10/31/12 4:40a Alanlin
+// [TAG] None
+// [Category] New Feature
+// [Severity] Normal
+// [Description] Support Acpi Debug SSDT.
+//
+// 3 9/12/12 7:21a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Remove AOAC for Intel Smart Connect Technology module.
+// [Files] GlobalNvsArea.h, GloblNvs.asl
+//
+// 2 8/31/12 4:48a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Implement Runtime D3.
+// [Files] AcpiPlatform.c, AcpiPlatform.cif, AcpiPlatform.h,
+// AcpiPlatform.sd, AcpiPlatform.sdl, AcpiPlatform.uni, GlobalNvsArea.h,
+// SsdtRtd3.cif, SsdtRtd3.mak, Ult0Rtd3.asl, SsdtRtd3.sdl
+//
+// 1 2/09/12 12:30a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: AcpiPlatform.h
+//
+// Description: AcpiPlatform header file, define all the AcpiPlatform module
+// specific equates and structures in this file.
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+#define EFI_MSR_IA32_PLATFORM_ID 0x17
+#define EFI_MSR_IA32_CR_PIC_MSG_CONTROL 0x2e
+#define EFI_MSR_CORE_THREAD_COUNT 0x35
+#define EFI_MSR_IA32_FEATURE_CONTROL 0x3a
+
+#define AML_NAME_OP 0x08
+#define AML_EXT_OP 0x5b
+#define AML_EXT_DEVICE_OP 0x82
+#define AML_EXT_PROCESSOR_OP 0x83
+#define AML_NOOP_OP 0xa3
+
+#define PCH_SMBUS_ENABLE_PEC 0x1
+
+//-jeff For EDK
+// Common table header, this prefaces all ACPI tables, including FACS, but
+// excluding the RSD PTR structure
+
+#ifndef EFI_SIGNATURE_16
+#define EFI_SIGNATURE_16(A, B) ((A) | (B << 8))
+#endif
+
+#ifndef EFI_SIGNATURE_32
+#define EFI_SIGNATURE_32(A, B, C, D) (EFI_SIGNATURE_16 (A, B) | (EFI_SIGNATURE_16 (C, D) << 16))
+#endif
+
+//
+// ACPI table information used to initialize tables.
+//
+#define EFI_ACPI_3_0_DEBUG_PORT_TABLE_SIGNATURE EFI_SIGNATURE_32('D', 'B', 'G', 'P')
+#define EFI_ACPI_DBGP_TABLE_REVISION 0x01
+#define EFI_ACPI_OEM_DBGP_REVISION 0x00000000
+#define EFI_ACPI_CREATOR_ID 0x5446534D // "MSFT"
+#define EFI_ACPI_CREATOR_REVISION 0x00000005F
+
+typedef struct {
+ UINT32 Signature;
+ UINT32 Length;
+} EFI_ACPI_COMMON_HEADER;
+
+typedef struct
+{
+ UINT32 Signature;
+ UINT32 Length;
+ UINT8 Revision;
+ UINT8 Checksum;
+ UINT8 OemId[6];
+ UINT64 OemTableId;
+ UINT32 OemRevision;
+ UINT32 CreatorId;
+ UINT32 CreatorRevision;
+} EFI_ACPI_DESCRIPTION_HEADER;
+
+
+#pragma pack(1)
+typedef union _MSR_REGISTER {
+ UINT64 Qword;
+
+ struct _DWORDS {
+ UINT32 Low;
+ UINT32 High;
+ } Dwords;
+
+ struct _BYTES {
+ UINT8 FirstByte;
+ UINT8 SecondByte;
+ UINT8 ThirdByte;
+ UINT8 FouthByte;
+ UINT8 FifthByte;
+ UINT8 SixthByte;
+ UINT8 SeventhByte;
+ UINT8 EighthByte;
+ } Bytes;
+
+} MSR_REGISTER;
+
+///
+/// ACPI 2.0 Generic Address Space definition
+///
+typedef struct _EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE{
+ UINT8 AddressSpaceId;
+ UINT8 RegisterBitWidth;
+ UINT8 RegisterBitOffset;
+ UINT8 Reserved;
+ UINT64 Address;
+} EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE;
+
+typedef struct {
+ ACPI_HDR Header;
+ UINT8 InterfaceType;
+ UINT8 Reserved_37[3];
+ EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE BaseAddress;
+} EFI_ACPI_DEBUG_PORT_DESCRIPTION_TABLE;
+
+
+#define PTID_FFS_TABLE_STORAGE_GUID \
+ { 0x95DFCAE5, 0xBB28, 0x4d6b, 0xB1, 0xE2, 0x3A, 0xF3, 0xA6, 0xBF, 0x43, 0x4F }
+#define RTD3_FFS_TABLE_GUID \
+ { 0x7FFC3536, 0x0A8A, 0x448B, 0x95, 0xF4, 0x39, 0xF5, 0xB9, 0xF0, 0x9A, 0xDD }
+#define ACPIDEBUG_FFS_TABLE_GUID \
+ { 0x94AB6AED, 0x9719, 0x48ef, 0x83, 0x1C, 0x2E, 0x9C, 0x29, 0x75, 0x8C, 0x33 }
+#define ZPODD_FFS_TABLE_GUID \
+ { 0xE42A76A1, 0xD4B3, 0x4c26, 0xA1, 0xBB, 0x84, 0xA3, 0x50, 0x2A, 0x77, 0x9F }
+#define INTELSENSORHUB_FFS_TABLE_GUID \
+ { 0xA3201EEC, 0x1612, 0x4577, 0x89, 0x24, 0xCB, 0x32, 0xD5, 0x42, 0xD2, 0x2C }
+#define IRMT_FFS_TABLE_STORAGE_GUID \
+ { 0xCE2007C7, 0xB389, 0x49c5, 0x84, 0xE3, 0xDB, 0x36, 0xA1, 0xF0, 0x99, 0x3B }
+#pragma pack()
+
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2013, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/AcpiPlatform.mak b/Board/EM/Platform/AcpiPlatform.mak
new file mode 100644
index 0000000..632eeb4
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatform.mak
@@ -0,0 +1,170 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatform.mak 5 12/18/12 11:03p Alanlin $
+#
+# $Revision: 5 $
+#
+# $Date: 12/18/12 11:03p $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatform.mak $
+#
+# 5 12/18/12 11:03p Alanlin
+# [TAG] EIP107188
+# [Category] Important
+# [Severity] Important
+# [Description] USB 3.0 port can't work when RTD3 is Enabled in setup
+# menu.
+# [Files] Acpiplatform.c, Acpiplatform.mak, Acpiplatform.sd,
+# Acpiplatform.uni.
+#
+# 4 10/15/12 11:41a Alanlin
+# [TAG] None
+# [Category] Spec Update
+# [Severity] Important
+# [Description] Updated for RC 0.7.1
+#
+# 3 4/25/12 1:28p Yurenlai
+# [TAG] None
+# [Category] Improvement
+# [Description] Initilize ACPI DXE Platform Policy.
+# [Files] AcpiPlatform.c, AcpiPlatform.mak
+#
+# 1 2/09/12 12:30a Yurenlai
+# Initial check in.
+#
+#*************************************************************************
+#<AMI_FHDR_START>
+#
+# Name: AcpiPlatform.mak
+#
+# Description: This make file builds AcpiPlatform module PEI & DXE and SMI
+# components and link them to respective binary
+#
+#<AMI_FHDR_END>
+#*************************************************************************
+
+all : AcpiPlatformPei AcpiPlatform AcpiPlatformSmi
+
+#---------------------------------------------------------------------------
+# Generic AcpiPlatform dependencies
+#---------------------------------------------------------------------------
+
+$(BUILD_DIR)\AcpiPlatform.mak : $(AcpiPlatform_DIR)\AcpiPlatform.cif $(BUILD_RULES)
+ $(CIF2MAK) $(AcpiPlatform_DIR)\AcpiPlatform.cif $(CIF2MAK_DEFAULTS)
+
+#----------------------------------------------------------------------------
+# Add files into CSP Library
+#----------------------------------------------------------------------------
+AMI_CSP_LIB_LIBRARY_PATH = $(AMI_CSP_LIB_LIBRARY_PATH);$(AcpiPlatform_DIR)
+
+AMI_CSP_LIB_OBJS = $(AMI_CSP_LIB_OBJS) \
+$(BUILD_DIR)\AcpiPlatformCspLib.obj
+
+{$(AcpiPlatform_DIR)}.c{$(BUILD_DIR)}.obj::
+ $(CC) $(CFLAGS) /I $(AcpiPlatform_DIR) /Fo$(BUILD_DIR)\ $<
+
+$(BUILD_DIR)\AcpiPlatformCspLib.obj : $(AcpiPlatform_DIR)\AcpiPlatformCspLib.c
+
+CORE_DXEBin: $(AMICSPLib)
+
+#---------------------------------------------------------------------------
+# Create AcpiPlatform PEI Component
+#---------------------------------------------------------------------------
+AcpiPlatformPei : $(BUILD_DIR)\AcpiPlatform.mak AcpiPlatformPeiBin
+
+AcpiPlatformPeiBin : $(AMIPEILIB) $(AMICSPLib)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\AcpiPlatform.mak all\
+ NAME=AcpiPlatformPei\
+ MAKEFILE=$(BUILD_DIR)\AcpiPlatform.mak \
+ "CFLAGS=$(CFLAGS)"\
+ OBJECTS="$(AcpiPlatformPei_OBJECTS)" \
+ GUID=333BB2A3-4F20-4c8b-AC38-0672D74315F8\
+ ENTRY_POINT=AcpiPlatformPeiInit \
+ TYPE=PEIM \
+ DEPEX1=$(AcpiPlatform_DIR)\AcpiPlatformPei.DXS DEPEX1_TYPE=EFI_SECTION_PEI_DEPEX \
+ COMPRESS=0
+
+#{333BB2A3-4F20-4c8b-AC38-0672D74315F8}
+#DEFINE_GUID(<<name>>,
+#0x333bb2a3, 0x4f20, 0x4c8b, 0xac, 0x38, 0x6, 0x72, 0xd7, 0x43, 0x15, 0xf8);
+#---------------------------------------------------------------------------
+# Create AcpiPlatform DXE Component
+#---------------------------------------------------------------------------
+AcpiPlatform: $(BUILD_DIR)\AcpiPlatform.mak AcpiPlatformBin
+
+AcpiPlatformBin : $(AMIDXELIB) $(AMICSPLib) $(DxeKscLib_LIB) $(AcpiProtocolLib_LIB) $(INTEL_SA_PROTOCOL_LIB)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\AcpiPlatform.mak all\
+ GUID=8B5FBABD-F51F-4942-BF16-16AAA38AE52B\
+ "MY_INCLUDES=$(INTEL_PLATFORM_PROTOCOL_INCLUDES) $(INTEL_PCH_INCLUDES) $(ACPI_PLATFORM_INCLUDES) $(AcpiProtocolLib_INCLUDES) $(PLATFORM_INFO_INCLUDES) $(DxeKscLib_INCLUDES) $(DPPM_DIR_INCLUDES) /I $(INTEL_SA_PROTOCOL_LIB_DIR)"\
+ ENTRY_POINT=AcpiPlatformInit\
+ OBJECTS="$(AcpiPlatform_OBJECTS)" \
+ TYPE=BS_DRIVER \
+ DEPEX1=$(AcpiPlatform_DIR)\AcpiPlatform.dxs\
+ DEPEX1_TYPE=EFI_SECTION_DXE_DEPEX\
+ COMPRESS=1
+
+#----------------------------------------------------------------------------
+# Create AcpiPlatform SMI Component
+#----------------------------------------------------------------------------
+AcpiPlatformSmi : $(BUILD_DIR)\AcpiPlatform.mak AcpiPlatformSmiBin
+
+AcpiPlatformSmiBin : $(AMICSPLib) $(AMIDXELIB)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\AcpiPlatform.mak all\
+ NAME=AcpiPlatformSmi\
+ MAKEFILE=$(BUILD_DIR)\AcpiPlatform.mak \
+ OBJECTS="$(AcpiPlatformSmi_OBJECTS)" \
+ GUID=DFD8D5CC-5AED-4820-A2B6-5C55E4E640EF \
+ ENTRY_POINT=InitializeAcpiPlatformSMISmm \
+ "CFLAGS=$(CFLAGS) $(ACPI_PLATFORM_INCLUDES) $(PLATFORM_INFO_INCLUDES) $(SB_INCLUDES)"\
+ "EXT_HEADERS=$(BUILD_DIR)\token.h"\
+ TYPE=BS_DRIVER \
+ DEPEX1=$(AcpiPlatform_DIR)\AcpiPlatformSmi.DXS DEPEX1_TYPE=EFI_SECTION_DXE_DEPEX \
+ COMPRESS=1
+
+#{DFD8D5CC-5AED-4820-A2B6-5C55E4E640EF}
+#DEFINE_GUID(<<name>>,
+#0xdfd8d5cc, 0x5aed, 0x4820, 0xa2, 0xb6, 0x5c, 0x55, 0xe4, 0xe6, 0x40, 0xef);
+
+#---------------------------------------------------------------------------
+# Create IgdOpRegion Setup Screens
+#---------------------------------------------------------------------------
+SetupSdbs : $(BUILD_DIR)\AcpiPlatform.mak AcpiPlatformSDB
+
+
+AcpiPlatformSDB :
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\AcpiPlatform.mak all \
+ TYPE=SDB NAME=AcpiPlatform STRING_CONSUMERS=$(AcpiPlatform_DIR)\AcpiPlatform.sd
+
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
diff --git a/Board/EM/Platform/AcpiPlatform.sd b/Board/EM/Platform/AcpiPlatform.sd
new file mode 100644
index 0000000..1439c7f
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatform.sd
@@ -0,0 +1,1877 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2013, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatform.sd 16 5/15/14 3:14a Joshchou $
+//
+// $Revision: 16 $
+//
+// $Date: 5/15/14 3:14a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatform.sd $
+//
+// 16 5/15/14 3:14a Joshchou
+// [TAG] EIP167036
+// [Category] Improvement
+// [Description] review the attributes of variable.
+// [Files] AcpiPlatform.c
+// AcpiPlatform.h
+// AcpiPlatform.sd
+// AcpiPlatform.cif
+//
+// 15 4/23/14 4:21a Joshchou
+//
+// 14 7/16/13 5:59a Alanlin
+// [TAG] EIP125350
+// [Category] Normal
+// [Severity] Normal
+// [Description] System BIOS Support for the Hardware Button for Windows*
+// 8.1 - Rev.0.5
+// [Files] AcpiPlatform.c, AcpiPlatform.sd, AcpiPlatform.uni
+//
+// 13 6/04/13 10:19a Alanlin
+// [TAG] None
+// [Category] Improvement
+// [Severity] Normal
+// [Description] Follow Intel CRB BIOS v126 to set default configuraton
+// setting of RTD3 devices.
+// [Files] AcpiPlatform.c, AcpiPlatform.sd, AcpiPlatform.uni
+//
+// 12 4/24/13 7:03a Alanlin
+// [TAG] None
+// [Category] Normal
+// [Severity] Normal
+// [Description] Change "Native PCIE Enable" and "Native ASPM" to Enabled
+// as default.
+// [Files] AcpiPlatform.sd
+//
+// 11 3/26/13 9:31a Alanlin
+// [TAG] EIP119125
+// [Category] Important
+// [Severity] Important
+// [Description] Update Shark Bay Client ACPI Reference Code Beta Version
+// 1.3.1
+//
+// 10 2/15/13 1:13a Alanlin
+// [TAG] EIP114919
+// [Category] Important
+// [Severity] Important
+// [Description] Update Shark Bay Client ACPI Reference Code Beta Version
+// 1.1.0
+//
+// 9 2/01/13 3:14a Alanlin
+// [TAG] None
+// [Category] Important
+// [Severity] Important
+// [Description] Fixed that DPPM-06 test item can't be passed.
+// [Files] Acpiplatform.sd.
+//
+// 8 1/28/13 11:14p Alanlin
+// [TAG] EIP113555
+// [Category] Important
+// [Severity] Important
+// [Description] Update Shark Bay Client ACPI Reference Code Beta Version
+// 1.0.0
+//
+// 7 1/15/13 5:46a Alanlin
+// [TAG] None
+// [Category] Normal
+// [Severity] Normal
+// [Description] Add setup item and setting for DPTF
+// [Files] Acpiplatform.c, Acpiplatform.sd, Acpiplatform.uni,
+// PlatformSetup.h
+//
+// 6 12/18/12 11:04p Alanlin
+// [TAG] EIP107188
+// [Category] Important
+// [Severity] Important
+// [Description] USB 3.0 port can't work when RTD3 is Enabled in setup
+// menu.
+// [Files] Acpiplatform.c, Acpiplatform.mak, Acpiplatform.sd,
+// Acpiplatform.uni.
+//
+// 5 11/09/12 5:18a Alanlin
+// [TAG] None
+// [Category] New Feature
+// [Severity] Important
+// [Description] ZpOdd SSDT acpi table support
+// [Files] Acpiplatform.c, Acpiplatform.cif, Acpiplatform.h,
+// Acpiplatform.sd, Acpiplatform.uni
+//
+// 4 10/31/12 4:41a Alanlin
+// [TAG] None
+// [Category] New Feature
+// [Severity] Normal
+// [Description] Support Acpi Debug SSDT.
+//
+// 3 8/31/12 4:48a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Implement Runtime D3.
+// [Files] AcpiPlatform.c, AcpiPlatform.cif, AcpiPlatform.h,
+// AcpiPlatform.sd, AcpiPlatform.sdl, AcpiPlatform.uni, GlobalNvsArea.h,
+// SsdtRtd3.cif, SsdtRtd3.mak, Ult0Rtd3.asl, SsdtRtd3.sdl
+//
+// 2 7/27/12 5:11a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Create DPTF and CPPC setup item.
+// [Files] AcpiPlatform.c, AcpiPlatform.sd, AcpiPlatform.uni,
+// PlatformSetup.h
+//
+// 1 2/09/12 12:31a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: AcpiPlatform.sd
+//
+// Description: AcpiPlatform Form Template
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+#ifdef SETUP_DATA_DEFINITION
+//---------------------------------------------------------------------------
+// Put NVRAM data definitions here.
+// For example: UINT8 Data1;
+// These definitions will be converted by the build process
+// to a definitions of SETUP_DATA fields.
+//---------------------------------------------------------------------------
+#if ACPIDEBUG_SUPPORT
+ UINT8 AcpiDebugSupport;
+#endif // ACPIDEBUG_SUPPORT
+#if RTD3_SUPPORT
+ UINT8 Rtd3Support;
+ UINT16 VRStaggeringDelay;
+ UINT16 VRRampUpDelay;
+ UINT8 Rtd3P0dl;
+ UINT8 Rtd3P3dl;
+ UINT16 Rtd3Audio;
+ UINT16 Rtd3ADSP;
+ UINT16 Rtd3I2C0;
+ UINT16 Rtd3SensorHub;
+ UINT16 Rtd3I2C1;
+ UINT16 Rtd3I2C1PS0;
+ UINT16 Rtd3TouchPanel;
+ UINT8 PepGfx;
+ UINT8 PepSata;
+ UINT8 PCapping;
+ UINT8 XhciP0;
+ UINT8 XhciP1;
+ UINT8 RIC0;
+ UINT8 RTD3ZPODD;
+ UINT8 RTD3USBCamera;
+ UINT8 RTD3MiniSataPort3;
+ UINT8 RTD3WaGpio;
+#endif // RTD3_SUPPORT
+ UINT8 PciExpNative;
+ UINT8 NativeAspmEnable;
+#if PTID_SUPPORT
+ UINT8 PtidSupport;
+ UINT8 PeciAccessMethod;
+#endif // PTID_SUPPORT
+#if LOW_POWER_S0_IDLE_CAPABLE
+ UINT8 PowerButton10SecOVR;
+ UINT16 LowPowerIdleSATA;
+ UINT8 EcNotification;
+ UINT8 EcCSDebugLight;
+ UINT8 SensorStandby;
+ UINT8 CSPL1Limit;
+ UINT16 CSPL1Value;
+#endif // LOW_POWER_S0_IDLE_CAPABLE
+#if CPPC_SUPPORT
+ UINT8 EnableCppc;
+ UINT8 EnableCppcPlatformSCI;
+#endif // CPPC_SUPPORT
+#if Dptf_SUPPORT
+ UINT8 EnableDptf;
+ UINT8 EnableSaDevice;
+ UINT8 ActiveThermalTripPointSa;
+ UINT8 PassiveThermalTripPointSa;
+ UINT8 CriticalThermalTripPointSa;
+ UINT8 HotThermalTripPointSa;
+ UINT8 EnablePchDevice;
+ UINT8 ActiveThermalTripPointPch;
+ UINT8 PassiveThermalTripPointPch;
+ UINT8 CriticalThermalTripPointPch;
+ UINT8 HotThermalTripPointPch;
+ UINT8 EnableMemDevice;
+ UINT8 ActiveThermalTripPointMem;
+ UINT8 PassiveThermalTripPointMem;
+ UINT8 CriticalThermalTripPointMem;
+ UINT8 HotThermalTripPointMem;
+ UINT8 EnableAmbientDevice;
+ UINT8 ActiveThermalTripPointAmbient;
+ UINT8 PassiveThermalTripPointAmbient;
+ UINT8 CriticalThermalTripPointAmbient;
+ UINT8 HotThermalTripPointAmbient;
+ UINT8 EnableSkinDevice;
+ UINT8 ActiveThermalTripPointSkin;
+ UINT8 PassiveThermalTripPointSkin;
+ UINT8 CriticalThermalTripPointSkin;
+ UINT8 HotThermalTripPointSkin;
+ UINT8 EnableExhaustDevice;
+ UINT8 ActiveThermalTripPointExhaust;
+ UINT8 PassiveThermalTripPointExhaust;
+ UINT8 CriticalThermalTripPointExhaust;
+ UINT8 HotThermalTripPointExhaust;
+ UINT8 EnableVRDevice;
+ UINT8 ActiveThermalTripPointVR;
+ UINT8 PassiveThermalTripPointVR;
+ UINT8 CriticalThermalTripPointVR;
+ UINT8 HotThermalTripPointVR;
+ UINT32 PpccStepSize;
+ UINT8 LPOEnable;
+ UINT8 LPOStartPState;
+ UINT8 LPOStepSize;
+ UINT8 LPOPowerControl;
+ UINT8 LPOPerformanceControl;
+ UINT8 EnableCTDP;
+ UINT8 EnableLPM;
+ UINT8 LPMSetting;
+ UINT8 Fan1Device;
+ UINT8 Fan2Device;
+ UINT8 DisplayParticipant;
+ UINT8 PowerParticipant;
+ UINT8 PowerPolicy;
+ UINT8 ActivePolicy;
+ UINT8 PassivePolicy;
+ UINT8 CriticalPolicy;
+ UINT8 CoolingModePolicy;
+ UINT8 TrtRevision;
+#endif // Dptf_SUPPORT
+#if IntelRMT_SUPPORT
+ UINT8 IRMTSupport;
+ UINT8 IRMTState;
+ UINT8 IRMTHWNotification;
+#endif // IntelRMT_SUPPORT
+#endif // SETUP_DATA_DEFINITION
+
+#ifdef FORM_SET_TYPEDEF
+ #include "PlatformSetup.h"
+#endif
+
+#if defined(VFRCOMPILE) && !defined(CONTROLS_ARE_DEFINED)
+#define CONTROL_DEFINITION
+#endif
+//---------------------------------------------------------------------------
+
+//---------------------------------------------------------------------------
+#ifdef CONTROL_DEFINITION
+
+#if ACPIDEBUG_SUPPORT
+#define ACPI_ONEOF_ACPIDEBUGSUPPORT\
+ oneof varid = SETUP_DATA.AcpiDebugSupport,\
+ prompt = STRING_TOKEN(STR_ACPIDEBUG_PROMPT),\
+ help = STRING_TOKEN(STR_ACPIDEBUG_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+#endif // ACPIDEBUG_SUPPORT
+
+#if RTD3_SUPPORT
+#define ACPI_ONEOF_RTD3SUPPORT\
+ oneof varid = SETUP_DATA.Rtd3Support,\
+ prompt = STRING_TOKEN(STR_RTD3_PROMPT),\
+ help = STRING_TOKEN(STR_RTD3_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_VRSTAGGERINGDELAY\
+ numeric varid = SETUP_DATA.VRStaggeringDelay,\
+ prompt = STRING_TOKEN (STR_VRSTAGGERINGDELAY_PROMPT),\
+ help = STRING_TOKEN (STR_VRSTAGGERINGDELAY_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 100,\
+ step = 1,\
+ default = 10,\
+ option text = STRING_TOKEN (STR_VRSTAGGERINGDELAY_PROMPT), value = 10, flags = MANUFACTURING; \
+ endnumeric;
+
+#define ACPI_ONEOF_VRRAMPUPDELAY\
+ numeric varid = SETUP_DATA.VRRampUpDelay,\
+ prompt = STRING_TOKEN (STR_VRRAMPUPDELAY_PROMPT),\
+ help = STRING_TOKEN (STR_VRRAMPUPDELAY_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 100,\
+ step = 1,\
+ default = 16,\
+ option text = STRING_TOKEN (STR_VRRAMPUPDELAY_PROMPT), value = 16, flags = MANUFACTURING; \
+ endnumeric;
+
+#define ACPI_ONEOF_RTD3P0DL\
+ numeric varid = SETUP_DATA.Rtd3P0dl,\
+ prompt = STRING_TOKEN (STR_RTD3P0DL_PROMPT),\
+ help = STRING_TOKEN (STR_RTD3P0DL_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 100,\
+ step = 1,\
+ default = 100,\
+ option text = STRING_TOKEN (STR_RTD3P0DL_PROMPT), value = 100, flags = MANUFACTURING; \
+ endnumeric;
+
+#define ACPI_ONEOF_RTD3P3DL\
+ numeric varid = SETUP_DATA.Rtd3P3dl,\
+ prompt = STRING_TOKEN (STR_RTD3P3DL_PROMPT),\
+ help = STRING_TOKEN (STR_RTD3P3DL_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 10,\
+ step = 1,\
+ default = 10,\
+ option text = STRING_TOKEN (STR_RTD3P3DL_PROMPT), value = 10, flags = MANUFACTURING; \
+ endnumeric;
+
+#define ACPI_ONEOF_RTD3AUDIO\
+ numeric varid = SETUP_DATA.Rtd3Audio,\
+ prompt = STRING_TOKEN (STR_RTD3AUDIO_PROMPT),\
+ help = STRING_TOKEN (STR_RTD3AUDIO_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 1000,\
+ step = 1,\
+ default = 200,\
+ option text = STRING_TOKEN (STR_RTD3AUDIO_PROMPT), value = 200, flags = MANUFACTURING; \
+ endnumeric;
+
+#define ACPI_ONEOF_RTD3ADSP\
+ numeric varid = SETUP_DATA.Rtd3ADSP,\
+ prompt = STRING_TOKEN (STR_RTD3ADSP_PROMPT),\
+ help = STRING_TOKEN (STR_RTD3ADSP_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 1000,\
+ step = 1,\
+ default = 200,\
+ option text = STRING_TOKEN (STR_RTD3ADSP_PROMPT), value = 200, flags = MANUFACTURING; \
+ endnumeric;
+
+#define ACPI_ONEOF_RTD3I2C0\
+ numeric varid = SETUP_DATA.Rtd3I2C0,\
+ prompt = STRING_TOKEN (STR_RTD3I2C0_PROMPT),\
+ help = STRING_TOKEN (STR_RTD3I2C0_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 1000,\
+ step = 1,\
+ default = 0,\
+ option text = STRING_TOKEN (STR_RTD3I2C0_PROMPT), value = 0, flags = MANUFACTURING; \
+ endnumeric;
+
+#define ACPI_ONEOF_RTD3SENSORHUB\
+ numeric varid = SETUP_DATA.Rtd3SensorHub,\
+ prompt = STRING_TOKEN (STR_RTD3SENSORHUB_PROMPT),\
+ help = STRING_TOKEN (STR_RTD3SENSORHUB_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 1000,\
+ step = 1,\
+ default = 68,\
+ option text = STRING_TOKEN (STR_RTD3SENSORHUB_PROMPT), value = 68, flags = MANUFACTURING; \
+ endnumeric;
+
+#define ACPI_ONEOF_RTD3I2C1\
+ numeric varid = SETUP_DATA.Rtd3I2C1,\
+ prompt = STRING_TOKEN (STR_RTD3I2C1_PROMPT),\
+ help = STRING_TOKEN (STR_RTD3I2C1_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 1000,\
+ step = 1,\
+ default = 0,\
+ option text = STRING_TOKEN (STR_RTD3I2C1_PROMPT), value = 0, flags = MANUFACTURING; \
+ endnumeric;
+
+#define ACPI_ONEOF_RTD3I2C1PS0\
+ numeric varid = SETUP_DATA.Rtd3I2C1PS0,\
+ prompt = STRING_TOKEN (STR_RTD3I2C1PS0_PROMPT),\
+ help = STRING_TOKEN (STR_RTD3I2C1PS0_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 1000,\
+ step = 1,\
+ default = 68,\
+ option text = STRING_TOKEN (STR_RTD3I2C1PS0_PROMPT), value = 68, flags = MANUFACTURING; \
+ endnumeric;
+
+#define ACPI_ONEOF_RTD3TOUCHPANEL\
+ numeric varid = SETUP_DATA.Rtd3TouchPanel,\
+ prompt = STRING_TOKEN (STR_RTD3TOUCHPANEL_PROMPT),\
+ help = STRING_TOKEN (STR_RTD3TOUCHPANEL_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 1000,\
+ step = 1,\
+ default = 68,\
+ option text = STRING_TOKEN (STR_RTD3TOUCHPANEL_PROMPT), value = 68, flags = MANUFACTURING; \
+ endnumeric;
+
+#define ACPI_ONEOF_PEPGFX\
+ oneof varid = SETUP_DATA.PepGfx,\
+ prompt = STRING_TOKEN(STR_PEPGFX_PROMPT),\
+ help = STRING_TOKEN(STR_PEPGFX_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_PEPSATA\
+ oneof varid = SETUP_DATA.PepSata,\
+ prompt = STRING_TOKEN(STR_PEPSATA_PROMPT),\
+ help = STRING_TOKEN(STR_PEPSATA_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_PCAPPING\
+ oneof varid = SETUP_DATA.PCapping,\
+ prompt = STRING_TOKEN(STR_PCAPPING_PROMPT),\
+ help = STRING_TOKEN(STR_PCAPPING_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_XHCIP0\
+ oneof varid = SETUP_DATA.XhciP0,\
+ prompt = STRING_TOKEN(STR_XHCIP0_PROMPT),\
+ help = STRING_TOKEN(STR_XHCIP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_HIGHSPEED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_SUPERSPEED), value = 2, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_XHCIP1\
+ oneof varid = SETUP_DATA.XhciP1,\
+ prompt = STRING_TOKEN(STR_XHCIP1_PROMPT),\
+ help = STRING_TOKEN(STR_XHCIP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_HIGHSPEED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_SUPERSPEED), value = 2, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_RIC0\
+ oneof varid = SETUP_DATA.RIC0,\
+ prompt = STRING_TOKEN(STR_RIC0_PROMPT),\
+ help = STRING_TOKEN(STR_RIC0_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_RTD3ZPODD\
+ oneof varid = SETUP_DATA.RTD3ZPODD,\
+ prompt = STRING_TOKEN(STR_RTD3_ZPODD_PROMPT),\
+ help = STRING_TOKEN(STR_RTD3_ZPODD_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_RTD3USBCamera\
+ oneof varid = SETUP_DATA.RTD3USBCamera,\
+ prompt = STRING_TOKEN(STR_RTD3_USBCAMERA_PROMPT),\
+ help = STRING_TOKEN(STR_RTD3_USBCAMERA_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_RTD3MiniSataPort3\
+ oneof varid = SETUP_DATA.RTD3MiniSataPort3,\
+ prompt = STRING_TOKEN(STR_RTD3_MINISATAPORT3_PROMPT),\
+ help = STRING_TOKEN(STR_RTD3_MINISATAPORT3_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_1_5_DK), value = 1, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_3_3_DK), value = 2, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_RTD3WAGPIO\
+ oneof varid = SETUP_DATA.RTD3WaGpio,\
+ prompt = STRING_TOKEN(STR_RTD3_RTD3WAGPIO_PROMPT),\
+ help = STRING_TOKEN(STR_RTD3_RTD3WAGPIO_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_SLOT_1), value = 1, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_SLOT_6), value = 6, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+#endif // RTD3_SUPPORT
+
+#define ACPI_ONEOF_PCIEXPNATIVE\
+ oneof varid = SETUP_DATA.PciExpNative,\
+ prompt = STRING_TOKEN(STR_ACPI_PCIE_NATIVE_PROMPT),\
+ help = STRING_TOKEN(STR_ACPI_PCIE_NATIVE_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_NATIVEASPMENABLE\
+ oneof varid = SETUP_DATA.NativeAspmEnable,\
+ prompt = STRING_TOKEN(STR_NATIVE_ASPM_PROMPT),\
+ help = STRING_TOKEN(STR_NATIVE_ASPM_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#if PTID_SUPPORT
+#define ACPI_ONEOF_PTIDSUPPORT\
+ checkbox varid = SETUP_DATA.PtidSupport,\
+ prompt = STRING_TOKEN(STR_PTID_PROMPT),\
+ help = STRING_TOKEN(STR_PTID_HELP),\
+ flags = 0 | RESET_REQUIRED | MANUFACTURING,\
+ key = 0,\
+ endcheckbox;
+
+#define ACPI_ONEOF_PECIACCESSMETHOD\
+ oneof varid = SETUP_DATA.PeciAccessMethod,\
+ prompt = STRING_TOKEN(STR_PECI_ACCESS_PROMPT),\
+ help = STRING_TOKEN(STR_PECI_ACCESS_HELP),\
+ option text = STRING_TOKEN(STR_PECI_ACCESS_IO), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_PECI_ACCESS_ACPI), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+#endif // PTID_SUPPORT
+
+#if IntelRMT_SUPPORT
+#define ACPI_ONEOF_IRMTSUPPORT\
+ oneof varid = SETUP_DATA.IRMTSupport,\
+ prompt = STRING_TOKEN(STR_IRMT_PROMPT),\
+ help = STRING_TOKEN(STR_IRMT_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_IRMTSTATE\
+ oneof varid = SETUP_DATA.IRMTState,\
+ prompt = STRING_TOKEN(STR_IRMT_STATE_PROMPT),\
+ help = STRING_TOKEN(STR_IRMT_STATE_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_IRMTHW\
+ oneof varid = SETUP_DATA.IRMTHWNotification,\
+ prompt = STRING_TOKEN(STR_IRMT_HW_PROMPT),\
+ help = STRING_TOKEN(STR_IRMT_HW_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#endif // IntelRMT_SUPPORT
+
+#if LOW_POWER_S0_IDLE_CAPABLE
+#define ACPI_ONEOF_POWERBUTTON10SECOVR\
+ oneof varid = SETUP_DATA.PowerButton10SecOVR,\
+ prompt = STRING_TOKEN(STR_POWERBUTTON10SECOVR_PROMPT),\
+ help = STRING_TOKEN(STR_POWERBUTTON10SECOVR_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_LOWPOWERIDLESATA\
+ oneof varid = SETUP_DATA.LowPowerIdleSATA,\
+ prompt = STRING_TOKEN(STR_LOWPOWERIDLESATA_PROMPT),\
+ help = STRING_TOKEN(STR_LOWPOWERIDLESATA_HELP),\
+ option text = STRING_TOKEN(STR_NOCONSTRAINT), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_SATAPORTS), value = 1, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_SATACONTROLLER), value = 2, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_ECNOTIFICATION\
+ oneof varid = SETUP_DATA.EcNotification,\
+ prompt = STRING_TOKEN(STR_ECNOTIFICATION_PROMPT),\
+ help = STRING_TOKEN(STR_ECNOTIFICATION_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED , key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_ECCSDEBUGLIGHT\
+ oneof varid = SETUP_DATA.EcCSDebugLight,\
+ prompt = STRING_TOKEN(STR_ECCSDEBUGLIGHT_PROMPT),\
+ help = STRING_TOKEN(STR_ECCSDEBUGLIGHT_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_SENSORSTANDBY\
+ oneof varid = SETUP_DATA.SensorStandby,\
+ prompt = STRING_TOKEN(STR_SENSORSTANDBY_PROMPT),\
+ help = STRING_TOKEN(STR_SENSORSTANDBY_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_CSPL1LIMIT\
+ oneof varid = SETUP_DATA.CSPL1Limit,\
+ prompt = STRING_TOKEN(STR_CSPL1LIMIT_PROMPT),\
+ help = STRING_TOKEN(STR_CSPL1LIMIT_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define ACPI_ONEOF_CSPL1VALUE\
+ numeric varid = SETUP_DATA.CSPL1Value,\
+ prompt = STRING_TOKEN (STR_CSPL1VALUE_PROMPT),\
+ help = STRING_TOKEN (STR_CSPL1VALUE_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 3000,\
+ maximum = 20000,\
+ step = 1,\
+ default = 4500,\
+ option text = STRING_TOKEN (STR_CSPL1VALUE_PROMPT), value = 4500, flags = MANUFACTURING; \
+ endnumeric;
+#endif // LOW_POWER_S0_IDLE_CAPABLE
+
+
+//=======================================================================//
+// CPPC //
+//=======================================================================//
+#if CPPC_SUPPORT
+#define CPPC_ONEOF_ENABLECPPC\
+ oneof varid = SETUP_DATA.EnableCppc,\
+ prompt = STRING_TOKEN(STR_ENABLE_CPPC_PROMPT),\
+ help = STRING_TOKEN(STR_ENABLE_CPPC_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define CPPC_ONEOF_CPPCSCI\
+ oneof varid = SETUP_DATA.EnableCppcPlatformSCI,\
+ prompt = STRING_TOKEN(STR_ENABLE_CPPC_SCI_PROMPT),\
+ help = STRING_TOKEN(STR_ENABLE_CPPC_SCI_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+#endif // CPPC_SUPPORT
+
+//=======================================================================//
+// DPTF //
+//=======================================================================//
+#if Dptf_SUPPORT
+#define DPTF_ONEOF_ENABLEDPTF\
+ oneof varid = SETUP_DATA.EnableDptf,\
+ prompt = STRING_TOKEN(STR_ENABLE_DPTF_PROMPT),\
+ help = STRING_TOKEN(STR_ENABLE_DPTF_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+// Processor Thermal Device
+#define DPTF_ONEOF_ENABLESA\
+ oneof varid = SETUP_DATA.EnableSaDevice,\
+ prompt = STRING_TOKEN(STR_DPTF_SA_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_SA_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_DPTF_ENABLE_SA_TD), value = 1, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_DPTF_ENABLE_CPU_TD), value = 2, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_ATTPOINT_SA\
+ oneof varid = SETUP_DATA.ActiveThermalTripPointSa,\
+ prompt = STRING_TOKEN(STR_DPTF_ATTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_ATTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_PTTPOINT_SA\
+ oneof varid = SETUP_DATA.PassiveThermalTripPointSa,\
+ prompt = STRING_TOKEN(STR_DPTF_PTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_PTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_CTTPOINT_SA\
+ oneof varid = SETUP_DATA.CriticalThermalTripPointSa,\
+ prompt = STRING_TOKEN(STR_DPTF_CTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_CTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_HTTPOINT_SA\
+ oneof varid = SETUP_DATA.HotThermalTripPointSa,\
+ prompt = STRING_TOKEN(STR_DPTF_HTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_HTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+// Pch Thermal Device
+#define DPTF_ONEOF_ENABLEPCH\
+ oneof varid = SETUP_DATA.EnablePchDevice,\
+ prompt = STRING_TOKEN(STR_DPTF_PCH_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_PCH_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_ATTPOINT_PCH\
+ oneof varid = SETUP_DATA.ActiveThermalTripPointPch,\
+ prompt = STRING_TOKEN(STR_DPTF_ATTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_ATTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_PTTPOINT_PCH\
+ oneof varid = SETUP_DATA.PassiveThermalTripPointPch,\
+ prompt = STRING_TOKEN(STR_DPTF_PTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_PTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_CTTPOINT_PCH\
+ oneof varid = SETUP_DATA.CriticalThermalTripPointPch,\
+ prompt = STRING_TOKEN(STR_DPTF_CTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_CTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_HTTPOINT_PCH\
+ oneof varid = SETUP_DATA.HotThermalTripPointPch,\
+ prompt = STRING_TOKEN(STR_DPTF_HTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_HTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+// Memory Thermal Device
+#define DPTF_ONEOF_ENABLEMEM\
+ oneof varid = SETUP_DATA.EnableMemDevice,\
+ prompt = STRING_TOKEN(STR_DPTF_MEM_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_MEM_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_ATTPOINT_MEM\
+ oneof varid = SETUP_DATA.ActiveThermalTripPointMem,\
+ prompt = STRING_TOKEN(STR_DPTF_ATTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_ATTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_PTTPOINT_MEM\
+ oneof varid = SETUP_DATA.PassiveThermalTripPointMem,\
+ prompt = STRING_TOKEN(STR_DPTF_PTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_PTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_CTTPOINT_MEM\
+ oneof varid = SETUP_DATA.CriticalThermalTripPointMem,\
+ prompt = STRING_TOKEN(STR_DPTF_CTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_CTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_HTTPOINT_MEM\
+ oneof varid = SETUP_DATA.HotThermalTripPointMem,\
+ prompt = STRING_TOKEN(STR_DPTF_HTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_HTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+// Ambient Thermal Device
+#define DPTF_ONEOF_ENABLEAMBIENT\
+ oneof varid = SETUP_DATA.EnableAmbientDevice,\
+ prompt = STRING_TOKEN(STR_DPTF_AMBIENT_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_AMBIENT_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_ATTPOINT_AMBIENT\
+ oneof varid = SETUP_DATA.ActiveThermalTripPointAmbient,\
+ prompt = STRING_TOKEN(STR_DPTF_ATTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_ATTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_PTTPOINT_AMBIENT\
+ oneof varid = SETUP_DATA.PassiveThermalTripPointAmbient,\
+ prompt = STRING_TOKEN(STR_DPTF_PTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_PTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_CTTPOINT_AMBIENT\
+ oneof varid = SETUP_DATA.CriticalThermalTripPointAmbient,\
+ prompt = STRING_TOKEN(STR_DPTF_CTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_CTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_HTTPOINT_AMBIENT\
+ oneof varid = SETUP_DATA.HotThermalTripPointAmbient,\
+ prompt = STRING_TOKEN(STR_DPTF_HTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_HTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+// Skin Thermal Device
+#define DPTF_ONEOF_ENABLESKIN\
+ oneof varid = SETUP_DATA.EnableSkinDevice,\
+ prompt = STRING_TOKEN(STR_DPTF_SKIN_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_SKIN_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_ATTPOINT_SKIN\
+ oneof varid = SETUP_DATA.ActiveThermalTripPointSkin,\
+ prompt = STRING_TOKEN(STR_DPTF_ATTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_ATTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_PTTPOINT_SKIN\
+ oneof varid = SETUP_DATA.PassiveThermalTripPointSkin,\
+ prompt = STRING_TOKEN(STR_DPTF_PTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_PTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_CTTPOINT_SKIN\
+ oneof varid = SETUP_DATA.CriticalThermalTripPointSkin,\
+ prompt = STRING_TOKEN(STR_DPTF_CTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_CTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_HTTPOINT_SKIN\
+ oneof varid = SETUP_DATA.HotThermalTripPointSkin,\
+ prompt = STRING_TOKEN(STR_DPTF_HTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_HTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+// Exhaust Thermal Device
+#define DPTF_ONEOF_ENABLEEXHAUST\
+ oneof varid = SETUP_DATA.EnableExhaustDevice,\
+ prompt = STRING_TOKEN(STR_DPTF_EXHAUST_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_EXHAUST_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_ATTPOINT_EXHAUST\
+ oneof varid = SETUP_DATA.ActiveThermalTripPointExhaust,\
+ prompt = STRING_TOKEN(STR_DPTF_ATTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_ATTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_PTTPOINT_EXHAUST\
+ oneof varid = SETUP_DATA.PassiveThermalTripPointExhaust,\
+ prompt = STRING_TOKEN(STR_DPTF_PTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_PTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_CTTPOINT_EXHAUST\
+ oneof varid = SETUP_DATA.CriticalThermalTripPointExhaust,\
+ prompt = STRING_TOKEN(STR_DPTF_CTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_CTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_HTTPOINT_EXHAUST\
+ oneof varid = SETUP_DATA.HotThermalTripPointExhaust,\
+ prompt = STRING_TOKEN(STR_DPTF_HTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_HTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+// VR Thermal Device
+#define DPTF_ONEOF_ENABLEVR\
+ oneof varid = SETUP_DATA.EnableVRDevice,\
+ prompt = STRING_TOKEN(STR_DPTF_VR_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_VR_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_ATTPOINT_VR\
+ oneof varid = SETUP_DATA.ActiveThermalTripPointVR,\
+ prompt = STRING_TOKEN(STR_DPTF_ATTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_ATTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_PTTPOINT_VR\
+ oneof varid = SETUP_DATA.PassiveThermalTripPointVR,\
+ prompt = STRING_TOKEN(STR_DPTF_PTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_PTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_CTTPOINT_VR\
+ oneof varid = SETUP_DATA.CriticalThermalTripPointVR,\
+ prompt = STRING_TOKEN(STR_DPTF_CTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_CTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_HTTPOINT_VR\
+ oneof varid = SETUP_DATA.HotThermalTripPointVR,\
+ prompt = STRING_TOKEN(STR_DPTF_HTTP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_HTTP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 127, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_15_C), value = 15, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_23_C), value = 23, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_31_C), value = 31, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_39_C), value = 39, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_47_C), value = 47, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_55_C), value = 55, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_63_C), value = 63, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_71_C), value = 71, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_79_C), value = 79, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_87_C), value = 87, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_95_C), value = 95, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN (STR_103_C), value = 103, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_111_C), value = 111, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN (STR_119_C), value = 119, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_PPCC_STEPSIZE\
+ oneof varid = SETUP_DATA.PpccStepSize,\
+ prompt = STRING_TOKEN(STR_DPTF_PPCC_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_PPCC_HELP),\
+ option text = STRING_TOKEN(STR_05_W), value = 500, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_10_W), value = 1000, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_15_W), value = 1500, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_20_W), value = 2000, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_LPO_ENABLE\
+ oneof varid = SETUP_DATA.LPOEnable,\
+ prompt = STRING_TOKEN(STR_DPTF_LPO_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_LPO_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_LPOPSTATE\
+ numeric varid = SETUP_DATA.LPOStartPState,\
+ prompt = STRING_TOKEN (STR_DPTF_LPOPSTATE_SEL),\
+ help = STRING_TOKEN (STR_DPTF_LPOPSTATE_SEL_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 16,\
+ step = 1,\
+ default = 16,\
+ option text = STRING_TOKEN (STR_DPTF_LPOPSTATE_SEL), value = 16, flags = MANUFACTURING;\
+ endnumeric;
+
+#define DPTF_ONEOF_LPOSIZE\
+ numeric varid = SETUP_DATA.LPOStepSize,\
+ prompt = STRING_TOKEN (STR_DPTF_LPOSIZE_SEL),\
+ help = STRING_TOKEN (STR_DPTF_LPOSIZE_SEL_HELP),\
+ flags = RESET_REQUIRED,\
+ minimum = 0,\
+ maximum = 100,\
+ step = 1,\
+ default = 50,\
+ option text = STRING_TOKEN (STR_DPTF_LPOSIZE_SEL), value = 1, flags = MANUFACTURING;\
+ endnumeric;
+
+#define DPTF_ONEOF_LPO_POW\
+ oneof varid = SETUP_DATA.LPOPowerControl,\
+ prompt = STRING_TOKEN(STR_DPTF_LPOPOW_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_LPOPOW_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_SMT_OFFLINING), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_CORE_OFFLINING), value = 2, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_LPO_PER\
+ oneof varid = SETUP_DATA.LPOPerformanceControl,\
+ prompt = STRING_TOKEN(STR_DPTF_LPOPER_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_LPOPER_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_SMT_OFFLINING), value = 1, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_CORE_OFFLINING), value = 2, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_CTDP_ENABLE\
+ oneof varid = SETUP_DATA.EnableCTDP,\
+ prompt = STRING_TOKEN(STR_DPTF_CTDP_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_CTDP_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_LPM_ENABLE\
+ oneof varid = SETUP_DATA.EnableLPM,\
+ prompt = STRING_TOKEN(STR_DPTF_LPM_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_LPM_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_LPM_SETTING\
+ oneof varid = SETUP_DATA.LPMSetting,\
+ prompt = STRING_TOKEN(STR_DPTF_LPM_SETTING_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_LPM_SETTING_HELP),\
+ option text = STRING_TOKEN(STR_LPM_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_LPM_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_LPM_APPLI_SPEC), value = 2, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_LPM_USE_OS), value = 3, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_FAN1\
+ oneof varid = SETUP_DATA.Fan1Device,\
+ prompt = STRING_TOKEN(STR_DPTF_FAN1_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_FAN1_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_FAN2\
+ oneof varid = SETUP_DATA.Fan2Device,\
+ prompt = STRING_TOKEN(STR_DPTF_FAN2_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_FAN2_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_DISPLAY_PARTICIPANT\
+ oneof varid = SETUP_DATA.DisplayParticipant,\
+ prompt = STRING_TOKEN(STR_DPTF_DISPLAY_PARTICIPANT_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_DISPLAY_PARTICIPANT_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_POWER_PARTICIPANT\
+ oneof varid = SETUP_DATA.PowerParticipant,\
+ prompt = STRING_TOKEN(STR_DPTF_POWER_PARTICIPANT_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_POWER_PARTICIPANT_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_POWER_POLICY\
+ oneof varid = SETUP_DATA.PowerPolicy,\
+ prompt = STRING_TOKEN(STR_DPTF_POWER_POLICY_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_POWER_POLICY_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_ACTIVE_POLICY\
+ oneof varid = SETUP_DATA.ActivePolicy,\
+ prompt = STRING_TOKEN(STR_DPTF_ACTIVE_POLICY_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_ACTIVE_POLICY_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_PASSIVE_POLICY\
+ oneof varid = SETUP_DATA.PassivePolicy,\
+ prompt = STRING_TOKEN(STR_DPTF_PASSIVE_POLICY_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_PASSIVE_POLICY_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_CRITICAL_POLICY\
+ oneof varid = SETUP_DATA.CriticalPolicy,\
+ prompt = STRING_TOKEN(STR_DPTF_CRITICAL_POLICY_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_CRITICAL_POLICY_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_COOLING_POLICY\
+ oneof varid = SETUP_DATA.CoolingModePolicy,\
+ prompt = STRING_TOKEN(STR_DPTF_COOLING_POLICY_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_COOLING_POLICY_HELP),\
+ option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#define DPTF_ONEOF_TRT_REVISION\
+ oneof varid = SETUP_DATA.TrtRevision,\
+ prompt = STRING_TOKEN(STR_DPTF_TRT_PROMPT),\
+ help = STRING_TOKEN(STR_DPTF_TRT_HELP),\
+ option text = STRING_TOKEN(STR_TRT_TRADITIONAL), value = 0, flags = RESET_REQUIRED, key = 0;\
+ option text = STRING_TOKEN(STR_TRT_PRIORITY), value = 1, flags = RESET_REQUIRED | DEFAULT | MANUFACTURING, key = 0;\
+ endoneof;
+
+#endif // Dptf_SUPPORT
+
+#endif // CONTROL_DEFINITION
+//---------------------------------------------------------------------------
+
+//---------------------------------------------------------------------------
+#ifdef CONTROLS_WITH_DEFAULTS
+#if ACPIDEBUG_SUPPORT
+ ACPI_ONEOF_ACPIDEBUGSUPPORT
+#endif // ACPIDEBUG_SUPPORT
+#if RTD3_SUPPORT
+ ACPI_ONEOF_RTD3SUPPORT
+ ACPI_ONEOF_VRSTAGGERINGDELAY
+ ACPI_ONEOF_VRRAMPUPDELAY
+ ACPI_ONEOF_RTD3P0DL
+ ACPI_ONEOF_RTD3P3DL
+ ACPI_ONEOF_RTD3AUDIO
+ ACPI_ONEOF_RTD3ADSP
+ ACPI_ONEOF_RTD3I2C0
+ ACPI_ONEOF_RTD3SENSORHUB
+ ACPI_ONEOF_RTD3I2C1
+ ACPI_ONEOF_RTD3I2C1PS0
+ ACPI_ONEOF_RTD3TOUCHPANEL
+ ACPI_ONEOF_PEPGFX
+ ACPI_ONEOF_PEPSATA
+ ACPI_ONEOF_PCAPPING
+ ACPI_ONEOF_XHCIP0
+ ACPI_ONEOF_XHCIP1
+ ACPI_ONEOF_RIC0
+ ACPI_ONEOF_RTD3ZPODD
+ ACPI_ONEOF_RTD3USBCamera
+ ACPI_ONEOF_RTD3MiniSataPort3
+ ACPI_ONEOF_RTD3WAGPIO
+#endif // RTD3_SUPPORT
+ ACPI_ONEOF_PCIEXPNATIVE
+ ACPI_ONEOF_NATIVEASPMENABLE
+#if PTID_SUPPORT
+ ACPI_ONEOF_PTIDSUPPORT
+ ACPI_ONEOF_PECIACCESSMETHOD
+#endif // PTID_SUPPORT
+#if IntelRMT_SUPPORT
+ ACPI_ONEOF_IRMTSUPPORT
+ ACPI_ONEOF_IRMTSTATE
+ ACPI_ONEOF_IRMTHW
+#endif // IntelRMT_SUPPORT
+#if LOW_POWER_S0_IDLE_CAPABLE
+ ACPI_ONEOF_POWERBUTTON10SECOVR
+ ACPI_ONEOF_LOWPOWERIDLESATA
+ ACPI_ONEOF_ECNOTIFICATION
+ ACPI_ONEOF_ECCSDEBUGLIGHT
+ ACPI_ONEOF_SENSORSTANDBY
+ ACPI_ONEOF_CSPL1LIMIT
+ ACPI_ONEOF_CSPL1VALUE
+#endif // LOW_POWER_S0_IDLE_CAPABLE
+#if CPPC_SUPPORT
+ CPPC_ONEOF_ENABLECPPC
+ CPPC_ONEOF_CPPCSCI
+#endif // CPPC_SUPPORT
+#if Dptf_SUPPORT
+ DPTF_ONEOF_ENABLEDPTF
+ DPTF_ONEOF_ENABLESA
+ DPTF_ONEOF_ATTPOINT_SA
+ DPTF_ONEOF_PTTPOINT_SA
+ DPTF_ONEOF_CTTPOINT_SA
+ DPTF_ONEOF_HTTPOINT_SA
+ DPTF_ONEOF_ENABLEPCH
+ DPTF_ONEOF_ATTPOINT_PCH
+ DPTF_ONEOF_PTTPOINT_PCH
+ DPTF_ONEOF_CTTPOINT_PCH
+ DPTF_ONEOF_HTTPOINT_PCH
+ DPTF_ONEOF_ENABLEMEM
+ DPTF_ONEOF_ATTPOINT_MEM
+ DPTF_ONEOF_PTTPOINT_MEM
+ DPTF_ONEOF_CTTPOINT_MEM
+ DPTF_ONEOF_HTTPOINT_MEM
+ DPTF_ONEOF_ENABLEAMBIENT
+ DPTF_ONEOF_ATTPOINT_AMBIENT
+ DPTF_ONEOF_PTTPOINT_AMBIENT
+ DPTF_ONEOF_CTTPOINT_AMBIENT
+ DPTF_ONEOF_HTTPOINT_AMBIENT
+ DPTF_ONEOF_ENABLESKIN
+ DPTF_ONEOF_ATTPOINT_SKIN
+ DPTF_ONEOF_PTTPOINT_SKIN
+ DPTF_ONEOF_CTTPOINT_SKIN
+ DPTF_ONEOF_HTTPOINT_SKIN
+ DPTF_ONEOF_ENABLEEXHAUST
+ DPTF_ONEOF_ATTPOINT_EXHAUST
+ DPTF_ONEOF_PTTPOINT_EXHAUST
+ DPTF_ONEOF_CTTPOINT_EXHAUST
+ DPTF_ONEOF_HTTPOINT_EXHAUST
+ DPTF_ONEOF_ENABLEVR
+ DPTF_ONEOF_ATTPOINT_VR
+ DPTF_ONEOF_PTTPOINT_VR
+ DPTF_ONEOF_CTTPOINT_VR
+ DPTF_ONEOF_HTTPOINT_VR
+ DPTF_ONEOF_PPCC_STEPSIZE
+ DPTF_ONEOF_LPO_ENABLE
+ DPTF_ONEOF_LPOPSTATE
+ DPTF_ONEOF_LPOSIZE
+ DPTF_ONEOF_LPO_POW
+ DPTF_ONEOF_LPO_PER
+ DPTF_ONEOF_CTDP_ENABLE
+ DPTF_ONEOF_LPM_ENABLE
+ DPTF_ONEOF_LPM_SETTING
+ DPTF_ONEOF_FAN1
+ DPTF_ONEOF_FAN2
+ DPTF_ONEOF_DISPLAY_PARTICIPANT
+ DPTF_ONEOF_POWER_PARTICIPANT
+ DPTF_ONEOF_POWER_POLICY
+ DPTF_ONEOF_ACTIVE_POLICY
+ DPTF_ONEOF_PASSIVE_POLICY
+ DPTF_ONEOF_CRITICAL_POLICY
+ DPTF_ONEOF_COOLING_POLICY
+ DPTF_ONEOF_TRT_REVISION
+#endif // Dptf_SUPPORT
+
+#endif // CONTROLS_WITH_DEFAULTS
+//---------------------------------------------------------------------------
+// ADVANCED - AcpiPlatform Configuration Form
+//---------------------------------------------------------------------------
+#ifdef ADVANCED_FORM_SET
+
+ #ifndef SUPPRESS_GRAYOUT_ENDIF //old Core
+ #define SUPPRESS_GRAYOUT_ENDIF endif;
+ #endif
+
+ #ifdef FORM_SET_ITEM
+ // Define controls to be added to the main page of the formset
+ #endif
+
+ #ifdef FORM_SET_GOTO
+ // Define goto commands for the forms defined in this file
+ goto ACPIPLATFORM_FORM_ID,
+ prompt = STRING_TOKEN(STR_ACPIPLATFORM_FORM),
+ help = STRING_TOKEN(STR_ACPIPLATFORM_FORM_HELP);
+ #endif
+
+ #ifdef FORM_SET_FORM
+ // Define forms
+ form formid = AUTO_ID(ACPIPLATFORM_FORM_ID),
+ title = STRING_TOKEN(STR_ACPIPLATFORM_FORM);
+
+ SUBTITLE(STRING_TOKEN(STR_ACPIPLATFORM_FORM))
+ SEPARATOR
+
+#if SB_SETUP_SUPPORT
+ suppressif ideqval SETUP_DATA.PcieRootPortEn[0] == 0;
+#endif
+ ACPI_ONEOF_PCIEXPNATIVE
+#if SB_SETUP_SUPPORT
+ endif;
+#endif
+
+ suppressif ideqval SETUP_DATA.PciExpNative == 0;
+ ACPI_ONEOF_NATIVEASPMENABLE
+ endif;
+
+ SEPARATOR
+
+#if ACPIDEBUG_SUPPORT
+ ACPI_ONEOF_ACPIDEBUGSUPPORT
+#endif
+
+#if RTD3_SUPPORT
+ suppressif ideqval SETUP_PLATFORM_DATA.PlatformSupportRtD3 == 0;
+ ACPI_ONEOF_RTD3SUPPORT
+ suppressif ideqval SETUP_DATA.Rtd3Support == 0;
+ ACPI_ONEOF_VRSTAGGERINGDELAY
+ ACPI_ONEOF_VRRAMPUPDELAY
+ ACPI_ONEOF_RTD3P0DL
+ ACPI_ONEOF_RTD3P3DL
+// ACPI_ONEOF_RTD3AUDIO
+ ACPI_ONEOF_RTD3ADSP
+ ACPI_ONEOF_RTD3I2C0
+ ACPI_ONEOF_RTD3SENSORHUB
+ ACPI_ONEOF_RTD3I2C1
+ ACPI_ONEOF_RTD3I2C1PS0
+ ACPI_ONEOF_RTD3TOUCHPANEL
+ ACPI_ONEOF_PEPGFX
+ ACPI_ONEOF_PEPSATA
+ ACPI_ONEOF_PCAPPING
+ ACPI_ONEOF_XHCIP0
+ ACPI_ONEOF_XHCIP1
+ ACPI_ONEOF_RIC0
+ ACPI_ONEOF_RTD3ZPODD
+ ACPI_ONEOF_RTD3USBCamera
+ ACPI_ONEOF_RTD3MiniSataPort3
+ ACPI_ONEOF_RTD3WAGPIO
+ endif;
+ endif;
+#endif
+
+#if PTID_SUPPORT
+ ACPI_ONEOF_PTIDSUPPORT
+ ACPI_ONEOF_PECIACCESSMETHOD
+#endif
+
+#if IntelRMT_SUPPORT
+ ACPI_ONEOF_IRMTSUPPORT
+ suppressif ideqval SETUP_DATA.IRMTSupport == 0;
+ ACPI_ONEOF_IRMTSTATE
+ ACPI_ONEOF_IRMTHW
+ endif;
+#endif
+
+#if LOW_POWER_S0_IDLE_CAPABLE
+ suppressif ideqval SETUP_PLATFORM_DATA.PlatformSupportRtD3 == 0;
+ suppressif ideqval SETUP_DATA.AcpiLowPowerS0Idle == 0;
+ ACPI_ONEOF_POWERBUTTON10SECOVR
+ ACPI_ONEOF_LOWPOWERIDLESATA
+ ACPI_ONEOF_ECNOTIFICATION
+ ACPI_ONEOF_ECCSDEBUGLIGHT
+ ACPI_ONEOF_SENSORSTANDBY
+ ACPI_ONEOF_CSPL1LIMIT
+ suppressif ideqval SETUP_DATA.CSPL1Limit == 0;
+ ACPI_ONEOF_CSPL1VALUE
+ endif;
+ endif;
+ endif;
+#endif
+
+#if CPPC_SUPPORT
+ suppressif ideqval SETUP_PLATFORM_DATA.PlatformSupportCppc == 0;
+ CPPC_ONEOF_ENABLECPPC
+ suppressif ideqval SETUP_DATA.EnableCppc == 0;
+ CPPC_ONEOF_CPPCSCI
+ endif;
+ endif;
+#endif
+
+ SEPARATOR
+
+#if Dptf_SUPPORT
+ goto DPTF_FORM_ID,
+ prompt = STRING_TOKEN (STR_DPTF_CONFIG_FORM_TITLE),
+ help = STRING_TOKEN (STR_DPTF_CONFIG_FORM_HELP);
+#endif
+
+ endform; // Platform_FORM_ID
+
+ #endif // FORM_SET_FORM
+
+#if Dptf_SUPPORT
+//----------------------------------------------------------------------------
+// PLATFORM - DPTF Form
+//----------------------------------------------------------------------------
+ #ifdef FORM_SET_FORM
+
+ #ifndef DPTF_FORM_SETUP
+ #define DPTF_FORM_SETUP
+
+ form formid = AUTO_ID(DPTF_FORM_ID),
+ title = STRING_TOKEN (STR_DPTF_CONFIG_FORM_TITLE);
+
+ SUBTITLE(STRING_TOKEN(STR_DPTF_CONFIG_FORM_TITLE))
+ SEPARATOR
+
+ DPTF_ONEOF_ENABLEDPTF
+
+ suppressif ideqval SETUP_DATA.EnableDptf == 0;
+ DPTF_ONEOF_ENABLESA
+ suppressif ideqval SETUP_DATA.EnableSaDevice == 0;
+ DPTF_ONEOF_ATTPOINT_SA
+ DPTF_ONEOF_PTTPOINT_SA
+ DPTF_ONEOF_CTTPOINT_SA
+ DPTF_ONEOF_HTTPOINT_SA
+ DPTF_ONEOF_PPCC_STEPSIZE
+ DPTF_ONEOF_LPO_ENABLE
+ DPTF_ONEOF_LPOPSTATE
+ DPTF_ONEOF_LPOSIZE
+ DPTF_ONEOF_LPO_POW
+ DPTF_ONEOF_LPO_PER
+
+ suppressif ideqval SETUP_CPU_FEATURES.cTDPAvailable == 0;
+ DPTF_ONEOF_CTDP_ENABLE
+ endif;
+
+ suppressif ideqval SETUP_DATA.AcpiLowPowerS0Idle == 0;
+ DPTF_ONEOF_LPM_ENABLE
+ suppressif ideqval SETUP_DATA.EnableLPM == 0;
+ DPTF_ONEOF_LPM_SETTING
+ endif;
+ endif;
+
+ endif;
+ DPTF_ONEOF_ENABLEPCH
+ suppressif ideqval SETUP_DATA.EnablePchDevice == 0;
+ DPTF_ONEOF_ATTPOINT_PCH
+ DPTF_ONEOF_PTTPOINT_PCH
+ DPTF_ONEOF_CTTPOINT_PCH
+ DPTF_ONEOF_HTTPOINT_PCH
+ endif;
+ DPTF_ONEOF_ENABLEMEM
+ suppressif ideqval SETUP_DATA.EnableMemDevice == 0;
+ DPTF_ONEOF_ATTPOINT_MEM
+ DPTF_ONEOF_PTTPOINT_MEM
+ DPTF_ONEOF_CTTPOINT_MEM
+ DPTF_ONEOF_HTTPOINT_MEM
+ endif;
+ DPTF_ONEOF_FAN1
+ DPTF_ONEOF_FAN2
+ DPTF_ONEOF_ENABLEAMBIENT
+ suppressif ideqval SETUP_DATA.EnableAmbientDevice == 0;
+ DPTF_ONEOF_ATTPOINT_AMBIENT
+ DPTF_ONEOF_PTTPOINT_AMBIENT
+ DPTF_ONEOF_CTTPOINT_AMBIENT
+ DPTF_ONEOF_HTTPOINT_AMBIENT
+ endif;
+ DPTF_ONEOF_ENABLESKIN
+ suppressif ideqval SETUP_DATA.EnableSkinDevice == 0;
+ DPTF_ONEOF_ATTPOINT_SKIN
+ DPTF_ONEOF_PTTPOINT_SKIN
+ DPTF_ONEOF_CTTPOINT_SKIN
+ DPTF_ONEOF_HTTPOINT_SKIN
+ endif;
+ DPTF_ONEOF_ENABLEEXHAUST
+ suppressif ideqval SETUP_DATA.EnableExhaustDevice == 0;
+ DPTF_ONEOF_ATTPOINT_EXHAUST
+ DPTF_ONEOF_PTTPOINT_EXHAUST
+ DPTF_ONEOF_CTTPOINT_EXHAUST
+ DPTF_ONEOF_HTTPOINT_EXHAUST
+ endif;
+ DPTF_ONEOF_ENABLEVR
+ suppressif ideqval SETUP_DATA.EnableVRDevice == 0;
+ DPTF_ONEOF_ATTPOINT_VR
+ DPTF_ONEOF_PTTPOINT_VR
+ DPTF_ONEOF_CTTPOINT_VR
+ DPTF_ONEOF_HTTPOINT_VR
+ endif;
+ DPTF_ONEOF_DISPLAY_PARTICIPANT
+ DPTF_ONEOF_POWER_PARTICIPANT
+ suppressif ideqval SETUP_DATA.PowerParticipant == 0;
+ DPTF_ONEOF_POWER_POLICY
+ endif;
+
+ SEPARATOR
+
+ goto DPTF_POLICY_FORM_ID,
+ prompt = STRING_TOKEN (STR_DPTF_POLICY_FORM_TITLE),
+ help = STRING_TOKEN (STR_DPTF_POLICY_FORM_HELP);
+
+ endif; // suppressif ideqval SETUP_DATA.EnableDptf == 0;
+
+ endform; // DPTF
+ #endif // DPTF_FORM_SETUP
+ #endif // FORM_SET_FORM
+//----------------------------------------------------------------------------
+// PLATFORM - DPTF Policy Form
+//----------------------------------------------------------------------------
+ #ifdef FORM_SET_FORM
+
+ #ifndef DPTF_POLICY_FORM_SETUP
+ #define DPTF_POLICY_FORM_SETUP
+
+ form formid = AUTO_ID(DPTF_POLICY_FORM_ID),
+ title = STRING_TOKEN (STR_DPTF_POLICY_FORM_TITLE);
+
+ SUBTITLE(STRING_TOKEN(STR_DPTF_POLICY_FORM_TITLE))
+ SEPARATOR
+
+ DPTF_ONEOF_ACTIVE_POLICY
+ DPTF_ONEOF_PASSIVE_POLICY
+ suppressif ideqval SETUP_DATA.PassivePolicy == 0;
+ DPTF_ONEOF_TRT_REVISION
+ endif;
+ DPTF_ONEOF_CRITICAL_POLICY
+ DPTF_ONEOF_COOLING_POLICY
+
+ endform; // DPTF_POLICY
+ #endif // DPTF_POLICY_FORM_SETUP
+ #endif // FORM_SET_FORM
+#endif // Dptf_SUPPORT
+
+#endif // ADVANCED_FORM_SET
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2013, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/AcpiPlatform.sdl b/Board/EM/Platform/AcpiPlatform.sdl
new file mode 100644
index 0000000..ec473b6
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatform.sdl
@@ -0,0 +1,483 @@
+TOKEN
+ Name = "ACPIPLATFORM_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable PLATFORM support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+End
+
+TOKEN
+ Name = "S3_Power_Reduction_SUPPORT"
+ Value = "0"
+ Help = "Main switch to enable PLATFORM support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "=== Platform Flavor Definition ======"
+ Help = "Define Platform Flavor Tokens: Mobile, Desktop etc"
+ TokenType = Expression
+End
+
+TOKEN
+ Name = "Desktop_Platform"
+ Value = "0"
+ Help = "This is a tag for MB/DT platform decision. DON NOT CHANGE IT!"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Lock = Yes
+End
+
+TOKEN
+ Name = "Mobile_Platform"
+ Value = "1"
+ Help = "This is a tag for MB/DT platform decision. DON NOT CHANGE IT!"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Lock = Yes
+End
+
+TOKEN
+ Name = "UpServer_Platform"
+ Value = "2"
+ Help = "Platform Flavor UP Server"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Lock = Yes
+End
+
+TOKEN
+ Name = "FlavorMobile"
+ Value = "1"
+ Help = "Platform Flavor Mobile"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FMBL"
+ Value = "$(FlavorMobile)"
+ Help = "Platform Flavor - Mobile flavor for ASL code."
+ TokenType = Integer
+ TargetASL = Yes
+End
+
+TOKEN
+ Name = "FlavorDesktop"
+ Value = "2"
+ Help = "Platform Flavor Desktop"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FDTP"
+ Value = "$(FlavorDesktop)"
+ Help = "Platform Flavor - Desktop flavor for ASL code."
+ TokenType = Integer
+ TargetASL = Yes
+End
+
+TOKEN
+ Name = "FlavorUpServer"
+ Value = "3"
+ Help = "Platform Flavor UP Server"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FUPS"
+ Value = "$(FlavorUpServer)"
+ Help = "Platform Flavor - UP Server flavor for ASL code."
+ TokenType = Integer
+ TargetASL = Yes
+End
+
+TOKEN
+ Name = "FlavorWorkStation"
+ Value = "4"
+ Help = "Platform Flavor UP Server"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FUWS"
+ Value = "$(FlavorWorkStation)"
+ Help = "Platform Flavor - WorkStation flavor for ASL code."
+ TokenType = Integer
+ TargetASL = Yes
+End
+
+TOKEN
+ Name = "FlavorPlatformMax"
+ Value = "5"
+ Help = "Platform Flavor Max: This is the last entry for Platform Flavor!"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "=== Board ID Definition ======"
+ Help = "Define Board ID Tokens: Shark Bay etc."
+ TokenType = Expression
+End
+
+TOKEN
+ Name = "BoardIdGraysReef"
+ Value = "0x01"
+ Help = "Haswell - Grays Reef"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BGR"
+ Value = "$(BoardIdGraysReef)"
+ Help = "Haswell - Grays Reef Board ID for ASL codee."
+ TokenType = Integer
+ TargetASL = Yes
+End
+
+TOKEN
+ Name = "BoardIdFlatheadRock"
+ Value = "0x02"
+ Help = "Haswell - Flathead Rock"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BFR"
+ Value = "$(BoardIdFlatheadRock)"
+ Help = "Haswell - Flathead Rock Board ID for ASL codee."
+ TokenType = Integer
+ TargetASL = Yes
+End
+
+TOKEN
+ Name = "BoardIdBaskingRidge"
+ Value = "0x03"
+ Help = "Haswell - Basking Ridge"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BBR"
+ Value = "$(BoardIdBaskingRidge)"
+ Help = "Haswell - Basking Ridge Board ID for ASL codee."
+ TokenType = Integer
+ TargetASL = Yes
+End
+
+TOKEN
+ Name = "BoardIdWalnutCanyon"
+ Value = "0x04"
+ Help = "Haswell - Walnut Canyon"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BWC"
+ Value = "$(BoardIdWalnutCanyon)"
+ Help = "Haswell - Walnut Canyon Board ID for ASL codee."
+ TokenType = Integer
+ TargetASL = Yes
+End
+
+TOKEN
+ Name = "BoardIdhiteTipMountain1"
+ Value = "0x20"
+ Help = "Haswell - WhiteTip Mountain1"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BWT1"
+ Value = "$(BoardIdhiteTipMountain1)"
+ Help = "Haswell - WhiteTip Mountain1 Board ID for ASL code."
+ TokenType = Integer
+ TargetASL = Yes
+ Range = "16-bit IO register"
+End
+
+TOKEN
+ Name = "BoardIdSawtoothPeak"
+ Value = "0x24"
+ Help = "Haswell - Sawtooth Peak"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BSPC"
+ Value = "$(BoardIdSawtoothPeak)"
+ Help = "Haswell - Sawtooth Peak Board ID for ASL code."
+ TokenType = Integer
+ TargetASL = Yes
+ Range = "16-bit IO register"
+End
+
+TOKEN
+ Name = "BoardIdFlatheadCreek"
+ Value = "0x100"
+ Help = "Haswell - Flathead Creek"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BFHC"
+ Value = "$(BoardIdFlatheadCreek)"
+ Help = "Haswell - Flathead Creek Board ID for ASL code."
+ TokenType = Integer
+ TargetASL = Yes
+ Range = "16-bit IO register"
+End
+
+TOKEN
+ Name = " "
+ TokenType = Integer
+End
+
+TOKEN
+ Name = "DeviceID1"
+ Value = "0x100"
+ Help = "Value for CRT Display"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DeviceID2"
+ Value = "0x400"
+ Help = "Value for Internal/Integrated Digital Flat Panel"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DeviceID3"
+ Value = "0x300"
+ Help = "Value for Digital Display 1"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DeviceID4"
+ Value = "0x301"
+ Help = "Value for Digital Display 2"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DeviceID5"
+ Value = "0x302"
+ Help = "Value for Digital Display 3"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DeviceID6"
+ Value = "0x303"
+ Help = "Value for Digital Display 4"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DeviceID7"
+ Value = "0x304"
+ Help = "Value for Digital Display 5"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "DeviceID8"
+ Value = "0x305"
+ Help = "Value for Digital Display 6"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "ValidDeviceIDs"
+ Value = "0x08"
+ Help = "Number of Valid Video Device Ids"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+PATH
+ Name = "AcpiPlatform_DIR"
+End
+
+MODULE
+ Help = "Includes AcpiPlatform.mak to Project"
+ File = "AcpiPlatform.mak"
+End
+
+TOKEN
+ Name = "ACPIPLATFORM_ASL_COMPILER"
+ Value = "$(AcpiPlatform_DIR)\iasl.exe"
+ Help = "ASL Optimizing Compiler version 20120711-32 [Jul 11 2012]"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "ACPI_ASL_COMPILER"
+ Value = "$(AcpiPlatform_DIR)\iasl.exe"
+ Help = "ASL Optimizing Compiler version 20120711-32 [Jul 11 2012]"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "GENACPI"
+ Value = "$(AcpiPlatform_DIR)\GenAcpiTable"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\AcpiPlatformPei.ffs"
+ Parent = "$(BUILD_DIR)\SBPEI.ffs"
+ InvokeOrder = AfterParent
+ Token = "S3_Power_Reduction_SUPPORT" "=" "1"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\AcpiPlatform.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\AcpiPlatformSmi.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+ Token = "S3_Power_Reduction_SUPPORT" "=" "1"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\AcpiPlatform.sdb"
+ Parent = "SETUP_SDBS"
+ Priority = 40
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(AcpiPlatform_DIR)\AcpiPlatform.sd"
+ Parent = "SETUP_DEFINITIONS"
+ Priority = 40
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "AcpiPlatformPei_OBJECTS"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "AcpiPlatform_OBJECTS"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "SignalExitPmAuthProtocolEvent,"
+ Parent = "SignalAllDriversConnectedEvent,"
+ InvokeOrder = BeforeParent
+End
+
+ELINK
+ Name = "SignalExitPmAuthProtocolEvent,"
+ Parent = "BeforeConnectFastBootDeviceHook"
+ Token = "FAST_BOOT_SUPPORT" "=" "1"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "AcpiPlatformSmi_OBJECTS"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\$(AcpiPlatform_DIR)\AcpiPlatformPei.obj"
+ Parent = "AcpiPlatformPei_OBJECTS"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\$(AcpiPlatform_DIR)\AcpiPlatform.obj"
+ Parent = "AcpiPlatform_OBJECTS"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\$(NB_BOARD_DIR)\GetSetupData.obj"
+ Parent = "AcpiPlatform_OBJECTS"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\$(SB_BOARD_DIR)\GetSetupData.obj"
+ Parent = "AcpiPlatform_OBJECTS"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\$(AcpiPlatform_DIR)\AcpiPlatformSmi.obj"
+ Parent = "AcpiPlatformSmi_OBJECTS"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "ACPI_PLATFORM_INCLUDES"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "/I $(AcpiPlatform_DIR)"
+ Parent = "ACPI_PLATFORM_INCLUDES"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "/I $(AcpiPlatform_DIR)\Library"
+ Parent = "ACPI_PLATFORM_INCLUDES"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "/FI$(AcpiPlatform_DIR)\AcpiIntelRC.h"
+ Parent = "ASLPREPROCESS_FLAG"
+ InvokeOrder = AfterParent
+End \ No newline at end of file
diff --git a/Board/EM/Platform/AcpiPlatform.uni b/Board/EM/Platform/AcpiPlatform.uni
new file mode 100644
index 0000000..5222520
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatform.uni
Binary files differ
diff --git a/Board/EM/Platform/AcpiPlatformCspLib.c b/Board/EM/Platform/AcpiPlatformCspLib.c
new file mode 100644
index 0000000..f31aa87
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatformCspLib.c
@@ -0,0 +1,150 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatformCspLib.c 1 2/09/12 12:30a Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 2/09/12 12:30a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatformCspLib.c $
+//
+// 1 2/09/12 12:30a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: AcpiPlatformCspLib.c
+//
+// Description: This file will be build in CSP LIB
+//
+//----------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+//----------------------------------------------------------------------------
+// Include(s)
+//----------------------------------------------------------------------------
+
+#include <Token.h>
+#include <AmiDxeLib.h>
+#include <AmiCspLib.h>
+
+// Produced Protocols
+#if FAST_BOOT_SUPPORT
+#include <Protocol/FastBootProtocol.h>
+#endif
+
+// Consumed Protocols
+
+//----------------------------------------------------------------------------
+// Constant, Macro and Type Definition(s)
+//----------------------------------------------------------------------------
+// Constant Definition(s)
+
+
+// Macro Definition(s)
+
+#define EXIT_PM_AUTH_PROTOCOL_GUID \
+ { \
+ 0xd088a413, 0xa70, 0x4217, 0xba, 0x55, 0x9a, 0x3c, 0xb6, 0x5c, 0x41, 0xb3 \
+ }
+// Type Definition(s)
+
+// Function Prototype(s)
+
+//----------------------------------------------------------------------------
+// Variable and External Declaration(s)
+//----------------------------------------------------------------------------
+// Variable Declaration(s)
+
+
+// GUID Definition(s)
+EFI_GUID gExitPmAuthProtocolGuid = EXIT_PM_AUTH_PROTOCOL_GUID;
+
+//----------------------------------------------------------------------------
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: AcpiPlatformSignalProtocolEvent
+//
+// Description: Internal function that installs/uninstall protocol
+// with a specified GUID and NULL interface.
+// Such protocols can be used as event signaling mechanism.
+//
+// Input: ProtocolGuid Pointer to the protocol GUID
+//
+// Output: None
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID AcpiPlatformSignalProtocolEvent(IN EFI_GUID *ProtocolGuid){
+ EFI_HANDLE Handle = NULL;
+ pBS->InstallProtocolInterface (
+ &Handle, ProtocolGuid, EFI_NATIVE_INTERFACE, NULL
+ );
+ pBS->UninstallProtocolInterface (
+ Handle, ProtocolGuid, NULL
+ );
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: SignalExitPmAuthProtocolEvent
+//
+// Description: The elink will signal gExitPmAuthProtocolGuid Event.
+//
+// Parameters: VOID
+//
+//
+// Returns: None
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+
+VOID SignalExitPmAuthProtocolEvent(VOID){
+#if FAST_BOOT_SUPPORT
+ EFI_STATUS Status;
+ AMI_FAST_BOOT_PROTOCOL *FastBootProtocol = NULL;
+
+ Status = pBS->LocateProtocol(&AmiFastBootProtocolGuid, NULL, &FastBootProtocol);
+
+ if (EFI_ERROR(Status)) {
+ // Signaling gExitPmAuthProtocolGuid Event before AmiFastBootProtocolGuid is
+ // installed to avoid this event signaled twice.
+ AcpiPlatformSignalProtocolEvent(&gExitPmAuthProtocolGuid);
+ }
+#else
+ // Signaling gExitPmAuthProtocolGuid Event
+ AcpiPlatformSignalProtocolEvent(&gExitPmAuthProtocolGuid);
+#endif
+}
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/AcpiPlatformPei.c b/Board/EM/Platform/AcpiPlatformPei.c
new file mode 100644
index 0000000..6c9eb0b
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatformPei.c
@@ -0,0 +1,231 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatformPei.c 1 2/09/12 12:30a Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 2/09/12 12:30a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatformPei.c $
+//
+// 1 2/09/12 12:30a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//---------------------------------------------------------------------------
+//
+// Name: ACPIPLATFORM.C
+//
+// Description: Installs EFI_GLOBAL_NVS_AREA_PROTOCOL_GUID
+//
+//---------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+#include <Efi.h>
+#include <Pei.h>
+#include <token.h>
+#include <AmiLib.h>
+#include <AmiPeiLib.h>
+#include <AmiCspLib.h>
+//#include <NB.h>
+#include <Ppi\Stall.h>
+
+#define MC_MMIO_CSHRDDR3CTL 0x1E8
+#define MC_RESET_CONTROL 0x05C
+#define IMC_DEV 3
+#define IMC_FUNC 0
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: AcpiPlatformPeiInit
+//
+// Description:
+//
+// Input:
+//
+// Output:
+// EFI_STATUS
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+// Here is the control flow of this function:
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+EFI_STATUS
+AcpiPlatformPeiInit (
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices
+ )
+{
+/*
+ EFI_STATUS Status ;
+ UINT32 Buffer32;
+ EFI_BOOT_MODE BootMode;
+ EFI_PEI_STALL_PPI *StallPpi;
+ EFI_GUID StallPpiGuid = EFI_PEI_STALL_PPI_GUID;
+
+ UINT32 RegEAX, RegEBX, RegECX, RegEDX;
+ UINT8 MaxBusNumber;
+ EFI_PEI_PCI_CFG_PPI *PciCfg;
+
+ // Determine boot mode
+ Status = (*PeiServices)->GetBootMode(PeiServices, &BootMode);
+ ASSERT_PEI_ERROR(PeiServices, Status);
+
+//Config GPIO, CRB use GPIO46 as output and drive it to logic high for S5/S0 boot path
+
+ Buffer32 = IoRead32(GPIO_BASE_ADDRESS + ICH_GPIO_USE_SEL2); // GPIO USE Select 2 Register
+ Buffer32 |= 0x00004000;
+ IoWrite32(GPIO_BASE_ADDRESS + ICH_GPIO_USE_SEL2, Buffer32); // Singal used as a GPIO
+
+ Buffer32 = IoRead32(GPIO_BASE_ADDRESS + ICH_GPIO_IO_SEL2); // GPIO Input/Output Select 2 Register
+ Buffer32 &= 0xFFFFBFFF;
+ IoWrite32(GPIO_BASE_ADDRESS + ICH_GPIO_IO_SEL2, Buffer32); // Program GPIO as a Output
+
+ if(BootMode == BOOT_WITH_FULL_CONFIGURATION || BootMode == BOOT_ON_S5_RESUME){
+ Buffer32 = IoRead32(GPIO_BASE_ADDRESS + ICH_GPIO_GP_LVL2); // GPIO Level Select 2 Register
+ Buffer32 |= 0x00004000;
+ IoWrite32(GPIO_BASE_ADDRESS + ICH_GPIO_GP_LVL2, Buffer32); // Program GPIO level drive to logic high
+
+ } // BootMode == BOOT_WITH_FULL_CONFIGURATION || BootMode == BOOT_ON_S5_RESUME
+
+
+ if(BootMode == BOOT_ON_S3_RESUME){
+ // Locate PPI stall service
+ Status = (**PeiServices).LocatePpi(PeiServices,
+ &StallPpiGuid,
+ 0,
+ NULL,
+ &StallPpi);
+
+ ASSERT_PEI_ERROR (PeiServices, Status);
+
+ CPULib_CpuID(1, &RegEAX, &RegEBX, &RegECX, &RegEDX);
+
+ if (((RegEAX & CPUID_FULL_FAMILY_MODEL) == CPUID_FULL_FAMILY_MODEL_DALES) ||
+ ((RegEAX & CPUID_FULL_FAMILY_MODEL) == CPUID_FULL_FAMILY_MODEL_DALES_32NM)) {
+ // Write MCHBAR + 0x1E8[2:0] = '110' to de-assert DDR_RESET#,
+ // this should be followed by a write to MCHBAR + 0x1E8[2:0] = '100'
+ // to maintain the state of the DDR_RESET# signal for future accesses to this register.
+ Mmio32(MCH_BASE_ADDRESS, MC_MMIO_CSHRDDR3CTL) &= ~(BIT2|BIT1|BIT0);
+ Mmio32(MCH_BASE_ADDRESS, MC_MMIO_CSHRDDR3CTL) |= (BIT2|BIT1);
+ Mmio32(MCH_BASE_ADDRESS, MC_MMIO_CSHRDDR3CTL) &= ~(BIT2|BIT1|BIT0);
+ Mmio32(MCH_BASE_ADDRESS, MC_MMIO_CSHRDDR3CTL) |= (BIT2);
+
+ //
+ // wait 50ms delay
+ //
+ StallPpi->Stall(PeiServices,
+ StallPpi,
+ 50000);
+
+ //Drive GPIO 46 high
+
+ //
+ // Set GP_LVL2 Register
+ //
+ Buffer32 = IoRead32(GPIO_BASE_ADDRESS + ICH_GPIO_GP_LVL2); // GPIO Level Select 2 Register
+ Buffer32 |= 0x00004000;
+ IoWrite32(GPIO_BASE_ADDRESS + ICH_GPIO_GP_LVL2, Buffer32); // Program GPIO level drive to logic high
+
+ } else if ((RegEAX & CPUID_FULL_FAMILY_MODEL) == CPUID_FULL_FAMILY_MODEL_FIELDS) {
+ //
+ // Set BIOS_RESET_ENABLE in MC_RESET_CONTROL register
+ //
+
+ //
+ // EFI_PCIEXBAR MSR 0x300 - BIT3 | BIT2 | BIT1
+ //
+ PciCfg = (*PeiServices)->PciCfg;
+
+ switch ((((UINT8)ReadMsr(0x300)) & (0xE)) >> 1)
+ {
+ default:
+ case 0x00:
+ MaxBusNumber = 0xFF;
+ break;
+
+ case 0x07:
+ MaxBusNumber = 0x7F;
+ break;
+
+ case 0x06:
+ MaxBusNumber = 0x3F;
+ break;
+ }
+
+ PciCfg->Read(
+ PeiServices,
+ PciCfg,
+ EfiPeiPciCfgWidthUint32,
+ PEI_PCI_CFG_ADDRESS(MaxBusNumber, 3, 0, MC_RESET_CONTROL),
+ &Buffer32);
+
+ Buffer32 |= (BIT0);
+
+ PciCfg->Write(
+ PeiServices,
+ PciCfg,
+ EfiPeiPciCfgWidthUint32,
+ PEI_PCI_CFG_ADDRESS(MaxBusNumber, 3, 0, MC_RESET_CONTROL),
+ &Buffer32);
+
+ // MmPci16(MaxBusNumber, IMC_DEV, IMC_FUNC, MC_RESET_CONTROL) |= (BIT0);
+
+ //
+ // wait 50ms delay
+ //
+ StallPpi->Stall(PeiServices,
+ StallPpi,
+ 50000);
+
+ //Drive GPIO 46 high
+
+ //
+ // Set GP_LVL2 Register
+ //
+ Buffer32 = IoRead32(GPIO_BASE_ADDRESS + ICH_GPIO_GP_LVL2); // GPIO Level Select 2 Register
+ Buffer32 |= 0x00004000;
+ IoWrite32(GPIO_BASE_ADDRESS + ICH_GPIO_GP_LVL2, Buffer32); // Program GPIO level drive to logic high
+ }
+
+ } // BootMode == BOOT_ON_S3_RESUME
+*/
+ return EFI_SUCCESS;
+}
+
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/AcpiPlatformPei.dxs b/Board/EM/Platform/AcpiPlatformPei.dxs
new file mode 100644
index 0000000..306a2ff
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatformPei.dxs
@@ -0,0 +1,50 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatformPei.dxs 1 2/09/12 12:30a Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 2/09/12 12:30a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatformPei.dxs $
+//
+// 1 2/09/12 12:30a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+#include "PPI\ReadOnlyVariable.h"
+#include "PPI\Stall.h"
+
+DEPENDENCY_START
+ EFI_PEI_READ_ONLY_VARIABLE_PPI_GUID AND
+ EFI_PEI_STALL_PPI_GUID
+DEPENDENCY_END
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/AcpiPlatformSmi.c b/Board/EM/Platform/AcpiPlatformSmi.c
new file mode 100644
index 0000000..af9e1ad
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatformSmi.c
@@ -0,0 +1,247 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatformSmi.c 1 2/09/12 12:30a Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 2/09/12 12:30a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatformSmi.c $
+//
+// 1 2/09/12 12:30a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: AcpiPlatformSmi.c
+//
+// Description: This file contains code for all AcpiPlatform SMI events
+//
+//----------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+//----------------------------------------------------------------------------
+// Include(s)
+//----------------------------------------------------------------------------
+
+#include <Token.h>
+#include <AmiDxeLib.h>
+#include <AmiCspLib.h>
+#include "SmmChildDispatch.h"
+
+// Produced Protocols
+
+// Consumed Protocols
+#include <Protocol\SmmBase.h>
+
+//----------------------------------------------------------------------------
+// Constant, Macro and Type Definition(s)
+//----------------------------------------------------------------------------
+// Constant Definition(s)
+
+
+// Macro Definition(s)
+
+// Type Definition(s)
+
+// Function Prototype(s)
+
+//----------------------------------------------------------------------------
+// Variable and External Declaration(s)
+//----------------------------------------------------------------------------
+// Variable Declaration(s)
+
+
+// GUID Definition(s)
+
+EFI_GUID gEfiSmmBaseProtocolGuid = EFI_SMM_BASE_PROTOCOL_GUID;
+EFI_GUID gSxDispatchProtocolGuid = EFI_SMM_SX_DISPATCH_PROTOCOL_GUID;
+
+
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: S3PowerReductionFunction
+//
+// Description: Driving GPIO46 Output to low
+//
+// Input: None
+//
+// Output: None
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+
+VOID S3PowerReductionFunction(VOID)
+{
+ // UINT32 Buffer32;
+
+ // Buffer32 = IoRead32(GPIO_BASE_ADDRESS + ICH_GPIO_GP_LVL2); // GPIO Level Select 2 Register
+ // Buffer32 &= 0xFFFFBFFF;
+// IoWrite32(GPIO_BASE_ADDRESS + ICH_GPIO_GP_LVL2, Buffer32); // Program GPIO level drive to logic high
+
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: AcpiPlatformSxSmiHandler
+//
+// Description: This is a AcpiPlatform Sx SMI Handler for Calpella Platform.
+//
+// Input: DispatchHandle - EFI Handle
+// DispatchContext - Pointer to the EFI_SMM_SX_DISPATCH_CONTEXT
+//
+// Output: None
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+
+VOID AcpiPlatformSxSmiHandler(
+ IN EFI_HANDLE DispatchHandle,
+ IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext)
+{
+ if (DispatchContext->Type == SxS3)
+ S3PowerReductionFunction();
+
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: InSmmFunction
+//
+// Description: Installs AcpiPlatform SMM Child Dispatcher Handler.
+//
+// Parameters: ImageHandle - Image handle
+// *SystemTable - Pointer to the system table
+//
+// Returns: EFI_STATUS
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+
+EFI_STATUS InSmmFunction (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable )
+{
+ EFI_STATUS Status;
+ EFI_HANDLE Handle;
+ EFI_SMM_BASE_PROTOCOL *SmmBaseProtocol;
+ // Sx SMI
+ EFI_SMM_SX_DISPATCH_PROTOCOL *pSxDispatch;
+ EFI_SMM_SX_DISPATCH_CONTEXT SxS1Context = {SxS1, SxEntry};
+ EFI_SMM_SX_DISPATCH_CONTEXT SxS3Context = {SxS3, SxEntry};
+ EFI_SMM_SX_DISPATCH_CONTEXT SxS4Context = {SxS4, SxEntry};
+ EFI_SMM_SX_DISPATCH_CONTEXT SxS5Context = {SxS5, SxEntry};
+
+ Status = pBS->LocateProtocol( &gEfiSmmBaseProtocolGuid, \
+ NULL, \
+ &SmmBaseProtocol );
+ if (EFI_ERROR(Status)) return Status;
+
+ // Local SMI Procotol
+ Status = pBS->LocateProtocol(
+ &gSxDispatchProtocolGuid,
+ NULL,
+ &pSxDispatch);
+ if (EFI_ERROR(Status))
+ pSxDispatch = NULL;
+
+ // Register SMIs
+ if (pSxDispatch != NULL)
+ {
+ Status = pSxDispatch->Register(
+ pSxDispatch,
+ AcpiPlatformSxSmiHandler,
+ &SxS1Context,
+ &Handle);
+
+ Status = pSxDispatch->Register(
+ pSxDispatch,
+ AcpiPlatformSxSmiHandler,
+ &SxS3Context,
+ &Handle);
+
+ Status = pSxDispatch->Register(
+ pSxDispatch,
+ AcpiPlatformSxSmiHandler,
+ &SxS4Context,
+ &Handle);
+
+ Status = pSxDispatch->Register(
+ pSxDispatch,
+ AcpiPlatformSxSmiHandler,
+ &SxS5Context,
+ &Handle);
+ }
+
+
+
+ return EFI_SUCCESS;
+
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: InitializeAcpiPlatformSMISmm
+//
+// Description: Installs AcpiPlatform SMM Child Dispatcher Handler.
+//
+// Parameters: ImageHandle - Image handle
+// *SystemTable - Pointer to the system table
+//
+// Returns: EFI_STATUS
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+
+EFI_STATUS InitializeAcpiPlatformSMISmm (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable )
+{
+
+ InitAmiLib(ImageHandle, SystemTable);
+
+ return InitSmmHandler(ImageHandle, SystemTable, InSmmFunction, NULL);
+}
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/AcpiPlatformSmi.dxs b/Board/EM/Platform/AcpiPlatformSmi.dxs
new file mode 100644
index 0000000..a7eeaf0
--- /dev/null
+++ b/Board/EM/Platform/AcpiPlatformSmi.dxs
@@ -0,0 +1,61 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatformSmi.dxs 1 2/09/12 12:30a Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 2/09/12 12:30a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/AcpiPlatformSmi.dxs $
+//
+// 1 2/09/12 12:30a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: AcpiPlatformSmi.DXS
+//
+// Description: This file is the dependency file for the AcpiPlatform SMI driver.
+//
+//----------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+#include <Protocol\BootScriptSave.h>
+#include <Protocol\SmmSwDispatch.h>
+
+DEPENDENCY_START
+ EFI_BOOT_SCRIPT_SAVE_GUID AND
+ EFI_SMM_SW_DISPATCH_PROTOCOL_GUID
+DEPENDENCY_END
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/EfiCombineImage/EfiCombineImage.c b/Board/EM/Platform/EfiCombineImage/EfiCombineImage.c
new file mode 100644
index 0000000..34dd321
--- /dev/null
+++ b/Board/EM/Platform/EfiCombineImage/EfiCombineImage.c
@@ -0,0 +1,223 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2012, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/EfiCombineImage/EfiCombineImage.c 1 12/18/12 11:10p Alanlin $
+//
+// $Revision: 1 $
+//
+// $Date: 12/18/12 11:10p $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/EfiCombineImage/EfiCombineImage.c $
+//
+// 1 12/18/12 11:10p Alanlin
+//
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name:
+//
+// Description:
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+// Include(s)
+
+#include "Efi.h"
+#include "token.h"
+#include <AmiLib.h>
+#include <AmiCspLib.h>
+#include <AmiDxeLib.h>
+#include <Pci.h>
+#include <Setup.h>
+#include <Protocol\PciIo.h>
+
+// Constant Definition(s)
+
+// Macro Definition(s)
+
+// Type Definition(s)
+
+// Function Prototype(s)
+
+
+// Variable Declaration(s)
+
+// GUID Definition(s)
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+EFI_GUID gFvProtocolGuid = EFI_FIRMWARE_VOLUME_PROTOCOL_GUID;
+#else
+EFI_GUID gFvProtocolGuid = EFI_FIRMWARE_VOLUME2_PROTOCOL_GUID;
+#endif
+
+#if NVidia_Optimus_dGPU == 1
+EFI_GUID gEfiCombineImageGuid = NVidia_dGPU_HEADER_GUID;
+#endif
+#if AMD_PX_CHELSEA_dGPU == 1
+EFI_GUID gEfiCombineImageGuid1 = AMD_CHELSEA_HEADER_GUID;
+#endif
+#if AMD_PX_THAMES_dGPU == 1
+EFI_GUID gEfiCombineImageGuid2 = AMD_THAMES_HEADER_GUID;
+#endif
+
+// Protocol Definition(s)
+
+// External Declaration(s)
+
+// Function Definition(s)
+
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Name: GetEfiCombineImage
+//
+// Description: None.
+//
+// Input: None.
+//
+// Output: None.
+//
+// Notes: None.
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+
+EFI_STATUS GetEfiCombineImage (
+ IN PCI_DEV_INFO *Device,
+ OUT VOID *RomImage,
+ OUT UINT64 RomSize
+)
+{
+ EFI_STATUS Status;
+ UINTN FvProtocolCount;
+ EFI_HANDLE *FvHandles = NULL;
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+ EFI_FIRMWARE_VOLUME_PROTOCOL *Fv;
+#else
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv;
+#endif
+ UINTN Index;
+ UINT32 AuthenticationStatus;
+ UINT8 *Buffer = NULL;
+ UINTN BufferSize;
+
+ Status = pBS->LocateHandleBuffer (
+ ByProtocol,
+ &gFvProtocolGuid,
+ NULL,
+ &FvProtocolCount,
+ &FvHandles
+ );
+ if (!EFI_ERROR (Status)) {
+ for (Index = 0; Index < FvProtocolCount; Index++) {
+ Status = pBS->HandleProtocol (
+ FvHandles[Index],
+ &gFvProtocolGuid,
+ (VOID **) &Fv
+ );
+ if (!EFI_ERROR (Status)) {
+
+ switch (Device->DevVenId.DevId)
+ {
+#if NVidia_Optimus_dGPU == 1
+ case NVidia_dGPU_DID :
+ Status = Fv->ReadSection(
+ Fv,&gEfiCombineImageGuid,
+ EFI_SECTION_RAW,0,
+ &Buffer,&BufferSize,
+ &AuthenticationStatus
+ );
+ break;
+#endif
+
+#if AMD_PX_CHELSEA_dGPU == 1
+ case AMD_CHELSEA_DID :
+ Status = Fv->ReadSection(
+ Fv,&gEfiCombineImageGuid1,
+ EFI_SECTION_RAW,0,
+ &Buffer,&BufferSize,
+ &AuthenticationStatus
+ );
+ break;
+#endif
+
+#if AMD_PX_THAMES_dGPU == 1
+ case AMD_THAMES_DID :
+ Status = Fv->ReadSection(
+ Fv,&gEfiCombineImageGuid2,
+ EFI_SECTION_RAW,0,
+ &Buffer,&BufferSize,
+ &AuthenticationStatus
+ );
+ break;
+#endif
+ default :
+ break;
+ }
+
+ if (!EFI_ERROR (Status)) {
+ if(Device->PciIo.RomImage != NULL) {
+ pBS->FreePool (Device->PciIo.RomImage);
+ Device->PciIo.RomImage = NULL;
+ Device->PciIo.RomSize = 0;
+ }
+ //Check if Embeded Op ROM is valid...
+ if(*((UINT16*)Buffer)!=PCI_OPT_ROM_SIG) Status=EFI_NOT_FOUND;
+ else{
+ //Allocate buffer for ROM Image.
+ Device->PciIo.RomImage = Malloc (BufferSize);
+ if(Device->PciIo.RomImage == NULL) Status = EFI_OUT_OF_RESOURCES;
+ else {
+ MemCpy (Device->PciIo.RomImage, Buffer, BufferSize);
+ Device->PciIo.RomSize = BufferSize;
+ Device->Capab |= (EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE + EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM);
+ Device->Attrib |= (EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE + EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM);
+ Status = EFI_SUCCESS;
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+ else {
+ Status = EFI_NOT_FOUND;
+ }
+
+ if (FvHandles != NULL) {
+ pBS->FreePool (FvHandles);
+ FvHandles = NULL;
+ }
+
+ return Status;
+}
+
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2012, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/EfiCombineImage/EfiCombineImage.cif b/Board/EM/Platform/EfiCombineImage/EfiCombineImage.cif
new file mode 100644
index 0000000..3debf25
--- /dev/null
+++ b/Board/EM/Platform/EfiCombineImage/EfiCombineImage.cif
@@ -0,0 +1,10 @@
+<component>
+ name = "EFI Combine Image"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\EfiCombineImage\"
+ RefName = "EfiCombineImage"
+[files]
+"EfiCombineImage.sdl"
+"EfiCombineImage.mak"
+"EfiCombineImage.c"
+<endComponent>
diff --git a/Board/EM/Platform/EfiCombineImage/EfiCombineImage.mak b/Board/EM/Platform/EfiCombineImage/EfiCombineImage.mak
new file mode 100644
index 0000000..a95b067
--- /dev/null
+++ b/Board/EM/Platform/EfiCombineImage/EfiCombineImage.mak
@@ -0,0 +1,105 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2012, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/EfiCombineImage/EfiCombineImage.mak 1 12/18/12 11:10p Alanlin $
+#
+# $Revision: 1 $
+#
+# $Date: 12/18/12 11:10p $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/EfiCombineImage/EfiCombineImage.mak $
+#
+# 1 12/18/12 11:10p Alanlin
+#
+#
+#*************************************************************************
+#<AMI_FHDR_START>
+#
+# Name:
+#
+# Description:
+#
+#<AMI_FHDR_END>
+#*************************************************************************
+all : EfiCombineImage EfiCombineImage1 EfiCombineImage2
+
+EfiCombineImage: \
+!IF "$(NVidia_Optimus_dGPU)" == "1"
+$(BUILD_DIR)\EfiCombineImageFile.ffs
+!ENDIF
+
+EfiCombineImage1: \
+!IF "$(AMD_PX_CHELSEA_dGPU)" == "1"
+$(BUILD_DIR)\EfiCombineImageFile1.ffs
+!ENDIF
+
+EfiCombineImage2: \
+!IF "$(AMD_PX_THAMES_dGPU)" == "1"
+$(BUILD_DIR)\EfiCombineImageFile2.ffs
+!ENDIF
+
+$(BUILD_DIR)\EfiCombineImage.mak : $(EfiCombineImage_DIR)\$(@B).cif $(EfiCombineImage_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(EfiCombineImage_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+AMI_CSP_LIB_OBJS = $(AMI_CSP_LIB_OBJS) \
+$(BUILD_DIR)\EfiCombineImage.obj
+
+{$(EfiCombineImage_DIR)}.c{$(BUILD_DIR)}.obj::
+ $(CC) $(CFLAGS) /Fo$(BUILD_DIR)\ $<
+
+$(BUILD_DIR)\EfiCombineImage.obj : $(EfiCombineImage_DIR)\EfiCombineImage.c
+
+!IF "$(NVidia_Optimus_dGPU)" == "1"
+$(BUILD_DIR)\EfiCombineImageFile.ffs : $(EfiCombineImageFile)
+ $(MAKE) /f Core\FFS.mak \
+ BUILD_DIR=$(BUILD_DIR) \
+ GUID=$(NVidia_dGPU_MAKFILE_GUID) \
+ TYPE=EFI_FV_FILETYPE_FREEFORM \
+ BINFILE=$** FFSFILE=$@ COMPRESS=1 NAME=$(**B)
+!ENDIF
+
+!IF "$(AMD_PX_CHELSEA_dGPU)" == "1"
+$(BUILD_DIR)\EfiCombineImageFile1.ffs : $(EfiCombineImageFile1)
+ $(MAKE) /f Core\FFS.mak \
+ BUILD_DIR=$(BUILD_DIR) \
+ GUID=$(AMD_CHELSEA_MAKFILE_GUID) \
+ TYPE=EFI_FV_FILETYPE_FREEFORM \
+ BINFILE=$** FFSFILE=$@ COMPRESS=1 NAME=$(**B)
+!ENDIF
+
+!IF "$(AMD_PX_THAMES_dGPU)" == "1"
+$(BUILD_DIR)\EfiCombineImageFile2.ffs : $(EfiCombineImageFile2)
+ $(MAKE) /f Core\FFS.mak \
+ BUILD_DIR=$(BUILD_DIR) \
+ GUID=$(AMD_THAMES_MAKFILE_GUID) \
+ TYPE=EFI_FV_FILETYPE_FREEFORM \
+ BINFILE=$** FFSFILE=$@ COMPRESS=1 NAME=$(**B)
+!ENDIF
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2012, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
diff --git a/Board/EM/Platform/EfiCombineImage/EfiCombineImage.sdl b/Board/EM/Platform/EfiCombineImage/EfiCombineImage.sdl
new file mode 100644
index 0000000..91ddf21
--- /dev/null
+++ b/Board/EM/Platform/EfiCombineImage/EfiCombineImage.sdl
@@ -0,0 +1,203 @@
+TOKEN
+ Name = "EfiCombineImage"
+ Value = "0"
+ Help = "Main Switch to Enable Efi Combine Image"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+End
+
+TOKEN
+ Name = "NVidia_Optimus_dGPU"
+ Value = "1"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "AMD_PX_CHELSEA_dGPU"
+ Value = "1"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "AMD_PX_THAMES_dGPU"
+ Value = "1"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "NVidia_dGPU_DID"
+ Value = "0x0FD2"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "NVidia_Optimus_dGPU" "=" "1"
+End
+
+TOKEN
+ Name = "NVidia_dGPU_MAKFILE_GUID"
+ Value = "C5D7EAAD-B218-482c-A909-E3B8CDB00E94"
+ TokenType = Expression
+ TargetMAK = Yes
+ TargetH = Yes
+ Range = "GUID"
+ Token = "NVidia_Optimus_dGPU" "=" "1"
+End
+
+TOKEN
+ Name = "NVidia_dGPU_HEADER_GUID"
+ Value = "{0xC5D7EAAD,0xB218,0x482c,0xA9,0x09,0xE3,0xB8,0xCD,0xB0,0x0E,0x94}"
+ TokenType = Expression
+ TargetMAK = Yes
+ TargetH = Yes
+ Range = "GUID"
+ Token = "NVidia_Optimus_dGPU" "=" "1"
+End
+
+TOKEN
+ Name = "AMD_CHELSEA_DID"
+ Value = "0x682F"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "AMD_PX_CHELSEA_dGPU" "=" "1"
+End
+
+TOKEN
+ Name = "AMD_CHELSEA_MAKFILE_GUID"
+ Value = "B9C6D5AB-5914-4b1b-B33D-B10D9D0075BE"
+ TokenType = Expression
+ TargetMAK = Yes
+ TargetH = Yes
+ Range = "GUID"
+ Token = "AMD_PX_CHELSEA_dGPU" "=" "1"
+End
+
+TOKEN
+ Name = "AMD_CHELSEA_HEADER_GUID"
+ Value = "{0XB9C6D5AB,0X5914,0X4b1b,0XB3,0X3D,0XB1,0X0D,0X9D,0X00,0X75,0XBE}"
+ TokenType = Expression
+ TargetMAK = Yes
+ TargetH = Yes
+ Range = "GUID"
+ Token = "AMD_PX_CHELSEA_dGPU" "=" "1"
+End
+
+TOKEN
+ Name = "AMD_THAMES_DID"
+ Value = "0x6840"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "AMD_PX_THAMES_dGPU" "=" "1"
+End
+
+TOKEN
+ Name = "AMD_THAMES_MAKFILE_GUID"
+ Value = "633657DB-777F-4038-8D72-3E581518E03A"
+ TokenType = Expression
+ TargetMAK = Yes
+ TargetH = Yes
+ Range = "GUID"
+ Token = "AMD_PX_THAMES_dGPU" "=" "1"
+End
+
+TOKEN
+ Name = "AMD_THAMES_HEADER_GUID"
+ Value = "{0X633657DB,0X777F,0X4038,0X8D,0X72,0X3E,0X58,0X15,0X18,0XE0,0X3A}"
+ TokenType = Expression
+ TargetMAK = Yes
+ TargetH = Yes
+ Range = "GUID"
+ Token = "AMD_PX_THAMES_dGPU" "=" "1"
+End
+
+TOKEN
+ Name = "EfiCombineImageFile"
+ Value = "Chipset\NB\GOP\SandyBridge\vbt_edp.bin"
+ Help = "It is a sample, please modify to your VGA Oprom path."
+ TokenType = Expression
+ TargetMAK = Yes
+ Token = "NVidia_Optimus_dGPU" "=" "1"
+End
+
+TOKEN
+ Name = "EfiCombineImageFile1"
+ Value = "Chipset\NB\GOP\SandyBridge\vbt_edp.bin"
+ Help = "It is a sample, please modify to your VGA Oprom path."
+ TokenType = Expression
+ TargetMAK = Yes
+ Token = "AMD_PX_CHELSEA_dGPU" "=" "1"
+End
+
+TOKEN
+ Name = "EfiCombineImageFile2"
+ Value = "Chipset\NB\GOP\SandyBridge\vbt_edp.bin"
+ Help = "It is a sample, please modify to your VGA Oprom path."
+ TokenType = Expression
+ TargetMAK = Yes
+ Token = "AMD_PX_THAMES_dGPU" "=" "1"
+End
+
+PATH
+ Name = "EfiCombineImage_DIR"
+End
+
+MODULE
+ Help = "Includes EfiCombineImage.mak to Project"
+ File = "EfiCombineImage.mak"
+End
+
+ELINK
+ Name = "OEM_PCI_DEVICE_CALLBACK(0x10DE, NVidia_dGPU_DID, GetEfiCombineImage),"
+ Parent = "OEM_PCI_DEVICE_GET_OPT_ROM"
+ Help = "It is a sample(Nvidia Optims), please change DID and VID depend on your device."
+ Token = "NVidia_Optimus_dGPU" "=" "1"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "OEM_PCI_DEVICE_CALLBACK(0x1002, AMD_CHELSEA_DID, GetEfiCombineImage),"
+ Parent = "OEM_PCI_DEVICE_GET_OPT_ROM"
+ Help = "It is a sample(AMD Chelsea), please change DID and VID depend on your device."
+ Token = "AMD_PX_CHELSEA_dGPU" "=" "1"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "OEM_PCI_DEVICE_CALLBACK(0x1002, AMD_THAMES_DID, GetEfiCombineImage),"
+ Parent = "OEM_PCI_DEVICE_GET_OPT_ROM"
+ Help = "It is a sample(AMD Thames), please change DID and VID depend on your device."
+ Token = "AMD_PX_THAMES_dGPU" "=" "1"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\EfiCombineImageFile.ffs"
+ Parent = "FV_MAIN"
+ Token = "NVidia_Optimus_dGPU" "=" "1"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\EfiCombineImageFile1.ffs"
+ Parent = "FV_MAIN"
+ Token = "AMD_PX_CHELSEA_dGPU" "=" "1"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\EfiCombineImageFile2.ffs"
+ Parent = "FV_MAIN"
+ Token = "AMD_PX_THAMES_dGPU" "=" "1"
+ InvokeOrder = AfterParent
+End
+
diff --git a/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.c b/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.c
new file mode 100644
index 0000000..404a2cf
--- /dev/null
+++ b/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.c
@@ -0,0 +1,218 @@
+/** @file
+**/
+
+#include <Tiano.h>
+#include <EfiDriverLib.h>
+
+#include EFI_GUID_DEFINITION(DataHubRecords)
+#include EFI_PROTOCOL_CONSUMER(DataHub)
+#include EFI_PROTOCOL_CONSUMER(ExitPmAuth)
+#include <RcFviDxeLib.h>
+
+#include <Protocol\SMBios.h>
+
+
+#pragma pack(1)
+
+typedef struct {
+ UINT8 Type;
+ UINT8 Length;
+ UINT16 Handle;
+ UINT8 GroupName;
+} SMBIOS_TYPE14_STRUCTURE_HDR;
+
+typedef struct {
+ UINT8 Type;
+ UINT16 Handle;
+} SMBIOS_TYPE14_STRUCTURE_ITEM;
+
+#pragma pack()
+
+VOID CreateFirmwareVerInfo(IN EFI_EVENT Event, IN VOID *Context);
+
+EFI_SMBIOS_PROTOCOL *gSmbiosProtocol = NULL;
+
+/**
+ The user Entry Point for DXE driver. 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
+FirmwareVerInfoEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+ EFI_GUID gEfiSmbiosProtocolGuid = EFI_SMBIOS_PROTOCOL_GUID;
+ EFI_EVENT Event;
+
+ DxeInitializeDriverLib (ImageHandle, SystemTable);
+
+ Status = gBS->LocateProtocol(&gEfiSmbiosProtocolGuid, NULL, &gSmbiosProtocol);
+ ASSERT_EFI_ERROR(Status);
+ if (!EFI_ERROR(Status))
+ {
+ Status = EfiCreateEventReadyToBoot(
+ EFI_TPL_CALLBACK,
+ CreateFirmwareVerInfo,
+ NULL,
+ &Event
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ return EFI_SUCCESS;
+}
+
+
+EFI_STATUS BuildFviStruct(BOOLEAN GroupAssociation, EFI_DATA_RECORD_HEADER *Record)
+{
+ static VOID *FviStructBuffer = NULL;
+ static UINTN FviStructBufferSize = 0;
+ static UINTN FviStructSize = 0;
+ static UINTN ElementCount = 0;
+
+ EFI_STATUS Status;
+ EFI_SUBCLASS_TYPE1_HEADER *DataHeader = NULL;
+ FVI_HEADER *FviHeader = NULL;
+ UINT16 BufferSize = 0;
+ SMBIOS_TYPE14_STRUCTURE_HDR *SmbiosHdr = NULL;
+ SMBIOS_TYPE14_STRUCTURE_ITEM *ItemPtr = NULL;
+ CHAR8 GroupName[] = "Firmware Version Info\0";
+
+ if (GroupAssociation)
+ {
+ if ((FviStructBuffer == NULL) && (FviStructSize > sizeof(SMBIOS_TYPE14_STRUCTURE_HDR)))
+ {
+ return EFI_UNSUPPORTED;
+ }
+
+ SmbiosHdr = (SMBIOS_TYPE14_STRUCTURE_HDR *)FviStructBuffer;
+
+ SmbiosHdr->Type = 14;
+ SmbiosHdr->Length = (UINT8)FviStructSize;
+ SmbiosHdr->Handle = 0xFFFF;
+
+ SmbiosHdr->GroupName = 0x01;
+ EfiAsciiStrCpy((CHAR8 *)((UINT8 *)FviStructBuffer+FviStructSize), GroupName);
+ FviStructSize += sizeof(GroupName);
+
+ Status = gSmbiosProtocol->SmbiosAddStructure((UINT8 *)SmbiosHdr, (UINT16)(FviStructSize));
+ if (!EFI_ERROR(Status))
+ {
+ gBS->FreePool(FviStructBuffer);
+ FviStructBuffer = NULL;
+ }
+
+ return Status;
+ }
+
+ if (Record == NULL)
+ {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ if (FviStructBuffer == NULL)
+ {
+ FviStructBufferSize = 0x2000;
+ FviStructBuffer = EfiLibAllocateZeroPool(FviStructBufferSize);
+ FviStructSize = sizeof(SMBIOS_TYPE14_STRUCTURE_HDR);
+ }
+
+ SmbiosHdr = (SMBIOS_TYPE14_STRUCTURE_HDR *)FviStructBuffer;
+ ItemPtr = (SMBIOS_TYPE14_STRUCTURE_ITEM *)(SmbiosHdr + 1);
+ ItemPtr += ElementCount;
+
+ if (EfiCompareGuid(&Record->DataRecordGuid, &gMiscSubClassName))
+ {
+ DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *)(Record + 1);
+ FviHeader = (FVI_HEADER *)(UINT8 *)(DataHeader + 1);
+
+ if (FviHeader->Header.Type == FVI_SMBIOS_TYPE)
+ {
+ FviHeader->Header.Handle = 0xFFFF;
+ BufferSize = (UINT16)(Record->RecordSize - sizeof(EFI_DATA_RECORD_HEADER) - sizeof(EFI_SUBCLASS_TYPE1_HEADER));
+ Status = gSmbiosProtocol->SmbiosAddStructure((UINT8 *)FviHeader, BufferSize);
+ if (!EFI_ERROR(Status))
+ {
+ ItemPtr->Type = FviHeader->Header.Type;
+ ItemPtr->Handle = FviHeader->Header.Handle;
+ FviStructSize += sizeof(SMBIOS_TYPE14_STRUCTURE_ITEM);
+ ElementCount++;
+ }
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+
+VOID CreateFirmwareVerInfo(IN EFI_EVENT Event, IN VOID *Context)
+{
+ EFI_STATUS Status;
+ EFI_HANDLE DataHubHandle;
+ UINTN HandleSize;
+ EFI_DATA_HUB_PROTOCOL *DataHub = NULL;
+ EFI_DATA_RECORD_HEADER *Record = NULL;
+ UINT64 MonotonicCount = 0;
+
+ HandleSize = sizeof (EFI_HANDLE);
+
+ Status = gBS->LocateHandle (
+ ByProtocol,
+ &gEfiDataHubProtocolGuid,
+ NULL,
+ &HandleSize,
+ &DataHubHandle
+ );
+ if (EFI_ERROR (Status))
+ {
+ return;
+ }
+
+ Status = gBS->HandleProtocol (
+ DataHubHandle,
+ &gEfiDataHubProtocolGuid,
+ &DataHub
+ );
+ if (EFI_ERROR (Status))
+ {
+ return;
+ }
+
+ do {
+ Status = DataHub->GetNextRecord (
+ DataHub,
+ &MonotonicCount,
+ NULL,
+ &Record);
+ if (!EFI_ERROR (Status))
+ {
+ if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA)
+ {
+ BuildFviStruct(FALSE, Record);
+ }
+ }
+ } while (!EFI_ERROR (Status) && (MonotonicCount != 0));
+
+ Status = BuildFviStruct(TRUE, NULL);
+ if (EFI_ERROR(Status))
+ {
+ DEBUG((EFI_D_ERROR, "!!!Firmware Version Information Error!!!\n"));
+ DEBUG((EFI_D_ERROR, "!!!Type 14 ¡V Group Associations Indicator!!!\n"));
+ }
+
+ if (Event != NULL)
+ {
+ gBS->CloseEvent(Event);
+ }
+}
diff --git a/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.cif b/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.cif
new file mode 100644
index 0000000..5113f3e
--- /dev/null
+++ b/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.cif
@@ -0,0 +1,11 @@
+<component>
+ name = "FirmwareVerInfo"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\FirmwareVerInfo"
+ RefName = "FirmwareVerInfo"
+[files]
+"FirmwareVerInfo.sdl"
+"FirmwareVerInfo.mak"
+"FirmwareVerInfo.dxs"
+"FirmwareVerInfo.c"
+<endComponent>
diff --git a/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.dxs b/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.dxs
new file mode 100644
index 0000000..ea6c9fb
--- /dev/null
+++ b/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.dxs
@@ -0,0 +1,50 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/FirmwareVerInfo/FirmwareVerInfo.dxs 1 6/13/12 8:38a Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 6/13/12 8:38a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/FirmwareVerInfo/FirmwareVerInfo.dxs $
+//
+// 1 6/13/12 8:38a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Support Firmware Version Information.
+// [Files] AcpiPlatform.cif, Board/EM/Platform/FirmwareVerInfo/*.*
+//
+//*************************************************************************
+
+DEPENDENCY_START
+ AFTER {0xEDA39402, 0xF375, 0x4496, 0x92, 0xD3, 0x83, 0xB4, 0x3C, 0xB8, 0xA7, 0x6A}
+DEPENDENCY_END
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.mak b/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.mak
new file mode 100644
index 0000000..1d0c956
--- /dev/null
+++ b/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.mak
@@ -0,0 +1,29 @@
+# /*++
+#
+# --*/
+all : FirmwareVerInfo
+
+FirmwareVerInfo : $(BUILD_DIR)\FirmwareVerInfo.mak FirmwareVerInfoBin
+
+$(BUILD_DIR)\FirmwareVerInfo.mak : $(FirmwareVerInfo_DIR)\FirmwareVerInfo.cif $(FirmwareVerInfo_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(FirmwareVerInfo_DIR)\FirmwareVerInfo.cif $(CIF2MAK_DEFAULTS)
+
+FirmwareVerInfo_INCLUDES = \
+ $(EDK_INCLUDES)\
+ /I Include\
+ $(INTEL_PCH_INCLUDES)
+
+FirmwareVerInfo_LIB_LINKS =\
+ $(EFIDRIVERLIB)
+
+FirmwareVerInfoBin : $(FirmwareVerInfo_LIB_LINKS)
+ $(MAKE) /$(MAKEFLAGS) $(EDK_DEFAULTS)\
+ /f $(BUILD_DIR)\FirmwareVerInfo.mak all\
+ NAME=FirmwareVerInfo\
+ "MY_INCLUDES=$(FirmwareVerInfo_INCLUDES)"\
+ GUID=132A6630-FEB5-4ba2-85FB-FD2635379257\
+ ENTRY_POINT=FirmwareVerInfoEntryPoint\
+ DEPEX1=$(FirmwareVerInfo_DIR)\FirmwareVerInfo.dxs \
+ DEPEX1_TYPE=EFI_SECTION_DXE_DEPEX \
+ TYPE=BS_DRIVER\
+ COMPRESS=1
diff --git a/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.sdl b/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.sdl
new file mode 100644
index 0000000..4cddc59
--- /dev/null
+++ b/Board/EM/Platform/FirmwareVerInfo/FirmwareVerInfo.sdl
@@ -0,0 +1,80 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/FirmwareVerInfo/FirmwareVerInfo.sdl 2 11/20/12 7:22a Alanlin $
+#
+# $Revision: 2 $
+#
+# $Date: 11/20/12 7:22a $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/FirmwareVerInfo/FirmwareVerInfo.sdl $
+#
+# 2 11/20/12 7:22a Alanlin
+#
+# 1 6/13/12 8:38a Yurenlai
+# [TAG] None
+# [Category] Improvement
+# [Description] Support Firmware Version Information.
+# [Files] AcpiPlatform.cif, Board/EM/Platform/FirmwareVerInfo/*.*
+#
+#*************************************************************************
+TOKEN
+ Name = "FirmwareVerInfo_SUPPORT"
+ Value = "0"
+ Help = "Main switch to enable FirmwareVerInfo support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+ Token = "PI_SPECIFICATION_VERSION" ">=" "0x10000"
+End
+
+TOKEN
+ Name = "FVI_SMBIOS_TYPE"
+ Value = "0xDD"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+PATH
+ Name = "FirmwareVerInfo_DIR"
+End
+
+MODULE
+ Help = "Includes FirmwareVerInfo.mak to Project"
+ File = "FirmwareVerInfo.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\FirmwareVerInfo.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
diff --git a/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.c b/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.c
new file mode 100644
index 0000000..24abc14
--- /dev/null
+++ b/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.c
@@ -0,0 +1,512 @@
+/** @file
+UEFI PI specification supersedes Inte's Framework Specification.
+EFI_FIRMWARE_VOLUME_PROTOCOL defined in Intel Framework Pkg is replaced by
+EFI_FIRMWARE_VOLUME2_PROTOCOL in MdePkg.
+This module produces FV on top of FV2. This module is used on platform when both of
+these two conditions are true:
+1) Framework module consuming FV is present
+2) And the platform only produces FV2
+
+Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+Module Name:
+
+**/
+
+#include "EdkIIGlueDxe.h"
+
+#include EFI_PROTOCOL_DEFINITION (FirmwareVolume2)
+#include EFI_PROTOCOL_DEFINITION (FirmwareVolume)
+
+#define FIRMWARE_VOLUME_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('f', 'v', 't', 'h')
+
+typedef struct {
+ UINTN Signature;
+ EFI_FIRMWARE_VOLUME_PROTOCOL FirmwareVolume;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FirmwareVolume2;
+} FIRMWARE_VOLUME_PRIVATE_DATA;
+
+#define FIRMWARE_VOLUME_PRIVATE_DATA_FROM_THIS(a) CR (a, FIRMWARE_VOLUME_PRIVATE_DATA, FirmwareVolume, FIRMWARE_VOLUME_PRIVATE_DATA_SIGNATURE)
+
+typedef UINT64 FRAMEWORK_EFI_FV_ATTRIBUTES;
+
+/**
+ Convert FV attrbiutes to FV2 attributes.
+
+ @param Fv2Attributes FV2 attributes.
+
+ @return FV attributes.
+
+**/
+FRAMEWORK_EFI_FV_ATTRIBUTES
+Fv2AttributesToFvAttributes (
+ IN EFI_FV_ATTRIBUTES Fv2Attributes
+ )
+{
+ //
+ // Clear those filed that is not defined in Framework FV spec and Alignment conversion.
+ //
+ return (Fv2Attributes & 0x1ff) | ((UINTN) EFI_FV_ALIGNMENT_2 << RShiftU64((Fv2Attributes & EFI_FV2_ALIGNMENT), 16));
+}
+
+/**
+ Retrieves attributes, insures positive polarity of attribute bits, returns
+ resulting attributes in output parameter.
+
+ @param This Calling context
+ @param Attributes output buffer which contains attributes
+
+ @retval EFI_SUCCESS The firmware volume attributes were returned.
+
+**/
+EFI_STATUS
+EFIAPI
+FvGetVolumeAttributes (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL *This,
+ OUT FRAMEWORK_EFI_FV_ATTRIBUTES *Attributes
+ )
+{
+ EFI_STATUS Status;
+ FIRMWARE_VOLUME_PRIVATE_DATA *Private;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FirmwareVolume2;
+
+ Private = FIRMWARE_VOLUME_PRIVATE_DATA_FROM_THIS (This);
+ FirmwareVolume2 = Private->FirmwareVolume2;
+
+ Status = FirmwareVolume2->GetVolumeAttributes (
+ FirmwareVolume2,
+ Attributes
+ );
+ if (!EFI_ERROR (Status)) {
+ *Attributes = Fv2AttributesToFvAttributes (*Attributes);
+ }
+ return Status;
+}
+
+/**
+ Sets volume attributes.
+
+ @param This Calling context
+ @param Attributes Buffer which contains attributes
+
+ @retval EFI_INVALID_PARAMETER A bit in Attributes was invalid
+ @retval EFI_SUCCESS The requested firmware volume attributes were set
+ and the resulting EFI_FV_ATTRIBUTES is returned in
+ Attributes.
+ @retval EFI_ACCESS_DENIED The Device is locked and does not permit modification.
+
+**/
+EFI_STATUS
+EFIAPI
+FvSetVolumeAttributes (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL *This,
+ IN OUT FRAMEWORK_EFI_FV_ATTRIBUTES *Attributes
+ )
+{
+ FIRMWARE_VOLUME_PRIVATE_DATA *Private;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FirmwareVolume2;
+ EFI_FV_ATTRIBUTES Fv2Attributes;
+ EFI_STATUS Status;
+
+ Private = FIRMWARE_VOLUME_PRIVATE_DATA_FROM_THIS (This);
+ FirmwareVolume2 = Private->FirmwareVolume2;
+
+ Fv2Attributes = (*Attributes & 0x1ff);
+ Status = FirmwareVolume2->SetVolumeAttributes (
+ FirmwareVolume2,
+ &Fv2Attributes
+ );
+
+ *Attributes = Fv2AttributesToFvAttributes (Fv2Attributes);
+
+ return Status;
+}
+
+/**
+ Read the requested file (NameGuid) and returns data in Buffer.
+
+ @param This Calling context
+ @param NameGuid Filename identifying which file to read
+ @param Buffer Pointer to pointer to buffer in which contents of file are returned.
+ <br>
+ If Buffer is NULL, only type, attributes, and size are returned as
+ there is no output buffer.
+ <br>
+ If Buffer != NULL and *Buffer == NULL, the output buffer is allocated
+ from BS pool by ReadFile
+ <br>
+ If Buffer != NULL and *Buffer != NULL, the output buffer has been
+ allocated by the caller and is being passed in.
+ @param BufferSize Indicates the buffer size passed in, and on output the size
+ required to complete the read
+ @param FoundType Indicates the type of the file who's data is returned
+ @param FileAttributes Indicates the attributes of the file who's data is resturned
+ @param AuthenticationStatus Indicates the authentication status of the data
+
+ @retval EFI_SUCCESS The call completed successfully
+ @retval EFI_WARN_BUFFER_TOO_SMALL The buffer is too small to contain the requested output.
+ The buffer is filled and the output is truncated.
+ @retval EFI_NOT_FOUND NameGuid was not found in the firmware volume.
+ @retval EFI_DEVICE_ERROR A hardware error occurred when attempting to access the firmware volume.
+ @retval EFI_ACCESS_DENIED The firmware volume is configured to disallow reads.
+ @retval EFI_OUT_OF_RESOURCES An allocation failure occurred.
+
+**/
+EFI_STATUS
+EFIAPI
+FvReadFile (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL *This,
+ IN EFI_GUID *NameGuid,
+ IN OUT VOID **Buffer,
+ IN OUT UINTN *BufferSize,
+ OUT EFI_FV_FILETYPE *FoundType,
+ OUT EFI_FV_FILE_ATTRIBUTES *FileAttributes,
+ OUT UINT32 *AuthenticationStatus
+ )
+{
+ FIRMWARE_VOLUME_PRIVATE_DATA *Private;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FirmwareVolume2;
+ EFI_STATUS Status;
+
+ Private = FIRMWARE_VOLUME_PRIVATE_DATA_FROM_THIS (This);
+ FirmwareVolume2 = Private->FirmwareVolume2;
+
+ Status = FirmwareVolume2->ReadFile (
+ FirmwareVolume2,
+ NameGuid,
+ Buffer,
+ BufferSize,
+ FoundType,
+ FileAttributes,
+ AuthenticationStatus
+ );
+
+ //
+ // For Framework FV attrbutes, only alignment fields are valid.
+ //
+ *FileAttributes = *FileAttributes & EFI_FV_FILE_ATTRIB_ALIGNMENT;
+
+ return Status;
+}
+
+/**
+ Read the requested section from the specified file and returns data in Buffer.
+
+ @param This Calling context
+ @param NameGuid Filename identifying the file from which to read
+ @param SectionType Indicates what section type to retrieve
+ @param SectionInstance Indicates which instance of SectionType to retrieve
+ @param Buffer Pointer to pointer to buffer in which contents of file are returned.
+ <br>
+ If Buffer is NULL, only type, attributes, and size are returned as
+ there is no output buffer.
+ <br>
+ If Buffer != NULL and *Buffer == NULL, the output buffer is allocated
+ from BS pool by ReadFile
+ <br>
+ If Buffer != NULL and *Buffer != NULL, the output buffer has been
+ allocated by the caller and is being passed in.
+ @param BufferSize Indicates the buffer size passed in, and on output the size
+ required to complete the read
+ @param AuthenticationStatus Indicates the authentication status of the data
+
+ @retval EFI_SUCCESS The call completed successfully.
+ @retval EFI_WARN_BUFFER_TOO_SMALL The buffer is too small to contain the requested output.
+ The buffer is filled and the output is truncated.
+ @retval EFI_OUT_OF_RESOURCES An allocation failure occurred.
+ @retval EFI_NOT_FOUND Name was not found in the firmware volume.
+ @retval EFI_DEVICE_ERROR A hardware error occurred when attempting to access the firmware volume.
+ @retval EFI_ACCESS_DENIED The firmware volume is configured to disallow reads.
+
+**/
+EFI_STATUS
+EFIAPI
+FvReadSection (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL *This,
+ IN EFI_GUID *NameGuid,
+ IN EFI_SECTION_TYPE SectionType,
+ IN UINTN SectionInstance,
+ IN OUT VOID **Buffer,
+ IN OUT UINTN *BufferSize,
+ OUT UINT32 *AuthenticationStatus
+ )
+{
+ FIRMWARE_VOLUME_PRIVATE_DATA *Private;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FirmwareVolume2;
+
+ Private = FIRMWARE_VOLUME_PRIVATE_DATA_FROM_THIS (This);
+ FirmwareVolume2 = Private->FirmwareVolume2;
+
+ return FirmwareVolume2->ReadSection (
+ FirmwareVolume2,
+ NameGuid,
+ SectionType,
+ SectionInstance,
+ Buffer,
+ BufferSize,
+ AuthenticationStatus
+ );
+}
+
+/**
+ Write the supplied file (NameGuid) to the FV.
+
+ @param This Calling context
+ @param NumberOfFiles Indicates the number of file records pointed to by FileData
+ @param WritePolicy Indicates the level of reliability of the write with respect to
+ things like power failure events.
+ @param FileData A pointer to an array of EFI_FV_WRITE_FILE_DATA structures. Each
+ element in the array indicates a file to write, and there are
+ NumberOfFiles elements in the input array.
+
+ @retval EFI_SUCCESS The write completed successfully.
+ @retval EFI_OUT_OF_RESOURCES The firmware volume does not have enough free space to store file(s).
+ @retval EFI_DEVICE_ERROR A hardware error occurred when attempting to access the firmware volume.
+ @retval EFI_WRITE_PROTECTED The firmware volume is configured to disallow writes.
+ @retval EFI_NOT_FOUND A delete was requested, but the requested file was not
+ found in the firmware volume.
+ @retval EFI_INVALID_PARAMETER A delete was requested with a multiple file write.
+ An unsupported WritePolicy was requested.
+ An unknown file type was specified.
+ A file system specific error has occurred.
+
+**/
+EFI_STATUS
+EFIAPI
+FvWriteFile (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL *This,
+ IN UINT32 NumberOfFiles,
+ IN EFI_FV_WRITE_POLICY WritePolicy,
+ IN EFI_FV_WRITE_FILE_DATA *FileData
+ )
+{
+ FIRMWARE_VOLUME_PRIVATE_DATA *Private;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FirmwareVolume2;
+ EFI_FV_WRITE_FILE_DATA *PiFileData;
+ EFI_STATUS Status;
+ UINTN Index;
+
+ Private = FIRMWARE_VOLUME_PRIVATE_DATA_FROM_THIS (This);
+ FirmwareVolume2 = Private->FirmwareVolume2;
+
+ PiFileData = AllocateCopyPool (sizeof (EFI_FV_WRITE_FILE_DATA), FileData);
+ ASSERT (PiFileData != NULL);
+
+ //
+ // Framework Spec assume firmware files are Memory-Mapped.
+ //
+ for (Index = 0; Index < NumberOfFiles; Index++) {
+ PiFileData[Index].FileAttributes |= EFI_FV_FILE_ATTRIB_MEMORY_MAPPED;
+ }
+
+ Status = FirmwareVolume2->WriteFile (
+ FirmwareVolume2,
+ NumberOfFiles,
+ WritePolicy,
+ (EFI_FV_WRITE_FILE_DATA *)FileData
+ );
+
+ FreePool (PiFileData);
+ return Status;
+}
+
+/**
+ Given the input key, search for the next matching file in the volume.
+
+ @param This Calling context
+ @param Key Pointer to a caller allocated buffer that contains an implementation
+ specific key that is used to track where to begin searching on
+ successive calls.
+ @param FileType Indicates the file type to filter for
+ @param NameGuid Guid filename of the file found
+ @param Attributes Attributes of the file found
+ @param Size Size in bytes of the file found
+
+ @retval EFI_SUCCESS The output parameters are filled with data obtained from
+ the first matching file that was found.
+ @retval EFI_NOT_FOUND No files of type FileType were found.
+ @retval EFI_DEVICE_ERROR A hardware error occurred when attempting to access
+ the firmware volume.
+ @retval EFI_ACCESS_DENIED The firmware volume is configured to disallow reads.
+
+**/
+EFI_STATUS
+EFIAPI
+FvGetNextFile (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL *This,
+ IN OUT VOID *Key,
+ IN OUT EFI_FV_FILETYPE *FileType,
+ OUT EFI_GUID *NameGuid,
+ OUT EFI_FV_FILE_ATTRIBUTES *Attributes,
+ OUT UINTN *Size
+ )
+{
+ FIRMWARE_VOLUME_PRIVATE_DATA *Private;
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FirmwareVolume2;
+ EFI_STATUS Status;
+
+ Private = FIRMWARE_VOLUME_PRIVATE_DATA_FROM_THIS (This);
+ FirmwareVolume2 = Private->FirmwareVolume2;
+
+ Status = FirmwareVolume2->GetNextFile (
+ FirmwareVolume2,
+ Key,
+ FileType,
+ NameGuid,
+ Attributes,
+ Size
+ );
+
+ //
+ // For Framework FV attrbutes, only alignment fields are valid.
+ //
+ *Attributes = *Attributes & EFI_FV_FILE_ATTRIB_ALIGNMENT;
+
+ return Status;
+}
+
+//
+// Firmware Volume Protocol template
+//
+EFI_EVENT mFvRegistration;
+
+FIRMWARE_VOLUME_PRIVATE_DATA gFirmwareVolumePrivateDataTemplate = {
+ FIRMWARE_VOLUME_PRIVATE_DATA_SIGNATURE,
+ {
+ FvGetVolumeAttributes,
+ FvSetVolumeAttributes,
+ FvReadFile,
+ FvReadSection,
+ FvWriteFile,
+ FvGetNextFile,
+ 0,
+ NULL
+ },
+ NULL
+};
+
+//
+// Module globals
+//
+/**
+ This notification function is invoked when an instance of the
+ EFI_FIRMWARE_VOLUME2_PROTOCOL is produced. It installs another instance of the
+ EFI_FIRMWARE_VOLUME_PROTOCOL on the same handle.
+
+ @param Event The event that occured
+ @param Context Context of event. Not used in this nofication function.
+
+**/
+VOID
+EFIAPI
+FvNotificationEvent (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ EFI_STATUS Status;
+ UINTN BufferSize;
+ EFI_HANDLE Handle;
+ FIRMWARE_VOLUME_PRIVATE_DATA *Private;
+ EFI_FIRMWARE_VOLUME_PROTOCOL *FirmwareVolume;
+
+ while (TRUE) {
+ BufferSize = sizeof (Handle);
+ Status = gBS->LocateHandle (
+ ByRegisterNotify,
+ &gEfiFirmwareVolume2ProtocolGuid,
+ mFvRegistration,
+ &BufferSize,
+ &Handle
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // Exit Path of While Loop....
+ //
+ break;
+ }
+
+ //
+ // Skip this handle if the Firmware Volume Protocol is already installed
+ //
+ Status = gBS->HandleProtocol (
+ Handle,
+ &gEfiFirmwareVolumeProtocolGuid,
+ (VOID **)&FirmwareVolume
+ );
+ if (!EFI_ERROR (Status)) {
+ continue;
+ }
+
+ //
+ // Allocate private data structure
+ //
+ Private = AllocateCopyPool (sizeof (FIRMWARE_VOLUME_PRIVATE_DATA), &gFirmwareVolumePrivateDataTemplate);
+ if (Private == NULL) {
+ continue;
+ }
+
+ //
+ // Retrieve the Firmware Volume2 Protocol
+ //
+ Status = gBS->HandleProtocol (
+ Handle,
+ &gEfiFirmwareVolume2ProtocolGuid,
+ (VOID **)&Private->FirmwareVolume2
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Fill in rest of private data structure
+ //
+ Private->FirmwareVolume.KeySize = Private->FirmwareVolume2->KeySize;
+ Private->FirmwareVolume.ParentHandle = Private->FirmwareVolume2->ParentHandle;
+
+ //
+ // Install Firmware Volume Protocol onto same handle
+ //
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &Handle,
+ &gEfiFirmwareVolumeProtocolGuid,
+ &Private->FirmwareVolume,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+}
+
+
+/**
+ The user Entry Point for DXE driver. 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
+InitializeFirmwareVolume2 (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EfiCreateProtocolNotifyEvent (
+ &gEfiFirmwareVolume2ProtocolGuid,
+ TPL_CALLBACK,
+ FvNotificationEvent,
+ NULL,
+ &mFvRegistration
+ );
+ return EFI_SUCCESS;
+}
diff --git a/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.cif b/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.cif
new file mode 100644
index 0000000..298ce70
--- /dev/null
+++ b/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.cif
@@ -0,0 +1,11 @@
+<component>
+ name = "FvOnFv2Thunk"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\FvOnFv2Thunk"
+ RefName = "FvOnFv2Thunk"
+[files]
+"FvOnFv2Thunk.sdl"
+"FvOnFv2Thunk.mak"
+"FvOnFv2Thunk.dxs"
+"FvOnFv2Thunk.c"
+<endComponent>
diff --git a/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.dxs b/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.dxs
new file mode 100644
index 0000000..74a64cc
--- /dev/null
+++ b/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.dxs
@@ -0,0 +1,47 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/FvOnFv2Thunk/FvOnFv2Thunk.dxs 1 4/25/12 1:05p Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 4/25/12 1:05p $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/FvOnFv2Thunk/FvOnFv2Thunk.dxs $
+//
+// 1 4/25/12 1:05p Yurenlai
+// FvOnFv2Thunk initialization.
+//
+//*************************************************************************
+
+DEPENDENCY_START
+ TRUE
+DEPENDENCY_END
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.mak b/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.mak
new file mode 100644
index 0000000..551de97
--- /dev/null
+++ b/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.mak
@@ -0,0 +1,55 @@
+# /*++
+#
+# --*/
+all : FvOnFv2Thunk
+
+FvOnFv2Thunk : $(BUILD_DIR)\FvOnFv2Thunk.mak FvOnFv2ThunkBin
+
+$(BUILD_DIR)\FvOnFv2Thunk.mak : $(FvOnFv2Thunk_DIR)\FvOnFv2Thunk.cif $(FvOnFv2Thunk_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(FvOnFv2Thunk_DIR)\FvOnFv2Thunk.cif $(CIF2MAK_DEFAULTS)
+
+FvOnFv2Thunk_INCLUDES = \
+ $(EdkIIGlueLib_INCLUDES)
+
+FvOnFv2Thunk_DEFINES = $(MY_DEFINES)\
+ /D"__EDKII_GLUE_MODULE_ENTRY_POINT__=InitializeFirmwareVolume2"\
+ /D __EDKII_GLUE_BASE_IO_LIB_INTRINSIC__ \
+ /D __EDKII_GLUE_BASE_MEMORY_LIB__ \
+ /D __EDKII_GLUE_UEFI_DEVICE_PATH_LIB__ \
+ /D __EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__ \
+ /D __EDKII_GLUE_UEFI_LIB__ \
+ /D __EDKII_GLUE_DXE_MEMORY_ALLOCATION_LIB__ \
+ /D __EDKII_GLUE_BASE_PCI_LIB_PCI_EXPRESS__ \
+ /D __EDKII_GLUE_DXE_REPORT_STATUS_CODE_LIB__ \
+ /D __EDKII_GLUE_DXE_DEBUG_LIB_REPORT_STATUS_CODE__ \
+ /D __EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__
+
+FvOnFv2Thunk_LIB_LINKS =\
+!IF "$(x64_BUILD)"=="1"
+ $(EdkIIGlueBaseLibX64_LIB)\
+!ELSE
+ $(EdkIIGlueBaseLibIA32_LIB)\
+!ENDIF
+ $(EdkIIGlueBaseIoLibIntrinsic_LIB)\
+ $(EdkIIGlueBaseMemoryLib_LIB)\
+ $(EdkIIGlueDxeMemoryAllocationLib_LIB)\
+ $(EdkIIGlueUefiBootServicesTableLib_LIB)\
+ $(EdkIIGlueUefiLib_LIB)\
+ $(EdkIIGlueDxeReportStatusCodeLib_LIB)\
+ $(EdkIIGlueDxeDebugLibReportStatusCode_LIB)\
+ $(EDKFRAMEWORKPROTOCOLLIB)\
+ $(EDKPROTOCOLLIB)
+
+FvOnFv2ThunkBin : $(FvOnFv2Thunk_LIB_LINKS)
+ $(MAKE) /$(MAKEFLAGS) $(EDKIIGLUE_DEFAULTS)\
+ /f $(BUILD_DIR)\FvOnFv2Thunk.mak all\
+ NAME=FvOnFv2Thunk\
+ "MY_INCLUDES=$(FvOnFv2Thunk_INCLUDES)"\
+ "MY_DEFINES=$(FvOnFv2Thunk_DEFINES)" \
+ GUID=5007A40E-A5E0-44f7-86AE-662F9A91DA26\
+ ENTRY_POINT=_ModuleEntryPoint\
+ EDKIIModule=DXEDRIVER\
+ DEPEX1=$(FvOnFv2Thunk_DIR)\FvOnFv2Thunk.dxs \
+ DEPEX1_TYPE=EFI_SECTION_DXE_DEPEX \
+ TYPE=BS_DRIVER\
+ COMPRESS=1\
diff --git a/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.sdl b/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.sdl
new file mode 100644
index 0000000..bc09146
--- /dev/null
+++ b/Board/EM/Platform/FvOnFv2Thunk/FvOnFv2Thunk.sdl
@@ -0,0 +1,68 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/FvOnFv2Thunk/FvOnFv2Thunk.sdl 1 4/25/12 1:04p Yurenlai $
+#
+# $Revision: 1 $
+#
+# $Date: 4/25/12 1:04p $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/FvOnFv2Thunk/FvOnFv2Thunk.sdl $
+#
+# 1 4/25/12 1:04p Yurenlai
+# FvOnFv2Thunk initialization.
+#
+#*************************************************************************
+TOKEN
+ Name = "FvOnFv2Thunk_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable FvOnFv2Thunk support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+ Token = "PI_SPECIFICATION_VERSION" ">=" "0x10000"
+End
+
+PATH
+ Name = "FvOnFv2Thunk_DIR"
+End
+
+MODULE
+ Help = "Includes FvOnFv2Thunk.mak to Project"
+ File = "FvOnFv2Thunk.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\FvOnFv2Thunk.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = BeforeParent
+End
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
diff --git a/Board/EM/Platform/GenAcpiTable.exe b/Board/EM/Platform/GenAcpiTable.exe
new file mode 100644
index 0000000..401283d
--- /dev/null
+++ b/Board/EM/Platform/GenAcpiTable.exe
Binary files differ
diff --git a/Board/EM/Platform/Include/IntelPlatformInclude.cif b/Board/EM/Platform/Include/IntelPlatformInclude.cif
new file mode 100644
index 0000000..a3d47bd
--- /dev/null
+++ b/Board/EM/Platform/Include/IntelPlatformInclude.cif
@@ -0,0 +1,10 @@
+<component>
+ name = "IntelPlatformInclude"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\Include"
+ RefName = "IntelPlatformInclude"
+[files]
+"IntelPlatformInclude.sdl"
+[parts]
+"IntelPlatformPpi"
+<endComponent>
diff --git a/Board/EM/Platform/Include/IntelPlatformInclude.sdl b/Board/EM/Platform/Include/IntelPlatformInclude.sdl
new file mode 100644
index 0000000..636eb7d
--- /dev/null
+++ b/Board/EM/Platform/Include/IntelPlatformInclude.sdl
@@ -0,0 +1,15 @@
+TOKEN
+ Name = "INTEL_PLATFORM_INCLUDE_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable INTEL_PLATFORM_INCLUDE support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+End
+
+PATH
+ Name = "IntelPlatformInclude_DIR"
+End
+
+
diff --git a/Board/EM/Platform/Include/Ppi/IntelPlatformPpi.cif b/Board/EM/Platform/Include/Ppi/IntelPlatformPpi.cif
new file mode 100644
index 0000000..011427c
--- /dev/null
+++ b/Board/EM/Platform/Include/Ppi/IntelPlatformPpi.cif
@@ -0,0 +1,9 @@
+<component>
+ name = "IntelPlatformPpi"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\Include\Ppi"
+ RefName = "IntelPlatformPpi"
+[files]
+"IntelPlatformPpi.sdl"
+"TcgPeiDone.h"
+<endComponent>
diff --git a/Board/EM/Platform/Include/Ppi/IntelPlatformPpi.sdl b/Board/EM/Platform/Include/Ppi/IntelPlatformPpi.sdl
new file mode 100644
index 0000000..694dd94
--- /dev/null
+++ b/Board/EM/Platform/Include/Ppi/IntelPlatformPpi.sdl
@@ -0,0 +1,15 @@
+TOKEN
+ Name = "INTEL_PLATFORM_PPI_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable INTEL_PLATFORM_PPI support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+End
+
+PATH
+ Name = "IntelPlatformPpi_DIR"
+End
+
+
diff --git a/Board/EM/Platform/Include/Ppi/TcgPeiDone.h b/Board/EM/Platform/Include/Ppi/TcgPeiDone.h
new file mode 100644
index 0000000..5f91596
--- /dev/null
+++ b/Board/EM/Platform/Include/Ppi/TcgPeiDone.h
@@ -0,0 +1,43 @@
+/*++
+ This file contains a 'Sample Driver' and is licensed as such
+ under the terms of your license agreement with Intel or your
+ vendor. This file may be modified by the user, subject to
+ the additional terms of the license agreement
+--*/
+/*++
+
+Copyright (c) 1999 - 2010 Intel Corporation. All rights reserved
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+
+Module Name:
+
+ TcgPeiDone.h
+
+Abstract:
+
+This file contains PPI GUID installed at the end of TCG component
+initialization
+
+--*/
+#ifndef _PEI_TCGPEIDONE_PPI_H_
+#define _PEI_TCGPEIDONE_PPI_H_
+
+//
+// This is an indicator GUID without any data. It represents the fact that a PEIM
+// has written the address of the PEI_TPM_PPI_GUID into the EFI_PEI_SERVICES
+//
+#define PEI_TPM_PPI_GUID \
+{ \
+ 0xca4853f4, 0xe94b, 0x42b4, 0x86, 0x42, 0xcd, 0xe2, 0x8a, 0x7f, 0xac, 0x2d \
+}
+
+extern EFI_GUID gPeiTpmPpiGuid;
+
+#endif
diff --git a/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.cif b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.cif
new file mode 100644
index 0000000..35dcd67
--- /dev/null
+++ b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.cif
@@ -0,0 +1,12 @@
+<component>
+ name = "IntelRefVerDisplay"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\IntelRefVerDisplay"
+ RefName = "IntelRefVerDisplay"
+[files]
+"IntelRefVerDisplay.sdl"
+"IntelRefVerDisplay.mak"
+"IntelRefVerDisplay.sd"
+"IntelRefVerDisplay.uni"
+"IntelRefVerSetup.c"
+<endComponent>
diff --git a/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.mak b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.mak
new file mode 100644
index 0000000..030dbed
--- /dev/null
+++ b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.mak
@@ -0,0 +1,105 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/IntelRefVerDisplay/IntelRefVerDisplay.mak 4 6/13/12 8:51a Yurenlai $
+#
+# $Revision: 4 $
+#
+# $Date: 6/13/12 8:51a $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/IntelRefVerDisplay/IntelRefVerDisplay.mak $
+#
+# 4 6/13/12 8:51a Yurenlai
+# [TAG] None
+# [Description] 01. Implement Intel Rapid Start Technology RC version
+# info.
+# 02. Remove DPTF and TxT RefCode version in setup, because
+# they are not separate components.
+# [Files] IntelRefVerDisplay.mak, IntelRefVerDisplay.sd,
+# IntelRefVerDisplay.uni, IntelRefVerSetup.c
+#
+# 3 4/25/12 1:22p Yurenlai
+# [TAG] None
+# [Category] Improvement
+# [Description] Corrected Setup RC Version info.
+# [Files] IntelRefVerDisplay.mak, IntelRefVerSetup.c, AcpiAsl.sdl
+#
+# 2 2/24/12 1:27a Yurenlai
+# Initial IntelRefVerDisplay midule part.
+#
+# 1 2/09/12 12:39a Yurenlai
+# Initial check in.
+#
+#*************************************************************************
+#<AMI_FHDR_START>
+#
+# Name: IntelRefVerDisplay.mak
+#
+# Description: MAK file for the IntelRefVerDisplay module
+#
+#<AMI_FHDR_END>
+#*************************************************************************
+All : IntelRefVerDisplay
+
+IntelRefVerDisplay : $(BUILD_DIR)\IntelRefVerDisplay.mak
+
+SetupSdbs : $(BUILD_DIR)\IntelRefVerDisplay.sdb
+
+$(BUILD_DIR)\IntelRefVerDisplay.sdb : $(IntelRefVerDisplay_DIR)\$(@B).sd $(IntelRefVerDisplay_DIR)\$(@B).uni
+ $(STRGATHER) -i INCLUDE -parse -newdb -db $(BUILD_DIR)\$(@B).sdb $(IntelRefVerDisplay_DIR)\$(@B).uni
+ $(STRGATHER) -scan -db $(BUILD_DIR)\$(@B).sdb -od $(BUILD_DIR)\$(@B).sdb $(IntelRefVerDisplay_DIR)\$(@B).sd
+
+$(BUILD_DIR)\IntelRefVerDisplay.mak : $(IntelRefVerDisplay_DIR)\$(@B).cif $(IntelRefVerDisplay_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(IntelRefVerDisplay_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+IntelRefVerSetup_INCLUDES= \
+!if "$(INTEL_CPURC_SUPPORT)"=="1"
+ /I$(CpuProtocolLib_DIR)\
+!endif
+ /I$(INTEL_SA_PROTOCOL_LIB_DIR)\
+ /I$(INTEL_PCH_PROTOCOL_LIB_DIR)\
+ /I$(AcpiProtocolLib_DIR)\
+!if "$(iME_SUPPORT)"=="1"
+ /I$(MeProtocolLib_DIR)\
+!endif
+!if "$(IntelTXT_SUPPORT)"=="1"
+ /I$(TxtProtocolLib_DIR)\
+!endif
+!if "$(DigitalThermalSensor_SUPPORT)"=="1"
+ /I$(DtsProtocolLib_DIR)\
+!endif
+!if "$(RapidStart_SUPPORT)"=="1"
+ /I$(RapidStartProtocolLib_DIR)\
+!endif
+
+SetupBin : $(BUILD_DIR)\IntelRefVerSetup.obj
+
+$(BUILD_DIR)\IntelRefVerSetup.obj : $(PROJECT_DIR)\$(IntelRefVerDisplay_DIR)\IntelRefVerSetup.c $(BUILD_DIR)\SetupStrTokens.h
+ $(CC) $(CFLAGS) $(IntelRefVerSetup_INCLUDES) /Fo$(BUILD_DIR)\ $(IntelRefVerDisplay_DIR)\IntelRefVerSetup.c
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#************************************************************************* \ No newline at end of file
diff --git a/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.sd b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.sd
new file mode 100644
index 0000000..ee9b912
--- /dev/null
+++ b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.sd
@@ -0,0 +1,159 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/IntelRefVerDisplay/IntelRefVerDisplay.sd 4 7/11/12 4:01a Yurenlai $
+//
+// $Revision: 4 $
+//
+// $Date: 7/11/12 4:01a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/IntelRefVerDisplay/IntelRefVerDisplay.sd $
+//
+// 4 7/11/12 4:01a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Corrected Setup RefCcode Version info.
+// [Files] IntelRefVerSetup.cm IntelRefVerDisplay.sd
+//
+// 3 6/13/12 8:51a Yurenlai
+// [TAG] None
+// [Description] 01. Implement Intel Rapid Start Technology RC version
+// info.
+// 02. Remove DPTF and TxT RefCode version in setup, because
+// they are not separate components.
+// [Files] IntelRefVerDisplay.mak, IntelRefVerDisplay.sd,
+// IntelRefVerDisplay.uni, IntelRefVerSetup.c
+//
+// 2 2/24/12 1:27a Yurenlai
+// Initial IntelRefVerDisplay midule part.
+//
+// 1 2/09/12 12:39a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: IntelRefVerDisplay.sd
+//
+// Description: Setup file for IntelRefVerDisplay driver. It displays the
+// version of Intel RC Driver and its Version String in a form of Advanced
+// tab of setup screen
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+#ifdef SETUP_DATA_DEFINITION
+// Put NVRAM data definitions here.
+// For example: UINT8 Data1;
+// These definitions will be converted by the build process
+// to a definitions of SETUP_DATA fields.
+#endif
+
+#ifdef ADVANCED_FORM_SET
+
+ #ifdef FORM_SET_ITEM
+ // Define controls to be added to the main page of the formset
+ #endif
+
+ #ifdef FORM_SET_GOTO
+ // Define goto commands for the forms defined in this file
+ goto INTEL_RC_VERSION_FORM_ID,
+ prompt = STRING_TOKEN(STR_INTEL_RC_VERSION_FORM),
+ help = STRING_TOKEN(STR_INTEL_RC_VERSION_FORM_HELP);
+ #endif
+
+
+ #ifdef FORM_SET_FORM
+ // Define forms
+ #ifndef INTEL_RC_VERSION_FORM_SETUP
+ #define INTEL_RC_VERSION_FORM_SETUP
+
+ form formid = AUTO_ID(INTEL_RC_VERSION_FORM_ID),
+ title = STRING_TOKEN(STR_INTEL_RC_VERSION_FORM);
+
+#if defined (INTEL_CPURC_SUPPORT) && INTEL_CPURC_SUPPORT
+ text
+ help = STRING_TOKEN (STR_INTEL_CPU_RC_VER_HELP),
+ text = STRING_TOKEN (STR_INTEL_CPU_RC_VER_NAME),
+ text = STRING_TOKEN (STR_INTEL_CPU_RC_VER_VALUE),
+ flags = 0, key = 0;
+#endif
+
+ text
+ help = STRING_TOKEN (STR_INTEL_SA_RC_VER_HELP),
+ text = STRING_TOKEN (STR_INTEL_SA_RC_VER_NAME),
+ text = STRING_TOKEN (STR_INTEL_SA_RC_VER_VALUE),
+ flags = 0, key = 0;
+
+ text
+ help = STRING_TOKEN (STR_INTEL_PCH_RC_VER_HELP),
+ text = STRING_TOKEN (STR_INTEL_PCH_RC_VER_NAME),
+ text = STRING_TOKEN (STR_INTEL_PCH_RC_VER_VALUE),
+ flags = 0, key = 0;
+
+ text
+ help = STRING_TOKEN (STR_INTEL_ACPI_RC_VER_HELP),
+ text = STRING_TOKEN (STR_INTEL_ACPI_RC_VER_NAME),
+ text = STRING_TOKEN (STR_INTEL_ACPI_RC_VER_VALUE),
+ flags = 0, key = 0;
+
+#if defined (iME_SUPPORT) && iME_SUPPORT
+ text
+ help = STRING_TOKEN (STR_INTEL_ME_RC_VER_HELP),
+ text = STRING_TOKEN (STR_INTEL_ME_RC_VER_NAME),
+ text = STRING_TOKEN (STR_INTEL_ME_RC_VER_VALUE),
+ flags = 0, key = 0;
+#endif
+
+#if defined (DigitalThermalSensor_SUPPORT) && DigitalThermalSensor_SUPPORT
+ text
+ help = STRING_TOKEN (STR_INTEL_DTS_RC_VER_HELP),
+ text = STRING_TOKEN (STR_INTEL_DTS_RC_VER_NAME),
+ text = STRING_TOKEN (STR_INTEL_DTS_RC_VER_VALUE),
+ flags = 0, key = 0;
+#endif
+
+#if defined (RapidStart_SUPPORT) && RapidStart_SUPPORT
+ text
+ help = STRING_TOKEN (STR_INTEL_RST_RC_VER_HELP),
+ text = STRING_TOKEN (STR_INTEL_RST_RC_VER_NAME),
+ text = STRING_TOKEN (STR_INTEL_RST_RC_VER_VALUE),
+ flags = 0, key = 0;
+#endif
+
+ endform; // VERSION_FORM_ID
+
+ #endif // INTEL_RC_VERSION_FORM_SETUP
+ #endif // FORM_SET_FORM
+
+#endif // ADVANCED_FORM_SET
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//************************************************************************* \ No newline at end of file
diff --git a/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.sdl b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.sdl
new file mode 100644
index 0000000..78bc42a
--- /dev/null
+++ b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.sdl
@@ -0,0 +1,36 @@
+TOKEN
+ Name = "IntelRefVerDisplay_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable IntelRefVerDisplay support in Project"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+End
+
+PATH
+ Name = "IntelRefVerDisplay_DIR"
+End
+
+MODULE
+ Help = "Includes IntelRefVerDisplay.mak to Project"
+ File = "IntelRefVerDisplay.mak"
+End
+
+ELINK
+ Name = "InitIntelVersionInfo,"
+ Parent = "SetupStringInit"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\IntelRefVerDisplay.sdb"
+ Parent = "SETUP_SDBS"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(IntelRefVerDisplay_DIR)\IntelRefVerDisplay.sd"
+ Parent = "SETUP_DEFINITIONS"
+ InvokeOrder = AfterParent
+End
diff --git a/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.uni b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.uni
new file mode 100644
index 0000000..ddd4757
--- /dev/null
+++ b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerDisplay.uni
Binary files differ
diff --git a/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerSetup.c b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerSetup.c
new file mode 100644
index 0000000..ada088a
--- /dev/null
+++ b/Board/EM/Platform/IntelRefVerDisplay/IntelRefVerSetup.c
@@ -0,0 +1,261 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/IntelRefVerDisplay/IntelRefVerSetup.c 5 7/11/12 4:01a Yurenlai $
+//
+// $Revision: 5 $
+//
+// $Date: 7/11/12 4:01a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/IntelRefVerDisplay/IntelRefVerSetup.c $
+//
+// 5 7/11/12 4:01a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Corrected Setup RefCcode Version info.
+// [Files] IntelRefVerSetup.cm IntelRefVerDisplay.sd
+//
+// 4 6/13/12 8:51a Yurenlai
+// [TAG] None
+// [Description] 01. Implement Intel Rapid Start Technology RC version
+// info.
+// 02. Remove DPTF and TxT RefCode version in setup, because
+// they are not separate components.
+// [Files] IntelRefVerDisplay.mak, IntelRefVerDisplay.sd,
+// IntelRefVerDisplay.uni, IntelRefVerSetup.c
+//
+// 3 4/25/12 1:22p Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Corrected Setup RC Version info.
+// [Files] IntelRefVerDisplay.mak, IntelRefVerSetup.c, AcpiAsl.sdl
+//
+// 2 2/24/12 1:28a Yurenlai
+// Initial IntelRefVerDisplay midule part.
+//
+// 1 2/09/12 12:39a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: IntelRefVerSetup.c
+//
+// Description: Display the verison of Intel RC drivers
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+//----------------------------------------------------------------------------
+// Include(s)
+//----------------------------------------------------------------------------
+#include <Setup.h>
+#include <SetupStrTokens.h>
+#include <AmiDxeLib.h>
+#include <Token.h>
+#if defined (INTEL_CPURC_SUPPORT) && INTEL_CPURC_SUPPORT
+#include <CpuInfo\CpuInfo.h>
+#endif
+#include <SaInfo\SaInfo.h>
+#include <PchInfo\PchInfo.h>
+#include <AcpiInfo\AcpiInfo.h>
+#if defined (iME_SUPPORT) && iME_SUPPORT
+#include <MeRcInfo\MeRcInfo.h>
+#endif
+#if defined (IntelTXT_SUPPORT) && IntelTXT_SUPPORT
+#include <TxtInfo\TxtInfo.h>
+#endif
+#if defined (DigitalThermalSensor_SUPPORT) && DigitalThermalSensor_SUPPORT
+#include <DtsInfo\DtsInfo.h>
+#endif
+#if defined (RapidStart_SUPPORT) && RapidStart_SUPPORT
+#include <RapidStartInfo\RapidStartInfo.h>
+#endif
+
+//<AMI_PHDR_START>
+//---------------------------------------------------------------------------
+//
+// Name: UpdateStringValue
+//
+// Description: Update the value of Intel RC drivers string
+//
+// Input: UINT32 RCVersion - Intel RC driver version
+// STRING_REF StrRef - String Token defining which string in the database
+//
+// Output: VOID
+//
+//---------------------------------------------------------------------------
+//<AMI_PHDR_END>
+
+VOID
+UpdateStringValue(
+ EFI_HII_HANDLE HiiHandle,
+ UINT32 RCVersion,
+ STRING_REF StrRef
+)
+{
+ UINT8 x, y, z, w;
+
+ x = (UINT8) ((RCVersion & 0xFF000000) >> 24);
+ y = (UINT8) ((RCVersion & 0xFF0000) >> 16);
+ z = (UINT8) ((RCVersion & 0xFF00) >> 8);
+ w = (UINT8) ((RCVersion & 0xFF));
+
+ InitString ( HiiHandle,
+ StrRef,
+ L"%d.%d.%d.%d",
+ x, y, z, w);
+}
+
+//<AMI_PHDR_START>
+//---------------------------------------------------------------------------
+//
+// Name: InitIntelVersionInfo
+//
+// Description: This function will fullfill the puspose to retrive the version
+// of Intel RC Drivers and put into variables of IntelRefVerDisplay.uni file.
+//
+// Input: EFI_HII_HANDLE HiiHandle
+//
+// Output: VOID
+//
+//---------------------------------------------------------------------------
+//<AMI_PHDR_END>
+
+VOID
+InitIntelVersionInfo(
+ EFI_HII_HANDLE HiiHandle,
+ UINT16 Class
+)
+{
+ EFI_STATUS Status;
+#if defined (INTEL_CPURC_SUPPORT) && INTEL_CPURC_SUPPORT
+ EFI_GUID gDxeCpuInfoProtocolGuid = DXE_CPU_INFO_PROTOCOL_GUID;
+ DXE_CPU_INFO_PROTOCOL *CpuInfo;
+#endif
+ EFI_GUID gEfiSaInfoProtocolGuid = EFI_SA_INFO_PROTOCOL_GUID;
+ EFI_SA_INFO_PROTOCOL *SaInfo;
+ EFI_GUID gEfiPchInfoProtocolGuid = EFI_PCH_INFO_PROTOCOL_GUID;
+ EFI_PCH_INFO_PROTOCOL *PchInfo;
+ EFI_GUID gEfiAcpiInfoProtocolGuid = EFI_ACPI_INFO_PROTOCOL_GUID;
+ EFI_ACPI_INFO_PROTOCOL *AcpiInfo;
+#if defined (iME_SUPPORT) && iME_SUPPORT
+ EFI_GUID gEfiMeRcInfoProtocolGuid = EFI_ME_RC_INFO_PROTOCOL_GUID;
+ EFI_ME_RC_INFO_PROTOCOL *MeInfo;
+#endif
+#if defined (DigitalThermalSensor_SUPPORT) && DigitalThermalSensor_SUPPORT
+ EFI_GUID gEfiDtsInfoProtocolGuid = EFI_DTS_INFO_PROTOCOL_GUID;
+ EFI_DTS_INFO_PROTOCOL *DtsInfo;
+#endif
+#if defined (RapidStart_SUPPORT) && RapidStart_SUPPORT
+ EFI_GUID gRapidStartInfoProtocolGuid = RAPID_START_INFO_PROTOCOL_GUID;
+ RAPID_START_INFO_PROTOCOL *RSTInfo;
+#endif
+
+ if (Class != ADVANCED_FORM_SET_CLASS) {
+ return;
+ }
+
+#if defined (INTEL_CPURC_SUPPORT) && INTEL_CPURC_SUPPORT
+ Status = pBS->LocateProtocol(&gDxeCpuInfoProtocolGuid,
+ NULL,
+ &CpuInfo);
+ if (!EFI_ERROR (Status)) {
+ UpdateStringValue(HiiHandle,
+ CpuInfo->RcVersion,
+ STRING_TOKEN (STR_INTEL_CPU_RC_VER_VALUE));
+ }
+#endif
+
+ // System Agent RefCode Version.
+ Status = pBS->LocateProtocol(&gEfiSaInfoProtocolGuid,
+ NULL,
+ &SaInfo);
+ if (!EFI_ERROR (Status)) {
+ UpdateStringValue(HiiHandle,
+ SaInfo->RCVersion,
+ STRING_TOKEN (STR_INTEL_SA_RC_VER_VALUE));
+ }
+
+ // Pch RefCode Version.
+ Status = pBS->LocateProtocol(&gEfiPchInfoProtocolGuid,
+ NULL,
+ &PchInfo);
+ if (!EFI_ERROR (Status)) {
+ UpdateStringValue(HiiHandle,
+ PchInfo->RCVersion,
+ STRING_TOKEN (STR_INTEL_PCH_RC_VER_VALUE));
+ }
+
+ // ACPI RefCode Version.
+ Status = pBS->LocateProtocol(&gEfiAcpiInfoProtocolGuid,
+ NULL,
+ &AcpiInfo);
+ if (!EFI_ERROR (Status)) {
+ UpdateStringValue(HiiHandle,
+ AcpiInfo->RCVersion,
+ STRING_TOKEN (STR_INTEL_ACPI_RC_VER_VALUE));
+ };
+
+#if defined (iME_SUPPORT) && iME_SUPPORT
+ Status = pBS->LocateProtocol(&gEfiMeRcInfoProtocolGuid,
+ NULL,
+ &MeInfo);
+ if (!EFI_ERROR (Status)) {
+ UpdateStringValue(HiiHandle,
+ MeInfo->RCVersion,
+ STRING_TOKEN (STR_INTEL_ME_RC_VER_VALUE));
+ }
+#endif
+
+#if defined (DigitalThermalSensor_SUPPORT) && DigitalThermalSensor_SUPPORT
+ Status = pBS->LocateProtocol(&gEfiDtsInfoProtocolGuid,
+ NULL,
+ &DtsInfo);
+ if (!EFI_ERROR (Status)) {
+ UpdateStringValue(HiiHandle,
+ DtsInfo->RCVersion,
+ STRING_TOKEN (STR_INTEL_DTS_RC_VER_VALUE));
+ }
+#endif
+
+#if defined (RapidStart_SUPPORT) && RapidStart_SUPPORT
+ Status = pBS->LocateProtocol(&gRapidStartInfoProtocolGuid,
+ NULL,
+ &RSTInfo);
+ if (!EFI_ERROR (Status)) {
+ UpdateStringValue(HiiHandle,
+ RSTInfo->RCVersion,
+ STRING_TOKEN (STR_INTEL_RST_RC_VER_VALUE));
+ }
+#endif
+
+ return;
+}
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.c b/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.c
new file mode 100644
index 0000000..f48c576
--- /dev/null
+++ b/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.c
@@ -0,0 +1,288 @@
+
+#include <Protocol\CpuIo.h>
+#include <AmiDxeLib.h>
+#include "KscLib.h"
+
+EFI_CPU_IO_PROTOCOL *mDxeKscLibCpuIo;
+
+BOOLEAN mDxeKscLibInitialized = FALSE;
+extern EFI_BOOT_SERVICES *pBS;
+
+//
+// Function implemenations
+//
+EFI_STATUS
+InitializeKscLib (
+ VOID
+ )
+/*++
+
+Routine Description:
+
+ Initialize the library.
+ The DXE library only requires CPU IO protocol, so this will locate CPU IO protocol
+ and save it for future use.
+
+Arguments:
+
+ None.
+
+Returns:
+
+ EFI_SUCCESS - KscLib is successfully initialized.
+
+--*/
+{
+ EFI_STATUS Status;
+ UINT8 Data;
+
+ //
+ // Locate CpuIo protocol
+ //
+
+ Status = pBS->LocateProtocol (&gEfiCpuIoProtocolGuid, NULL, &mDxeKscLibCpuIo);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Fail if EC doesn't exist.
+ //
+ mDxeKscLibCpuIo->Io.Read (mDxeKscLibCpuIo, EfiCpuIoWidthUint8, KSC_C_PORT, 1, &Data);
+ if(Data == 0xff){
+ mDxeKscLibInitialized = FALSE;
+ Status = EFI_DEVICE_ERROR;
+ } else {
+ mDxeKscLibInitialized = TRUE;
+ Status = EFI_SUCCESS;
+ }
+ return Status;
+}
+
+EFI_STATUS
+SendKscCommand (
+ UINT8 Command
+ )
+/*++
+
+Routine Description:
+
+ Sends command to Keyboard System Controller.
+
+Arguments:
+
+ Command - Command byte to send
+
+Returns:
+
+ EFI_SUCCESS - Command success
+ EFI_DEVICE_ERROR - Command error
+
+--*/
+{
+ UINTN Index;
+ UINT8 KscStatus;
+ EFI_STATUS Status;
+
+ KscStatus = 0;
+ Index = 0;
+
+ //
+ // Locate CpuIo protocol
+ //
+
+ Status = pBS->LocateProtocol (&gEfiCpuIoProtocolGuid, NULL, &mDxeKscLibCpuIo);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Wait for KSC to be ready (with a timeout)
+ //
+ ReceiveKscStatus (&KscStatus);
+ while (((KscStatus & KSC_S_IBF) != 0) && (Index < KSC_TIME_OUT)) {
+ pBS->Stall (15);
+ ReceiveKscStatus (&KscStatus);
+ Index++;
+ }
+ if (Index >= KSC_TIME_OUT) {
+ return EFI_DEVICE_ERROR;
+ }
+
+ //
+ // Send the KSC command
+ //
+ Status = mDxeKscLibCpuIo->Io.Write (
+ mDxeKscLibCpuIo,
+ EfiCpuIoWidthUint8,
+ KSC_C_PORT,
+ 1,
+ &Command
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+ReceiveKscStatus (
+ UINT8 *KscStatus
+ )
+/*++
+
+Routine Description:
+
+ Receives status from Keyboard System Controller.
+
+Arguments:
+
+ Status - Status byte to receive
+
+Returns:
+
+ EFI_SUCCESS - Always success
+
+--*/
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ //
+ // Locate CpuIo protocol
+ //
+
+ Status = pBS->LocateProtocol (&gEfiCpuIoProtocolGuid, NULL, &mDxeKscLibCpuIo);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Read and return the status
+ //
+ Status = mDxeKscLibCpuIo->Io.Read (
+ mDxeKscLibCpuIo,
+ EfiCpuIoWidthUint8,
+ KSC_C_PORT,
+ 1,
+ KscStatus
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+SendKscData (
+ UINT8 Data
+ )
+/*++
+
+Routine Description:
+
+ Sends data to Keyboard System Controller.
+
+Arguments:
+
+ Data - Data byte to send
+
+Returns:
+
+ EFI_SUCCESS - Success
+ EFI_TIMEOUT - Timeout
+ Other - Failed
+
+--*/
+{
+ UINTN Index;
+ UINT8 KscStatus;
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ Index = 0;
+
+ //
+ // Locate CpuIo protocol
+ //
+ Status = pBS->LocateProtocol (&gEfiCpuIoProtocolGuid, NULL, &mDxeKscLibCpuIo);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Wait for KSC to be ready (with a timeout)
+ //
+ ReceiveKscStatus (&KscStatus);
+ while (((KscStatus & KSC_S_IBF) != 0) && (Index < KSC_TIME_OUT)) {
+ pBS->Stall (15);
+ ReceiveKscStatus (&KscStatus);
+ Index++;
+ }
+ if (Index >= KSC_TIME_OUT) {
+ return EFI_DEVICE_ERROR;
+ }
+
+ //
+ // Send the data and return
+ //
+ Status = mDxeKscLibCpuIo->Io.Write (
+ mDxeKscLibCpuIo,
+ EfiCpuIoWidthUint8,
+ KSC_D_PORT,
+ 1,
+ &Data
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+ReceiveKscData (
+ UINT8 *Data
+ )
+/*++
+
+Routine Description:
+
+ Receives data from Keyboard System Controller.
+
+Arguments:
+
+ Data - Data byte received
+
+Returns:
+
+ EFI_SUCCESS - Read success
+ EFI_DEVICE_ERROR - Read error
+
+--*/
+{
+ UINTN Index;
+ UINT8 KscStatus;
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ Index = 0;
+
+ //
+ // Locate CpuIo protocol
+ //
+
+ Status = pBS->LocateProtocol (&gEfiCpuIoProtocolGuid, NULL, &mDxeKscLibCpuIo);
+ ASSERT_EFI_ERROR (Status);
+ //
+ // Wait for KSC to be ready (with a timeout)
+ //
+ ReceiveKscStatus (&KscStatus);
+ while (((KscStatus & KSC_S_OBF) == 0) && (Index < KSC_TIME_OUT)) {
+ pBS->Stall (15);
+ ReceiveKscStatus (&KscStatus);
+ Index++;
+ }
+ if (Index >= KSC_TIME_OUT) {
+ return EFI_DEVICE_ERROR;
+ }
+
+ //
+ // Read KSC data and return
+ //
+ Status = mDxeKscLibCpuIo->Io.Read (
+ mDxeKscLibCpuIo,
+ EfiCpuIoWidthUint8,
+ KSC_D_PORT,
+ 1,
+ Data
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
diff --git a/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.cif b/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.cif
new file mode 100644
index 0000000..887e0f7
--- /dev/null
+++ b/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.cif
@@ -0,0 +1,11 @@
+<component>
+ name = "DxeKscLib"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\Library\Dxe\DxeKscLib"
+ RefName = "DxeKscLib"
+[files]
+"DxeKscLib.sdl"
+"DxeKscLib.mak"
+"DxeKscLib.c"
+"KscLib.h"
+<endComponent>
diff --git a/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.mak b/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.mak
new file mode 100644
index 0000000..d60b49e
--- /dev/null
+++ b/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.mak
@@ -0,0 +1,65 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/IntelPlatformProtocolLib/DxeKscLib/DxeKscLib.mak 1 2/09/12 12:39a Yurenlai $
+#
+# $Revision: 1 $
+#
+# $Date: 2/09/12 12:39a $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/IntelPlatformProtocolLib/DxeKscLib/DxeKscLib.mak $
+#
+# 1 2/09/12 12:39a Yurenlai
+# Initial check in.
+#
+#*************************************************************************
+#<AMI_FHDR_START>
+#
+# Name: <ComponentName>.mak
+#
+# Description:
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+all : DxeKscLib
+
+$(BUILD_DIR)\DxeKscLib.lib : DxeKscLib
+
+DxeKscLib : $(BUILD_DIR)\DxeKscLib.mak DxeKscLibBin
+
+$(BUILD_DIR)\DxeKscLib.mak : $(DxeKscLib_DIR)\$(@B).cif $(DxeKscLib_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(DxeKscLib_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+DxeKscLibBin : $(EFIDRIVERLIB)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\DxeKscLib.mak all\
+ "CFLAGS=$(CFLAGS) "\
+ TYPE=LIBRARY \
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#************************************************************************* \ No newline at end of file
diff --git a/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.sdl b/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.sdl
new file mode 100644
index 0000000..677ad94
--- /dev/null
+++ b/Board/EM/Platform/Library/Dxe/DxeKscLib/DxeKscLib.sdl
@@ -0,0 +1,40 @@
+TOKEN
+ Name = "INTEL_CRB_DXE_KSC_LIB_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable INTEL_CRB_DXE_KSC_LIB(EC:H8)support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+End
+
+PATH
+ Name = "DxeKscLib_DIR"
+End
+
+MODULE
+ Help = "Includes DxeKscLib.mak to Project"
+ File = "DxeKscLib.mak"
+End
+
+ELINK
+ Name = "DxeKscLib_LIB"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\DxeKscLib.lib"
+ Parent = "DxeKscLib_LIB"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "DxeKscLib_INCLUDES"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "/I $(DxeKscLib_DIR)"
+ Parent = "DxeKscLib_INCLUDES"
+ InvokeOrder = AfterParent
+End
diff --git a/Board/EM/Platform/Library/Dxe/DxeKscLib/KscLib.h b/Board/EM/Platform/Library/Dxe/DxeKscLib/KscLib.h
new file mode 100644
index 0000000..2aee1c7
--- /dev/null
+++ b/Board/EM/Platform/Library/Dxe/DxeKscLib/KscLib.h
@@ -0,0 +1,260 @@
+
+#ifndef _KSC_LIB_H_
+#define _KSC_LIB_H_
+
+//
+// Include files
+//
+///#include "Tiano.h"
+
+//
+// Timeout if KSC command/data fails
+//
+#define KSC_TIME_OUT 0x20000
+
+//
+// The Keyboard and System management Controller (KSC) implements a standard 8042 keyboard
+// controller interface at ports 0x60/0x64 and a ACPI compliant system management controller
+// at ports 0x62/0x66. Port 0x66 is the command and status port, port 0x62 is the data port.
+//
+#define KSC_D_PORT 0x62
+#define KSC_C_PORT 0x66
+
+//
+// Status Port 0x62
+//
+#define KSC_S_OVR_TMP 0x80 // Current CPU temperature exceeds the threshold
+#define KSC_S_SMI_EVT 0x40 // SMI event is pending
+#define KSC_S_SCI_EVT 0x20 // SCI event is pending
+#define KSC_S_BURST 0x10 // KSC is in burst mode or normal mode
+#define KSC_S_CMD 0x08 // Byte in data register is command/data
+#define KSC_S_IGN 0x04 // Ignored
+#define KSC_S_IBF 0x02 // Input buffer is full/empty
+#define KSC_S_OBF 0x01 // Output buffer is full/empty
+
+//
+// KSC commands that are issued to the KSC through the command port (0x66).
+// New commands and command parameters should only be written by the host when IBF=0.
+// Data read from the KSC data port is valid only when OBF=1.
+//
+#define KSC_C_SMI_NOTIFY_ENABLE 0x04 // Enable SMI notifications to the host
+#define KSC_C_SMI_NOTIFY_DISABLE 0x05 // SMI notifications are disabled and pending notifications cleared
+#define KSC_C_QUERY_SYS_STATUS 0x06 // Returns 1 byte of information about the system status
+#define KSC_B_SYS_STATUS_FAN 0x40 // Fan status (1 = ON)
+#define KSC_B_SYS_STATUS_DOCK 0x20 // Dock status (1 = Docked)
+#define KSC_B_SYS_STATUS_AC 0x10 // AC power (1 = AC powered)
+#define KSC_B_SYS_STATUS_THERMAL 0x0F // CPU thermal state (0 ~ 9)
+#define KSC_C_FAB_ID 0x0D // Get the board fab ID in the lower 3 bits
+#define KSC_C_SYSTEM_POWER_OFF 0x22 // Turn off the system power
+#define KSC_C_LAN_ON 0x46 // Turn on the power to LAN through EC/KSC
+#define KSC_C_LAN_OFF 0x47 // Turn off the power to LAN through EC/KSC
+#define KSC_C_GET_TEMP 0x50 // Returns the CPU temperature as read from the SMBus thermal sensor.
+#define KSC_C_SET_CTEMP 0x58 // The next byte written to the data port will be the shutdown temperature
+#define KSC_EC_PCH_SMBUS_EN 0x60 // EC PCH SMBus thermal monitoring Enable cmd
+#define KSC_EC_PCH_SMBUS_DIS 0x61 // EC PCH SMBus thermal monitoring Disable cmd
+#define KSC_TS_ON_DIMM_EN 0x6B // TS-on-DIMM thermal monitoring enable command
+#define KSC_TS_ON_DIMM_DIS 0x6C // TS-on-DIMM thermal monitoring disable command
+#define KSC_C_PCH_SMBUS_MSG_LENGTH 0x6D // PCH SMBus block read buffer length
+#define KSC_C_PCH_SMBUS_PEC_EN 0x6E // PCH SMBus Packet Error Checking (PEC) Enable command.
+#define KSC_C_PCH_SMBUS_PEC_DIS 0x76 // PCH SMBus Packet Error Checking (PEC) Disable command.
+#define KSC_C_EC_SMBUS_HIGH_SPEED 0x75 // EC SMBus high speed mode command
+#define KSC_EC_PCH_SMBUS_WRITE_EN 0x68 // EC PCH SMBus Write Enable cmd
+#define KSC_EC_PCH_SMBUS_WRITE_DIS 0x69 // EC PCH SMBus Write Disable cmd
+#define KSC_C_SMI_QUERY 0x70 // The host reads the data port to retrieve the notifications
+#define KSC_C_SMI_TIMER 0x71 // Commands the KSC to generate a periodic SMI to the host
+#define KSC_C_SMI_HOTKEY 0x72 // Get the scan code of hotkey pressed (CTRL + ALT + SHIFT + key)
+#define KSC_C_READ_MEM 0x80 // Read the KSC memory
+#define KSC_C_WRITE_MEM 0x81 // Write the KSC memory
+#define KSC_C_DOCK_STATUS 0x8A // Get the dock status
+#define KSC_B_DOCK_STATUS_ATTACH 0x01 // Dock status (1 = Attach)
+#define KSC_C_KSC_REVISION 0x90 // Get the revision for the KSC
+#define KSC_C_SMI_INJECT 0xBA // The next byte written to the data port will generate an immediate SMI
+#define KSC_C_SMI_DISABLE 0xBC // SMI generation by the KSC is disabled
+#define KSC_C_SMI_ENABLE 0xBD // SMI generation by the KSC is enabled
+#define KSC_C_ACPI_ENABLE 0xAA // Enable ACPI mode
+#define KSC_C_ACPI_DISABLE 0xAB // Disable ACPI mode
+
+//
+// KSC commands that are only valid if the EC has ACPI mode enabled.
+// Note that capacity and voltage are 16 bit values, thus you need to read them from
+// ACPI space with two reads (little Endian).
+//
+#define KSC_VIRTUAL_BAT_STATUS 48 // Status of the virtual battery (present)
+#define KSC_VIRTUAL_BAT_PRESENT_MASK 0x10 // Bit 4 is the indicator
+
+#define KSC_REAL_BAT1_STATUS 50 // Status of the first real battery (present, charging)
+#define KSC_REAL_BAT1_REMAINING_CAPACITY 89 // Remaining capacity in mWh
+#define KSC_REAL_BAT1_RESOLUTION_VOLTAGE 93 // Full resolution voltage in mV
+
+#define KSC_REAL_BAT2_STATUS 54 // Status of the second real battery (present, charging)
+#define KSC_REAL_BAT2_REMAINING_CAPACITY 99 // Remaining capacity in mWh
+#define KSC_REAL_BAT2_RESOLUTION_VOLTAGE 103 // Full resolution voltage in mV
+
+#define KSC_REAL_BAT_PRESENT_MASK 0x8 // Bit 3 is the indicator
+#define KSC_REAL_BAT_CHARGING_MASK 0x1 // Bit 1 is the indicator
+
+//
+// SMI notification code table, read through command KSC_C_SMI_QUERY
+//
+#define KSC_N_SMI_NULL 0x00 // Null marks the end of the SMI notification queue
+#define KSC_N_SMI_HOTKEY 0x20 // Hotkey pressed SMI
+#define KSC_N_SMI_ACINSERTION 0x30 // AC insertion SMI
+#define KSC_N_SMI_ACREMOVAL 0x31 // AC removal SMI
+#define KSC_N_SMI_PWRSW 0x32 // Power switch press SMI
+#define KSC_N_SMI_LID 0x33 // Lid switch change SMI
+#define KSC_N_SMI_VB 0x34 // Virtual battery switch change SMI
+#define KSC_N_SMI_THERM_0 0x60 // Thermal state 0 SMI
+#define KSC_N_SMI_THERM_1 0x61 // Thermal state 1 SMI
+#define KSC_N_SMI_THERM_2 0x62 // Thermal state 2 SMI
+#define KSC_N_SMI_THERM_3 0x63 // Thermal state 3 SMI
+#define KSC_N_SMI_THERM_4 0x64 // Thermal state 4 SMI
+#define KSC_N_SMI_THERM_5 0x65 // Thermal state 5 SMI
+#define KSC_N_SMI_THERM_6 0x66 // Thermal state 6 SMI
+#define KSC_N_SMI_THERM_7 0x67 // Thermal state 7 SMI
+#define KSC_N_SMI_THERM_8 0x68 // Thermal state 8 SMI
+#define KSC_N_SMI_DOCKED 0x70 // Dock complete SMI
+#define KSC_N_SMI_UNDOCKED 0x71 // Undock complete SMI
+#define KSC_N_SMI_UNDOCKREQUEST 0x72 // Undocking request SMI
+#define KSC_N_SMI_TIMER 0x80 // Timer wakeup SMI
+
+//
+// Hotkey scan code (CTRL + ALT + SHIFT + key)
+//
+#define KSC_HK_ESC 0x01 // ESC
+#define KSC_HK_1 0x02 // 1 !
+#define KSC_HK_2 0x03 // 2 @
+#define KSC_HK_3 0x04 // 3 #
+#define KSC_HK_4 0x05 // 4 $
+#define KSC_HK_5 0x06 // 5 %
+#define KSC_HK_6 0x07 // 6 ^
+#define KSC_HK_7 0x08 // 7 &
+#define KSC_HK_8 0x09 // 8 *
+#define KSC_HK_9 0x0A // 9 (
+#define KSC_HK_0 0x0B // 0 )
+#define KSC_HK_MINUS 0x0C // - _
+#define KSC_HK_ADD 0x0D // = +
+#define KSC_HK_F1 0x3B // F1
+#define KSC_HK_F2 0x3C // F2
+#define KSC_HK_F3 0x3D // F3
+#define KSC_HK_F4 0x3E // F4
+#define KSC_HK_F5 0x3F // F5
+#define KSC_HK_F6 0x40 // F6
+#define KSC_HK_F7 0x41 // F7
+#define KSC_HK_F8 0x42 // F8
+#define KSC_HK_F9 0x43 // F9
+#define KSC_HK_F10 0x44 // F10
+#define KSC_HK_F11 0x57 // F11
+#define KSC_HK_F12 0x58 // F12
+
+//
+// Function declarations
+//
+EFI_STATUS
+InitializeKscLib (
+ VOID
+ );
+/*++
+
+Routine Description:
+
+ This function initializes the KSC library.
+ It must be called before using any of the other KSC library functions.
+
+Arguments:
+
+ None.
+
+Returns:
+
+ EFI_SUCCESS - KscLib is successfully initialized.
+
+--*/
+
+EFI_STATUS
+SendKscCommand (
+ UINT8 Command
+ );
+/*++
+
+Routine Description:
+
+ Send a command to the Keyboard System Controller.
+
+Arguments:
+
+ Command - Command byte to send
+
+Returns:
+
+ EFI_SUCCESS - Command success
+ EFI_TIMEOUT - Command timeout
+ Other - Command failed
+
+--*/
+
+EFI_STATUS
+SendKscData (
+ UINT8 Data
+ );
+/*++
+
+Routine Description:
+
+ Sends data to Keyboard System Controller.
+
+Arguments:
+
+ Data - Data byte to send
+
+Returns:
+
+ EFI_SUCCESS - Success
+ EFI_TIMEOUT - Timeout
+ Other - Failed
+
+--*/
+
+EFI_STATUS
+ReceiveKscData (
+ UINT8 *Data
+ );
+/*++
+
+Routine Description:
+
+ Receives data from Keyboard System Controller.
+
+Arguments:
+
+ Data - Data byte received
+
+Returns:
+
+ EFI_SUCCESS - Read success
+ EFI_TIMEOUT - Read timeout
+ Other - Read failed
+
+--*/
+
+EFI_STATUS
+ReceiveKscStatus (
+ UINT8 *KscStatus
+ );
+/*++
+
+Routine Description:
+
+ Receives status from Keyboard System Controller.
+
+Arguments:
+
+ Status - Status byte to receive
+
+Returns:
+
+ EFI_SUCCESS - Success
+ Other - Failed
+
+--*/
+
+#endif
diff --git a/Board/EM/Platform/Library/IntelPlatformProtocolLib.cif b/Board/EM/Platform/Library/IntelPlatformProtocolLib.cif
new file mode 100644
index 0000000..37defe0
--- /dev/null
+++ b/Board/EM/Platform/Library/IntelPlatformProtocolLib.cif
@@ -0,0 +1,13 @@
+<component>
+ name = "IntelPlatformProtocolLib"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\Library"
+ RefName = "IntelPlatformProtocolLib"
+[files]
+"IntelPlatformProtocolLib.sdl"
+"IntelPlatformProtocolLib.mak"
+"Protocol\GlobalNvsArea\GlobalNvsArea.h"
+"Protocol\GlobalNvsArea\GlobalNvsArea.c"
+[parts]
+"DxeKscLib"
+<endComponent>
diff --git a/Board/EM/Platform/Library/IntelPlatformProtocolLib.mak b/Board/EM/Platform/Library/IntelPlatformProtocolLib.mak
new file mode 100644
index 0000000..e87ad62
--- /dev/null
+++ b/Board/EM/Platform/Library/IntelPlatformProtocolLib.mak
@@ -0,0 +1,64 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/IntelPlatformProtocolLib/IntelPlatformProtocolLib.mak 1 2/09/12 12:38a Yurenlai $
+#
+# $Revision: 1 $
+#
+# $Date: 2/09/12 12:38a $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/IntelPlatformProtocolLib/IntelPlatformProtocolLib.mak $
+#
+# 1 2/09/12 12:38a Yurenlai
+# Initial check in.
+#
+#*************************************************************************
+#<AMI_FHDR_START>
+#
+# Name: <ComponentName>.mak
+#
+# Description:
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+all : IntelPlatformProtocolLib
+
+$(BUILD_DIR)\IntelPlatformProtocolLib.lib : IntelPlatformProtocolLib
+
+IntelPlatformProtocolLib : $(BUILD_DIR)\IntelPlatformProtocolLib.mak IntelPlatformProtocolLibBin
+
+$(BUILD_DIR)\IntelPlatformProtocolLib.mak : $(IntelPlatformProtocolLib_DIR)\$(@B).cif $(IntelPlatformProtocolLib_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(IntelPlatformProtocolLib_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+IntelPlatformProtocolLibBin :
+ $(MAKE) /$(MAKEFLAGS) $(EDK_DEFAULTS)\
+ /f $(BUILD_DIR)\IntelPlatformProtocolLib.mak all\
+ "MY_INCLUDES= /I$(MISCFRAMEWORK_DIR) $(EDK_INCLUDES) $(INTEL_PLATFORM_PROTOCOL_INCLUDES)" \
+ TYPE=LIBRARY \
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#************************************************************************* \ No newline at end of file
diff --git a/Board/EM/Platform/Library/IntelPlatformProtocolLib.sdl b/Board/EM/Platform/Library/IntelPlatformProtocolLib.sdl
new file mode 100644
index 0000000..85a786e
--- /dev/null
+++ b/Board/EM/Platform/Library/IntelPlatformProtocolLib.sdl
@@ -0,0 +1,47 @@
+TOKEN
+ Name = "INTEL_PLATFORM_PROTOCOL_LIB_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable INTEL_PLATFORM_PROTOCOL_LIB support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+End
+
+PATH
+ Name = "IntelPlatformProtocolLib_DIR"
+End
+
+MODULE
+ Help = "Includes IntelPlatformProtocolLib.mak to Project"
+ File = "IntelPlatformProtocolLib.mak"
+End
+
+ELINK
+ Name = "INTEL_PLATFORM_PROTOCOL_INCLUDES"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "/I$(PROJECT_DIR)\Board\EM\Platform"
+ Parent = "INTEL_PLATFORM_PROTOCOL_INCLUDES"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "/I$(PROJECT_DIR)\Board\EM\Platform\Library"
+ Parent = "INTEL_PLATFORM_PROTOCOL_INCLUDES"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "IntelPlatformProtocolLib_LIB"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\IntelPlatformProtocolLib.lib"
+ Parent = "IntelPlatformProtocolLib_LIB"
+ InvokeOrder = AfterParent
+End
+
diff --git a/Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.c b/Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.c
new file mode 100644
index 0000000..dfa84f8
--- /dev/null
+++ b/Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.c
@@ -0,0 +1,37 @@
+/*++
+
+Copyright (c) 1999 - 2010 Intel Corporation. All rights reserved
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+
+Module Name:
+
+ GlobalNvsArea.c
+
+Abstract:
+
+ Global NVS Area description protocol implementation.
+
+--*/
+/*++
+ This file contains an 'Intel Peripheral Driver' and is
+ licensed for Intel CPUs and chipsets under the terms of your
+ license agreement with Intel or your vendor. This file may
+ be modified by the user, subject to additional terms of the
+ license agreement
+--*/
+
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (GlobalNvsArea)
+
+EFI_GUID gEfiGlobalNvsAreaProtocolGuid = EFI_GLOBAL_NVS_AREA_PROTOCOL_GUID;
+
+EFI_GUID_STRING (&gEfiGlobalNvsAreaProtocolGuid, "Global NVS Area Protocol", "Protocol describing ACPI NVS memory region used by ACPI subsystem.");
diff --git a/Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.h b/Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.h
new file mode 100644
index 0000000..da4d4ee
--- /dev/null
+++ b/Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.h
@@ -0,0 +1,535 @@
+/*++
+ This file contains a 'Sample Driver' and is licensed as such
+ under the terms of your license agreement with Intel or your
+ vendor. This file may be modified by the user, subject to
+ the additional terms of the license agreement
+--*/
+
+/*++
+
+Copyright (c) 1999 - 2010 Intel Corporation. All rights reserved
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+
+Module Name:
+
+ GlobalNvsArea.h
+
+Abstract:
+
+ Definition of the global NVS area protocol. This protocol
+ publishes the address and format of a global ACPI NVS buffer used as a communications
+ buffer between SMM code and ASL code.
+ The format is derived from the ACPI reference code, version 0.95.
+
+ Note: Data structures defined in this protocol are not naturally aligned.
+
+--*/
+
+#ifndef _GLOBAL_NVS_AREA_H_
+#define _GLOBAL_NVS_AREA_H_
+
+//
+// Includes
+//
+
+
+//
+// Forward reference for pure ANSI compatability
+//
+EFI_FORWARD_DECLARATION (EFI_GLOBAL_NVS_AREA_PROTOCOL);
+
+//
+// Global NVS Area Protocol GUID
+//
+#define EFI_GLOBAL_NVS_AREA_PROTOCOL_GUID \
+ { \
+ 0x74e1e48, 0x8132, 0x47a1, 0x8c, 0x2c, 0x3f, 0x14, 0xad, 0x9a, 0x66, 0xdc \
+ }
+//
+// Global NVS Area Protocol GUID
+//
+#define EFI_GLOBAL_SANVS_AREA_PROTOCOL_GUID \
+ { \
+ 0x9f8083d3, 0x292c, 0x4f8f, 0x88, 0x79, 0xca, 0xcc, 0x8e, 0x63, 0xed, 0x67 \
+ }
+//
+// Revision id - Added TPM related fields
+//
+#define GLOBAL_NVS_AREA_REVISION_1 1
+//
+// Extern the GUID for protocol users.
+//
+extern EFI_GUID gEfiGlobalNvsAreaProtocolGuid;
+extern EFI_GUID gEfiGlobalSaNvsAreaProtocolGuid;
+
+//
+// Global NVS Area definition
+//
+#pragma pack (1)
+typedef struct {
+ //
+ // Miscellaneous Dynamic Values, the definitions below need to be matched
+ // GNVS definitions in Platform.ASL
+ //
+ UINT16 OperatingSystem; // (000) Operating System
+ UINT8 SmiFunction; // (002) SMI Function Call (ASL to SMI via I/O Trap)
+ UINT8 SmiParameter0; // (003) SMIF - Parameter 0
+ UINT8 SmiParameter1; // (004) SMIF - Parameter 1
+ UINT8 SciFunction; // (005) SCI Function Call (SMI to ASL via _L00)
+ UINT8 SciParameter0; // (006) SCIF - Parameter 0
+ UINT8 SciParameter1; // (007) SCIF - Parameter 1
+ UINT8 GlobalLock; // (008) Global Lock Function Call (EC Communication)
+ UINT8 LockParameter0; // 009) LCKF - Parameter 0
+ UINT8 LockParameter1; // (010) LCKF - Parameter 1
+ UINT32 Port80DebugValue; // (011) Port 80 Debug Port Value
+ UINT8 PowerState; // (015) Power State (AC Mode = 1)
+ UINT8 DebugState; // (016) Debug State
+
+
+ //
+ // Thermal Policy Values
+ //
+ UINT8 THOF; // (017) Enable Thermal Offset for KSC
+ UINT8 Ac1TripPoint; // (018) Active Trip Point 1
+ UINT8 Ac0TripPoint; // (019) Active Trip Point
+ UINT8 PassiveThermalTripPoint; // (020) Passive Trip Point
+ UINT8 PassiveTc1Value; // (021) Passive Trip Point TC1 Value
+ UINT8 PassiveTc2Value; // (022) Passive Trip Point TC2 Value
+ UINT8 PassiveTspValue; // (023) Passive Trip Point TSP Value
+ UINT8 CriticalThermalTripPoint; // (024) Critical Trip Point
+ UINT8 EnableDigitalThermalSensor; // (025) Digital Thermal Sensor Enable
+ UINT8 BspDigitalThermalSensorTemperature; // (026) Digital Thermal Sensor 1 Reading
+ UINT8 ApDigitalThermalSensorTemperature; // (027) Digital Thermal Sensor 2 Reading
+ UINT8 DigitalThermalSensorSmiFunction; // (028) DTS SMI Function Call
+ UINT8 Reserved[1]; // (029)
+
+ //
+ // Battery Support Registers: (Moved outside this ASL code but still in used)
+ //
+ UINT8 NumberOfBatteries; // (030) Battery Number Present
+ UINT8 BatteryCapacity0; // (031) Battery 0 Stored Capacity
+ UINT8 BatteryCapacity1; // (032) Battery 1 Stored Capacity
+ UINT8 BatteryCapacity2; // (033) Battery 2 Stored Capacity
+ UINT8 BatteryStatus0; // (034) Battery 0 Stored Status
+ UINT8 BatteryStatus1; // (035) Battery 1 Stored Status
+ UINT8 BatteryStatus2; // (036) Battery 2 Stored Status
+
+ // NOTE: Do NOT Change the Offset of Revision Field
+ UINT8 Revision; // (037) Revision of the structure EFI_GLOBAL_NVS_AREA
+ UINT8 Reserved3[2]; // (038:039)
+
+ //
+ // Processor Configuration Values
+ //
+ UINT8 ApicEnable; // (040) APIC Enabled by SBIOS (APIC Enabled = 1)
+ UINT8 ThreadCount; // (041) Number of Enabled Threads
+ UINT8 CurentPdcState0; // (042) PDC settings, Processor 0
+ UINT8 CurentPdcState1; // (043) PDC settings, Processor 1
+ UINT8 MaximumPpcState; // (044) Maximum PPC state
+ UINT32 PpmFlags; // (045) PPM configuration flags, same as CFGD
+ UINT8 C6C7Latency; // (049) C6/C7 Entry/Exit latency
+
+ //
+ // SIO Configuration Values
+ //
+ UINT8 DockedSioPresent; // (050) Dock SIO Present
+ UINT8 DockComA; // (051) COM A Port
+ UINT8 DockComB; // (052) COM B Port
+ UINT8 DockLpt; // (053) LPT Port
+ UINT8 DockFdc; // (054) FDC Port
+ UINT8 SmscComPort; // (055) SMSC Com Port
+ UINT8 SmscComCirPort; // (056) SMSC Com CIR Port
+ UINT8 SMSC1007; // (057) SMSC1007 SIO Present
+ UINT8 WPCN381U; // (058) WPCN381U SIO Present
+ UINT8 SMSC1000; // (059) SMSC1000 SIO Present
+
+ //
+ // Extended Mobile Access Values
+ //
+ UINT8 EmaEnable; // (060) EMA Enable
+ UINT16 EmaPointer; // (061) EMA Pointer
+ UINT16 EmaLength; // (063:064) EMA Length
+
+ UINT8 Reserved8[1]; // (065)
+
+ //
+ // Mobile East Fork Values
+ //
+ UINT8 MefEnable; // (066) Mobile East Fork Enable
+
+ //
+ // PCIe Dock Status
+ //
+ UINT8 PcieDockStatus; // (067) PCIe Dock Status
+
+ UINT8 Reserved9[4]; // (068:071)
+
+ //
+ // TPM Registers
+ //
+ UINT8 MorData; // (072) Memory Overwrite Request Data
+ UINT8 TcgParamter; // (073) Used for save the Mor and/or physical presence paramter
+ UINT32 PPResponse; // (074) Physical Presence request operation response
+ UINT8 PPRequest; // (078) Physical Presence request operation
+ UINT8 LastPPRequest; // (079) Last Physical Presence request operation
+
+ //
+ // SATA Values
+ //
+ UINT8 GtfTaskFileBufferPort0[7]; // (080) GTF Task File Buffer for Port 0
+ UINT8 GtfTaskFileBufferPort2[7]; // (087) GTF Task File Buffer for Port 2
+ UINT8 IdeMode; // (094) IDE Mode (Compatible\Enhanced)
+ UINT8 GtfTaskFileBufferPort1[7]; // (095) GTF Task File Buffer for Port 1
+
+ //
+ // Board Id
+ // This field is for the ASL code to know whether this board is Matanzas, or Oakmont, etc
+ //
+ UINT16 BoardId; // (102) Platform board id
+ UINT8 PlatformId; // (104) Platform id
+ UINT8 ECTG; // (105) Toggle EC
+ UINT8 Reserved10[6]; // 106:111
+ UINT8 PcieOSCControl; // (112) PCIE OSC Control
+ UINT8 NativePCIESupport; // (113) Native PCI Express Support
+
+ //
+ // USB Sideband Deferring Support
+ //
+ UINT8 HostAlertVector1; // (114) GPE vector used for HOST_ALERT#1
+ UINT8 HostAlertVector2; // (115) GPE vector used for HOST_ALERT#2
+
+ UINT8 Reserved11[6]; // 116:121
+ UINT8 DosDisplaySupportFlag; // (122) _DOS Display Support Flag.
+ UINT8 EcAvailable; // (123) Embedded Controller Availability Flag.
+ UINT8 GPIC; // (124) Global IOAPIC/8259 Interrupt Mode Flag.
+ UINT8 CTYP; // (125) Global Cooling Type Flag.
+ UINT8 L01C; // (126) Global L01 Counter.
+ UINT8 VFN0; // (127) Virtual Fan0 Status.
+ UINT8 VFN1; // (128) Virtual Fan1 Status.
+ UINT8 VFN2; // (129) Virtual Fan2 Status.
+ UINT8 VFN3; // (130) Virtual Fan3 Status.
+ UINT8 VFN4; // (131) Virtual Fan4 Status.
+ UINT8 VFN5; // (132) Virtual Fan5 Status.
+ UINT8 VFN6; // (133) Virtual Fan6 Status.
+ UINT8 VFN7; // (134) Virtual Fan7 Status.
+ UINT8 VFN8; // (135) Virtual Fan8 Status.
+ UINT8 VFN9; // (136) Virtual Fan9 Status.
+ UINT8 Reserved12[6]; // 137:142
+
+ //
+ // Thermal
+ //
+ UINT8 ActiveThermalTripPointSA; // (143) Active Trip Point for MCH
+ UINT8 PassiveThermalTripPointSA; // (144) Passive Trip Point for MCH
+ UINT8 ActiveThermalTripPointTMEM; // (145) Active Trip Point for TMEM
+ UINT8 PassiveThermalTripPointTMEM; // (146) Passive Trip Point for TMEM
+ UINT32 PlatformCpuId; // (147) CPUID Feature Information [EAX]
+ UINT32 TBARB; // (151) Thermal Base Low Address for BIOS
+ UINT32 TBARBH; // (155) Thermal Base High Address for BIOS
+ UINT8 RunTimeInterface; // (159) Run Time Interface for Intelligent Power Savings
+ UINT8 TsOnDimmEnabled; // (160) TS-on-DIMM is chosen in SETUP and present on the DIMM
+ UINT8 ActiveThermalTripPointPCH; // (161) Active Trip Point for PCH
+ UINT8 PassiveThermalTripPointPCH; // (162) Passive Trip Point for PCH
+
+ //
+ // Board info
+ //
+ UINT8 PlatformFlavor; // (163) Platform Flavor
+ UINT8 BoardRev; // (164) Board Rev
+
+ // Package temperature
+ UINT8 PackageDTSTemperature; // (165) Package Temperature
+ UINT8 IsPackageTempMSRAvailable; // (166) Package Temperature MSR available
+ UINT8 PeciAccessMethod; // (167) PECI Access Method (Direct I/O or ACPI)
+ UINT8 Ac0FanSpeed; // (168) _AC0 Fan Speed
+ UINT8 Ac1FanSpeed; // (169) _AC1 Fan Speed
+ // New Thermal Policy Values for DTS.
+ UINT8 Ap2DigitalThermalSensorTemperature; // (170) Temperature of the second AP
+ UINT8 Ap3DigitalThermalSensorTemperature; // (171) Temperature of the third AP
+ UINT8 Reserved16[4]; // (172):(175) are reserved for future use
+
+ UINT8 LTRE1; // (176) Latency Tolerance Reporting Enable
+ UINT8 LTRE2; // (177) Latency Tolerance Reporting Enable
+ UINT8 LTRE3; // (178) Latency Tolerance Reporting Enable
+ UINT8 LTRE4; // (179) Latency Tolerance Reporting Enable
+ UINT8 LTRE5; // (180) Latency Tolerance Reporting Enable
+ UINT8 LTRE6; // (181) Latency Tolerance Reporting Enable
+ UINT8 LTRE7; // (182) Latency Tolerance Reporting Enable
+ UINT8 LTRE8; // (183) Latency Tolerance Reporting Enable
+
+ UINT8 OBFF1; // (184) Optimized Buffer Flush and Fill
+ UINT8 OBFF2; // (185) Optimized Buffer Flush and Fill
+ UINT8 OBFF3; // (186) Optimized Buffer Flush and Fill
+ UINT8 OBFF4; // (187) Optimized Buffer Flush and Fill
+ UINT8 OBFF5; // (188) Optimized Buffer Flush and Fill
+ UINT8 OBFF6; // (189) Optimized Buffer Flush and Fill
+ UINT8 OBFF7; // (190) Optimized Buffer Flush and Fill
+ UINT8 OBFF8; // (191) Optimized Buffer Flush and Fill
+
+ UINT8 XhciMode; // (192) xHCI controller mode
+ UINT32 XTUBaseAddress; // (193) XTU Continous structure Base Address
+ UINT32 XTUSize; // (197) XTU Entries Size
+ UINT32 XMPBaseAddress; // (201) XTU Base Address
+ UINT8 DDRReferenceFreq; // (205) DDR Reference Frequency
+
+ UINT8 Rtd3Support; // (206) Runtime D3 support.
+ UINT8 Rtd3P0dl; // (207) User selctable Delay for Device D0 transition.
+ UINT8 Rtd3P3dl; // (208) User selctable Delay for Device D3 transition.
+ //
+ // DPTF Devices and trip points
+ //
+ UINT8 EnableDptfDevice; // (209) EnableDptfDevice
+
+ UINT8 EnableSaDevice; // (210) EnableSaDevice
+ UINT8 CriticalThermalTripPointSA; // (211) CriticalThermalTripPointSa
+ UINT8 HotThermalTripPointSA; // (212) HotThermalTripPointSa
+
+ UINT8 EnablePchDevice; // (213) EnablePchDevice
+ UINT8 CriticalThermalTripPointPCH; // (214) CriticalThermalTripPointPch
+ UINT8 HotThermalTripPointPCH; // (215) HotThermalTripPointPch
+ //
+ // DPTF Policies
+ //
+ UINT8 EnableCtdpPolicy; // (216) EnableCtdpPolicy
+ UINT8 EnableLpmPolicy; // (217) EnableLpmPolicy
+ UINT8 CurrentLowPowerMode; // (218) CurrentLowPowerMode for LPM
+ UINT8 EnableCurrentExecutionUnit; // (219) EnableCurrentExecutionUnit
+ UINT16 TargetGfxFreq; // (220:221) TargetGfxFreq
+ //
+ // DPPM Devices and trip points
+ //
+ UINT8 EnableMemoryDevice; // (222) EnableMemoryDevice
+ UINT8 CriticalThermalTripPointTMEM; // (223) CriticalThermalTripPointTMEM
+ UINT8 HotThermalTripPointTMEM; // (224) HotThermalTripPointTMEM
+
+ UINT8 EnableFan1Device; // (225) EnableFan1Device
+ UINT8 EnableFan2Device; // (226) EnableFan2Device
+
+ UINT8 EnableAmbientDevice; // (227) EnableAmbientDevice
+ UINT8 ActiveThermalTripPointAmbient; // (228) ActiveThermalTripPointAmbient
+ UINT8 PassiveThermalTripPointAmbient; // (229) PassiveThermalTripPointAmbient
+ UINT8 CriticalThermalTripPointAmbient;// (230) CriticalThermalTripPointAmbient
+ UINT8 HotThermalTripPointAmbient; // (231) HotThermalTripPointAmbient
+
+ UINT8 EnableSkinDevice; // (232) EnableSkinDevice
+ UINT8 ActiveThermalTripPointSkin; // (233) ActiveThermalTripPointSkin
+ UINT8 PassiveThermalTripPointSkin; // (234) PassiveThermalTripPointSkin
+ UINT8 CriticalThermalTripPointSkin; // (235) CriticalThermalTripPointSkin
+ UINT8 HotThermalTripPointSkin; // (236) HotThermalTripPointSkin
+
+ UINT8 EnableExhaustFanDevice; // (237) EnableExhaustFanDevice
+ UINT8 ActiveThermalTripPointExhaustFan; // (238) ActiveThermalTripPointExhaustFan
+ UINT8 PassiveThermalTripPointExhaustFan; // (239) PassiveThermalTripPointExhaustFan
+ UINT8 CriticalThermalTripPointExhaustFan; // (240) CriticalThermalTripPointExhaustFan
+ UINT8 HotThermalTripPointExhaustFan; // (241) HotThermalTripPointExhaustFan
+
+ UINT8 EnableVRDevice; // (242) EnableVRDevice
+ UINT8 ActiveThermalTripPointVR; // (243) ActiveThermalTripPointVR
+ UINT8 PassiveThermalTripPointVR; // (244) PassiveThermalTripPointVR
+ UINT8 CriticalThermalTripPointVR; // (245) CriticalThermalTripPointVR
+ UINT8 HotThermalTripPointVR; // (246) HotThermalTripPointVR
+ //
+ // DPPM Policies
+ //
+ UINT8 EnableActivePolicy; // (247) EnableActivePolicy
+ UINT8 EnablePassivePolicy; // (248) EnablePassivePolicy
+ UINT8 EnableCriticalPolicy; // (249) EnableCriticalPolicy
+ UINT8 EnableCoolingModePolicy; // (250) EnableCoolingModePolicy
+ UINT8 TrtRevision; // (251) TrtRevision
+ //
+ // CLPO (Current Logical Processor Off lining Setting)
+ //
+ UINT8 LPOEnable; // (252) LPOEnable
+ UINT8 LPOStartPState; // (253) LPOStartPState
+ UINT8 LPOStepSize; // (254) LPOStepSize
+ UINT8 LPOPowerControlSetting; // (255) LPOPowerControlSetting
+ UINT8 LPOPerformanceControlSetting; // (256) LPOPerformanceControlSetting
+ //
+ // Miscellaneous DPTF
+ //
+ UINT32 PpccStepSize; // (257:260) PPCC Step Size
+ UINT8 EnableDisplayParticipant; // (261) EnableDisplayParticipant
+ //
+ // PFAT
+ //
+ UINT64 PfatMemAddress; // (262:269) PFAT Memory Address for Tool Interface
+ UINT8 PfatMemSize; // (270) PFAT Memory Size for Tool Interface
+ UINT16 PfatIoTrapAddress; // (271) PFAT IoTrap Address for Tool Interface
+ //
+ // Smart Connect Technology
+ //
+ UINT8 IsctCfg; // (273) Isct Configuration
+ //
+ // Audio DSP
+ //
+ UINT32 DspBar0; // (274) Audio DSP BAR0
+ UINT32 DspBar1; // (278) Audio DSP BAR1
+ //
+ // NFC support
+ //
+ UINT8 NFCEnable; // (282) NFC module selection
+ //
+ // ADSP Codec Selection
+ //
+ UINT8 AudioDspCodec; // (283) Audio Codec selection
+ //
+ // Sensor Hub Enable
+ //
+ UINT8 SensorHubEnable; // (284) Sensor Hub Enable
+
+ UINT8 LowPowerS0Idle; // (285) Low Power S0 Idle Enable
+
+ //
+ // BIOS only version of Config TDP
+ //
+ UINT8 ConfigTdpBios; // (286) enable/disable BIOS only version of Config TDP
+
+ UINT8 Reserved17[232]; // (287):(518) are reserved for future use
+ UINT8 EnablePowerDevice; // (519) EnablePowerDevice
+ UINT8 EnablePowerPolicy; // (520) EnablePowerPolicy
+ UINT8 UsbPowerResourceTest; // (521) RTD3 USB Power Resource config
+ //
+ // Intel Serial(R) IO Sensor Device Selection
+ //
+ UINT8 SDS0; // (522) I2C0 Sensor Device Selection
+ UINT16 SDS1; // (523) I2C1 Sensor Device Selection
+ UINT8 SDS2; // (525) SPI0 Sensor Device Selection
+ UINT8 SDS3; // (526) SPI1 Sensor Device Selection
+ UINT8 SDS4; // (527) UART0 Sensor Device Selection
+ UINT8 SDS5; // (528) UART1 Sensor Device Selection
+ UINT8 Reserved20[1]; // (529) 529 no longer used.
+ UINT8 RIC0; // (530) RTD3 support for I2C0 SH
+ UINT8 PepDevice; // (531) RTD3 PEP support list(BIT0 - GFx , BIT1 - Sata, BIT2 - UART, BIT3 - SDHC, Bit4 - I2C0, BIT5 - I2C1, Bit6 - XHCI, Bit7 - Audio)
+ UINT8 DVS0; // (532) Port0 DevSlp Enable
+ UINT8 DVS1; // (533) Port1 DevSlp Enable
+ UINT8 DVS2; // (534) Port2 DevSlp Enable
+ UINT8 DVS3; // (535) Port3 DevSlp Enable
+ UINT8 GBSX; // (536) Virtual GPIO button Notify Sleep State Change
+ UINT8 IUBE; // (537) IUER Button Enable
+ UINT8 IUCE; // (538) IUER Convertible Enable
+ UINT8 IUDE; // (539) IUER Dock Enable
+ UINT8 ECNO; // (540) EC Notification of Low Power S0 Idle State
+ UINT16 AUDD; // (541) RTD3 Audio Codec device delay
+ UINT16 DSPD; // (543) RTD3 ADSP device delay
+ UINT16 IC0D; // (545) RTD3 SensorHub delay time after applying power to device
+ UINT16 IC1D; // (547) RTD3 TouchPanel delay time after applying power to device
+ UINT16 IC1S; // (549) RTD3 TouchPad delay time after applying power to device
+ UINT16 VRRD; // (551) VR Ramp up delay
+ UINT8 PSCP; // (553) P-state Capping
+ UINT8 RWAG; // (554) Rtd3 W/A Gpio, allow W/A for port 1 and 6 to use GPIO from SDHC device
+ UINT16 I20D; // (555) Delay in _PS0 after powering up I2C0 Controller
+ UINT16 I21D; // (557) Delay in _PS0 after powering up I2C1 Controller
+
+ UINT8 Reserved18[2]; // (559:560) are reserved for future use
+ UINT8 RCG0; // (561) RTD3 Config Setting(BIT0:ZPODD,BIT1:USB Camera Port4, BIT2/3:SATA Port3)
+ UINT8 ECDB; // (562) EC Debug Light (CAPS LOCK) for when in Low Power S0 Idle State
+ UINT8 P2ME; // (563) Ps2 Mouse Enable
+
+ UINT16 SSH0; // (564) SSCN-LOW for I2C0
+ UINT16 SSL0; // (566) SSCN-HIGH for I2C0
+ UINT16 SSD0; // (568) SSCN-HOLD for I2C0
+ UINT16 FMH0; // (570) FMCN-LOW for I2C0
+ UINT16 FML0; // (572) FMCN-HIGH for I2C0
+ UINT16 FMD0; // (574) FMCN-HOLD for I2C0
+ UINT16 FPH0; // (576) FPCN-LOW for I2C0
+ UINT16 FPL0; // (578) FPCN-HIGH for I2C0
+ UINT16 FPD0; // (580) FPCN-HOLD for I2C0
+ UINT16 SSH1; // (582) SSCN-LOW for I2C1
+ UINT16 SSL1; // (584) SSCN-HIGH for I2C1
+ UINT16 SSD1; // (586) SSCN-HOLD for I2C1
+ UINT16 FMH1; // (588) FMCN-LOW for I2C1
+ UINT16 FML1; // (590) FMCN-HIGH for I2C1
+ UINT16 FMD1; // (592) FMCN-HOLD for I2C1
+ UINT16 FPH1; // (594) FPCN-LOW for I2C1
+ UINT16 FPL1; // (596) FPCN-HIGH for I2C1
+ UINT16 FPD1; // (598) FPCN-HOLD for I2C1
+ UINT16 M0C0; // (600) M0D3 for I2C0
+ UINT16 M1C0; // (602) M1D3 for I2C0
+ UINT16 M2C0; // (604) M0D0 for I2C0
+ UINT16 M0C1; // (606) M0D3 for I2C1
+ UINT16 M1C1; // (608) M1D3 for I2C1
+ UINT16 M2C1; // (610) M0D0 for I2C1
+ UINT16 M0C2; // (612) M0D3 for SPI0
+ UINT16 M1C2; // (614) M1D3 for SPI0
+ UINT16 M0C3; // (616) M0D3 for SPI1
+ UINT16 M1C3; // (618) M1D3 for SPI1
+ UINT16 M0C4; // (620) M0D3 for UA00
+ UINT16 M1C4; // (622) M1D3 for UA00
+ UINT16 M0C5; // (624) M0D3 for UA01
+ UINT16 M1C5; // (626) M1D3 for UA01
+ UINT8 TBSF; // (628) ThunderBolt SMI Function Number
+ UINT32 GIRQ; // (629) GPIO IRQ
+ UINT8 DMTP; // (633) PIRQS 34,50(GPIO)
+ UINT8 DMTD; // (634) PIRQX 39,55(GPIO)
+ UINT8 DMSH; // (635) PIRQM 28,14(GPIO)
+ UINT8 LANP; // (636) LAN PHY Status 0 = Not Present, 1 = Present
+ UINT8 Reserved19[1]; // (637) 637 no longer used.
+ UINT8 SHSB; // (638) Sensor Standby mode
+ UINT8 PL1LimitCS; // (639) set PL1 limit when entering CS
+ UINT16 PL1LimitCSValue; // (640) PL1 limit value
+ UINT8 GN1E; // (642) EnableGen1Participant
+ UINT8 G1AT; // (643) ActiveThermalTripPointGen1
+ UINT8 G1PT; // (644) PassiveThermalTripPointGen1
+ UINT8 G1CT; // (645) CriticalThermalTripPointGen1
+ UINT8 G1HT; // (646) HotThermalTripPointGen1
+ UINT8 GN2E; // (647) EnableGen2Participant
+ UINT8 G2AT; // (648) ActiveThermalTripPointGen2
+ UINT8 G2PT; // (649) PassiveThermalTripPointGen2
+ UINT8 G2CT; // (650) CriticalThermalTripPointGen2
+ UINT8 G2HT; // (651) HotThermalTripPointGen2
+ UINT8 WWSD; // (652) EnableWwanTempSensorDevice
+ UINT8 CVSD; // (653) EnableCpuVrTempSensorDevice
+ UINT8 SSDD; // (654) EnableSsdTempSensorDevice
+ UINT8 INLD; // (655) EnableInletFanTempSensorDevice
+ UINT8 IFAT; // (656) ActiveThermalTripPointInletFan
+ UINT8 IFPT; // (657) PassiveThermalTripPointInletFan
+ UINT8 IFCT; // (658) CriticalThermalTripPointInletFan
+ UINT8 IFHT; // (659) HotThermalTripPointInletFan
+ UINT8 DOSD; // (660) DMA OS detection, 1 = check for OS version when enabling DMA, 0 = don't care about OS
+ UINT8 USBH; // (661) USB Sensor Hub Enable/Disable
+ UINT8 BCV4; // (662) Broadcom's Bluetooth adapter's revision
+ UINT8 WTV0; // (663) I2C0/WITT devices version
+ UINT8 WTV1; // (664) I2C1/WITT devices version
+ UINT8 APFU; // (665) Atmel panel FW update Enable/Disable
+ UINT8 SOHP; // (666) SMI on Hot Plug for TBT devices
+ UINT8 NOHP; // (667) Notify on Hot Plug for TBT devices
+ UINT8 TBSE; // (668) ThunderBolt Root port selector
+ UINT8 WKFN; // (669) WAK Finished
+ UINT16 PEPC; // (670) PEP Constraints
+ UINT16 VRSD; // (672) VR Staggering delay
+ UINT8 PB1E; // (674) 10sec Power button support Bit0: 10 sec P-button Enable/Disable
+ // Bit1: Internal Flag
+ // Bit2: Rotation Lock flag, 0:unlock, 1:lock
+ // Bit3: Slate/Laptop Mode Flag, 0: Slate, 1: Laptop
+ // Bit4: Undock / Dock Flag, 0: Undock, 1: Dock
+ // Bit5, 6: reserved for future use.
+ // Bit7: EC 10sec PB Override state for S3/S4 wake up.
+ UINT8 WAND; // (675) EnableWWANParticipant
+ UINT8 WWAT; // (676) ActiveThermalTripPointWWAN
+ UINT8 WWPT; // (677) PassiveThermalTripPointWWAN
+ UINT8 WWCT; // (678) CriticalThermalTripPointWWAN
+ UINT8 WWHT; // (679) HotThermalTripPointWWAN
+ UINT8 Reserved21[5]; // (680:684) are reserved for future use
+ UINT16 MPLT; // (685) Minimum Power Limit for DPTF use via PPCC Object
+ UINT8 GR13; // (687) GPIO13 Rework for Sawtooth Peak
+ UINT8 SPST; // (688) SATA port state, Bit0 - Port0, Bit1 - Port1, Bit2 - Port2, Bit3 - Port3
+ UINT8 ECLP; // (689) EC Low Power Mode: 1 - Enabled, 0 - Disabled
+ UINT8 INSC; // (690) Intel RMT Configuration
+} EFI_GLOBAL_NVS_AREA;
+#pragma pack ()
+
+//
+// Global NVS Area Protocol
+//
+typedef struct _EFI_GLOBAL_NVS_AREA_PROTOCOL {
+ EFI_GLOBAL_NVS_AREA *Area;
+} EFI_GLOBAL_NVS_AREA_PROTOCOL;
+
+#endif
diff --git a/Board/EM/Platform/PlatformInfo/PlatformInfo.c b/Board/EM/Platform/PlatformInfo/PlatformInfo.c
new file mode 100644
index 0000000..cb6910f
--- /dev/null
+++ b/Board/EM/Platform/PlatformInfo/PlatformInfo.c
@@ -0,0 +1,166 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformInfo/PlatformInfo.c 4 10/31/12 4:28a Alanlin $
+//
+// $Revision: 4 $
+//
+// $Date: 10/31/12 4:28a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformInfo/PlatformInfo.c $
+//
+// 4 10/31/12 4:28a Alanlin
+// [TAG] None
+// [Category] Improvement
+// [Description] Fine tune Platform Board Information.
+//
+// 3 7/03/12 1:27a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Update Shark Bay Client ACPI Reference Code Alpha 2
+// 0.6.0.
+// [Files] ReferenceCode\AcpiTables\*.*, GlobalNvsArea.h,
+// AcpiPlatform.c, PlatformInfo.c, PlatformEC.asl
+//
+// 2 4/05/12 7:45a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Fixed building error for Intel System Agent
+// Label:"4.6.5.3_Intel_SA-RC_055_004".
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.mak,
+// AcpiPlatform.c, PlatformInfo.c
+//
+// 1 2/09/12 12:33a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//---------------------------------------------------------------------------
+//
+// Name: PlatformInfo.c
+//
+// Description: Installs EFI_PLATFORM_INFO_PROTOCOL_GUID
+//
+//---------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+#include "PlatformInfo.h"
+#include "Token.h"
+#include <AmiCspLib.h>
+#include <AmiDxeLib.h>
+#include <Setup.h>
+#include <PlatformSetup.h>
+#include <PchRegs.h>
+
+EFI_GUID gPlatformInfoProtocolGuid = EFI_PLATFORM_INFO_PROTOCOL_GUID;
+
+PLATFORM_INFO_PROTOCOL mPlatformInfoProtocol;
+
+EFI_STATUS
+PlatformInfoInit (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+/*++
+
+Routine Description:
+ Entry point for the driver.
+
+ This routine gets info from the PlatformInfoHob and produces a protocol
+ to be consumed by DXE drivers to identify platforms.
+
+Arguments:
+
+ ImageHandle - Image Handle.
+ SystemTable - EFI System Table.
+
+Returns:
+
+ EFI_SUCCESS - Function has completed successfully.
+ Others - All other error conditions encountered result in an ASSERT.
+
+--*/
+{
+ EFI_STATUS Status;
+ UINT16 McDeviceId;
+ UINT16 LpcDeviceId;
+ PCH_SERIES PchSeries = GetPchSeries();
+
+ InitAmiLib(ImageHandle,SystemTable);
+ //
+ // Get PlatformInfo from the HOB data, fill up the protocol
+ //
+ mPlatformInfoProtocol.RevisonId = PlatformInfo_RevisonId;
+ mPlatformInfoProtocol.BoardId = PlatformInfo_BoardId;
+ mPlatformInfoProtocol.BoardRev = PlatformInfo_BoardRev;
+
+ // Read MC device ID
+ McDeviceId = READ_PCI16_NB(R_SA_MC_DEVICE_ID);
+ // Read PCH device ID
+ LpcDeviceId = READ_PCI16_SB(R_PCH_LPC_DEVICE_ID);
+
+ if(IS_SA_DEVICE_ID_MOBILE(McDeviceId)) {
+ mPlatformInfoProtocol.PlatformFlavor = FlavorMobile;
+ if (PchSeries == PchLp) {
+ mPlatformInfoProtocol.BoardId = BoardIdhiteTipMountain1;
+ }
+ mPlatformInfoProtocol.BoardRev = (mPlatformInfoProtocol.BoardId & 0xF0) >> 4;
+
+ } else if(IS_SA_DEVICE_ID_DESKTOP (McDeviceId)) {
+ if(IS_PCH_LPT_LPC_DEVICE_ID_WS (LpcDeviceId)) {
+ mPlatformInfoProtocol.PlatformFlavor = FlavorWorkStation;
+ } else if(IS_PCH_LPT_LPC_DEVICE_ID_SERVER (LpcDeviceId)) {
+ mPlatformInfoProtocol.PlatformFlavor = FlavorUpServer;
+ } else {
+ mPlatformInfoProtocol.PlatformFlavor = FlavorDesktop;
+ mPlatformInfoProtocol.BoardId = BoardIdFlatheadCreek;
+ mPlatformInfoProtocol.BoardRev = 0;
+ }
+ } else if(IS_SA_DEVICE_ID_SERVER (McDeviceId)) {
+ mPlatformInfoProtocol.PlatformFlavor = FlavorUpServer;
+ } else {
+ mPlatformInfoProtocol.PlatformFlavor = FlavorDesktop;
+ }
+
+ //
+ // Install the PlatformInfo Protocol.
+ //
+ Status = pBS->InstallProtocolInterface (
+ &ImageHandle,
+ &gPlatformInfoProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ &mPlatformInfoProtocol
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//************************************************************************* \ No newline at end of file
diff --git a/Board/EM/Platform/PlatformInfo/PlatformInfo.cif b/Board/EM/Platform/PlatformInfo/PlatformInfo.cif
new file mode 100644
index 0000000..0456b11
--- /dev/null
+++ b/Board/EM/Platform/PlatformInfo/PlatformInfo.cif
@@ -0,0 +1,12 @@
+<component>
+ name = "PlatformInfo"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\PlatformInfo"
+ RefName = "PlatformInfo"
+[files]
+"PlatformInfo.sdl"
+"PlatformInfo.mak"
+"PlatformInfo.dxs"
+"PlatformInfo.c"
+"PlatformInfo.h"
+<endComponent>
diff --git a/Board/EM/Platform/PlatformInfo/PlatformInfo.dxs b/Board/EM/Platform/PlatformInfo/PlatformInfo.dxs
new file mode 100644
index 0000000..1477e36
--- /dev/null
+++ b/Board/EM/Platform/PlatformInfo/PlatformInfo.dxs
@@ -0,0 +1,59 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformInfo/PlatformInfo.dxs 1 2/09/12 12:33a Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 2/09/12 12:33a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformInfo/PlatformInfo.dxs $
+//
+// 1 2/09/12 12:33a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: PlatformInfo.DXS
+//
+// Description: This file is the dependency file for the PlatformInfo driver.
+//
+//----------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+
+DEPENDENCY_START
+ TRUE
+DEPENDENCY_END
+
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/PlatformInfo/PlatformInfo.h b/Board/EM/Platform/PlatformInfo/PlatformInfo.h
new file mode 100644
index 0000000..6ee5a1c
--- /dev/null
+++ b/Board/EM/Platform/PlatformInfo/PlatformInfo.h
@@ -0,0 +1,74 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformInfo/PlatformInfo.h 2 10/31/12 4:28a Alanlin $
+//
+// $Revision: 2 $
+//
+// $Date: 10/31/12 4:28a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformInfo/PlatformInfo.h $
+//
+// 2 10/31/12 4:28a Alanlin
+// [TAG] None
+// [Category] Improvement
+// [Description] Fine tune Platform Board Information.
+//
+// 1 2/09/12 12:33a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+
+
+#ifndef _PLATFORM_INFO_DRIVER_H_
+#define _PLATFORM_INFO_DRIVER_H_
+
+#include "EFI.h"
+
+#define EFI_PLATFORM_INFO_PROTOCOL_GUID \
+ { \
+ 0xd9035175, 0x8ce2, 0x47de, 0xa8, 0xb8, 0xcc, 0x98, 0xe5, 0xe2, 0xa8, 0x85 \
+ }
+
+EFI_FORWARD_DECLARATION (PLATFORM_INFO_PROTOCOL);
+
+typedef struct _PLATFORM_INFO_PROTOCOL {
+ UINT8 RevisonId; // Structure Revision ID
+ UINT8 PlatformFlavor; // Platform Flavor
+ UINT16 BoardId; // Board ID
+ UINT8 BoardRev; // Board Revision
+} PLATFORM_INFO_PROTOCOL;
+
+extern EFI_GUID gPlatformInfoProtocolGuid;
+
+
+#endif
+
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/PlatformInfo/PlatformInfo.mak b/Board/EM/Platform/PlatformInfo/PlatformInfo.mak
new file mode 100644
index 0000000..bc32739
--- /dev/null
+++ b/Board/EM/Platform/PlatformInfo/PlatformInfo.mak
@@ -0,0 +1,82 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformInfo/PlatformInfo.mak 1 2/09/12 12:33a Yurenlai $
+#
+# $Revision: 1 $
+#
+# $Date: 2/09/12 12:33a $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformInfo/PlatformInfo.mak $
+#
+# 1 2/09/12 12:33a Yurenlai
+# Initial check in.
+#
+#*************************************************************************
+#<AMI_FHDR_START>
+#
+# Name: PlatformInfo.mak
+#
+# Description: This make file builds AcpiPlatform module DXE
+# components and link them to respective binary
+#
+#<AMI_FHDR_END>
+#*************************************************************************
+
+#---------------------------------------------------------------------------
+# Create PLATFORMINFO DXE Component
+#---------------------------------------------------------------------------
+all : PlatformInfo
+
+PlatformInfo : $(BUILD_DIR)\PlatformInfo.mak PlatformInfoBin
+
+$(BUILD_DIR)\PlatformInfo.mak : $(PlatformInfo_DIR)\PlatformInfo.cif $(PlatformInfo_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(PlatformInfo_DIR)\PlatformInfo.cif $(CIF2MAK_DEFAULTS)
+
+PLATFORM_INFO_INCLUDES = \
+ $(ACPI_PLATFORM_INCLUDES)\
+ $(INTEL_MCH_INCLUDES)\
+ $(INTEL_PCH_INCLUDES)
+
+PLATFORM_INFO_DEFINES = $(MY_DEFINES) $(MCH_DEFINES)\
+
+
+PlatformInfoBin: $(AMIDXELIB) $(AMICSPLib)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\PlatformInfo.mak all \
+ "MY_INCLUDES=$(PLATFORM_INFO_INCLUDES)"\
+ GUID=1314216C-CB8D-421c-B854-06231386E642\
+ ENTRY_POINT=PlatformInfoInit \
+ TYPE=BS_DRIVER\
+ DEPEX1=$(PlatformInfo_DIR)\PlatformInfo.dxs\
+ DEPEX1_TYPE=EFI_SECTION_DXE_DEPEX\
+ COMPRESS=1
+
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#************************************************************************* \ No newline at end of file
diff --git a/Board/EM/Platform/PlatformInfo/PlatformInfo.sdl b/Board/EM/Platform/PlatformInfo/PlatformInfo.sdl
new file mode 100644
index 0000000..8d7ff46
--- /dev/null
+++ b/Board/EM/Platform/PlatformInfo/PlatformInfo.sdl
@@ -0,0 +1,93 @@
+TOKEN
+ Name = "PlatformInfo_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable PlatformInfo support in Project"
+ TokenType = Boolean
+ TargetMAK = Yes
+ Master = Yes
+End
+
+TOKEN
+ Name = "PlatformInfo_RevisonId"
+ Value = "0x01"
+ Help = "BoardId Red Fort"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PlatformInfo_PlatformFlavor"
+ Value = "$(FlavorDesktop)"
+ Help = "BoardId Red Fort"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "PCH_SKU" "=" "0"
+End
+
+TOKEN
+ Name = "PlatformInfo_PlatformFlavor"
+ Value = "$(FlavorMobile)"
+ Help = "BoardId Red Fort"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "PCH_SKU" "=" "1"
+End
+
+TOKEN
+ Name = "PlatformInfo_BoardId"
+ Value = "$(BoardIdGraysReef)"
+ Help = "BoardId Emerald Lake"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PlatformInfo_BoardRev"
+ Value = "0x00"
+ Help = "BoardId Red Fort"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "PCH_SKU" "=" "0"
+End
+
+TOKEN
+ Name = "PlatformInfo_BoardRev"
+ Value = "0x02"
+ Help = "BoardId Red Fort"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "PCH_SKU" "=" "1"
+End
+
+PATH
+ Name = "PlatformInfo_DIR"
+End
+
+MODULE
+ Help = "Includes PlatformInfo.mak to Project"
+ File = "PlatformInfo.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\PlatformInfo.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "PLATFORM_INFO_INCLUDES"
+ InvokeOrder = ReplaceParent
+End
+
+ELINK
+ Name = "/I $(PlatformInfo_DIR)"
+ Parent = "PLATFORM_INFO_INCLUDES"
+ InvokeOrder = AfterParent
+End
+
diff --git a/Board/EM/Platform/PlatformSetup.h b/Board/EM/Platform/PlatformSetup.h
new file mode 100644
index 0000000..857d048
--- /dev/null
+++ b/Board/EM/Platform/PlatformSetup.h
@@ -0,0 +1,101 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformSetup.h 4 1/15/13 5:47a Alanlin $
+//
+// $Revision: 4 $
+//
+// $Date: 1/15/13 5:47a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformSetup.h $
+//
+// 4 1/15/13 5:47a Alanlin
+// [TAG] None
+// [Category] Normal
+// [Severity] Normal
+// [Description] Add setup item and setting for DPTF
+// [Files] Acpiplatform.c, Acpiplatform.sd, Acpiplatform.uni,
+// PlatformSetup.h
+//
+// 3 10/31/12 4:43a Alanlin
+// [TAG] None
+// [Category] Improvement
+// [Severity] Normal
+// [Description] Fine tune Platform Board Information.
+//
+// 2 7/27/12 5:11a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Create DPTF and CPPC setup item.
+// [Files] AcpiPlatform.c, AcpiPlatform.sd, AcpiPlatform.uni,
+// PlatformSetup.h
+//
+// 1 2/09/12 12:31a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: PlatformSetup.h
+//
+// Description: OEM Specific Setup Variables and Structures
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+#ifndef _OEMSETUP_H_
+#define _OEMSETUP_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ #pragma pack(1)
+
+ typedef struct _SETUP_PLATFORM_DATA
+ {
+
+ UINT8 GbePciePortNum;
+ UINT8 PlatformFlavor;
+ UINT8 PcieSBDE;
+ UINT8 PegPresent[4];
+ UINT8 DimmPresent[4];
+ UINT8 IGFXAvailable;
+ UINT8 VTdAvailable;
+ UINT8 PlatformSupportCppc;
+ UINT8 PlatformSupportRtD3;
+ UINT8 LPMSupport;
+ }SETUP_PLATFORM_DATA;
+
+ #pragma pack()
+
+/****** DO NOT WRITE BELOW THIS LINE *******/
+#ifdef __cplusplus
+}
+#endif
+#endif
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.c b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.c
new file mode 100644
index 0000000..9f3b2f2
--- /dev/null
+++ b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.c
@@ -0,0 +1,866 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformSetupInfo/PlatformSetupInfo.c 13 8/02/13 6:46a Alanlin $
+//
+// $Revision: 13 $
+//
+// $Date: 8/02/13 6:46a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformSetupInfo/PlatformSetupInfo.c $
+//
+// 13 8/02/13 6:46a Alanlin
+// [TAG] None
+// [Category] Normal
+// [Severity] Normal
+// [Description] Update to support Haswell ULT D0 setup info
+// [Files] PlatformSetupInfo.c
+//
+// 12 6/04/13 10:10a Alanlin
+// [TAG] None
+// [Category] Bug Fix
+// [Severity] Normal
+// [Symptom] UEFI_231C_SCT_Final_Draft_201303 test failed.
+// [RootCause] The variable use illegal variable guid.
+// [Solution] Change GUID form EFI_GLOBAL_VARIABLE to
+// AMI_GLOBAL_VARIABLE_GUID.
+// [Files] PlatformSetupInfo.c
+//
+// 11 3/15/13 6:56a Alanlin
+// [TAG] None
+// [Category] Normal
+// [Severity] Normal
+// [Description] Add PCH Lan version information.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h.
+//
+// 10 1/28/13 11:12p Alanlin
+// [TAG] EIP113555
+// [Category] Important
+// [Severity] Important
+// [Description] Update Shark Bay Client ACPI Reference Code Beta Version
+// 1.0.0
+//
+// 9 1/18/13 3:59a Alanlin
+// [TAG] None
+// [Category] Normal
+// [Severity] Normal
+// [Description] Fixed that Setup menu shows incorrect CPU informaion for
+// C0 stepping
+// [Files] PlatformSetupInfo.c.
+//
+// 8 1/15/13 5:48a Alanlin
+// [TAG] None
+// [Category] Normal
+// [Severity] Normal
+// [Description] Update to support Haswell C0 and ULT C1 setup info
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h
+//
+// 7 11/26/12 6:01a Alanlin
+// [TAG] None
+// [Category] Improvement
+// [Severity] Normal
+// [Description] Fixed that Setup menu shows incorrect CPU informaion for
+// Sharkbay ULT.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h
+//
+// 6 8/14/12 8:56a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Update to support Haswell B0 and ULT A0 setup info.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h
+//
+// 5 7/11/12 3:55a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Correct Lan PHY Revision in BIOS Setup info.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h
+//
+// 4 4/25/12 1:23p Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Correct Graphics Technology (GT) Displays (GT Info) in
+// BIOS Setup.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h
+//
+// 3 4/05/12 7:14a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Fixed building error for Intel System Agent
+// Label:"4.6.5.3_Intel_SA-RC_055_004".
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.mak
+//
+// 2 3/26/12 4:06a Yurenlai
+// [TAG] EIP86219
+// [Category] New Feature
+// [Description] Add PCH information in SharkBay BIOS setup.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.sd,
+// PlatformSetupInfo.uni
+//
+// 1 2/24/12 1:02a Yurenlai
+// Add PlatformSetupInfo module part.
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: PlatformSetupInfo.c
+//
+// Description: Display platform information
+//
+//<AMI_FHDR_END>
+//**********************************************************************
+
+//----------------------------------------------------------------------------
+// Include(s)
+//----------------------------------------------------------------------------
+#include <Setup.h>
+#include <SetupStrTokens.h>
+#include <Token.h>
+#include <AmiDxeLib.h>
+#include <AmiCspLib.h>
+#if defined (IntelTXT_SUPPORT) && IntelTXT_SUPPORT
+#include <Txt.h>
+#endif
+#if defined CRB_EC_SUPPORT && CRB_EC_SUPPORT
+#include <Protocol\EcAccess.h>
+#endif
+#if EFI_SPECIFICATION_VERSION>0x20000
+#include <Protocol\HiiDatabase.h>
+#include <Protocol\HiiString.h>
+#define LANGUAGE_CODE_ENGLISH "en-US"
+#else
+#include <Protocol/Hii.h>
+#endif
+#include "PchRegs.h"
+#include "PlatformSetupInfo.h"
+#include "CpuRegs.h"
+
+EFI_HII_HANDLE gMainHiiHandle = NULL;
+
+//<AMI_PHDR_START>
+//---------------------------------------------------------------------------
+// Name: UpdateCpuInformation
+//
+// Description: Update CPU Information to Main page.
+//
+// Input: None
+//
+// Output: None
+//---------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+UpdateCpuInformation (VOID)
+{
+ UINT32 RegEax, RegEbx, RegEcx, RegEdx;
+ UINT32 CpuSignature;
+ UINT32 CpuID;
+ UINT8 CpuStepping;
+ UINTN i, Count;
+ UINT8 CpuCores = NumCpuCores();
+ CPU_REV ProcessorRevisionTable[] = {
+ {CPUID_FULL_FAMILY_MODEL_HASWELL_A0, 0x01, "A0"},
+ {CPUID_FULL_FAMILY_MODEL_HASWELL_B0, 0x02, "B0"},
+ {CPUID_FULL_FAMILY_MODEL_HASWELL_B0, 0x05, "C0"},
+ {CPUID_FULL_FAMILY_MODEL_HASWELL_C0, 0x05, "C0"},
+ {CPUID_FULL_FAMILY_MODEL_HASWELL_C0, 0x06, "C0"},
+ {CPUID_FULL_FAMILY_MODEL_HASWELL_ULT, 0x01, "A0"},
+ {CPUID_FULL_FAMILY_MODEL_HASWELL_ULT, 0x02, "B0"},
+ {CPUID_FULL_FAMILY_MODEL_HASWELL_ULT, 0x03, "B1"},
+ {CPUID_FULL_FAMILY_MODEL_HASWELL_ULT_C0, 0x09, "C0"},
+ {CPUID_FULL_FAMILY_MODEL_HASWELL_ULT_C0, 0x0B, "D0"},
+ {CPUID_FULL_FAMILY_MODEL_CRYSTALWELL, 0x02, "B0"},
+ };
+
+ CPULib_CpuID (1, &RegEax, &RegEbx, &RegEcx, &RegEdx);
+ CpuSignature = RegEax & CPUID_FULL_FAMILY_MODEL;
+ CpuID = RegEax & 0xFFFFF;
+ CpuStepping = MmioRead8 (PciNBD0F0RegBase + PCIE_Revision_Identification);
+
+
+ switch (CpuSignature) {
+ case CPUID_FULL_FAMILY_MODEL_HASWELL:
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_PROCESSOR_VALUE),
+ L"%a",
+ "Haswell"
+ );
+ break;
+ case CPUID_FULL_FAMILY_MODEL_HASWELL_ULT:
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_PROCESSOR_VALUE),
+ L"%a",
+ "Haswell ULT"
+ );
+ break;
+ case CPUID_FULL_FAMILY_MODEL_CRYSTALWELL:
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_PROCESSOR_VALUE),
+ L"%a",
+ "Crystalwell"
+ );
+ break;
+ default:
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_PROCESSOR_VALUE),
+ L"%a",
+ "Unknown"
+ );
+ }
+
+ Count = sizeof (ProcessorRevisionTable) / sizeof (ProcessorRevisionTable[0]);
+ for (i = 0; i < Count; i++) {
+ if ((CpuID == ProcessorRevisionTable[i].CPUID) && (CpuStepping == ProcessorRevisionTable[i].Stepping)){
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_PROCESSOR_STEPPING_VALUE),
+ L"%a",
+ ProcessorRevisionTable[i].String
+ );
+ break;
+ }
+ }
+
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_PROCESSOR_COUNT_VALUE),
+ L"%xCore(s) / %xThread(s)",
+ CpuCores,
+ CpuCores * (IsHtEnabled() ? 2 : 1)
+ );
+}
+
+//<AMI_PHDR_START>
+//---------------------------------------------------------------------------
+// Name: UpdatePchInformation
+//
+// Description: Update PCH Information to Main page.
+//
+// Input: None
+//
+// Output: None
+//---------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+UpdatePchInformation (VOID)
+{
+ UINT16 Data16;
+
+ Data16 = MmioRead16 (PciD31F0RegBase + R_PCH_LPC_DEVICE_ID);
+
+ if (IS_PCH_LPTH_LPC_DEVICE_ID (Data16)) {
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_CHIP_SB_VALUE),
+ L"%a",
+ "LynxPoint"
+ );
+ }
+ else if (IS_PCH_LPTLP_LPC_DEVICE_ID (Data16)) {
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_CHIP_SB_VALUE),
+ L"%a",
+ "LynxPoint-LP"
+ );
+ }
+ else {
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_CHIP_SB_VALUE),
+ L"%a",
+ "Unknown"
+ );
+ }
+
+#if defined (IntelTXT_SUPPORT) && IntelTXT_SUPPORT
+ //
+ // Platform PCH TXT capability
+ //
+ if (MmioRead32 (TXT_PUBLIC_BASE + 0x10) & BIT0) {
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_PLATFORM_TXT_VALUE),
+ L"%a",
+ "Supported"
+ );
+ } else {
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_PLATFORM_TXT_VALUE),
+ L"%a",
+ "Unsupported"
+ );
+ }
+#endif
+}
+
+#if defined CRB_EC_SUPPORT && CRB_EC_SUPPORT
+//<AMI_PHDR_START>
+//---------------------------------------------------------------------------
+// Name: UpdateEcVersion
+//
+// Description: Update the version of CRB EC.
+//
+// Input: None
+//
+// Output: None
+//---------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+UpdateEcVersion (VOID)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ EFI_GUID EfiEcAccessProtocolGuid = EC_PROTOCOL_GUID;
+ EFI_EC_ACCESS_PROTOCOL *ECAccess = NULL;
+ EFI_GUID gAmiGlobalVariableGuid = AMI_GLOBAL_VARIABLE_GUID;
+ UINT8 DataHigh = 0;
+ UINT8 DataLow = 0;
+ UINTN VariableSize;
+
+ Status = pBS->LocateProtocol (&EfiEcAccessProtocolGuid, NULL, &ECAccess);
+ if (EFI_ERROR(Status)) {
+ return;
+ }
+
+ //
+ // Initializing the size for retrieving variable(s) "ECRev1" & "ECRev2"
+ //
+ VariableSize = sizeof (UINT8);
+ pRS->GetVariable (
+ L"ECRev1",
+ &gAmiGlobalVariableGuid,
+ NULL,
+ &VariableSize,
+ &DataHigh
+ );
+ pRS->GetVariable (
+ L"ECRev2",
+ &gAmiGlobalVariableGuid,
+ NULL,
+ &VariableSize,
+ &DataLow
+ );
+
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_CHIP_EC_REV_VALUE),
+ L"%02X%a%02X",
+ DataHigh,
+ ".",
+ DataLow
+ );
+}
+#endif
+
+//<AMI_PHDR_START>
+//---------------------------------------------------------------------------
+// Name: UpdateLanPhyRevision
+//
+// Description: Retrieves LAN PHY Revision.
+//
+// Input: None
+//
+// Output: None
+//---------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+UpdateLanPhyRevision (VOID)
+{
+ UINTN PciD25F0RegBase;
+ UINT32 GbEBar;
+ UINT32 RegisterValue;
+ UINTN LoopTime;
+ UINT8 LanPhyRev;
+ UINTN Index;
+ UINT8 Data;
+ BOOLEAN Found;
+ LAN_PHY_INFO LanPhyInfoTable[] = {
+ { LAN_PHY_REV_A0, "A0" },
+ { LAN_PHY_REV_A1, "A1" },
+ { LAN_PHY_REV_A2, "A2" },
+ { LAN_PHY_REV_A3, "A3" },
+ { LAN_PHY_REV_B0, "B0" },
+ { LAN_PHY_REV_C0, "C0" }};
+ GbEBar = 0;
+ LanPhyRev = 0;
+ Found = FALSE;
+
+ PciD25F0RegBase =
+ (
+ PCIEX_BASE_ADDRESS +
+ ((PCI_BUS_NUMBER_PCH_LAN) << 20) +
+ ((PCI_DEVICE_NUMBER_PCH_LAN) << 15) +
+ ((PCI_FUNCTION_NUMBER_PCH_LAN) << 12)
+ );
+ GbEBar = MmioRead32 (PciD25F0RegBase + R_PCH_LAN_MEM_BASE_A) & B_PCH_LAN_MBARB_BA;
+
+ Data = MmioRead8 (PciD25F0RegBase + R_PCH_LAN_CMD);
+ //
+ // Command Register's Value is 0 in Fast Boot and Modifying here
+ //
+ if ((Data & B_PCH_LAN_CMD_MSE) == 0) {
+ MmioWrite8 ((PciD25F0RegBase + R_PCH_LAN_CMD), 0x07);
+ Found = TRUE;
+ }
+ //
+ // Request semaphore
+ //
+ Mmio32 (GbEBar, PHY_SEMAPHORE_REG) |= BIT5;
+
+ for (LoopTime = 0; LoopTime < GBE_MAX_LOOP_TIME; LoopTime++) {
+ RegisterValue = MmioRead32 (GbEBar + PHY_SEMAPHORE_REG);
+
+ if (RegisterValue & BIT5) {
+ break;
+ }
+
+ pBS->Stall (10);
+ }
+
+ if (LoopTime >= GBE_MAX_LOOP_TIME) {
+ return ;
+ }
+ //
+ // Write PHY_CONFIG_REG with set page 769
+ //
+ MmioWrite32 ((GbEBar + PHY_CONFIG_REG), PHY_PAGE769_SET_REG);
+ for (LoopTime = 0; LoopTime < GBE_MAX_LOOP_TIME; LoopTime++) {
+ RegisterValue = MmioRead32 (GbEBar + PHY_CONFIG_REG);
+
+ if (RegisterValue & BIT28) {
+ break;
+ }
+
+ pBS->Stall (10);
+ }
+
+ if (LoopTime >= GBE_MAX_LOOP_TIME) {
+ return ;
+ }
+ //
+ // Delay 4ms after page change
+ //
+ pBS->Stall (4000);
+
+ //
+ // Write PHY_CONFIG_REG with slow MDIO mode
+ //
+ MmioWrite32 ((GbEBar + PHY_CONFIG_REG), PHY_SLOW_MDIO_MODE_REG);
+ for (LoopTime = 0; LoopTime < GBE_MAX_LOOP_TIME; LoopTime++) {
+ RegisterValue = MmioRead32 (GbEBar + PHY_CONFIG_REG);
+
+ if (RegisterValue & BIT28) {
+ break;
+ }
+
+ pBS->Stall (10);
+ }
+
+ if (LoopTime >= GBE_MAX_LOOP_TIME) {
+ return ;
+ }
+ //
+ // Read register PHY Version (offset 0x3)
+ //
+ MmioWrite32 ((GbEBar + PHY_CONFIG_REG), PHY_READ_PHY_OFFSET3_REG);
+ for (LoopTime = 0; LoopTime < GBE_MAX_LOOP_TIME; LoopTime++) {
+ RegisterValue = MmioRead32 (GbEBar + PHY_CONFIG_REG);
+ if (RegisterValue & BIT28) {
+ break;
+ }
+
+ pBS->Stall (10);
+ }
+
+ if (LoopTime >= GBE_MAX_LOOP_TIME) {
+ return ;
+ }
+ //
+ // Read LAN PHY revision from PHY register 3
+ //
+ LanPhyRev = (UINT8) MmioRead16 (GbEBar + PHY_CONFIG_REG);
+
+ //
+ // Write PHY_CONFIG_REG to write fast mdio mode
+ //
+ MmioWrite32 ((GbEBar + PHY_CONFIG_REG), PHY_FAST_MDIO_MODE_REG);
+ for (LoopTime = 0; LoopTime < GBE_MAX_LOOP_TIME; LoopTime++) {
+ RegisterValue = MmioRead32 (GbEBar + PHY_CONFIG_REG);
+
+ if (RegisterValue & BIT28) {
+ break;
+ }
+
+ pBS->Stall (10);
+ }
+
+ if (LoopTime >= GBE_MAX_LOOP_TIME) {
+ return ;
+ }
+ //
+ // Free semaphore
+ //
+ Mmio32 (GbEBar, PHY_SEMAPHORE_REG) &= ~BIT5;
+
+ //
+ // LAN PHY Revision
+ //
+ if (LanPhyRev) {
+ for (Index = 0; Index < (sizeof (LanPhyInfoTable)/sizeof (LAN_PHY_INFO)); Index++) {
+ if (LanPhyRev == LanPhyInfoTable[Index].LanPhyRev) {
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_BOARD_LAN_PHY_REV_VALUE),
+ L"%a",
+ LanPhyInfoTable[Index].LanPhyString
+ );
+ break;
+ }
+ }
+ }
+
+ if (Found == TRUE) {
+ MmioWrite8 ((PciD25F0RegBase + R_PCH_LAN_CMD), Data);
+ }
+
+ return ;
+}
+
+//<AMI_PHDR_START>
+//---------------------------------------------------------------------------
+// Name: UpdateSpiClockFreqInfo
+//
+// Description: Update SPI Clock Frequency information to Main page.
+//
+// Input: None
+//
+// Output: None
+//---------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+UpdateSpiClockFreqInfo (VOID)
+{
+ UINT32 Flcomp;
+ UINT32 SpiFrequ;
+
+ MmioRW32 ((SB_RCBA + R_PCH_SPI_FDOC), (UINT32)(V_PCH_SPI_FDOC_FDSS_COMP), (UINT32)(B_PCH_SPI_FDOC_FDSS_MASK | B_PCH_SPI_FDOC_FDSI_MASK));
+ Flcomp = MmioRead32 (SB_RCBA + R_PCH_SPI_FDOD);
+
+ // Check Dual Output Fast Read Support
+ if (Flcomp & BIT30) {
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_SPI_DOFR_SUPPORT_VALUE),
+ L"%a",
+ "Supported"
+ );
+ }
+ else {
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_SPI_DOFR_SUPPORT_VALUE),
+ L"%a",
+ "Unsupported"
+ );
+ }
+
+ //
+ // Fast Read Clock Frequency
+ //
+ switch ((Flcomp & (BIT23 | BIT22 | BIT21)) >> 21) {
+ case V_PCH_SPI_SSFC_SCF_20MHZ:
+ SpiFrequ = 20;
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_SPI_FAST_READ_FREQUENCY_VALUE),
+ L"%d MHz",
+ SpiFrequ
+ );
+ break;
+ case V_PCH_SPI_SSFC_SCF_33MHZ:
+ SpiFrequ = 33;
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_SPI_FAST_READ_FREQUENCY_VALUE),
+ L"%d MHz",
+ SpiFrequ
+ );
+ break;
+ case V_PCH_SPI_SSFC_SCF_50MHZ:
+ SpiFrequ = 50;
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_SPI_FAST_READ_FREQUENCY_VALUE),
+ L"%d MHz",
+ SpiFrequ
+ );
+ break;
+ default: break;
+ }
+
+ //
+ // Write and Erase Clock Frequency
+ //
+ switch ((Flcomp & (BIT26 | BIT25 | BIT24)) >> 24) {
+ case V_PCH_SPI_SSFC_SCF_20MHZ:
+ SpiFrequ = 20;
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_SPI_WRITE_CLOCK_FREQUENCY_VALUE),
+ L"%d MHz",
+ SpiFrequ
+ );
+ break;
+ case V_PCH_SPI_SSFC_SCF_33MHZ:
+ SpiFrequ = 33;
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_SPI_WRITE_CLOCK_FREQUENCY_VALUE),
+ L"%d MHz",
+ SpiFrequ
+ );
+ break;
+ case V_PCH_SPI_SSFC_SCF_50MHZ:
+ SpiFrequ = 50;
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_SPI_WRITE_CLOCK_FREQUENCY_VALUE),
+ L"%d MHz",
+ SpiFrequ
+ );
+ break;
+ default: break;
+ }
+
+ //
+ // Read ID and Read Status Clock Frequency
+ //
+ switch ((Flcomp & (BIT29 | BIT28 | BIT27)) >> 27) {
+ case V_PCH_SPI_SSFC_SCF_20MHZ:
+ SpiFrequ = 20;
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_SPI_READ_CLOCK_FREQUENCY_VALUE),
+ L"%d MHz",
+ SpiFrequ
+ );
+ break;
+ case V_PCH_SPI_SSFC_SCF_33MHZ:
+ SpiFrequ = 33;
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_SPI_READ_CLOCK_FREQUENCY_VALUE),
+ L"%d MHz",
+ SpiFrequ
+ );
+ break;
+ case V_PCH_SPI_SSFC_SCF_50MHZ:
+ SpiFrequ = 50;
+ InitString (
+ gMainHiiHandle,
+ STRING_TOKEN (STR_SPI_READ_CLOCK_FREQUENCY_VALUE),
+ L"%d MHz",
+ SpiFrequ
+ );
+ break;
+ default: break;
+ }
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: GetAndUpdateHiiString
+//
+// Description: This function Reads a String from HII Handle and updates the
+// string to Main HII Handle.
+//
+// Input: HiiHandleGet - Efi Hii Handle
+// TokenGet - String Token
+// TokenUpdate - String Token
+//
+// Output: Returns EFI_STATUS
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS GetAndUpdateHiiString (
+ IN EFI_HII_HANDLE HiiHandleGet,
+ IN STRING_REF TokenGet,
+ IN STRING_REF TokenUpdate)
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+#if EFI_SPECIFICATION_VERSION>0x20000
+ static EFI_HII_STRING_PROTOCOL *HiiString = NULL;
+ CHAR8 Language[] = LANGUAGE_CODE_ENGLISH;
+#else
+ static EFI_HII_PROTOCOL *Hii = NULL;
+#endif
+ CHAR16 String[0x100];
+ UINTN StringLength = sizeof(String)/sizeof(CHAR16);
+
+ if (HiiHandleGet == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+#if EFI_SPECIFICATION_VERSION > 0x20000
+ if (HiiString == NULL) {
+ Status = pBS->LocateProtocol (&gEfiHiiStringProtocolGuid, NULL, &HiiString);
+ }
+#else
+ if (Hii == NULL) {
+ Status = pBS->LocateProtocol (&gEfiHiiProtocolGuid, NULL, &Hii);
+ }
+#endif
+ ASSERT_EFI_ERROR(Status);
+
+ pBS->SetMem(String, (sizeof(CHAR16) * StringLength), 0);
+
+#if EFI_SPECIFICATION_VERSION>0x20000
+ Status = HiiString->GetString (HiiString,
+ (CHAR8*) &Language,
+ HiiHandleGet,
+ TokenGet,
+ String,
+ &StringLength,
+ NULL);
+#else
+ Status = Hii->GetString (Hii,
+ HiiHandleGet,
+ TokenGet,
+ FALSE,
+ NULL,
+ &StringLength,
+ String);
+#endif
+
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ ASSERT (gMainHiiHandle != NULL);
+
+ InitString (
+ gMainHiiHandle,
+ TokenUpdate,
+ L"%s",
+ String
+ );
+
+ return EFI_SUCCESS;
+}
+
+ // (EIP86219)>
+//<AMI_PHDR_START>
+//---------------------------------------------------------------------------
+// Name: InitPlatformSetupInfo
+//
+// Description: This function will display platform information and put into
+// variables of PlatformSetupInfo.uni file.
+//
+// Input: EFI_HII_HANDLE HiiHandle
+//
+// Output: VOID
+//---------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+InitPlatformSetupInfo(
+ EFI_HII_HANDLE HiiHandle,
+ UINT16 Class
+)
+{
+ if (Class == MAIN_FORM_SET_CLASS) {
+ gMainHiiHandle = HiiHandle;
+
+ UpdateCpuInformation ();
+
+ UpdatePchInformation ();
+
+ UpdateLanPhyRevision ();
+
+#if defined CRB_EC_SUPPORT && CRB_EC_SUPPORT
+ UpdateEcVersion ();
+#endif
+
+ UpdateSpiClockFreqInfo ();
+ }
+
+ if (Class == ADVANCED_FORM_SET_CLASS) {
+ //
+ // Update Processor Information
+ //
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_CPU_SKT0_VERSION_VALUE), STRING_TOKEN(STR_BOARD_PROCESSOR_VERSION_VALUE));
+
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_PROCESSOR_SPEED_VALUE), STRING_TOKEN(STR_BOARD_PROCESSOR_SPEED_VALUE));
+
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_CPU_SKT0_CPUID_VALUE), STRING_TOKEN(STR_BOARD_PROCESSOR_ID_VALUE));
+
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_CPU_SKT0_MICROCODE_VALUE), STRING_TOKEN(STR_BOARD_PROCESSOR_MICROCODE_VALUE));
+
+#if defined (iME_SUPPORT) && iME_SUPPORT
+ //
+ // Update ME Information
+ //
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_ME_FW_VERSION_VALUE), STRING_TOKEN(STR_BOARD_ME_FW_REV_VALUE));
+
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_ME_FW_SKU_VALUE), STRING_TOKEN(STR_BOARD_ME_FW_SKU_VALUE));
+#endif
+ }
+
+ if (Class == CHIPSET_FORM_SET_CLASS) {
+ //
+ // Update SA Information
+ //
+#if (defined(CSM_SUPPORT) && (CSM_SUPPORT != 0))
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_CHIP_IGFX_VBIOS_REV_VALUE), STRING_TOKEN(STR_BOARD_IGFX_VBIOS_REV_VALUE));
+#endif
+
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_MRC_REV_VALUE), STRING_TOKEN(STR_BOARD_MRC_REV_VALUE));
+
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_MEMORY_SIZE_VALUE), STRING_TOKEN(STR_BOARD_MEMORY_SIZE_VALUE));
+
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_MEMORY_SPEED_VALUE), STRING_TOKEN(STR_BOARD_MEMORY_FREQ_VALUE));
+
+ // Display GT Type with RP0 Frequency Information
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_PROCESSOR_GT_VALUE), STRING_TOKEN(STR_BOARD_PROCESSOR_GT_VALUE));
+
+ //
+ // Update PCH Information
+ //
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_PCH_SKU_VALUE), STRING_TOKEN(STR_BOARD_CHIP_SB_SKU_VALUE));
+ GetAndUpdateHiiString (HiiHandle, STRING_TOKEN(STR_PCH_REVID_VALUE), STRING_TOKEN(STR_BOARD_CHIP_SB_REV_VALUE));
+ }
+
+ return;
+}
+ // <(EIP86219)
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.cif b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.cif
new file mode 100644
index 0000000..5a51931
--- /dev/null
+++ b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.cif
@@ -0,0 +1,13 @@
+<component>
+ name = "PlatformSetupInfo"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\PlatformSetupInfo"
+ RefName = "PlatformSetupInfo"
+[files]
+"PlatformSetupInfo.sdl"
+"PlatformSetupInfo.mak"
+"PlatformSetupInfo.sd"
+"PlatformSetupInfo.uni"
+"PlatformSetupInfo.c"
+"PlatformSetupInfo.h"
+<endComponent>
diff --git a/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.h b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.h
new file mode 100644
index 0000000..cbbaef5
--- /dev/null
+++ b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.h
@@ -0,0 +1,150 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformSetupInfo/PlatformSetupInfo.h 7 3/15/13 6:57a Alanlin $
+//
+// $Revision: 7 $
+//
+// $Date: 3/15/13 6:57a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformSetupInfo/PlatformSetupInfo.h $
+//
+// 7 3/15/13 6:57a Alanlin
+// [TAG] None
+// [Category] Normal
+// [Severity] Normal
+// [Description] Add PCH Lan version information.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h.
+//
+// 6 1/15/13 5:49a Alanlin
+// [TAG] None
+// [Category] Normal
+// [Severity] Normal
+// [Description] Update to support Haswell C0 and ULT C1 setup info
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h
+//
+// 5 11/26/12 6:02a Alanlin
+// [TAG] None
+// [Category] Improvement
+// [Severity] Normal
+// [Description] Fixed that Setup menu shows incorrect CPU informaion for
+// Sharkbay ULT.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h
+//
+//
+// 4 8/14/12 8:56a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Severity] Important
+// [Description] Update to support Haswell B0 and ULT A0 setup info.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h
+//
+// 3 7/11/12 3:55a Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Correct Lan PHY Revision in BIOS Setup info.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h
+//
+// 2 4/25/12 1:23p Yurenlai
+// [TAG] None
+// [Category] Improvement
+// [Description] Correct Graphics Technology (GT) Displays (GT Info) in
+// BIOS Setup.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.h
+//
+// 1 2/24/12 1:02a Yurenlai
+// Add PlatformSetupInfo module part.
+//
+//*************************************************************************
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: PlatformSetupInfo.h
+//
+// Description: Header file for PlatformSetupInfo module.
+//
+//----------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+#ifndef __PLATFORM_SETUP_INFO_H__
+#define __PLATFORM_SETUP_INFO_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CPUID_FULL_FAMILY_MODEL_HASWELL_A0 0x000306C1 // Haswell
+#define CPUID_FULL_FAMILY_MODEL_HASWELL_B0 0x000306C2 // Haswell
+#define CPUID_FULL_FAMILY_MODEL_HASWELL_C0 0x000306C3 // Haswell C-0
+#define CPUID_FULL_FAMILY_MODEL_HASWELL_ULT 0x00040650 // Haswell ULT
+#define CPUID_FULL_FAMILY_MODEL_HASWELL_ULT_C0 0x00040651 // Haswell ULT C-1
+#define CPUID_FULL_FAMILY_MODEL_CRYSTALWELL 0x00040660 // CRYSTALWELL
+
+#define PciD31F0RegBase PCIEX_BASE_ADDRESS + (UINT32) (31 << 15)
+#define PciNBD0F0RegBase PCIEX_BASE_ADDRESS
+#define PCIE_Revision_Identification 0x08
+//
+// LAN PHY Revision definitions
+//
+#define PHY_CONFIG_REG 0x00000020
+#define PHY_SEMAPHORE_REG 0x00000F00
+#define PHY_PAGE769_SET_REG 0x43f6020
+#define PHY_SLOW_MDIO_MODE_REG 0x4302580
+#define PHY_READ_PHY_OFFSET3_REG 0x8430000
+#define PHY_FAST_MDIO_MODE_REG 0x4302180
+#define LAN_PHY_REV_A0 0xA1
+#define LAN_PHY_REV_A1 0xA2
+#define LAN_PHY_REV_A2 0xA3
+#define LAN_PHY_REV_A3 0xA4
+#define LAN_PHY_REV_B0 0xA6
+#define LAN_PHY_REV_C0 0xA7
+
+// Max loop value for GBE check
+#define GBE_MAX_LOOP_TIME 4000
+
+#pragma pack(1)
+typedef struct {
+ UINT32 CPUID;
+ UINT8 Stepping;
+ CHAR8 String[16];
+} CPU_REV;
+
+typedef struct _LAN_PHY_INFO {
+ UINT16 LanPhyRev;
+ char *LanPhyString;
+} LAN_PHY_INFO;
+#pragma pack()
+
+/****** DO NOT WRITE BELOW THIS LINE *******/
+#ifdef __cplusplus
+}
+#endif
+#endif
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.mak b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.mak
new file mode 100644
index 0000000..c2e7e72
--- /dev/null
+++ b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.mak
@@ -0,0 +1,82 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformSetupInfo/PlatformSetupInfo.mak 2 4/05/12 7:14a Yurenlai $
+#
+# $Revision: 2 $
+#
+# $Date: 4/05/12 7:14a $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformSetupInfo/PlatformSetupInfo.mak $
+#
+# 2 4/05/12 7:14a Yurenlai
+# [TAG] None
+# [Category] Improvement
+# [Severity] Important
+# [Description] Fixed building error for Intel System Agent
+# Label:"4.6.5.3_Intel_SA-RC_055_004".
+# [Files] PlatformSetupInfo.c, PlatformSetupInfo.mak
+#
+# 1 2/24/12 1:02a Yurenlai
+# Add PlatformSetupInfo module part.
+#
+#*************************************************************************
+#<AMI_FHDR_START>
+#
+# Name: PlatformSetupInfo.mak
+#
+# Description: MAK file for the PlatformSetupInfo module
+#
+#<AMI_FHDR_END>
+#*************************************************************************
+All : PlatformSetupInfo
+
+PlatformSetupInfo : $(BUILD_DIR)\PlatformSetupInfo.mak
+
+SetupSdbs : $(BUILD_DIR)\PlatformSetupInfo.sdb
+
+$(BUILD_DIR)\PlatformSetupInfo.sdb : $(PlatformSetupInfo_DIR)\$(@B).sd $(PlatformSetupInfo_DIR)\$(@B).uni
+ $(STRGATHER) -i INCLUDE -parse -newdb -db $(BUILD_DIR)\$(@B).sdb $(PlatformSetupInfo_DIR)\$(@B).uni
+ $(STRGATHER) -scan -db $(BUILD_DIR)\$(@B).sdb -od $(BUILD_DIR)\$(@B).sdb $(PlatformSetupInfo_DIR)\$(@B).sd
+
+$(BUILD_DIR)\PlatformSetupInfo.mak : $(PlatformSetupInfo_DIR)\$(@B).cif $(PlatformSetupInfo_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(PlatformSetupInfo_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+PlatformSetupInfo_INCLUDES= \
+ $(INTEL_PCH_INCLUDES)\
+!if "$(IntelTXT_SUPPORT)"=="1"
+ $(TXT_INCLUDES)\
+!endif
+ $(PROJECT_CPU_INCLUDES)\
+
+SetupBin : $(BUILD_DIR)\PlatformSetupInfo.obj
+
+$(BUILD_DIR)\PlatformSetupInfo.obj : $(PROJECT_DIR)\$(PlatformSetupInfo_DIR)\PlatformSetupInfo.c $(BUILD_DIR)\SetupStrTokens.h
+ $(CC) $(CFLAGS) $(PlatformSetupInfo_INCLUDES) /Fo$(BUILD_DIR)\ $(PlatformSetupInfo_DIR)\PlatformSetupInfo.c
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2010, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#********************************************************************** \ No newline at end of file
diff --git a/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.sd b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.sd
new file mode 100644
index 0000000..c245074
--- /dev/null
+++ b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.sd
@@ -0,0 +1,300 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformSetupInfo/PlatformSetupInfo.sd 2 3/26/12 4:10a Yurenlai $
+//
+// $Revision: 2 $
+//
+// $Date: 3/26/12 4:10a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/PlatformSetupInfo/PlatformSetupInfo.sd $
+//
+// 2 3/26/12 4:10a Yurenlai
+// [TAG] EIP86219
+// [Category] New Feature
+// [Description] Add PCH information in SharkBay BIOS setup.
+// [Files] PlatformSetupInfo.c, PlatformSetupInfo.sd,
+// PlatformSetupInfo.uni
+//
+// 1 2/24/12 1:02a Yurenlai
+// Add PlatformSetupInfo module part.
+//
+//*************************************************************************
+
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: PlatformSetupInfo.sd
+//
+// Description: Setup file for PlatformSetupInfo driver. It displays the
+// platform information and its Version String in a form of Main
+// tab of setup screen
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+#ifdef FORM_SET_TYPEDEF
+
+#endif
+
+
+#ifdef SETUP_DATA_DEFINITION
+// Put NVRAM data definitions here.
+// For example: UINT8 Data1;
+// These definitions will be converted by the build process
+// to a definitions of SETUP_DATA fields.
+#endif
+
+#ifdef MAIN_FORM_SET
+
+ #ifdef FORM_SET_ITEM
+ //
+ // Define controls to be added to the main page of the formset
+ //
+
+ //
+ // CPU INFORMATION
+ //
+ SEPARATOR
+ SUBTITLE(STRING_TOKEN(STR_BOARD_CPU_FORM_SUBTITLE))
+
+ text
+ help = STRING_TOKEN(STR_BOARD_PROCESSOR_HELP),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_STRING),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_VALUE),
+ flags = 0, key = 0;
+
+ text
+ help = STRING_TOKEN(STR_BOARD_PROCESSOR_VERSION_HELP),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_VERSION_STRING),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_VERSION_VALUE),
+ flags = 0, key = 0;
+
+ text
+ help = STRING_TOKEN(STR_BOARD_PROCESSOR_SPEED_HELP),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_SPEED_STRING),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_SPEED_VALUE),
+ flags = 0, key = 0;
+
+ text
+ help = STRING_TOKEN(STR_BOARD_PROCESSOR_ID_HELP),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_ID_STRING),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_ID_VALUE),
+ flags = 0, key = 0;
+
+ text
+ help = STRING_TOKEN(STR_BOARD_PROCESSOR_STEPPING_HELP),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_STEPPING_STRING),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_STEPPING_VALUE),
+ flags = 0, key = 0;
+/*
+ text
+ help = STRING_TOKEN(STR_BOARD_PROCESSOR_PACKAGE_HELP),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_PACKAGE_STRING),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_PACKAGE_VALUE),
+ flags = 0, key = 0;
+*/
+ text
+ help = STRING_TOKEN(STR_BOARD_PROCESSOR_COUNT_HELP),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_COUNT_STRING),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_COUNT_VALUE),
+ flags = 0, key = 0;
+
+ text
+ help = STRING_TOKEN(STR_BOARD_PROCESSOR_MICROCODE_HELP),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_MICROCODE_STRING),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_MICROCODE_VALUE),
+ flags = 0, key = 0;
+
+ text
+ help = STRING_TOKEN(STR_BOARD_PROCESSOR_GT_HELP),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_GT_STRING),
+ text = STRING_TOKEN(STR_BOARD_PROCESSOR_GT_VALUE),
+ flags = 0, key = 0;
+
+ SEPARATOR
+#if defined(CSM_SUPPORT) && (CSM_SUPPORT != 0)
+ suppressif (PlatformInfo_PlatformFlavor == FlavorUpServer);
+ text
+ help = STRING_TOKEN(STR_BOARD_IGFX_VBIOS_REV_HELP),
+ text = STRING_TOKEN(STR_BOARD_IGFX_VBIOS_REV_NAME),
+ text = STRING_TOKEN(STR_BOARD_IGFX_VBIOS_REV_VALUE),
+ flags = 0,
+ key = 0;
+ endif;
+#endif
+
+ text
+ help = STRING_TOKEN(STR_BOARD_MRC_REV_HELP),
+ text = STRING_TOKEN(STR_BOARD_MRC_REV_NAME),
+ text = STRING_TOKEN(STR_BOARD_MRC_REV_VALUE),
+ flags = 0,
+ key = 0;
+
+ text
+ help = STRING_TOKEN(STR_BOARD_MEMORY_SIZE_HELP),
+ text = STRING_TOKEN(STR_BOARD_MEMORY_SIZE_NAME),
+ text = STRING_TOKEN(STR_BOARD_MEMORY_SIZE_VALUE),
+ flags = 0,
+ key = 0;
+
+ text
+ help = STRING_TOKEN(STR_BOARD_MEMORY_FREQ_HELP),
+ text = STRING_TOKEN(STR_BOARD_MEMORY_FREQ_NAME),
+ text = STRING_TOKEN(STR_BOARD_MEMORY_FREQ_VALUE),
+ flags = 0,
+ key = 0;
+
+ // (EIP86219)>
+ //
+ // PCH INFORMATION
+ //
+ SEPARATOR
+ SUBTITLE(STRING_TOKEN(STR_BOARD_SB_INFORMATION))
+
+ text
+ help = STRING_TOKEN(STR_BOARD_CHIP_SB_NAME_HELP),
+ text = STRING_TOKEN(STR_BOARD_CHIP_SB_NAME),
+ text = STRING_TOKEN(STR_BOARD_CHIP_SB_VALUE),
+ flags = 0,
+ key = 0;
+
+ text
+ help = STRING_TOKEN (STR_BOARD_CHIP_SB_SKU_HELP),
+ text = STRING_TOKEN (STR_BOARD_CHIP_SB_SKU_NAME),
+ text = STRING_TOKEN (STR_BOARD_CHIP_SB_SKU_VALUE),
+ flags = 0, key = 0;
+
+ text
+ help = STRING_TOKEN(STR_BOARD_CHIP_SB_REV_HELP),
+ text = STRING_TOKEN(STR_BOARD_CHIP_SB_REV_NAME),
+ text = STRING_TOKEN(STR_BOARD_CHIP_SB_REV_VALUE),
+ flags = 0,
+ key = 0;
+/*
+ text
+ help = STRING_TOKEN(STR_BOARD_CHIP_SB_PACKAGE_HELP),
+ text = STRING_TOKEN(STR_BOARD_CHIP_SB_PACKAGE_NAME),
+ text = STRING_TOKEN(STR_BOARD_CHIP_SB_PACKAGE_VALUE),
+ flags = 0,
+ key = 0;
+*/
+ // <(EIP86219)
+
+#if defined (IntelTXT_SUPPORT) && IntelTXT_SUPPORT
+ text
+ help = STRING_TOKEN(STR_BOARD_PLATFORM_TXT_HELP),
+ text = STRING_TOKEN(STR_BOARD_PLATFORM_TXT_NAME),
+ text = STRING_TOKEN(STR_BOARD_PLATFORM_TXT_VALUE),
+ flags = 0,
+ key = 0;
+#endif
+
+ text
+ help = STRING_TOKEN(STR_BOARD_LAN_PHY_REV_HELP),
+ text = STRING_TOKEN(STR_BOARD_LAN_PHY_REV_STRING),
+ text = STRING_TOKEN(STR_BOARD_LAN_PHY_REV_VALUE),
+ flags = 0, key = 0;
+
+ //
+ // KSC EC INFORMATION
+ //
+ SEPARATOR
+#if defined CRB_EC_SUPPORT && CRB_EC_SUPPORT
+ suppressif (PlatformInfo_PlatformFlavor != FlavorMobile);
+ text
+ help = STRING_TOKEN(STR_BOARD_CHIP_EC_REV_HELP),
+ text = STRING_TOKEN(STR_BOARD_CHIP_EC_REV_NAME),
+ text = STRING_TOKEN(STR_BOARD_CHIP_EC_REV_VALUE),
+ flags = 0,
+ key = 0;
+ endif;
+#endif
+
+#if defined (iME_SUPPORT) && iME_SUPPORT
+ suppressif (PlatformInfo_PlatformFlavor == FlavorUpServer);
+ text
+ help = STRING_TOKEN(STR_BOARD_ME_FW_REV_HELP),
+ text = STRING_TOKEN(STR_BOARD_ME_FW_REV_PROMPT),
+ text = STRING_TOKEN(STR_BOARD_ME_FW_REV_VALUE),
+ flags = 0,
+ key = 0;
+
+ text
+ help = STRING_TOKEN(STR_BOARD_ME_FW_SKU_HELP),
+ text = STRING_TOKEN(STR_BOARD_ME_FW_SKU_PROMPT),
+ text = STRING_TOKEN(STR_BOARD_ME_FW_SKU_VALUE),
+ flags = 0,
+ key = 0;
+ endif;
+#endif
+
+ //
+ // SPI Information
+ //
+ SEPARATOR
+ SUBTITLE(STRING_TOKEN(STR_SPI_CLK_FREQ))
+ text
+ help = STRING_TOKEN(STR_SPI_DOFR_SUPPORT_HELP),
+ text = STRING_TOKEN(STR_SPI_DOFR_SUPPORT),
+ text = STRING_TOKEN(STR_SPI_DOFR_SUPPORT_VALUE),
+ flags = 0,
+ key = 0;
+
+ text
+ help = STRING_TOKEN(STR_SPI_READ_CLOCK_FREQUENCY_HELP),
+ text = STRING_TOKEN(STR_SPI_READ_CLOCK_FREQUENCY),
+ text = STRING_TOKEN(STR_SPI_READ_CLOCK_FREQUENCY_VALUE),
+ flags = 0,
+ key = 0;
+
+ text
+ help = STRING_TOKEN(STR_SPI_WRITE_CLOCK_FREQUENCY_HELP),
+ text = STRING_TOKEN(STR_SPI_WRITE_CLOCK_FREQUENCY),
+ text = STRING_TOKEN(STR_SPI_WRITE_CLOCK_FREQUENCY_VALUE),
+ flags = 0,
+ key = 0;
+
+ text
+ help = STRING_TOKEN(STR_SPI_FAST_READ_FREQUENCY_HELP),
+ text = STRING_TOKEN(STR_SPI_FAST_READ_FREQUENCY),
+ text = STRING_TOKEN(STR_SPI_FAST_READ_FREQUENCY_VALUE),
+ flags = 0,
+ key = 0;
+
+ #endif
+
+ #ifdef FORM_SET_GOTO
+ //
+ // Define goto commands for the forms defined in this file
+ //
+ #endif
+
+#endif
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//************************************************************************* \ No newline at end of file
diff --git a/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.sdl b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.sdl
new file mode 100644
index 0000000..436ea37
--- /dev/null
+++ b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.sdl
@@ -0,0 +1,38 @@
+TOKEN
+ Name = "PlatformSetupInfo_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable PlatformSetupInfo support in Project"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+End
+
+PATH
+ Name = "PlatformSetupInfo_DIR"
+End
+
+MODULE
+ Help = "Includes PlatformSetupInfo.mak to Project"
+ File = "PlatformSetupInfo.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\PlatformSetupInfo.sdb"
+ Parent = "SETUP_SDBS"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(PlatformSetupInfo_DIR)\PlatformSetupInfo.sd"
+ Parent = "SETUP_DEFINITIONS"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "InitPlatformSetupInfo,"
+ Parent = "SetupStringInit"
+ Priority = -10
+ InvokeOrder = AfterParent
+End
+
diff --git a/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.uni b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.uni
new file mode 100644
index 0000000..5c974f6
--- /dev/null
+++ b/Board/EM/Platform/PlatformSetupInfo/PlatformSetupInfo.uni
Binary files differ
diff --git a/Board/EM/Platform/ReleaseNotes.chm b/Board/EM/Platform/ReleaseNotes.chm
new file mode 100644
index 0000000..f648121
--- /dev/null
+++ b/Board/EM/Platform/ReleaseNotes.chm
Binary files differ
diff --git a/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.c b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.c
new file mode 100644
index 0000000..65f67fc
--- /dev/null
+++ b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.c
@@ -0,0 +1,731 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.c 1 2/09/12 12:35a Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 2/09/12 12:35a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.c $
+//
+// 1 2/09/12 12:35a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+
+
+#include "Tiano.h"
+#include "EfiDriverLib.h"
+#include <Protocol\SMBios.h>
+#include <Protocol\SmbiosGetFlashDataProtocol.h>
+#include "SmbiosUpdateDataProtocol.h"
+
+EFI_GUID gEfiSmbiosProtocolGuid = EFI_SMBIOS_PROTOCOL_GUID;
+EFI_SMBIOS_PROTOCOL *gSmbiosProtocol;
+
+EFI_GUID gEfiSmbiosUpdateDataProtocolGuid = EFI_SMBIOS_UPDATE_DATA_PROTOCOL_GUID;
+
+EFI_SMBIOS_UPDATE_DATA_PROTOCOL SmbiosUpdateDataProtocol = {SMBIOS_GetFreeHandle,
+ SMBIOS_FindStructure,
+ SMBIOS_GetStructureBase,
+ SMBIOS_DeleteStructure,
+ SMBIOS_CopyStructure,
+ SMBIOS_InsertStructure};
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: GetStructureLength
+//
+// Description: Returns the length of the structure pointed by BufferStart
+// in bytes
+//
+// Input: UINT8 *BufferStart
+//
+// Output: Structure Size
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+UINT16
+GetStructureLength(
+ IN UINT8 *BufferStart
+)
+{
+ UINT8 *BufferEnd = BufferStart;
+
+ BufferEnd += ((SMBIOS_STRUCTURE_HEADER*)BufferStart)->Length;
+ while (*(UINT16*)BufferEnd != 0) {
+ BufferEnd++;
+ }
+ return (UINT16)(BufferEnd + 2 - BufferStart); // +2 for double zero terminator
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: GetTotalStructureSize
+//
+// Description: Returns the total structure size
+//
+// Input: UINT8 *Buffer
+//
+// Output: Total structure size
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+UINT16
+GetTotalStructureSize(
+ IN UINT8 *Buffer
+)
+{
+ UINT16 Length = 0;
+ UINT16 BlockSize;
+
+ while (((SMBIOS_STRUCTURE_HEADER*)Buffer)->Type != 127) {
+ BlockSize = GetStructureLength(Buffer);
+ Length = Length +BlockSize;
+ Buffer += BlockSize;
+ }
+ Length = Length+ GetStructureLength(Buffer);
+ return Length;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: FindStructureByType
+//
+// Description: Find structure type starting from memory location pointed by
+// Buffer
+//
+// Input: UINT8 **Buffer
+// UINT8 **StructureFoundPtr
+// UINT8 SearchType
+// UINT8 Instance
+//
+// Output: If SearchType is found:
+// UINT8 **Buffer - Points to the next structure
+// UINT8 **StructureFoundPtr - Points to the structure
+// that was found
+// If SearchType is not found:
+// UINT8 **Buffer - No change
+// UINT8 **StructureFoundPtr = NULL
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+BOOLEAN
+FindStructureByType(
+ IN OUT UINT8 **Buffer,
+ IN OUT UINT8 **StructureFoundPtr,
+ IN UINT8 SearchType,
+ IN UINT8 Instance // 1-based
+)
+{
+ UINT8 *BufferPtr = *Buffer;
+ BOOLEAN FindStatus = FALSE;
+
+ *StructureFoundPtr = NULL;
+ while (((SMBIOS_STRUCTURE_HEADER*)BufferPtr)->Type != 127) {
+ if (((SMBIOS_STRUCTURE_HEADER*)BufferPtr)->Type == SearchType) {
+ // If this instance, set the find status flag and update the Buffer pointer
+ if (--Instance == 0) {
+ FindStatus = TRUE;
+ *StructureFoundPtr = BufferPtr;
+ *Buffer = BufferPtr + GetStructureLength(BufferPtr);
+ break;
+ }
+ }
+ BufferPtr += GetStructureLength(BufferPtr);
+ }
+ if ((FindStatus == FALSE) && (SearchType == 127)) {
+ FindStatus = TRUE;
+ *StructureFoundPtr = BufferPtr;
+ *Buffer = BufferPtr + GetStructureLength(BufferPtr);
+ }
+ return FindStatus;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: FindStructureByHandle
+//
+// Description: Find structure handle starting from memory location pointed
+// by Buffer
+//
+// Input: UINT8 **Buffer
+// UINT16 Handle
+//
+// Output: If SearchType is found:
+// UINT8 **Buffer - Points to the structure that was found
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+BOOLEAN
+FindStructureByHandle(
+ IN OUT UINT8 **Buffer,
+ IN UINT16 Handle
+)
+{
+ while (((SMBIOS_STRUCTURE_HEADER*)*Buffer)->Handle != Handle) {
+ if (((SMBIOS_STRUCTURE_HEADER*)*Buffer)->Type == 127) {
+ return FALSE;
+ }
+ *Buffer += GetStructureLength(*Buffer);
+ }
+ return TRUE;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: GetNumberOfStructures
+//
+// Description: Returns the number of structures starting from Buffer til
+// (and including) type 127 structure.
+//
+// Input: UINT8 *Buffer
+//
+// Output: Number of structures
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+UINT16
+GetNumberOfStructures(
+ IN UINT8 *Buffer
+)
+{
+ UINT8 *BufferPtr = Buffer;
+ UINT16 SmbiosStrucCount = 1;
+
+ while (((SMBIOS_STRUCTURE_HEADER*)BufferPtr)->Type != 127) {
+ ++SmbiosStrucCount;
+ BufferPtr += GetStructureLength(BufferPtr);
+ }
+ return SmbiosStrucCount;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: GetLargestStructureSize
+//
+// Description: Returns the largest structure size
+//
+// Input: UINT8 *Buffer
+//
+// Output: Largest structure size
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+UINT16
+GetLargestStructureSize(
+ IN UINT8 *Buffer
+)
+{
+ UINT8 *BufferPtr = Buffer;
+ UINT8 *LastBufferPtr;
+ UINT16 LargestStructureSize = 0;
+ UINT16 CurrentStructureSize;
+
+ while (((SMBIOS_STRUCTURE_HEADER*)BufferPtr)->Type != 127) {
+ LastBufferPtr = BufferPtr;
+ BufferPtr += ((SMBIOS_STRUCTURE_HEADER*)BufferPtr)->Length;
+ while (TRUE) {
+ if ((*(UINT16*)BufferPtr) == 0) {
+ BufferPtr += 2;
+ break;
+ }
+ BufferPtr++;
+ }
+ CurrentStructureSize = (UINT16)(BufferPtr - LastBufferPtr);
+ if (CurrentStructureSize > LargestStructureSize) {
+ LargestStructureSize = CurrentStructureSize;
+ }
+ }
+ return LargestStructureSize;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: SmbiosCheckSum
+//
+// Description: Returns the checksum of "length" bytes starting from the
+// "*ChecksumSrc"
+//
+// Input: UINT8 *ChecksumSrc
+// UINT8 length
+//
+// Output: Checksum value
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+UINT8
+SmbiosCheckSum(
+ IN UINT8 *ChecksumSrc,
+ IN UINT8 length
+)
+{
+ UINT8 Checksum = 0;
+ UINT8 i;
+
+ for (i = 0; i < length; i++) {
+ Checksum = Checksum + *ChecksumSrc++;
+ }
+ return (0 - Checksum);
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: UpdateEPSHeader
+//
+// Description: Updates the SMBIOS Entry Point Header
+//
+// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint
+//
+// Output: None
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+UpdateEPSHeader(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint
+)
+{
+ UINT8 *SmbiosDataTableAddr = NULL;
+
+ // Get Smbios Data Table Address
+ SmbiosDataTableAddr = (UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress;
+
+ // Updating EPS Header
+ // Update SMBIOS Data Structure Table length in EPS Header
+ pSmbiosTableEntryPoint->TableLength = GetTotalStructureSize(SmbiosDataTableAddr);
+
+ // Find and update number of SMBios Structures in EPS Header
+ pSmbiosTableEntryPoint->NumberOfSmbiosStructures = GetNumberOfStructures(SmbiosDataTableAddr);
+
+ // Find and update largest SMBios Structure in EPS Header
+ pSmbiosTableEntryPoint->MaxStructureSize = GetLargestStructureSize((UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress);
+
+ // Update Checksums in EPS Header
+ pSmbiosTableEntryPoint->IntermediateChecksum = 0;
+ pSmbiosTableEntryPoint->IntermediateChecksum = SmbiosCheckSum((UINT8*)pSmbiosTableEntryPoint + 0x10, 15);
+ pSmbiosTableEntryPoint->EntryPointStructureChecksum = 0;
+ pSmbiosTableEntryPoint->EntryPointStructureChecksum = SmbiosCheckSum((UINT8*)pSmbiosTableEntryPoint,
+ pSmbiosTableEntryPoint->EntryPointLength);
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: SMBIOS_GetFreeHandle
+//
+// Description: SMBIOSUpdateData protocol - Searches available handle
+// of Smbios Data Table
+//
+//
+// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint
+//
+// Output: UINT16 Handle or -1(if not found)
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+UINT16
+SMBIOS_GetFreeHandle(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint
+)
+{
+ EFI_STATUS FoundStatus;
+
+ UINT16 Handle = 0;
+ UINT8 *StructurePtr = NULL;
+ UINT8 *SmbiosDataTableAddr = NULL;
+
+ // Get Smbios Data Table Address
+ SmbiosDataTableAddr = (UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress;
+
+ //Count Handle form 0 to 0xFFFF to find available Handle
+ for(Handle = 0; Handle < 0xFFFF; Handle++){
+ StructurePtr = SmbiosDataTableAddr;
+ FoundStatus = FindStructureByHandle(&StructurePtr,Handle);
+ if(!FoundStatus){
+ return Handle;
+ }
+ }
+
+ return (UINT16)-1; // No available Handle to use;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: SMBIOS_FindStructure
+//
+// Description: SMBIOSUpdateData protocol - Searches handle of Smbios Table by Type
+//
+//
+// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint
+// UINT8 Type
+// UINT8 Index
+//
+// Output: UINT16 Handle or -1(if not found)
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+UINT16
+SMBIOS_FindStructure(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT8 Type,
+ IN UINT8 Index
+)
+{
+ EFI_STATUS FoundStatus;
+
+ UINT16 Handle = 0;
+ UINT8 *StructurePtr = NULL;
+ UINT8 *SmbiosDataTableAddr = NULL;
+
+ // Get Smbios Data Table Address
+ SmbiosDataTableAddr = (UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress;
+
+ FoundStatus = FindStructureByType(&SmbiosDataTableAddr, &StructurePtr, Type, Index);
+ Handle = ((SMBIOS_STRUCTURE_HEADER*)StructurePtr)->Handle;
+
+ // Return Handle of found structure
+ if(FoundStatus){
+ return Handle;
+ } else{
+ return (UINT16)-1;
+ }
+
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: SMBIOS_GetStructureBase
+//
+// Description: SMBIOSUpdateData protocol - Get structure address by Handle
+//
+//
+// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint
+// UINT8 *StructureFoundPtr
+// UINT16 Handle
+//
+// Output: UINT8 * or NULL - Points to the structure that was found
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+UINT8 *
+SMBIOS_GetStructureBase(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT16 Handle
+)
+{
+ EFI_STATUS FoundStatus;
+
+ UINT8 *FoundStructurePtr = NULL;
+ UINT8 *SmbiosDataTableAddr = NULL;
+
+ // Get Smbios Data Table Address
+ SmbiosDataTableAddr = (UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress;
+ FoundStructurePtr = SmbiosDataTableAddr;
+
+ FoundStatus = FindStructureByHandle(&FoundStructurePtr, Handle);
+
+ if(FoundStatus){
+ return FoundStructurePtr;
+ } else{
+ return NULL;
+ }
+
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: SMBIOS_DeleteStructure
+//
+// Description: SMBIOSUpdateData protocol - Delete SMBIOS structure by handle
+//
+// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint
+// UINT16 Handle
+//
+// Output: EFI_STATUS
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+SMBIOS_DeleteStructure(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT16 Handle
+)
+{
+/*
+ EFI_STATUS FoundStatus;
+
+ UINT16 BufferSize = 0;
+ UINT8 *StructurePtr = NULL;
+ UINT8 *NextStructurePtr = NULL;
+ UINT8 *SmbiosDataTableAddr = NULL;
+
+ // Get Smbios Data Table Address
+ SmbiosDataTableAddr = (UINT8*)pSmbiosTableEntryPoint->TableAddress;
+ StructurePtr = SmbiosDataTableAddr;
+
+ FoundStatus = FindStructureByHandle(&StructurePtr, Handle);
+
+ if (FoundStatus){
+ // Calculate data size which we want to move
+ BufferSize = GetTotalStructureSize(StructurePtr) - GetStructureLength(StructurePtr);
+
+ // Calculate next structure address
+ NextStructurePtr = StructurePtr + GetStructureLength(StructurePtr);
+
+ // Copy Structure
+ gBS->CopyMem(StructurePtr, NextStructurePtr, BufferSize);
+
+ UpdateEPSHeader(pSmbiosTableEntryPoint);
+ }
+
+ return FoundStatus;
+*/
+ return gSmbiosProtocol->SmbiosDeleteStructure(Handle);
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: SMBIOS_CopyStructure
+//
+// Description: SMBIOSUpdateData protocol - Copy SMBIOS structure by Handle
+// to a new allocated memory
+//
+// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint
+// UINT16 Handle
+//
+// Output: UINT8 * or NULL - Points to the new structure address
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+UINT8 *
+SMBIOS_CopyStructure(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT16 Handle
+)
+{
+ EFI_STATUS FoundStatus;
+
+ UINT16 BufferSize;
+ UINT8 *BufferPtrTemp;
+ UINT8 *FoundStructurePtr = NULL;
+ UINT8 *SmbiosDataTableAddr = NULL;
+
+ // Get Smbios Data Table Address
+ SmbiosDataTableAddr = (UINT8*)(UINTN)pSmbiosTableEntryPoint->TableAddress;
+ FoundStructurePtr = SmbiosDataTableAddr;
+
+ // Check Handle of Structure if exit
+ FoundStatus = FindStructureByHandle(&FoundStructurePtr, Handle);
+
+ if (FoundStatus){
+ BufferSize = GetStructureLength(FoundStructurePtr);
+
+ // Allocate Memory for structure copy
+ gBS->AllocatePool(EfiBootServicesData, BufferSize, &BufferPtrTemp);
+
+ // Copy Structure to memory
+ gBS->CopyMem(BufferPtrTemp, FoundStructurePtr, BufferSize);
+
+ return BufferPtrTemp;
+
+ } else {
+ return NULL;
+ }
+
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: SMBIOS_InsertStructure
+//
+// Description: SMBIOSUpdateData protocol - Insert SMBIOS structure
+//
+// Input: SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint
+// UINT8 *SourceStructurePtr
+// UINTN BufferSize
+//
+// Output: EFI_STATUS
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+SMBIOS_InsertStructure(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT8 *StructurePtrTemp,
+ IN UINT16 BufferSize
+)
+{
+/*
+ EFI_STATUS FoundStatus;
+
+ UINT16 Handle = 0;
+ UINT16 EOSBufferSize = 0;
+ UINT8 *EOSBufferPtrTemp = NULL;
+ UINT8 *FoundStructurePtr = NULL;
+ UINT8 *SmbiosDataTableAddr = NULL;
+
+ // Get Smbios Data Table Address
+ SmbiosDataTableAddr = (UINT8*)pSmbiosTableEntryPoint->TableAddress;
+ EOSBufferPtrTemp = SmbiosDataTableAddr;
+ FoundStructurePtr = SmbiosDataTableAddr;
+
+ // Check Handle of Structure if available
+ Handle = ((SMBIOS_STRUCTURE_HEADER*)StructurePtrTemp)->Handle;
+ FoundStatus = FindStructureByHandle(&FoundStructurePtr, Handle);
+
+ if (!FoundStatus){
+ // Move End-of-table Structure(Type 127) to allocate space for structure copy
+ FindStructureByHandle(&EOSBufferPtrTemp, 127);
+ EOSBufferSize = GetStructureLength(EOSBufferPtrTemp);
+ FoundStructurePtr = EOSBufferPtrTemp + BufferSize;
+ gBS->CopyMem(FoundStructurePtr, EOSBufferPtrTemp, EOSBufferSize);
+
+ // Copy Source Structure form memory
+ gBS->CopyMem(EOSBufferPtrTemp, StructurePtrTemp, BufferSize);
+
+ UpdateEPSHeader(pSmbiosTableEntryPoint);
+ }
+
+ return !FoundStatus;
+*/
+ UINT16 Handle = 0;
+
+ Handle = ((SMBIOS_STRUCTURE_HEADER*)StructurePtrTemp)->Handle;
+ return gSmbiosProtocol->SmbiosAddStrucByHandle(Handle, StructurePtrTemp, BufferSize);
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: SMIBiosUpdateMemoryRecordDriverEntryPoint
+//
+// Description: Update memory record DXE driver for Intel Tiano SmBiosMemory Driver.
+//
+// Input:
+//
+// Output: EFI_STATUS
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS SMBIOSUpdateDataDriverEntryPoint(
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+
+ DxeInitializeDriverLib (ImageHandle, SystemTable);
+
+ Status = gBS->LocateProtocol(&gEfiSmbiosProtocolGuid, NULL, &gSmbiosProtocol);
+ ASSERT_EFI_ERROR(Status);
+
+ Status = gBS->InstallProtocolInterface(&ImageHandle,
+ &gEfiSmbiosUpdateDataProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ &SmbiosUpdateDataProtocol);
+
+ return Status;
+}
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//************************************************************************* \ No newline at end of file
diff --git a/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.cif b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.cif
new file mode 100644
index 0000000..7e4aa0e
--- /dev/null
+++ b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.cif
@@ -0,0 +1,12 @@
+<component>
+ name = "SMBIOSUpdateData"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\SMBIOSUpdateData"
+ RefName = "SMBIOSUpdateData"
+[files]
+"SMBIOSUpdateData.sdl"
+"SMBIOSUpdateData.mak"
+"SMBIOSUpdateData.dxs"
+"SMBIOSUpdateData.c"
+"SmbiosUpdateDataProtocol.h"
+<endComponent>
diff --git a/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.dxs b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.dxs
new file mode 100644
index 0000000..2b87536
--- /dev/null
+++ b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.dxs
@@ -0,0 +1,49 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.dxs 1 2/09/12 12:35a Yurenlai $
+//
+// $Revision: 1 $
+//
+// $Date: 2/09/12 12:35a $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.dxs $
+//
+// 1 2/09/12 12:35a Yurenlai
+// Initial check in.
+//
+//*************************************************************************
+#include <Include\Protocol\Smbus.h>
+#include <protocol\SmbiosGetFlashDataProtocol.h>
+
+DEPENDENCY_START
+ EFI_SMBIOS_PROTOCOL_GUID
+DEPENDENCY_END
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//************************************************************************* \ No newline at end of file
diff --git a/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.mak b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.mak
new file mode 100644
index 0000000..40254b2
--- /dev/null
+++ b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.mak
@@ -0,0 +1,77 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.mak 1 2/09/12 12:35a Yurenlai $
+#
+# $Revision: 1 $
+#
+# $Date: 2/09/12 12:35a $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Platform/SMBIOSUpdateData/SMBIOSUpdateData.mak $
+#
+# 1 2/09/12 12:35a Yurenlai
+# Initial check in.
+#
+#*************************************************************************
+#<AMI_FHDR_START>
+#
+# Name: SMBIOSUpdateData.mak
+#
+# Description: This make file builds SMBIOSUpdateData module PEI & DXE
+# components and link them to respective binary
+#
+#<AMI_FHDR_END>
+#*************************************************************************
+
+
+all : SMBIOSUpdateData
+
+SMBIOSUpdateData : $(BUILD_DIR)\SMBIOSUpdateData.mak SMBIOSUpdateDataBin
+
+$(BUILD_DIR)\SMBIOSUpdateData.mak : $(SMBIOSUpdateData_DIR)\SMBIOSUpdateData.CIF $(SMBIOSUpdateData_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(SMBIOSUpdateData_DIR)\SMBIOSUpdateData.CIF $(CIF2MAK_DEFAULTS)
+
+SMBIOSUpdateData_INCLUDES = \
+ $(EDK_INCLUDES)\
+ /I$(PROJECT_DIR)\
+ /IInclude\
+
+SMBIOSUpdateDataBin : $(EFIDRIVERLIB)
+ $(MAKE) /$(MAKEFLAGS) $(EDK_DEFAULTS)\
+ /f $(BUILD_DIR)\SMBIOSUpdateData.mak all\
+ NAME=SMBIOSUpdateData\
+ "MY_INCLUDES=$(SMBIOSUpdateData_INCLUDES)"\
+ GUID=B98999A4-E96F-475a-99FC-762126F50F5A\
+ ENTRY_POINT=SMBIOSUpdateDataDriverEntryPoint\
+ DEPEX1=$(SMBIOSUpdateData_DIR)\SMBIOSUpdateData.dxs \
+ DEPEX1_TYPE=EFI_SECTION_DXE_DEPEX \
+ TYPE=BS_DRIVER\
+ COMPRESS=1\
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
diff --git a/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.sdl b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.sdl
new file mode 100644
index 0000000..e4b7448
--- /dev/null
+++ b/Board/EM/Platform/SMBIOSUpdateData/SMBIOSUpdateData.sdl
@@ -0,0 +1,24 @@
+TOKEN
+ Name = "SMBIOSUpdateData_SUPPORT"
+ Value = "1"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+ Help = "Main switch to enable SMBIOSUpdateData support in Project"
+End
+
+MODULE
+ Help = "Includes SMBIOSUpdateData.mak to Project"
+ File = "SMBIOSUpdateData.mak"
+End
+
+PATH
+ Name = "SMBIOSUpdateData_DIR"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\SMBIOSUpdateData.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End
diff --git a/Board/EM/Platform/SMBIOSUpdateData/SmbiosUpdateDataProtocol.h b/Board/EM/Platform/SMBIOSUpdateData/SmbiosUpdateDataProtocol.h
new file mode 100644
index 0000000..991c091
--- /dev/null
+++ b/Board/EM/Platform/SMBIOSUpdateData/SmbiosUpdateDataProtocol.h
@@ -0,0 +1,100 @@
+/*++
+Copyright (c) 2009 Intel Corporation. All rights reserved.
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+--*/
+
+#ifndef _EFI_SMBOS_UPDATE_DATA_PROTOCOL_H_
+#define _EFI_SMBOS_UPDATE_DATA_PROTOCOL_H_
+
+#include <Protocol\SMBios.h>
+#include <Protocol\SmbiosGetFlashDataProtocol.h>
+
+#define EFI_SMBIOS_UPDATE_DATA_PROTOCOL_GUID \
+ {0x67269263, 0xaf1, 0x45dd, 0x93, 0xc8, 0x29, 0x99, 0x21, 0xd0, 0xe1, 0xe9}
+
+typedef struct _EFI_SMBIOS_UPDATE_DATA_PROTOCOL EFI_SMBIOS_UPDATE_DATA_PROTOCOL;
+
+typedef UINT16 (EFIAPI *EFI_SMBIOS_UPDATE_DATA_GET_FREE_HANDLE) (
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint
+);
+
+typedef UINT16 (EFIAPI *EFI_SMBIOS_UPDATE_DATA_FIND_STRUCTURE) (
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT8 Type,
+ IN UINT8 Index
+);
+
+typedef UINT8 * (EFIAPI *EFI_SMBIOS_UPDATE_DATA_GET_STRUCTURE_BASE) (
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT16 Handle
+);
+
+typedef EFI_STATUS (EFIAPI *EFI_SMBIOS_UPDATE_DATA_DELETE_STRUCTURE) (
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT16 Handle
+);
+
+typedef UINT8 * (EFIAPI *EFI_SMBIOS_UPDATE_DATA_COPY_STRUCTURE) (
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT16 Handle
+);
+
+typedef EFI_STATUS (EFIAPI *EFI_SMBIOS_UPDATE_DATA_INSERT_STRUCTURE) (
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT8 *StructurePtrTemp,
+ IN UINT16 BufferSize
+);
+
+typedef struct _EFI_SMBIOS_UPDATE_DATA_PROTOCOL {
+ EFI_SMBIOS_UPDATE_DATA_GET_FREE_HANDLE SMBIOS_GetFreeHandle;
+ EFI_SMBIOS_UPDATE_DATA_FIND_STRUCTURE SMBIOS_FindStructure;
+ EFI_SMBIOS_UPDATE_DATA_GET_STRUCTURE_BASE SMBIOS_GetStructureBase;
+ EFI_SMBIOS_UPDATE_DATA_DELETE_STRUCTURE SMBIOS_DeleteStructure;
+ EFI_SMBIOS_UPDATE_DATA_COPY_STRUCTURE SMBIOS_CopyStructure;
+ EFI_SMBIOS_UPDATE_DATA_INSERT_STRUCTURE SMBIOS_InsertStructure;
+};
+
+UINT16
+SMBIOS_GetFreeHandle(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint
+);
+
+UINT16
+SMBIOS_FindStructure(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT8 Type,
+ IN UINT8 Index
+);
+
+UINT8 *
+SMBIOS_GetStructureBase(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT16 Handle
+);
+
+EFI_STATUS
+SMBIOS_DeleteStructure(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT16 Handle
+);
+
+UINT8 *
+SMBIOS_CopyStructure(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT16 Handle
+);
+
+EFI_STATUS
+SMBIOS_InsertStructure(
+ IN SMBIOS_TABLE_ENTRY_POINT *pSmbiosTableEntryPoint,
+ IN UINT8 *StructurePtrTemp,
+ IN UINT16 BufferSize
+);
+
+#endif
diff --git a/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.asl b/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.asl
new file mode 100644
index 0000000..e9df479
--- /dev/null
+++ b/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.asl
@@ -0,0 +1,52 @@
+
+DefinitionBlock (
+ "AcpiDebug.aml",
+ "SSDT",
+ 1,
+ "Intel_",
+ "ADebTabl",
+ 0x1000
+ )
+{
+ Scope(\)
+ {
+ //
+ // These pointers are patched during POST.
+ //
+ Name(DPTR, 0x80000000) // Address of Acpi debug memory buffer, fixed up during POST
+ Name(EPTR, 0x80000000) // End of Acpi debug memory buffer, fixed up during POST
+ Name(CPTR, 0x80000000) // Current pointer used as an index into the buffer(starts after the buffer signature), fixed up during POST
+
+ //
+ //Use a Mutex to prevent multiple calls from simutaneously writing to the same memory.
+ //
+ Mutex(MMUT, 0)
+
+ //
+ // Write a string to a memory buffer
+ //
+ Method(MDBG,1,Serialized)
+ {
+ Store (Acquire(MMUT, 1000),Local0) // save Acquire result so we can check for Mutex acquired
+ If (LEqual(Local0, Zero)) // check for Mutex acquired
+ {
+ OperationRegion(ABLK, SystemMemory, CPTR, 16) // Operation region to allow writes to ACPI debug buffer
+ Field(ABLK, ByteAcc, NoLock, Preserve)
+ {
+ Offset(0x0),
+ AAAA, 128 // 16 byte string or data
+ }
+ Store(Arg0,AAAA) // anything past string buffer size is ignored by ACPI
+
+ Add(CPTR,16,CPTR) // advance current pointer to next string location in memory buffer
+ If (LGreaterEqual(CPTR,EPTR) ) // check for end of 64kb Acpi debug buffer
+ {
+ Add(DPTR,16,CPTR) // wrap around to beginning of buffer if the end has been reached
+ }
+ Release(MMUT)
+ }
+ Return(Local0) // return error code indicating whether Mutex was acquired
+ }
+
+ } // End Scope
+} // End SSDT
diff --git a/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.cif b/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.cif
new file mode 100644
index 0000000..9c26ea5
--- /dev/null
+++ b/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.cif
@@ -0,0 +1,10 @@
+<component>
+ name = "SsdtAcpiDebug"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\SsdtAcpiDebug"
+ RefName = "SsdtAcpiDebug"
+[files]
+"SsdtAcpiDebug.sdl"
+"SsdtAcpiDebug.mak"
+"SsdtAcpiDebug.asl"
+<endComponent>
diff --git a/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.mak b/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.mak
new file mode 100644
index 0000000..98910bc
--- /dev/null
+++ b/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.mak
@@ -0,0 +1,80 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+#<AMI_FHDR_START>
+#
+# Name: SsdtAcpiDebug.mak
+#
+# Description: MAke file to build Aptio ACPI ASL components
+#
+#
+#<AMI_FHDR_END>
+#*************************************************************************
+all : BuildACPIDEBUG
+
+BuildACPIDEBUG : $(BUILD_DIR)\ACPIDEBUG.ffs
+
+#-----------------------------------------------------------------------
+# ASL compiler definition
+#-----------------------------------------------------------------------
+!IF "$(ACPIPLATFORM_ASL_COMPILER)"==""
+!ERROR It is an invalid path, please check your ASL compiler path.
+!ENDIF
+
+IASL = $(ACPIPLATFORM_ASL_COMPILER)
+#-----------------------------------------------------------------------
+$(BUILD_DIR)\SsdtAcpiDebug.aml : $(INTEL_ACPIDEBUG_ASL_FILE)
+ @cl /C /EP $(INTEL_ACPIDEBUG_ASL_FILE) > $(BUILD_DIR)\SsdtAcpiDebug.asl
+ $(IASL) -p $(BUILD_DIR)\SsdtAcpiDebug.aml $(BUILD_DIR)\SsdtAcpiDebug.asl
+
+$(BUILD_DIR)\SsdtAcpiDebug.sec: $(BUILD_DIR)\SsdtAcpiDebug.aml
+ $(GENSECTION) -I $*.aml -O $@ -S EFI_SECTION_RAW
+
+#Note. Expand the package with SsdtAcpiDebug tables.
+# DXE phase will load the tables
+# and update Aml contents if provided in Acpiplatform.c
+
+$(BUILD_DIR)\ACPIDEBUG.ffs: $(BUILD_DIR)\SsdtAcpiDebug.sec
+ $(GENFFSFILE) -B $(BUILD_DIR) -V -o $@ -P1 <<$(BUILD_DIR)\SsdtAcpiDebug.pkg
+
+PACKAGE.INF
+[.]
+BASE_NAME = ACPIDEBUG
+FFS_FILEGUID = 94AB6AED-9719-48ef-831C-2E9C29758C33
+FFS_FILETYPE = EFI_FV_FILETYPE_FREEFORM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress (dummy) {
+ $(PROJECT_DIR)\$(BUILD_DIR)\SsdtAcpiDebug.sec
+ }
+}
+<<KEEP
+
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
diff --git a/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.sdl b/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.sdl
new file mode 100644
index 0000000..a754a9b
--- /dev/null
+++ b/Board/EM/Platform/SsdtAcpiDebug/SsdtAcpiDebug.sdl
@@ -0,0 +1,31 @@
+TOKEN
+ Name = "ACPIDEBUG_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable SsdtAcpiDebug support in Project"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+End
+
+PATH
+ Name = "INTEL_SSDTACPIDEBUG_DIR"
+End
+
+TOKEN
+ Name = "INTEL_ACPIDEBUG_ASL_FILE"
+ Value = "$(INTEL_SSDTACPIDEBUG_DIR)\SsdtAcpiDebug.asl"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+MODULE
+ Help = "Includes SsdtAcpiDebug.mak to Project"
+ File = "SsdtAcpiDebug.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\ACPIDEBUG.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End
diff --git a/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.asl b/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.asl
new file mode 100644
index 0000000..0918fdb
--- /dev/null
+++ b/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.asl
@@ -0,0 +1,180 @@
+/**************************************************************************;
+;* *;
+;* Intel Confidential *;
+;* *;
+;* Intel Corporation - ACPI Reference Code for the Ivy Bridge *;
+;* Family of Customer Reference Boards. *;
+;* *;
+;* *;
+;* Copyright (c) 1999 - 2013 Intel Corporation. All rights reserved *;
+;* This software and associated documentation (if any) is furnished *;
+;* under a license and may only be used or copied in accordance *;
+;* with the terms of the license. Except as permitted by such *;
+;* license, no part of this software or documentation may be *;
+;* reproduced, stored in a retrieval system, or transmitted in any *;
+;* form or by any means without the express written consent of *;
+;* Intel Corporation. *;
+;* *;
+;* *;
+;**************************************************************************/
+/*++
+ This file contains a 'Sample Driver' and is licensed as such
+ under the terms of your license agreement with Intel or your
+ vendor. This file may be modified by the user, subject to
+ the additional terms of the license agreement
+--*/
+
+DefinitionBlock (
+ "SensorHubApp.aml",
+ "SSDT",
+ 0x01, // SHAD revision.
+ // A Revision field value greater than or equal to 2 signifies that integers
+ // declared within the Definition Block are to be evaluated as 64-bit values
+ "INTEL", // OEM ID (6 byte string)
+ "sensrhub", // OEM table ID (8 byte string)
+ 0x0 // OEM version of DSDT table (4 byte Integer)
+ )
+
+// BEGIN OF ASL SCOPE
+
+{
+ External(\GPBS)
+ External(\SDS0)
+ External(\USBH)
+ External(\_SB.RDGP, MethodObj)
+ External(\_SB.WTGP, MethodObj)
+ External(\_SB.PCI0.I2C0.SHUB, DeviceObj) // Sensor hub
+ External(\_SB.PCI0.I2C0.DFUD, DeviceObj) // DFU
+
+ Scope(\)
+ {
+ Device(SHAD) // Sensor Hub Application Device.
+ {
+ Name(_HID, EISAID("INT33D0"))
+ Name(_CID, EISAID("PNP0C02"))
+
+ Method(_STA, 0,Serialized)
+ {
+ If(LOr(And(SDS0,1), And(USBH,1)))
+ {
+ Return(0x000F) // Sensor Hub Enabled, Show it
+ }
+ Return(0x00) // Sensor Hub Disabled, Hide it
+ }
+
+ //
+ // _DSM : Device Specific Method supporting USB Sideband Deferring function
+ //
+ // Arg0: UUID Unique function identifier
+ // Arg1: Integer Revision Level
+ // Arg2: Integer Function Index
+ // Arg3: Package Parameters
+ //
+ Method (_DSM, 4, Serialized, 0, UnknownObj, {BuffObj, IntObj, IntObj, PkgObj})
+ {
+
+ // Define the Local Variables used throughout the method.
+
+ Name(PGCE, 0) // Power Gate Control Enable.
+ Name(PGCD, 0) // Power Gate Control Duration.
+ Name(DFUE, 0) // DFU Enable.
+ Name(DFUD, 0) // DFU Duration.
+ Name(OLDV, 0) // Old value of both Power Gate and DFU GPIO.
+ Name(PGCV, 0) // Power Gate Control Value
+ Name(DFUV, 0) // DFU Control Value
+
+ // Compare passed in UUID to supported UUID.
+
+ If (LEqual(Arg0, ToUUID ("03C868D5-563F-42A8-9F57-9A18D949B7CB")))
+ {
+
+ If (LEqual(1,ToInteger(Arg1))) // Revision 1.
+ {
+ Switch (ToInteger(Arg2)) // Switch to Function Index.
+ {
+ //
+ // Function 0, Query - return supported functions BitIndex.
+ //
+
+ Case (0)
+ {
+ Return (Buffer() {0x0F})
+ }
+
+ //
+ // Function 1, Power Gate Control - Pass in 2 value package via Arg3
+ //
+
+ Case (1)
+ {
+
+ Store (DeRefOf (Index (Arg3, 0)), PGCE)
+ Store (DeRefOf (Index (Arg3, 1)), PGCD)
+
+ Store(\_SB.RDGP(46), OLDV) // Save off GPIO46 = PWRGATE#
+ \_SB.WTGP(46, PGCE) // Set value to GPIO46 = PWRGATE#
+
+ If(LGreater(PGCD, 0)) // test duration value
+ {
+ Sleep(PGCD)
+ \_SB.WTGP(46, OLDV) // Restore GPIO46 = PWRGATE#
+ }
+
+ If (LEqual(\_SB.RDGP(46), 0x01)) // check for powered on (1 = on)
+ {
+ Sleep(150) // Delay so sensor hub has time to init.
+ If (LEqual(\_SB.RDGP(44), 0x01)) { // check mode, Sensor or DFU (1 = Sensor)
+ // Powering up in sensor hub mode
+ Notify(\_SB.PCI0.I2C0.SHUB, 1) // Check the sensor hub status
+ } Else {
+ // Powering up in DFU mode
+ Notify(\_SB.PCI0.I2C0.DFUD, 1) // Check the DFU device status
+ }
+ }
+
+ Return (0)
+ } // End Case (1)
+
+ //
+ // Function2, DFU Control - Pass in 2 value package via Arg3
+ //
+
+ Case (2)
+ {
+
+ Store (DeRefOf (Index (Arg3, 0)), DFUE)
+ Store (DeRefOf (Index (Arg3, 1)), DFUD)
+
+ Store(\_SB.RDGP(44), OLDV) // Save off GPIO44 = DFU_ENA#
+ \_SB.WTGP(44, DFUE) // Set Value to GPIO44 = DFU_ENA#
+
+ If (LGreater(DFUD, 0)) // Test duration value
+ {
+ Sleep(DFUD) // Delay for passed in duration.
+ \_SB.WTGP(44, OLDV) // Restore GPIO44 = DFU_ENA#
+ }
+
+ Return (0)
+ } // End Case 2...
+
+ //
+ // Function 3, Query Status ?Return the current status of GPIO signals.
+ //
+
+ Case (3)
+ {
+ Store(\_SB.RDGP(44), DFUV)
+ Store(\_SB.RDGP(46), PGCV)
+ Return(Package(){PGCV, DFUV})
+ } // End Case 3
+
+ } // End Function Index...
+ Return (0)
+ } // End Revision check...
+ Return (0)
+ } // End UUID check...
+ Return (0)
+ } // End _DSM Method...
+ } // End Device....
+ } // End Scope...
+} // End DefinitionBlock Termlist
diff --git a/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.cif b/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.cif
new file mode 100644
index 0000000..94dfc2a
--- /dev/null
+++ b/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.cif
@@ -0,0 +1,10 @@
+<component>
+ name = "SsdtSensorHub"
+ category = ModulePart
+ LocalRoot = "Board\EM\Platform\SsdtSensorHub"
+ RefName = "SsdtSensorHub"
+[files]
+"SsdtSensorHub.sdl"
+"SsdtSensorHub.mak"
+"SsdtSensorHub.asl"
+<endComponent>
diff --git a/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.mak b/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.mak
new file mode 100644
index 0000000..77444e6
--- /dev/null
+++ b/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.mak
@@ -0,0 +1,80 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
+
+#*************************************************************************
+#<AMI_FHDR_START>
+#
+# Name: SsdtAcpiDebug.mak
+#
+# Description: MAke file to build Aptio ACPI ASL components
+#
+#
+#<AMI_FHDR_END>
+#*************************************************************************
+all : BuildSENSORHUB
+
+BuildSENSORHUB : $(BUILD_DIR)\SENSORHUB.ffs
+
+#-----------------------------------------------------------------------
+# ASL compiler definition
+#-----------------------------------------------------------------------
+!IF "$(ACPIPLATFORM_ASL_COMPILER)"==""
+!ERROR It is an invalid path, please check your ASL compiler path.
+!ENDIF
+
+IASL = $(ACPIPLATFORM_ASL_COMPILER)
+#-----------------------------------------------------------------------
+$(BUILD_DIR)\SsdtSensorHub.aml : $(INTEL_SENSORHUB_ASL_FILE)
+ @cl /C /EP $(INTEL_SENSORHUB_ASL_FILE) > $(BUILD_DIR)\SsdtSensorHub.asl
+ $(IASL) -p $(BUILD_DIR)\SsdtSensorHub.aml $(BUILD_DIR)\SsdtSensorHub.asl
+
+$(BUILD_DIR)\SsdtSensorHub.sec: $(BUILD_DIR)\SsdtSensorHub.aml
+ $(GENSECTION) -I $*.aml -O $@ -S EFI_SECTION_RAW
+
+#Note. Expand the package with SsdtSensorHub tables.
+# DXE phase will load the tables
+# and update Aml contents if provided in Acpiplatform.c
+
+$(BUILD_DIR)\SENSORHUB.ffs: $(BUILD_DIR)\SsdtSensorHub.sec
+ $(GENFFSFILE) -B $(BUILD_DIR) -V -o $@ -P1 <<$(BUILD_DIR)\SsdtSensorHub.pkg
+
+PACKAGE.INF
+[.]
+BASE_NAME = SENSORHUB
+FFS_FILEGUID = A3201EEC-1612-4577-8924-CB32D542D22C
+FFS_FILETYPE = EFI_FV_FILETYPE_FREEFORM
+FFS_ATTRIB_CHECKSUM = TRUE
+
+IMAGE_SCRIPT =
+{
+ Compress (dummy) {
+ $(PROJECT_DIR)\$(BUILD_DIR)\SsdtSensorHub.sec
+ }
+}
+<<KEEP
+
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#*************************************************************************
+#*************************************************************************
diff --git a/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.sdl b/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.sdl
new file mode 100644
index 0000000..3d66d8d
--- /dev/null
+++ b/Board/EM/Platform/SsdtSensorHub/SsdtSensorHub.sdl
@@ -0,0 +1,32 @@
+TOKEN
+ Name = "INTELSENSORHUB_SUPPORT"
+ Value = "1"
+ Help = "Main switch to support Intel SensorHub in Project"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+ Token = "PCH_SKU" "=" "1"
+End
+
+PATH
+ Name = "INTEL_SSDTSENSORHUB_DIR"
+End
+
+TOKEN
+ Name = "INTEL_SENSORHUB_ASL_FILE"
+ Value = "$(INTEL_SSDTSENSORHUB_DIR)\SsdtSensorHub.asl"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+MODULE
+ Help = "Includes SsdtSensorHub.mak to Project"
+ File = "SsdtSensorHub.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\SENSORHUB.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End
diff --git a/Board/EM/Platform/iasl.exe b/Board/EM/Platform/iasl.exe
new file mode 100644
index 0000000..b10ef96
--- /dev/null
+++ b/Board/EM/Platform/iasl.exe
Binary files differ