summaryrefslogtreecommitdiff
path: root/Board/EM/Pfat
diff options
context:
space:
mode:
authorraywu <raywu0301@gmail.com>2018-06-15 00:00:50 +0800
committerraywu <raywu0301@gmail.com>2018-06-15 00:00:50 +0800
commitb7c51c9cf4864df6aabb99a1ae843becd577237c (patch)
treeeebe9b0d0ca03062955223097e57da84dd618b9a /Board/EM/Pfat
downloadzprj-b7c51c9cf4864df6aabb99a1ae843becd577237c.tar.xz
init. 1AQQW051HEADmaster
Diffstat (limited to 'Board/EM/Pfat')
-rw-r--r--Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.c148
-rw-r--r--Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.cif10
-rw-r--r--Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.mak71
-rw-r--r--Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.sdl77
-rw-r--r--Board/EM/Pfat/PfatCpuPolicyOverride/OpensslLib.libbin0 -> 132502 bytes
-rw-r--r--Board/EM/Pfat/PfatCpuPolicyOverride/PeiCryptLib.libbin0 -> 115966 bytes
-rw-r--r--Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.c387
-rw-r--r--Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.cif14
-rw-r--r--Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.dxs55
-rw-r--r--Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.h133
-rw-r--r--Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.mak116
-rw-r--r--Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.sdl98
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/.VkeyExpbin0 -> 4 bytes
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/BuildAmiPfatHeader.exebin0 -> 65024 bytes
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/BuildPSL.bat315
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/CutRom.exebin0 -> 59392 bytes
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/PPB.exebin0 -> 171928 bytes
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatCertHeader.binbin0 -> 8 bytes
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatCryptoCon.exebin0 -> 126976 bytes
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.cif19
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.mak105
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.sdl265
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/dummy.bin1
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/keygen.exebin0 -> 122880 bytes
-rw-r--r--Board/EM/Pfat/PfatPubKeysAndBuildPSL/psl2bin.exebin0 -> 214424 bytes
-rw-r--r--Board/EM/Pfat/PfatRecovery/PfatRecovery.c287
-rw-r--r--Board/EM/Pfat/PfatRecovery/PfatRecovery.cif12
-rw-r--r--Board/EM/Pfat/PfatRecovery/PfatRecovery.dxs58
-rw-r--r--Board/EM/Pfat/PfatRecovery/PfatRecovery.mak113
-rw-r--r--Board/EM/Pfat/PfatRecovery/PfatRecovery.sdl169
-rw-r--r--Board/EM/Pfat/PfatRecovery/PfatRecoveryHook.c187
-rw-r--r--Board/EM/Pfat/PfatSetup/PfatSetup.cif11
-rw-r--r--Board/EM/Pfat/PfatSetup/PfatSetup.mak69
-rw-r--r--Board/EM/Pfat/PfatSetup/PfatSetup.sd119
-rw-r--r--Board/EM/Pfat/PfatSetup/PfatSetup.sdl85
-rw-r--r--Board/EM/Pfat/PfatSetup/PfatSetup.unibin0 -> 6650 bytes
36 files changed, 2924 insertions, 0 deletions
diff --git a/Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.c b/Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.c
new file mode 100644
index 0000000..42818b4
--- /dev/null
+++ b/Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.c
@@ -0,0 +1,148 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2009, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//**********************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/Pfatflashlib/HandlePfatLegacy/HandlePfatLegacy.c 2 11/08/12 3:24a Fredericko $
+//
+// $Revision: 2 $
+//
+// $Date: 11/08/12 3:24a $
+//
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/Pfatflashlib/HandlePfatLegacy/HandlePfatLegacy.c $
+//
+// 2 11/08/12 3:24a Fredericko
+//
+// 1 11/02/12 8:23p Fredericko
+// [TAG] EIP105153
+// [Files] HandlePfatLegacy.cif
+// HandlePfatLegacy.sdl
+// HandlePfatLegacy.mak
+// HandlePfatLegacy.c
+//
+//**********************************************************************
+//<AMI_FHDR_START>
+//
+// Name: HandlePfatLegacy.c
+//
+// Description: Code listing file for HandlePfatLegacy
+//
+//<AMI_FHDR_END>
+//**********************************************************************
+
+//----------------------------------------------------------------------
+// Includes
+#include <efi.h>
+#include "token.h"
+#include <AmiDxeLib.h>
+
+EFI_EVENT PfatLegacyBootEvent;
+
+#define PFAT_VAR_GUID \
+ { \
+ 0x6aae75ee, 0xa4bc, 0x40c8, 0x81, 0x3b, 0x8, 0x4e, 0x28, 0x53, 0x5e, 0x79 \
+ }
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: HandlePfatOnLegacyBoot
+//
+// Description: Callback on LegacyBoot Event
+//
+// Input: IN EFI_EVENT efiev
+// IN VOID *ctx
+//
+// Output: EFI_STATUS
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//<AMI_PHDR_END>
+//**********************************************************************
+void HandlePfatOnLegacyBoot(
+ IN EFI_EVENT efiev,
+ IN VOID *ctx )
+{
+ EFI_STATUS Status;
+ UINT32 PfatVar=0;
+ UINTN PfatVarSize = sizeof(UINT32);
+ EFI_GUID PfatVarGuid = PFAT_VAR_GUID ;
+
+ Status = pRS->GetVariable(L"PfatVariable", &PfatVarGuid, NULL, &PfatVarSize, &PfatVar);
+
+ PfatVar+=1;
+
+ Status = pRS->SetVariable(L"PfatVariable",
+ &PfatVarGuid,
+ (EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_RUNTIME_ACCESS |
+ EFI_VARIABLE_NON_VOLATILE),
+ PfatVarSize,
+ &PfatVar);
+
+ pBS->CloseEvent (PfatLegacyBootEvent);
+}
+
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: HandlePfatLegacyBoot
+//
+// Description: Entry point for subcomponent
+//
+// Input: IN EFI_HANDLE ImageHandle,
+// IN EFI_SYSTEM_TABLE *SystemTable
+//
+// Output: EFI_STATUS
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+EFI_STATUS HandlePfatLegacyBoot(
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable )
+{
+ EFI_STATUS Status;
+
+ InitAmiLib( ImageHandle, SystemTable );
+
+ Status = CreateReadyToBootEvent( TPL_CALLBACK,
+ HandlePfatOnLegacyBoot,
+ NULL,
+ &PfatLegacyBootEvent );
+
+ 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/Pfat/HandlePfatLegacy/HandlePfatLegacy.cif b/Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.cif
new file mode 100644
index 0000000..ea7449d
--- /dev/null
+++ b/Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.cif
@@ -0,0 +1,10 @@
+<component>
+ name = "HandlePfatLegacy"
+ category = ModulePart
+ LocalRoot = "Board\EM\Pfat\HandlePfatLegacy"
+ RefName = "HandlePfatLegacy"
+[files]
+"HandlePfatLegacy.sdl"
+"HandlePfatLegacy.mak"
+"HandlePfatLegacy.c"
+<endComponent>
diff --git a/Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.mak b/Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.mak
new file mode 100644
index 0000000..73db816
--- /dev/null
+++ b/Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.mak
@@ -0,0 +1,71 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2012, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/Pfatflashlib/HandlePfatLegacy/HandlePfatLegacy.mak 1 11/02/12 8:23p Fredericko $
+#
+# $Revision: 1 $
+#
+# $Date: 11/02/12 8:23p $
+#
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/Pfatflashlib/HandlePfatLegacy/HandlePfatLegacy.mak $
+#
+# 1 11/02/12 8:23p Fredericko
+# [TAG] EIP105153
+# [Files] HandlePfatLegacy.cif
+# HandlePfatLegacy.sdl
+# HandlePfatLegacy.mak
+# HandlePfatLegacy.c
+#
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: HandlePfatLegacy.mak
+#
+# Description: Make file for HandlePfatLegacy
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+all : HandlePfatLegacy
+
+HandlePfatLegacy : $(BUILD_DIR)\HandlePfatLegacy.mak HandlePfatLegacyBin
+
+#---------------------------------------------------------------------------
+#
+#---------------------------------------------------------------------------
+$(BUILD_DIR)\HandlePfatLegacy.mak : $(HandlePfatLegacy_DIR)\$(@B).cif $(HandlePfatLegacy_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(HandlePfatLegacy_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+#---------------------------------------------------------------------------
+#
+#---------------------------------------------------------------------------
+HandlePfatLegacyBin : $(AMIDXELIB)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\HandlePfatLegacy.mak all\
+ GUID=767BECBC-7E71-4c1e-B9BD-89193022E64E\
+ ENTRY_POINT=HandlePfatLegacyBoot\
+ TYPE=BS_DRIVER \
+ COMPRESS=1\
+#-----------------------------------------------------------------------
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2012, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
diff --git a/Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.sdl b/Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.sdl
new file mode 100644
index 0000000..0c6d246
--- /dev/null
+++ b/Board/EM/Pfat/HandlePfatLegacy/HandlePfatLegacy.sdl
@@ -0,0 +1,77 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2012, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/Pfatflashlib/HandlePfatLegacy/HandlePfatLegacy.sdl 2 11/19/12 5:30p Fredericko $
+#
+# $Revision: 2 $
+#
+# $Date: 11/19/12 5:30p $
+#
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/Pfatflashlib/HandlePfatLegacy/HandlePfatLegacy.sdl $
+#
+# 2 11/19/12 5:30p Fredericko
+#
+# 1 11/02/12 8:23p Fredericko
+# [TAG] EIP105153
+# [Files] HandlePfatLegacy.cif
+# HandlePfatLegacy.sdl
+# HandlePfatLegacy.mak
+# HandlePfatLegacy.c
+#
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: HandlePfatLegacy.sdl
+#
+# Description: SDL file for HandlePfatLegacy
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+TOKEN
+ Name = "HandlePfatLegacy_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable HandlePfatLegacy support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+End
+
+PATH
+ Name = "HandlePfatLegacy_DIR"
+ Help = "HandlePfatLegacy files source directory"
+End
+
+MODULE
+ Help = "Includes HandlePfatLegacy.mak to Project"
+ File = "HandlePfatLegacy.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\HandlePfatLegacy.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2012, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#********************************************************************** \ No newline at end of file
diff --git a/Board/EM/Pfat/PfatCpuPolicyOverride/OpensslLib.lib b/Board/EM/Pfat/PfatCpuPolicyOverride/OpensslLib.lib
new file mode 100644
index 0000000..290a4fa
--- /dev/null
+++ b/Board/EM/Pfat/PfatCpuPolicyOverride/OpensslLib.lib
Binary files differ
diff --git a/Board/EM/Pfat/PfatCpuPolicyOverride/PeiCryptLib.lib b/Board/EM/Pfat/PfatCpuPolicyOverride/PeiCryptLib.lib
new file mode 100644
index 0000000..b05426c
--- /dev/null
+++ b/Board/EM/Pfat/PfatCpuPolicyOverride/PeiCryptLib.lib
Binary files differ
diff --git a/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.c b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.c
new file mode 100644
index 0000000..6eeb851
--- /dev/null
+++ b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.c
@@ -0,0 +1,387 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/IntelPfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.c 3 10/29/12 4:09p Fredericko $
+//
+// $Revision: 3 $
+//
+// $Date: 10/29/12 4:09p $
+//
+//
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: PfatCpuPolicyOverride.c
+//
+// Description: Code listing file for PfatCpuPolicyOverride
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+#include "PfatCpuPolicyOverride.h"
+
+EFI_GUID pFatFileGuid = PFAT_PUB_KEY_FFS_FILE_RAW_GUID;
+
+STATIC EFI_PEI_NOTIFY_DESCRIPTOR mPfatCpuPolicyOverrideNotifyDesc = {
+ (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+ &gPeiCpuPlatformPolicyPpiGuid,
+ PfatCpuPolicyOverrideEndOfPeiCpuPlatformPolicy
+};
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: CryptoGetRawImage
+//
+// Description: Loads binary from RAW section of X firwmare volume
+//
+//
+// Output: Buffer - returns a pointer to allocated memory. Caller
+// must free it when done.
+// Size - returns the size of the binary loaded into the
+// buffer.
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+EFI_STATUS
+LocatPfatPubKey (IN EFI_PEI_SERVICES **PpSv, IN OUT VOID **Buffer)
+{
+ EFI_STATUS Status;
+ EFI_FIRMWARE_VOLUME_HEADER *pFV;
+ UINTN FvNum=0;
+ EFI_FFS_FILE_HEADER *ppFile=NULL;
+ BOOLEAN Found = FALSE;
+
+ Status = (*PpSv)->FfsFindNextVolume (PpSv, FvNum, &pFV);
+
+ while ( TRUE )
+ {
+ Status = (*PpSv)->FfsFindNextVolume( PpSv, FvNum, &pFV );
+ if ( EFI_ERROR( Status ))
+ {
+ return Status;
+ }
+
+ ppFile = NULL;
+
+ while ( TRUE )
+ {
+ Status = (*PpSv)->FfsFindNextFile( PpSv,
+ EFI_FV_FILETYPE_FREEFORM,
+ pFV,
+ &ppFile );
+
+ if ( Status == EFI_NOT_FOUND )
+ {
+ break;
+ }
+
+ DEBUG ((EFI_D_INFO, " ppFile guid:: %x \n", ppFile->Name));
+
+ if (CompareGuid( &ppFile->Name, &pFatFileGuid ))
+ {
+ Found = TRUE;
+ break;
+ }
+ }
+
+ if ( Found )
+ {
+ break;
+ }
+ else {
+ FvNum++;
+ }
+ }
+
+ Status = (*PpSv)->FfsFindSectionData( PpSv,
+ EFI_SECTION_RAW,
+ ppFile,
+ Buffer );
+
+ if (EFI_ERROR( Status )) {
+ return EFI_NOT_FOUND;
+ }
+
+ return Status;
+}
+
+
+
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: CpuPolicy Override for Pfat
+//
+// Description: PfatCpuPolicyOverride at end of PeiCpuPlatformPolicy
+// handler.
+//
+// Output: PeiServices - Pointer to PEI Services Table.
+// NotifyDesc - Pointer to the descriptor for the Notification
+// event that caused this function to execute.
+// Ppi - Pointer to the PPI data associated with
+// this function.
+//
+//<AMI_PHDR_END>
+//**********************************************************************
+STATIC
+EFI_STATUS
+PfatCpuPolicyOverrideEndOfPeiCpuPlatformPolicy (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc,
+ IN VOID *Ppi
+)
+{
+ EFI_STATUS Status;
+ PEI_CPU_PLATFORM_POLICY_PPI *CpuPlatformPolicyPpi;
+ PFAT_CONFIG *PfatConfig;
+ CPU_CONFIG_PPI *CpuConfig;
+ UINT32 TotalROMSize = 0;
+ UINTN pFatHashDataSize = 0;
+ UINT8 pFatHash256Val[32];
+ UINT8 *Sha256PubKeyDigest;
+ VOID *pFatSha256Context;
+ VOID *pFatData;
+
+ Status = PeiServicesLocatePpi (&gPeiCpuPlatformPolicyPpiGuid, 0, NULL, &CpuPlatformPolicyPpi);
+ if ( EFI_ERROR( Status ) ) {
+ return Status;
+ }
+
+ PfatConfig = CpuPlatformPolicyPpi->SecurityConfig->PfatConfig;
+ CpuConfig = CpuPlatformPolicyPpi->CpuConfig;
+
+ CpuConfig->Pfat = CPU_FEATURE_ENABLE;
+ pFatHashDataSize = Sha256GetContextSize ();
+ Status = ((*PeiServices)->AllocatePool) (PeiServices, pFatHashDataSize, &pFatSha256Context);
+ if ( EFI_ERROR( Status ) ) {
+ return Status;
+ }
+
+ Status = LocatPfatPubKey(PeiServices ,&Sha256PubKeyDigest);
+ //
+ // If it fails it might be in non PUPC mode
+ //
+ if ( !EFI_ERROR( Status ) ) {
+ PfatConfig->PupHeader.PkgAttributes = 0;
+ CopyMem (&PfatConfig->Ppdt.PkeySlot0, Sha256PubKeyDigest, 32);
+ }
+
+ ///
+ /// Select to Flash Map 0 Register to get the number of flash Component
+ ///
+ MmioAndThenOr32 (
+ SB_RCBA + R_PCH_SPI_FDOC,
+ (UINT32) (~(B_PCH_SPI_FDOC_FDSS_MASK | B_PCH_SPI_FDOC_FDSI_MASK)),
+ (UINT32) (V_PCH_SPI_FDOC_FDSS_FSDM | R_PCH_SPI_FDBAR_FLASH_MAP0)
+ );
+
+ switch ( MmioRead16 (SB_RCBA + R_PCH_SPI_FDOD) & B_PCH_SPI_FDBAR_NC ) {
+ case V_PCH_SPI_FDBAR_NC_1:
+ PfatConfig->NumSpiComponents = 1;
+ break;
+ case V_PCH_SPI_FDBAR_NC_2:
+ PfatConfig->NumSpiComponents = 2;
+ break;
+ default:
+ break;
+ }
+
+ ///
+ /// Select to Flash Components Register to get the Component 1 Density
+ ///
+ MmioAndThenOr32 (
+ SB_RCBA + R_PCH_SPI_FDOC,
+ (UINT32) (~(B_PCH_SPI_FDOC_FDSS_MASK | B_PCH_SPI_FDOC_FDSI_MASK)),
+ (UINT32) (V_PCH_SPI_FDOC_FDSS_COMP | R_PCH_SPI_FCBA_FLCOMP)
+ );
+
+ ///
+ /// Copy Component 1 Density
+ ///
+ switch ( (UINT8) MmioRead32 (SB_RCBA + R_PCH_SPI_FDOD) & B_PCH_SPI_FLCOMP_COMP1_MASK ) {
+ case V_PCH_SPI_FLCOMP_COMP1_512KB:
+ PfatConfig->ComponentSize[0] = EnumSpiCompSize512KB;
+ TotalROMSize += (UINT32) LShiftU64(512, KBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP1_1MB:
+ PfatConfig->ComponentSize[0] = EnumSpiCompSize1MB;
+ TotalROMSize += (UINT32) LShiftU64(1, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP1_2MB:
+ PfatConfig->ComponentSize[0] = EnumSpiCompSize2MB;
+ TotalROMSize += (UINT32) LShiftU64(2, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP1_4MB:
+ PfatConfig->ComponentSize[0] = EnumSpiCompSize4MB;
+ TotalROMSize += (UINT32) LShiftU64(4, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP1_8MB:
+ PfatConfig->ComponentSize[0] = EnumSpiCompSize8MB;
+ TotalROMSize += (UINT32) LShiftU64(8, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP1_16MB:
+ PfatConfig->ComponentSize[0] = EnumSpiCompSize16MB;
+ TotalROMSize += (UINT32) LShiftU64(16, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP1_32MB:
+ PfatConfig->ComponentSize[0] = EnumSpiCompSize32MB;
+ TotalROMSize += (UINT32) LShiftU64(32, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP1_64MB:
+ PfatConfig->ComponentSize[0] = EnumSpiCompSize64MB;
+ TotalROMSize += (UINT32) LShiftU64(64, MBShift);
+ break;
+ default:
+ break;
+ }
+
+ ///
+ /// Copy Component 2 Density
+ ///
+ if ( PfatConfig->NumSpiComponents == 2 ) {
+ switch ( (UINT8) MmioRead32 (SB_RCBA + R_PCH_SPI_FDOD) & B_PCH_SPI_FLCOMP_COMP2_MASK ) {
+ case V_PCH_SPI_FLCOMP_COMP2_512KB:
+ PfatConfig->ComponentSize[1] = EnumSpiCompSize512KB;
+ TotalROMSize += (UINT32) LShiftU64(512, KBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP2_1MB:
+ PfatConfig->ComponentSize[1] = EnumSpiCompSize1MB;
+ TotalROMSize += (UINT32) LShiftU64(1, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP2_2MB:
+ PfatConfig->ComponentSize[1] = EnumSpiCompSize2MB;
+ TotalROMSize += (UINT32) LShiftU64(2, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP2_4MB:
+ PfatConfig->ComponentSize[1] = EnumSpiCompSize4MB;
+ TotalROMSize += (UINT32) LShiftU64(4, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP2_8MB:
+ PfatConfig->ComponentSize[1] = EnumSpiCompSize8MB;
+ TotalROMSize += (UINT32) LShiftU64(8, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP2_16MB:
+ PfatConfig->ComponentSize[1] = EnumSpiCompSize16MB;
+ TotalROMSize += (UINT32) LShiftU64(16, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP2_32MB:
+ PfatConfig->ComponentSize[1] = EnumSpiCompSize32MB;
+ TotalROMSize += (UINT32) LShiftU64(32, MBShift);
+ break;
+ case V_PCH_SPI_FLCOMP_COMP2_64MB:
+ PfatConfig->ComponentSize[1] = EnumSpiCompSize64MB;
+ TotalROMSize += (UINT32) LShiftU64(64, MBShift);
+ break;
+ default:
+ break;
+ }
+ }
+
+ //
+ // LastSfam : Number of SfamData - 1
+ //
+ PfatConfig->Ppdt.LastSfam = PFAT_COUNT - 1;
+ if (PfatConfig->Ppdt.LastSfam > (MAX_SFAM_COUNT - 1)) {
+ PfatConfig->Ppdt.LastSfam = MAX_SFAM_COUNT - 1;
+ }
+
+ //
+ // SfamData[0] : BIOS Region only skip NVRAM
+ //
+ PfatConfig->Ppdt.SfamData[0].FirstByte = TotalROMSize - (0xFFFFFFFF - FV_MAIN_BASE + 1);
+ PfatConfig->Ppdt.SfamData[0].LastByte = TotalROMSize - 1;
+
+ //
+ // SfamData[1] : ME Region + GBE Region + Description Region
+ //
+ PfatConfig->Ppdt.SfamData[1].FirstByte = 0x00;
+ PfatConfig->Ppdt.SfamData[1].LastByte = TotalROMSize - FLASH_SIZE -1;
+ PfatConfig->Ppdt.PpdtSize = (sizeof (PPDT) - sizeof (PfatConfig->Ppdt.SfamData) + ((PfatConfig->Ppdt.LastSfam + 1) * sizeof (SFAM_DATA)));
+
+ //
+ // Defined values in the token
+ //
+ PfatConfig->Ppdt.BiosSvn = BIOS_SVN;
+ PfatConfig->PfatMemSize = (UINT8) RShiftU64(PfatMaxSectionSize, MBShift) + 1;
+
+ //
+ // Hash the PPDT to PfatConfig->PpdtHash
+ //
+ pFatHashDataSize = PfatConfig->Ppdt.PpdtSize;
+ pFatData = (VOID *) &PfatConfig->Ppdt;
+ Sha256Init (pFatSha256Context);
+ Sha256Update (pFatSha256Context, pFatData, pFatHashDataSize);
+ Sha256Final (pFatSha256Context, pFatHash256Val);
+ CopyMem (&PfatConfig->PpdtHash[0], &pFatHash256Val[0], 8);
+ CopyMem (&PfatConfig->PpdtHash[1], &pFatHash256Val[8], 8);
+ CopyMem (&PfatConfig->PpdtHash[2], &pFatHash256Val[16], 8);
+ CopyMem (&PfatConfig->PpdtHash[3], &pFatHash256Val[24], 8);
+ return Status;
+}
+
+EFI_STATUS
+PfatCpuPolicyOverrideEntryPoint (
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices
+)
+{
+ EFI_STATUS Status;
+ EFI_PEI_READ_ONLY_VARIABLE_PPI *ReadOnlyVariable;
+ SETUP_DATA SetupData;
+ EFI_GUID SetupGuid = SYSTEM_CONFIGURATION_GUID;
+ UINTN VariableSize= sizeof (SETUP_DATA);
+
+ Status = PeiServicesLocatePpi (&gEfiPeiReadOnlyVariablePpiGuid, 0, NULL, &ReadOnlyVariable);
+ if ( EFI_ERROR( Status ) ) {
+ return Status;
+ }
+
+ Status = ReadOnlyVariable->PeiGetVariable (
+ PeiServices,
+ L"Setup",
+ &SetupGuid,
+ NULL,
+ &VariableSize,
+ &SetupData
+ );
+ if ( EFI_ERROR( Status ) ) {
+ return Status;
+ }
+
+ if ( SetupData.Pfatstate == Enable ) {
+ Status = PeiServicesNotifyPpi (&mPfatCpuPolicyOverrideNotifyDesc);
+ if ( EFI_ERROR( Status ) ) {
+ return Status;
+ }
+ }
+
+ 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/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.cif b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.cif
new file mode 100644
index 0000000..96b5b2b
--- /dev/null
+++ b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.cif
@@ -0,0 +1,14 @@
+<component>
+ name = "PfatCpuPolicyOverride"
+ category = ModulePart
+ LocalRoot = "Board\EM\Pfat\PfatCpuPolicyOverride"
+ RefName = "PfatCpuPolicyOverride"
+[files]
+"PfatCpuPolicyOverride.c"
+"PfatCpuPolicyOverride.h"
+"PfatCpuPolicyOverride.dxs"
+"PfatCpuPolicyOverride.sdl"
+"PfatCpuPolicyOverride.mak"
+"PeiCryptLib.lib"
+"OpensslLib.lib"
+<endComponent>
diff --git a/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.dxs b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.dxs
new file mode 100644
index 0000000..db14387
--- /dev/null
+++ b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.dxs
@@ -0,0 +1,55 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/IntelPfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.dxs 2 9/25/12 6:16p Fredericko $Revision:
+//
+// $Date:
+//
+//
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: PfatCpuPolicyOverride.dxs
+//
+// Description: PfatCpuPolicyOverride dependency file
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+#include "AutoGen.h"
+#include "PeimDepex.h"
+#if defined (BUILD_WITH_GLUELIB) || defined (BUILD_WITH_EDKII_GLUE_LIB)
+#include "EfiDepex.h"
+#include EFI_PPI_DEPENDENCY (Variable)
+#endif
+
+DEPENDENCY_START
+ PEI_READ_ONLY_VARIABLE_ACCESS_PPI_GUID
+DEPENDENCY_END
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2012, 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/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.h b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.h
new file mode 100644
index 0000000..c14735d
--- /dev/null
+++ b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.h
@@ -0,0 +1,133 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/IntelPfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.h 1 9/17/12 4:47p Fredericko $
+//
+// $Revision: 1 $
+//
+// $Date: 9/17/12 4:47p $
+//
+//
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: PfatCpuPolicyOverride.h
+//
+// Description: Header file for PfatCpuPolicyOverride sub-component
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+
+#ifndef _PFAT_CPU_POLICY_OVERRIDE_H_
+#define _PFAT_CPU_POLICY_OVERRIDE_H_
+
+#if !defined(EDK_RELEASE_VERSION) || (EDK_RELEASE_VERSION < 0x00020000)
+#include "EdkIIGluePeim.h"
+
+#include <Token.h>
+#include <SetupDataDefinition.h>
+#include "PchRegs.h"
+#include EFI_PPI_PRODUCER (CpuPlatformPolicy)
+#endif
+
+#define SYSTEM_CONFIGURATION_GUID { 0xEC87D643, 0xEBA4, 0x4BB5, 0xA1, 0xE5, 0x3F, 0x3E, 0x36, 0xB2, 0x0D, 0xA9 }
+
+#define PFAT_PUB_KEY_FFS_FILE_RAW_GUID \
+ {0x8e295870, 0xd377, 0x4b75, 0xbf, 0xdc, 0x9a, 0xe2, 0xf6, 0xdb, 0xde, 0x22}
+
+#define KBShift 10
+#define MBShift 20
+#define Disable 0
+#define Enable 1
+
+#if defined(BUILD_WITH_GLUELIB)
+#undef SetMem
+VOID *
+SetMem (
+ OUT VOID *Buffer,
+ IN UINTN Length,
+ IN UINT8 Value
+ )
+{
+ return GlueSetMem (Buffer, Length, Value);
+}
+
+#undef CopyMem
+VOID *
+EFIAPI
+CopyMem (
+ OUT VOID *DestinationBuffer,
+ IN CONST VOID *SourceBuffer,
+ IN UINTN Length
+ )
+{
+ return GlueCopyMem (DestinationBuffer, SourceBuffer, Length);
+}
+#endif
+
+STATIC
+EFI_STATUS
+PfatCpuPolicyOverrideEndOfPeiCpuPlatformPolicy (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc,
+ IN VOID *Ppi
+);
+
+//
+// Hash functions definitions for pfat
+//
+UINTN
+EFIAPI
+Sha256GetContextSize (
+ VOID
+ );
+
+BOOLEAN
+EFIAPI
+Sha256Init (
+ IN OUT VOID *Sha256Context
+ );
+
+BOOLEAN
+EFIAPI
+Sha256Update (
+ IN OUT VOID *Sha256Context,
+ IN CONST VOID *Data,
+ IN UINTN DataLength
+ );
+
+BOOLEAN
+EFIAPI
+Sha256Final (
+ IN OUT VOID *Sha256Context,
+ OUT UINT8 *HashValue
+ );
+
+#endif
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2012, 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/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.mak b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.mak
new file mode 100644
index 0000000..4656d93
--- /dev/null
+++ b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.mak
@@ -0,0 +1,116 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (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/IntelPfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.mak 4 10/29/12 4:10p Fredericko $
+#
+# $Revision: 4 $
+#
+# $Date: 10/29/12 4:10p $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.mak $
+#
+# 4 10/29/12 4:10p Fredericko
+# [TAG] EIP84115
+# [Category] Improvement
+# [Description] Implementing PFAT function for Shark Bay
+#
+# 3 10/05/12 6:28p Fredericko
+# Make Pfat build with Debug Mode Turned On.
+#
+# 2 9/25/12 6:16p Fredericko
+#
+# 1 9/17/12 4:47p Fredericko
+# Initial Check in for PfatCpuPolicyOverride
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: PfatCpuPolicyOverride.mak
+#
+# Description: Make file for PfatCpuPolicyOverride
+#
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+
+all : PfatCpuPolicyOverride
+
+PfatCpuPolicyOverride : $(BUILD_DIR)\PfatCpuPolicyOverride.mak PfatCpuPolicyOverrideBin
+
+$(BUILD_DIR)\PfatCpuPolicyOverride.mak : $(PFAT_CPU_POLICY_OVERRIDE_PATH)\PfatCpuPolicyOverride.cif $(PFAT_CPU_POLICY_OVERRIDE_PATH)\PfatCpuPolicyOverride.mak $(BUILD_RULES)
+ $(CIF2MAK) $(PFAT_CPU_POLICY_OVERRIDE_PATH)\PfatCpuPolicyOverride.cif $(CIF2MAK_DEFAULTS)
+
+PFAT_CPU_POLICY_OVERRIDE_INCLUDES = \
+ $(EdkIIGlueLib_INCLUDES)\
+ /I$(INTEL_COUGAR_POINT_INCLUDE_DIR)\
+ /I$(PROJECT_CPU_ROOT)\
+ /I$(PROJECT_CPU_ROOT)\Include \
+
+PFAT_CPU_POLICY_OVERRIDE_DEFINES=\
+ $(MY_DEFINES)\
+ /D"__EDKII_GLUE_MODULE_ENTRY_POINT__=PfatCpuPolicyOverrideEntryPoint"\
+ /D __EDKII_GLUE_BASE_LIB__ \
+ /D __EDKII_GLUE_BASE_IO_LIB_INTRINSIC__ \
+ /D __EDKII_GLUE_BASE_MEMORY_LIB__\
+ /D __EDKII_GLUE_PEI_SERVICES_LIB__ \
+ /D __EDKII_GLUE_PEI_MEMORY_ALLOCATION_LIB__ \
+ /D __EDKII_GLUE_BASE_PCI_LIB_PCI_EXPRESS__ \
+
+PFAT_CPU_POLICY_OVERRIDE_LIBS = \
+ $(EDKFRAMEWORKGUIDLIB)\
+ $(EDKPPILIB)\
+ $(EdkIIGlueBaseLibIA32_LIB)\
+ $(EdkIIGlueBaseIoLibIntrinsic_LIB)\
+ $(EdkIIGlueBaseMemoryLib_LIB)\
+ $(EdkIIGluePeiDebugLibReportStatusCode_LIB)\
+ $(EdkIIGluePeiReportStatusCodeLib_LIB)\
+ $(EdkIIGluePeiServicesLib_LIB)\
+ $(EdkIIGluePeiMemoryAllocationLib_LIB)\
+ $(EdkIIGlueBasePciLibPciExpress_LIB)\
+ $(EdkIIGlueBasePciExpressLib_LIB)\
+ $(EdkIIGluePeiHobLib_LIB)\
+ $(INTEL_SA_PPI_LIB)\
+ $(CPU_PPI_LIB)\
+
+PfatCpuPolicyOverrideBin : $(PFAT_CPU_POLICY_OVERRIDE_LIBS)
+ $(MAKE) /$(MAKEFLAGS) $(EDKIIGLUE_DEFAULTS)\
+ /f $(BUILD_DIR)\PfatCpuPolicyOverride.mak all\
+ NAME=PfatCpuPolicyOverride \
+ MAKEFILE=$(BUILD_DIR)\PfatCpuPolicyOverride.mak \
+ "MY_INCLUDES=$(PFAT_CPU_POLICY_OVERRIDE_INCLUDES)"\
+ "MY_DEFINES = $(PFAT_CPU_POLICY_OVERRIDE_DEFINES)" \
+ OBJECTS="$(BUILD_DIR)\$(PFAT_CPU_POLICY_OVERRIDE_PATH)\PfatCpuPolicyOverride.obj" \
+ GUID=FAF79E9F-4D40-4F02-8AC9-4B5512708F7F \
+ ENTRY_POINT=_ModuleEntryPoint "EXT_HEADERS=$(BUILD_DIR)\token.h"\
+ TYPE=PEIM \
+ EDKIIModule=PEIM\
+ DEPEX1=$(PFAT_CPU_POLICY_OVERRIDE_PATH)\PfatCpuPolicyOverride.dxs \
+ DEPEX1_TYPE=EFI_SECTION_PEI_DEPEX \
+ COMPRESS=0
+
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (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/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.sdl b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.sdl
new file mode 100644
index 0000000..9fd801e
--- /dev/null
+++ b/Board/EM/Pfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.sdl
@@ -0,0 +1,98 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (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/IntelPfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.sdl 3 10/02/12 4:12p Fredericko $
+#
+# $Revision: 3 $
+#
+# $Date: 10/02/12 4:12p $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatCpuPolicyOverride/PfatCpuPolicyOverride.sdl $
+#
+# 3 10/02/12 4:12p Fredericko
+# BIOS_SVN token added
+#
+# 2 9/25/12 6:16p Fredericko
+#
+# 1 9/17/12 4:47p Fredericko
+# Initial Check in for PfatCpuPolicyOverride
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: PfatCpuPolicyOverride.sdl
+#
+# Description: SDL file for PfatCpuPolicyOverride
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+
+TOKEN
+ Name = "PFAT_CPU_POLICY_OVERRIDE_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable PFAT_CPU_POLICY_OVERRIDE_SUPPORT support in Project"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+End
+
+MODULE
+ Help = "Includes PfatCpuPolicyOverride.mak to Project"
+ File = "PfatCpuPolicyOverride.mak"
+End
+
+PATH
+ Name = "PFAT_CPU_POLICY_OVERRIDE_PATH"
+End
+
+TOKEN
+ Name = "PFAT_COUNT"
+ Value = "2"
+ Help = ""
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BIOS_SVN"
+ Value = "9502720"
+ Help = "This token must to be decimal because Intel's PPB.exe only supported decimal. The definition is 0x910000(9502720) in PEI_CPU_PLATFORM_POLICY_PPI_REVISION_5."
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\PfatCpuPolicyOverride.ffs"
+ Parent = "FV_BB"
+ InvokeOrder = AfterParent
+End
+
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (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/Pfat/PfatPubKeysAndBuildPSL/.VkeyExp b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/.VkeyExp
new file mode 100644
index 0000000..a356872
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/.VkeyExp
Binary files differ
diff --git a/Board/EM/Pfat/PfatPubKeysAndBuildPSL/BuildAmiPfatHeader.exe b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/BuildAmiPfatHeader.exe
new file mode 100644
index 0000000..0bb57ac
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/BuildAmiPfatHeader.exe
Binary files differ
diff --git a/Board/EM/Pfat/PfatPubKeysAndBuildPSL/BuildPSL.bat b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/BuildPSL.bat
new file mode 100644
index 0000000..8337d0c
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/BuildPSL.bat
@@ -0,0 +1,315 @@
+echo off
+Set AMI_PFAT_FLASH_CONFIGURATIONS=Flash.ini
+echo AMI_PFAT_Flash_Configurations>%AMI_PFAT_FLASH_CONFIGURATIONS%
+Set FITC_OUTIMAGE_MAP=%1
+Set BuildBIOSMap=%2
+Set WORKING_PATH=%3
+Set BIOS_SVN=%4
+Set /a FlashSectionSize=%5
+if not exist %FITC_OUTIMAGE_MAP% (
+ echo Error:OutImage.map isn't found, please check the eModule of RomImgae
+ goto END
+)
+if not exist %BuildBIOSMap% (
+ echo Error:BuildBIOS.map isn't found, please check the PfatPubKeysAndBuildPSL.sdl
+ goto END
+)
+if not exist ForPfatName.txt (
+ echo Error:ForPfatName.txt isn't found, please check the eModule of RomImgae
+ goto END
+)
+FOR /F "usebackq tokens=1" %%G IN ("ForPfatName.txt") DO (
+ Set INPUT_BIOS_IMAGE=%%G
+)
+del ForPfatName.txt
+FOR /F "skip=2 usebackq tokens=1,2,3,4-6" %%G IN ("%FITC_OUTIMAGE_MAP%") DO (
+ if "%%J %%K %%L" EQU "Flash Image " (
+ Set /a TOTAL_ROM_SIZE=0x%%I
+ )else if "%%J %%K %%L" EQU "Descriptor Region " (
+ Set /a DescriptorRegionStartingAddress=0x%%G
+ Set /a DescriptorRegionLength=0x%%I
+ )else if "%%J %%K %%L" EQU "GbE Region " (
+ Set /a GbERegionStartingAddress=0x%%G
+ Set /a GbERegionLength=0x%%I
+ )else if "%%J %%K %%L" EQU "ME Region " (
+ Set /a MERegionStartingAddress=0x%%G
+ Set /a MERegionLength=0x%%I
+ )else if "%%J %%K %%L" EQU "BIOS Region " (
+ Set /a BIOSRegionStartingAddress=0x%%G
+ Set /a BIOSRegionLength=0x%%I
+ )
+)
+goto Define_Flash_Type
+
+:Define_Flash_Type
+Set MeType=0
+Set BiosType=1
+Set EcType=2
+Set OthersType=3
+goto Prepare_Definitions
+
+:Prepare_Definitions
+Set DESCRIPTOR_REGION_ROM=DescriptorRegion.bin
+Set GBE_REGION_ROM=GbERegion.bin
+Set ME_REGION_ROM=MERegion.bin
+Set PUBLIC_KEY_FILENAME=%WORKING_PATH%\PfatPublic.key
+Set PRIVATE_KEY_FILENAME=%WORKING_PATH%\PfatPrivate.key
+Set PFAT_VKEY_EXP=%WORKING_PATH%\.VkeyExp
+Set PUBLIC_KEY_FILENAME_HASH=%WORKING_PATH%\PubKeyhash.bin
+Set PFATCRYPTCON=%WORKING_PATH%\PfatCryptoCon.exe
+Set KEYGEN=%WORKING_PATH%\Keygen.exe
+Set CUTROM=%WORKING_PATH%\CutRom.exe
+Set PSL2BIN=%WORKING_PATH%\psl2bin.exe
+Set PPB=%WORKING_PATH%\PPB.exe
+Set PSL_FILE=AmiPfatBiosPSL
+Set PFAT_SCRIPT_HDR=%WORKING_PATH%\PfatCertHeader.bin
+Set PFAT_UPDATEPKG_FILENAME=UpdatePkg.pfat
+Set PFAT_SIGNATURE_FILENAME=.out_PfatCer
+Set PFAT_INTREGRATION_ROM=AMIPFAT.bin
+Set AMI_PFAT_HEADER=%WORKING_PATH%\AMIPFATHeader.bin
+%WORKING_PATH%\BuildAmiPfatHeader.exe /Empty %AMI_PFAT_HEADER%
+copy %AMI_PFAT_HEADER% %PFAT_INTREGRATION_ROM%
+goto BUILD_DESCRIPTOR_REGION_ROM
+
+:BUILD_DESCRIPTOR_REGION_ROM
+ Set ROM_PRIORITY=%DESCRIPTOR_REGION_ROM%
+ Set /a FV_StartingAddress=%DescriptorRegionStartingAddress%
+ Set /a FV_Length=%DescriptorRegionLength%
+ goto SETUP_PARAMETERS
+
+:BUILD_GBE_REGION_ROM
+ Set ROM_PRIORITY=%GBE_REGION_ROM%
+ Set /a FV_StartingAddress=%GbERegionStartingAddress%
+ Set /a FV_Length=%GbERegionLength%
+ goto SETUP_PARAMETERS
+
+:BUILD_ME_REGION_ROM
+ Set ROM_PRIORITY=%ME_REGION_ROM%
+ Set /a FV_StartingAddress=%MERegionStartingAddress%
+ Set /a FV_Length=%MERegionLength%
+ goto SETUP_PARAMETERS
+
+:BUILD_BIOS_REGION_ROM_FIRST_FV
+ Set /a BIOS_FV_Number=0
+ FOR /F "usebackq tokens=1-4" %%G IN ("%BuildBIOSMap%") DO (
+ Set ROM_PRIORITY=%%G
+ Set FlashCMD=%%H
+ Set /a FV_StartingAddress=%BIOSRegionStartingAddress%+%%I
+ Set /a FV_Length=%%J
+ goto SETUP_PARAMETERS
+ )
+ goto BuildAmiPfatHeader
+
+:BUILD_BIOS_REGION_ROM_REMAINDER
+ Set /a BIOS_FV_Number+=1
+ FOR /F "skip=%BIOS_FV_Number% usebackq tokens=1-4" %%G IN ("%BuildBIOSMap%") DO (
+ Set ROM_PRIORITY=%%G
+ Set FlashCMD=%%H
+ Set /a FV_StartingAddress=%BIOSRegionStartingAddress%+%%I
+ Set /a FV_Length=%%J
+ goto SETUP_PARAMETERS
+ )
+ goto BuildAmiPfatHeader
+
+:SETUP_PARAMETERS
+ %CUTROM% %INPUT_BIOS_IMAGE% %ROM_PRIORITY% %FV_StartingAddress% %FV_Length%
+ Set /a FlashRemainderSize=%FV_Length%%%FlashSectionSize%
+ Set /a SUBTRACT_BLOCK_SIZE_FROM_DATA_SIZE=%FlashSectionSize%-0x1000
+ Set /a START_COUNT=0
+ Set /a NoRemainderCount=%FV_Length%/%FlashSectionSize%
+ if %NoRemainderCount% GTR 0 (
+ Set /a NoRemainderCount-=1
+ Set /a SKIP_CUT_ROM=1
+ ) else (
+ Set /a SKIP_CUT_ROM=0
+ )
+ if %FlashRemainderSize% EQU 0 (
+ Set /a END_COUNT=%FV_Length%/%FlashSectionSize%-1
+ ) else (
+ Set /a END_COUNT=%FV_Length%/%FlashSectionSize%
+ )
+ Set /a END_OF_SIZE=%FV_StartingAddress%+%FV_Length%
+ goto AutoBuildPSL
+
+:AutoBuildPSL
+ Set /a START_FLASH_SECTION=%START_COUNT%*%FlashSectionSize%
+ Set /a START_FLASH_SECTION_IN_MB=%START_FLASH_SECTION%/%FlashSectionSize%
+ Set FLASH_ROM=AMI_%START_FLASH_SECTION_IN_MB%M.rom
+ Set PSL_OUT_FILENAME=AmiPfatBiosPSLOutput_%START_FLASH_SECTION_IN_MB%M.bin
+ Set FLASH_ROM_OUTPUT_FILENAME=APFAT%START_FLASH_SECTION_IN_MB%M.bin
+ Set /a SUBTRACT_BLOCK_SIZE_FROM_TOTAL_ROM_SIZE=%FV_StartingAddress%
+ Set /a CURRENT_SIZE=%START_COUNT%+1
+ Set /a CURRENT_SIZE*=%FlashSectionSize%
+ Set /a CURRENT_SIZE-=0x1000
+ if %SKIP_CUT_ROM% EQU 1 (
+ if %NoRemainderCount% GEQ %START_COUNT% (
+ %CUTROM% %ROM_PRIORITY% %FLASH_ROM% %START_FLASH_SECTION% %FlashSectionSize%
+ Set /a SUBTRACT_BLOCK_SIZE_FROM_TOTAL_ROM_SIZE+=%CURRENT_SIZE%
+ ) else (
+ %CUTROM% %ROM_PRIORITY% %FLASH_ROM% %START_FLASH_SECTION% %FlashRemainderSize%
+ Set /a SUBTRACT_BLOCK_SIZE_FROM_TOTAL_ROM_SIZE=%END_OF_SIZE%-0x1000
+ Set /a SUBTRACT_BLOCK_SIZE_FROM_DATA_SIZE=%FlashRemainderSize%-0x1000
+ )
+ ) else (
+ Set FLASH_ROM=%ROM_PRIORITY%
+ Set /a SUBTRACT_BLOCK_SIZE_FROM_TOTAL_ROM_SIZE=%END_OF_SIZE%-0x1000
+ Set /a SUBTRACT_BLOCK_SIZE_FROM_DATA_SIZE=%FlashRemainderSize%-0x1000
+ )
+ echo begin > %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo // Set up initial values for update process >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set F0 %SUBTRACT_BLOCK_SIZE_FROM_TOTAL_ROM_SIZE%; Total ROM size >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set B0 %SUBTRACT_BLOCK_SIZE_FROM_DATA_SIZE%; Data size >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set I0 0; the offset count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set I1 0x1000; the FLASH BLOCK SIZE >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set I2 0; Erase error count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set I3 0; Write error count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set I4 3; Max errors >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set I5 0; Error Code Buffer >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set I6 0; Read error count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jmp _read; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _read_retry_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo add I6 1; increment the read retries count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo compare I6 I4; compare read retries count to max retries >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jge _read_error_label >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jmp _read; if error START_COUNT is smaller than Max errors jump to read>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _erase_retry_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo add I2 1; increment the erase retries count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo compare I2 I4; compare erase retries count to max retries >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jge _erase_error_label >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jmp _erase; if error START_COUNT is smaller than Max errors jump to erase >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _write_retry_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo add I3 1; increment the write retries count >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo compare I3 I4; compare write retries count to max retries >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jge _write_error_label >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jmp _write; if error START_COUNT is smaller than Max errors jump to weite>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _loop: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _read: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo read B1 F0 I1; read block 4KB >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo rdsts I5; read the HW status into I5 >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo compare I5 0; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jne _read_retry_label; if HW status != 0 jump to retry >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo compare B0 B1 I1; compare B0 vs B1 >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo je _skip_erase_and_write; if B0 == B1 skip erase and write >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _erase: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo eraseblk F0; erase block 4KB >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo rdsts I5; read the HW status into I5 >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo compare I5 0; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jne _erase_retry_label; if HW status != 0 jump to retry >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _write: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo write F0 B0 I1; write block >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo rdsts I5; read the HW status into I5 >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo compare I5 0; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jne _write_retry_label; if HW status != 0 jump to retry >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _skip_erase_and_write: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo add I0 I1; increment offset >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo // check if we reached the end of the buffer. We can't increment F0.offset and B0.offset to be more than BIOS size. >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ if %SKIP_CUT_ROM% EQU 1 (
+ if %NoRemainderCount% GEQ %START_COUNT% (
+ echo compare I0 %FlashSectionSize%; compare count with BIOS image size >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jge _end; if the count is greater or equal to %FlashSectionSize% then complete >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ ) else (
+ echo compare I0 %FlashRemainderSize%; compare count with BIOS image size >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jge _end; if the count is greater or equal to %FlashRemainderSize% then complete >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ )
+ ) else (
+ echo compare I0 %FlashRemainderSize%; compare count with BIOS image size >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jge _end; if the count is greater or equal to %FlashRemainderSize% then complete >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ )
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo //Sub 4KB to offsets >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo sub F0 I1; Decrement flash offset >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo sub B0 I1; Decrement buffer offset >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jmp _loop; work on the next block >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _read_error_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set If 1; set error in If >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jmp _end; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _erase_error_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set If 2; set error in If >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo jmp _end; >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _write_error_label: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set If 3; set error in If >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo _end: >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo set If 0; set error = 0 if success >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ echo.>> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+ echo end >> %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl
+
+ %PSL2BIN% %PSL_FILE%_%START_FLASH_SECTION_IN_MB%M.psl %PSL_OUT_FILENAME%
+ %PPB% -script %PSL_OUT_FILENAME% -data %FLASH_ROM% -package %PFAT_UPDATEPKG_FILENAME% -use_sfam true -bios_svn %BIOS_SVN%
+ %PFATCRYPTCON% -z -k %PRIVATE_KEY_FILENAME% -f %PFAT_UPDATEPKG_FILENAME% -s
+ copy /b %PFAT_UPDATEPKG_FILENAME% + %PFAT_SCRIPT_HDR% + %PFAT_SIGNATURE_FILENAME% %FLASH_ROM_OUTPUT_FILENAME%
+ if exist .out_key (
+ del .out_key
+ )
+ del .out_PfatCer
+ del %PFAT_UPDATEPKG_FILENAME%
+ if %START_COUNT% EQU %END_COUNT% goto FinishedAutoBuildPSL
+ Set /a START_COUNT+=1
+ goto AutoBuildPSL
+
+:FinishedAutoBuildPSL
+ Set /a START_COUNT=0
+:IntegrateAllROMs
+ Set /a START_FLASH_SECTION=%START_COUNT%*%FlashSectionSize%
+ Set /a START_FLASH_SECTION_IN_MB=%START_FLASH_SECTION%/%FlashSectionSize%
+ copy /b %PFAT_INTREGRATION_ROM%+APFAT%START_FLASH_SECTION_IN_MB%M.bin %PFAT_INTREGRATION_ROM%
+ del APFAT%START_FLASH_SECTION_IN_MB%M.bin
+ del AmiPfatBiosPSLOutput_%START_FLASH_SECTION_IN_MB%M.bin
+ if exist AMI_%START_FLASH_SECTION_IN_MB%M.rom (
+ del AMI_%START_FLASH_SECTION_IN_MB%M.rom
+ )
+ if %START_COUNT% EQU %END_COUNT% goto FinishedIntegrateAllROMs
+ Set /a START_COUNT+=1
+ goto IntegrateAllROMs
+
+:FinishedIntegrateAllROMs
+ del *.psl
+ Set /a END_COUNT+=1
+ del %ROM_PRIORITY%
+ if "%ROM_PRIORITY%" EQU "%DESCRIPTOR_REGION_ROM%" (
+ echo %MeType% /DESC %END_COUNT% ;%ROM_PRIORITY%>>%AMI_PFAT_FLASH_CONFIGURATIONS%
+ goto BUILD_GBE_REGION_ROM
+ )
+ if "%ROM_PRIORITY%" EQU "%GBE_REGION_ROM%" (
+ echo %MeType% /GBE %END_COUNT% ;%ROM_PRIORITY%>>%AMI_PFAT_FLASH_CONFIGURATIONS%
+ goto BUILD_ME_REGION_ROM
+ )
+ if "%ROM_PRIORITY%" EQU "%ME_REGION_ROM%" (
+ echo %MeType% /ME %END_COUNT% ;%ROM_PRIORITY%>>%AMI_PFAT_FLASH_CONFIGURATIONS%
+ goto BUILD_BIOS_REGION_ROM_FIRST_FV
+ )
+ echo %BiosType% %FlashCMD% %END_COUNT% ;%ROM_PRIORITY%>>%AMI_PFAT_FLASH_CONFIGURATIONS%
+ goto BUILD_BIOS_REGION_ROM_REMAINDER
+
+:BuildAmiPfatHeader
+ %WORKING_PATH%\BuildAmiPfatHeader.exe %AMI_PFAT_FLASH_CONFIGURATIONS% %AMI_PFAT_HEADER%
+ copy /b %AMI_PFAT_HEADER%+%PFAT_INTREGRATION_ROM% AMIPFAT_%INPUT_BIOS_IMAGE%
+ del %AMI_PFAT_HEADER%
+ del %PFAT_INTREGRATION_ROM%
+:END \ No newline at end of file
diff --git a/Board/EM/Pfat/PfatPubKeysAndBuildPSL/CutRom.exe b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/CutRom.exe
new file mode 100644
index 0000000..910e46c
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/CutRom.exe
Binary files differ
diff --git a/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PPB.exe b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PPB.exe
new file mode 100644
index 0000000..a7f27a9
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PPB.exe
Binary files differ
diff --git a/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatCertHeader.bin b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatCertHeader.bin
new file mode 100644
index 0000000..1d9374d
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatCertHeader.bin
Binary files differ
diff --git a/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatCryptoCon.exe b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatCryptoCon.exe
new file mode 100644
index 0000000..8914a6f
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatCryptoCon.exe
Binary files differ
diff --git a/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.cif b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.cif
new file mode 100644
index 0000000..1dfa1b8
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.cif
@@ -0,0 +1,19 @@
+<component>
+ name = "PfatPubKeysAndBuildPSL"
+ category = ModulePart
+ LocalRoot = "Board\EM\Pfat\PfatPubKeysAndBuildPSL"
+ RefName = "PfatPubKeysAndBuildPSL"
+[files]
+"PfatPubKeysAndBuildPSL.sdl"
+"PfatPubKeysAndBuildPSL.mak"
+"dummy.bin"
+"PfatCertHeader.bin"
+"BuildPSL.bat"
+"BuildAmiPfatHeader.exe"
+"CutRom.exe"
+"keygen.exe"
+"PfatCryptoCon.exe"
+"PPB.exe"
+"psl2bin.exe"
+".VkeyExp"
+<endComponent>
diff --git a/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.mak b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.mak
new file mode 100644
index 0000000..16fad9e
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.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/IntelPfat/PfatUtilsandScripts/PfatPubKeysAndBuildPSL.mak 1 10/29/12 4:04p Fredericko $
+#
+# $Revision: 1 $
+#
+# $Date: 10/29/12 4:04p $
+#*************************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatUtilsandScripts/PfatPubKeysAndBuildPSL.mak $
+#
+# 1 10/29/12 4:04p Fredericko
+# [TAG] EIP844115
+# [Category] Improvement
+# [Description] Added PfatPubKeysAndBuildPSL. Added Tools CutRom for
+# stiching PfatImage, BuildAmiPfatHeader for creating Apfatdos header for
+# PFAT.
+# [Files] PfatPubKeysAndBuildPSL.cif
+# PfatPubKeysAndBuildPSL.sdl
+# PfatPubKeysAndBuildPSL.mak
+# dummy.bin
+# BuildPSL.bat
+# BuildAmiPfatHeader.exe
+# CutRom.exe
+#
+# 7 9/21/12 5:08p Fredericko
+# Modified to use cryptocon and keygen
+#
+# 4 9/17/12 4:34p Fredericko
+# Changes to create PSL at build time. Changes for SignPfat utility error
+# during build.
+#
+# 3 9/10/12 10:52p Fredericko
+#
+# 2 9/10/12 9:55p Fredericko
+#
+# 1 9/01/12 2:22a Fredericko
+#
+#*************************************************************************
+#*************************************************************************
+#<AMI_FHDR_START>
+#
+# Name: PfatPubKey.mak
+#
+# Description: Make for for PfatPubKey
+#
+#
+#<AMI_FHDR_END>
+#*************************************************************************
+all: PfatPubKeyModule
+
+PfatPubKeyModule : SETPFATPUBKEY
+
+PFAT_PUB_KEY_FFS_FILE_GUID = 8E295870-D377-4b75-BFDC-9AE2F6DBDE22
+
+SETPFATPUBKEY: $(BUILD_DIR)\PfatPubKey.ffs
+
+PUBLIC_KEY_FILENAME = $(PFATPUB_DIR)\PfatPublic.key
+PRIVATE_KEY_FILENAME = $(PFATPUB_DIR)\PfatPrivate.key
+PFAT_VKEY_EXP = $(PFATPUB_DIR)\.VkeyExp
+PUBLIC_KEY_FILENAME_HASH = $(PFATPUB_DIR)\PubKeyhash.bin
+
+PFAT_GENERATE_KEYS:
+ del $(PUBLIC_KEY_FILENAME_HASH)
+ if not exist $(PUBLIC_KEY_FILENAME) $(KEYGEN) $(PRIVATE_KEY_FILENAME) $(PUBLIC_KEY_FILENAME)
+ $(PFATCRYPTCON) -z -w -k $(PRIVATE_KEY_FILENAME) -f $(PFATPUB_DIR)\dummy.bin -s
+ copy /b .out_key + $(PFAT_VKEY_EXP) $(PUBLIC_KEY_FILENAME_HASH)
+ $(PFATCRYPTCON) -h2 -f $(PUBLIC_KEY_FILENAME_HASH) -o $(PUBLIC_KEY_FILENAME_HASH)
+
+PREPARE : PFAT_GENERATE_KEYS
+
+$(BUILD_DIR)\PfatPubKey.ffs : $(PUBLIC_KEY_FILENAME_HASH)
+ $(MAKE) /f Core\FFS.mak \
+ BUILD_DIR=$(BUILD_DIR) \
+ GUID=$(PFAT_PUB_KEY_FFS_FILE_GUID) \
+ TYPE=EFI_FV_FILETYPE_FREEFORM \
+ BINFILE=$** FFSFILE=$@ COMPRESS=0 NAME=PfatPubKey
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (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/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.sdl b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.sdl
new file mode 100644
index 0000000..21bdb8f
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/PfatPubKeysAndBuildPSL.sdl
@@ -0,0 +1,265 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2012, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+
+TOKEN
+ Name = "PfatPubKey_SUPPORT"
+ Value = "1"
+ Help = ""
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+End
+
+MODULE
+ File = "PfatPubKeysAndBuildPSL.mak"
+End
+
+TOKEN
+ Name = "PFATCRYPTCON"
+ Value = "$(PFATPUB_DIR)\PfatCryptoCon.exe"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "KEYGEN"
+ Value = "$(PFATPUB_DIR)\Keygen.exe"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\PfatPubKey.ffs"
+ Parent = "FV_BB"
+ InvokeOrder = AfterParent
+End
+
+TOKEN
+ Name = "PfatMaxSectionSize"
+ Help = "Mega Byte is a unit of section size"
+ Value = "0x100000"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BIOSStartingAddress"
+ Help = ""
+ Value = "0xFFFFFFFF - $(FLASH_SIZE) + 1"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FV_NvRamStartingAddress"
+ Help = "ROM address"
+ Value = "$(NVRAM_ADDRESS) - $(BIOSStartingAddress)"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FV_NvRamLength"
+ Help = "ROM address"
+ Value = "($(NVRAM_BLOCKS)*$(FLASH_BLOCK_SIZE))*2"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FV_OAStartingAddress"
+ Help = "ROM address"
+ Value = "$(OEM_ACTIVATION_TABLE_ADDRESS) - $(BIOSStartingAddress)"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "OEM_ACTIVATION_TABLE_LOCATION" "=" "1"
+End
+
+TOKEN
+ Name = "FV_OA_Length"
+ Help = "ROM address"
+ Value = "$(OEM_ACTIVATION_TABLE_SIZE)"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+ Token = "OEM_ACTIVATION_TABLE_LOCATION" "=" "1"
+End
+
+TOKEN
+ Name = "FV_DataStartingAddress"
+ Help = "ROM address"
+ Value = "$(FV_DATA_BASE) - $(BIOSStartingAddress)"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FV_DataLength"
+ Help = "ROM address"
+ Value = "$(FV_DATA_SIZE)"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FV_MainStartingAddress"
+ Help = "ROM address"
+ Value = "$(FV_MAIN_BASE) - $(BIOSStartingAddress)"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FV_MainLength"
+ Help = "ROM address"
+ Value = "$(FV_MAIN_BLOCKS)*$(FLASH_BLOCK_SIZE)"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FV_BBStartingAddress"
+ Help = "ROM address"
+ Value = "$(FV_BB_BASE) - $(BIOSStartingAddress)"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FV_BBLength"
+ Help = "ROM address"
+ Value = "$(FV_BB_BLOCKS)*$(FLASH_BLOCK_SIZE)"
+ TokenType = Integer
+ TargetEQU = Yes
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "BUILD_PSL_BATCH"
+ Value = "$(PFATPUB_DIR)\\BuildPSL.bat"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "FITC_OUTIMAGE_MAP"
+ Value = "$(ROM_IMAGE_DIR)\Build\OutImage.map"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "BUILD_BIOS_MAP"
+ Value = "$(PFATPUB_DIR)\BuildBIOS.map"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "BUILD_BIOS_FV_NVRAM"
+ Value = "echo BIOS_FV_NVRAM.bin /N $(FV_NvRamStartingAddress) $(FV_NvRamLength)>$(BUILD_BIOS_MAP)"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "BUILD_BIOS_FV_OA"
+ Value = "echo BIOS_FV_OA.bin /OA $(FV_OAStartingAddress) $(FV_OA_Length)>>$(BUILD_BIOS_MAP)"
+ TokenType = Expression
+ TargetMAK = Yes
+ Token = "OEM_ACTIVATION_TABLE_LOCATION" "=" "1"
+End
+
+TOKEN
+ Name = "BUILD_BIOS_FV_DATA"
+ Value = "echo BIOS_FV_DATA.bin /DATA $(FV_DataStartingAddress) $(FV_DataLength)>>$(BUILD_BIOS_MAP)"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "BUILD_BIOS_FV_MAIN"
+ Value = "echo BIOS_FV_MAIN.bin /P $(FV_MainStartingAddress) $(FV_MainLength)>>$(BUILD_BIOS_MAP)"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "BUILD_BIOS_FV_BB"
+ Value = "echo BIOS_FV_BB.bin /B $(FV_BBStartingAddress) $(FV_BBLength)>>$(BUILD_BIOS_MAP)"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "BUILD_BIOS_MAP_SET"
+ Value = "$(BUILD_BIOS_FV_NVRAM) && $(BUILD_BIOS_FV_MAIN) && $(BUILD_BIOS_FV_DATA) && $(BUILD_BIOS_FV_BB)"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "BUILD_BIOS_MAP_SET"
+ Value = "$(BUILD_BIOS_FV_NVRAM) && $(BUILD_BIOS_FV_OA) && $(BUILD_BIOS_FV_MAIN) && $(BUILD_BIOS_FV_DATA) && $(BUILD_BIOS_FV_BB)"
+ TokenType = Expression
+ TargetMAK = Yes
+ Token = "OEM_ACTIVATION_TABLE_LOCATION" "=" "1"
+End
+
+TOKEN
+ Name = "BUILD_PSL_SET"
+ Value = "$(BUILD_PSL_BATCH) $(FITC_OUTIMAGE_MAP) $(BUILD_BIOS_MAP) $(PFATPUB_DIR) $(BIOS_SVN) $(PfatMaxSectionSize)"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+PATH
+ Name = "PFATPUB_DIR"
+End
+
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2012, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+
diff --git a/Board/EM/Pfat/PfatPubKeysAndBuildPSL/dummy.bin b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/dummy.bin
new file mode 100644
index 0000000..9613d45
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/dummy.bin
@@ -0,0 +1 @@
+«Ê¼«Ê¼«Ê¼«Ê¼«Ê¼«Ê¼«Ê¼«Ê¼«Ê¼«Ê¼«Ê¼«Ê¼«Ê¼«Ê¼«Ê«Ê¼« \ No newline at end of file
diff --git a/Board/EM/Pfat/PfatPubKeysAndBuildPSL/keygen.exe b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/keygen.exe
new file mode 100644
index 0000000..e81033b
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/keygen.exe
Binary files differ
diff --git a/Board/EM/Pfat/PfatPubKeysAndBuildPSL/psl2bin.exe b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/psl2bin.exe
new file mode 100644
index 0000000..b095917
--- /dev/null
+++ b/Board/EM/Pfat/PfatPubKeysAndBuildPSL/psl2bin.exe
Binary files differ
diff --git a/Board/EM/Pfat/PfatRecovery/PfatRecovery.c b/Board/EM/Pfat/PfatRecovery/PfatRecovery.c
new file mode 100644
index 0000000..590b70d
--- /dev/null
+++ b/Board/EM/Pfat/PfatRecovery/PfatRecovery.c
@@ -0,0 +1,287 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2010, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//**********************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatRecovery/PfatRecovery.c 1 4/05/13 5:36p Fredericko $
+//
+// $Revision: 1 $
+//
+// $Date: 4/05/13 5:36p $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatRecovery/PfatRecovery.c $
+//
+// 1 4/05/13 5:36p Fredericko
+// [TAG] EIP119706
+// [Category] Improvement
+// [Description] Support Recovery in pfat module
+// [Files] PfatRecovery.cif
+// PfatRecovery.sdl
+// PfatRecovery.mak
+// PfatRecovery.dxs
+// PfatRecovery.c
+// PfatRecoveryHook.c
+//
+//
+//**********************************************************************
+//<AMI_FHDR_START>
+//
+// Name:
+//
+// Description:
+//
+//<AMI_FHDR_END>
+//**********************************************************************
+//----------------------------------------------------------------------------
+// Includes
+// Statements that include other files
+#include <PEI.h>
+#include <AmiPeiLib.h>
+#include <token.h>
+#include <PPI\stall.h>
+#include <PPI\DeviceRecoveryModule.h>
+#include <HOB.h>
+#include <AmiHobs.h>
+#include <PfatDefinitions.h>
+
+#define PFAT_PACKAGE_CERT 524
+//----------------------------------------------------------------------------
+// Function Externs
+
+//----------------------------------------------------------------------------
+// Local prototypes
+typedef struct
+{
+ EFI_PEI_DEVICE_RECOVERY_MODULE_PPI *pDRM_Ppi;
+ EFI_PEI_DEVICE_LOAD_RECOVERY_CAPSULE SavedLoadCapsule;
+
+} DEVICE_RECOVERY_MODULE_INFO;
+
+//----------------------------------------------------------------------------
+// Local Variables
+DEVICE_RECOVERY_MODULE_INFO gDeviceRecoveryModuleInfo[MAX_DEVICE_RECOVERY_MODULE];
+
+
+//----------------------------------------------------------------------------
+// Function Definitions
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: FindAvailableMemory
+//
+// Description:
+//
+// Input:
+// IN EFI_PEI_SERVICES **PeiServices,
+//
+// Output:
+// EFI_PHYSICAL_ADDRESS
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_PHYSICAL_ADDRESS
+FindAvailableMemory (
+ IN EFI_PEI_SERVICES **PeiServices
+)
+{
+ VOID *p;
+ UINT8 i;
+ EFI_PHYSICAL_ADDRESS TopOfMemory = 0xffffffff;
+
+ for ((*PeiServices)->GetHobList(PeiServices, &p), i = 0; \
+ !(FindNextHobByType(EFI_HOB_TYPE_MEMORY_ALLOCATION, &p)); i++) {
+ if (TopOfMemory > ((EFI_HOB_MEMORY_ALLOCATION*)p)->AllocDescriptor.MemoryBaseAddress)
+ TopOfMemory = ((EFI_HOB_MEMORY_ALLOCATION*)p)->AllocDescriptor.MemoryBaseAddress;
+ }
+ return (TopOfMemory - (PFAT_RECOVERY_IMAGE_SIZE & 0xFFF00000));
+}
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: PfatRecoveryFileLoaded
+//
+// Description: Call this function at end of Pei. This currently
+// check recovery file.
+//
+// Input:
+// IN EFI_PEI_SERVICES **PeiServices,
+// IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+// IN VOID *Ppi
+//
+//
+// Output:
+// EFI_STATUS
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS PfatRecoveryFileLoaded (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN RECOVERY_IMAGE_HOB *RecoveryHob
+)
+{
+ UINT8 *p;
+ UINT32 i = 0, j = 0;
+ PUP_HEADER *PupHdr;
+ EFI_STATUS Status;
+ EFI_PHYSICAL_ADDRESS Buffer = NULL;
+ EFI_BOOT_MODE BootMode;
+ UINT8 pAmiPfatSign[] = "_AMIPFAT";
+ EFI_GUID PfatHobGuid = PFAT_HOB_GUID;
+ PFAT_HOB *PfatHob;
+
+ Status = (*PeiServices)->GetBootMode(PeiServices, &BootMode);
+ if ((EFI_ERROR(Status)) || (BootMode != BOOT_IN_RECOVERY_MODE))
+ return EFI_SUCCESS;
+
+ // To avoid out of memory resource with AllocatePages in PEI phase, find
+ // out the top of available memory to re-collate rom image w/o PAT headers.
+ Buffer = FindAvailableMemory(PeiServices);
+
+ p = (UINT8*)RecoveryHob->Address;
+
+ // Verify AMIPFAT Header.
+ if (MemCmp (p + 8, pAmiPfatSign, 8)) return Status;
+
+ i = *(UINT32*)p;
+ PupHdr = (PUP_HEADER*)(p + i);
+ do {
+ // skip ScriptSection and PUP Header
+ i += (PupHdr->ScriptSectionSize + sizeof(PUP_HEADER));
+ // collect DataSection only to buffer.
+ (*PeiServices)->CopyMem ((UINT8*)Buffer + j, \
+ (UINT8*)p + i, PupHdr->DataSectionSize);
+ // pointer to next PUP block.
+ i += (PupHdr->DataSectionSize + PFAT_PACKAGE_CERT);
+ j += PupHdr->DataSectionSize;
+ PupHdr = (PUP_HEADER*)(p + i);
+
+ } while (i < PFAT_RECOVERY_IMAGE_SIZE);
+
+ // Skip ME Region if needed (j = Original image size).
+ (*PeiServices)->CopyMem ((UINT8*)RecoveryHob->Address, \
+ (UINT8*)Buffer + (j - FLASH_SIZE), \
+ FLASH_SIZE );
+
+ // Invalidate PfatHob for disabling PFAT during DXE.
+ (*PeiServices)->GetHobList(PeiServices, &PfatHob);
+ Status = FindNextHobByGuid(&PfatHobGuid, &PfatHob);
+ if(!EFI_ERROR(Status)) {
+ PfatHob->EfiHobGuidType.Header.HobType = EFI_HOB_TYPE_UNUSED;
+ }
+ return EFI_SUCCESS;
+}
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: LoadRecoveryCapsuleHook
+//
+// Description:
+//
+// Input: IN EFI_PEI_SERVICES **PeiServices,
+// IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+//
+// Output: EFI_STATUS
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+LoadRecoveryCapsuleHook (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_DEVICE_RECOVERY_MODULE_PPI *This,
+ IN UINTN CapsuleInstance,
+ OUT VOID *Buffer )
+{
+ UINT8 i = 0;
+ RECOVERY_IMAGE_HOB RecoveryHob;
+ EFI_STATUS Status;
+
+ // All the LoadRecoveryCapsule calls come here
+ for (i = 0; gDeviceRecoveryModuleInfo[i].pDRM_Ppi != NULL; i++) {
+ // Check "This" for identfiy the LoadRecoveryCapsule call.
+ if (This != gDeviceRecoveryModuleInfo[i].pDRM_Ppi) continue;
+
+ // Invoke the Original LoadRecoveryCapsule procedure
+ Status = gDeviceRecoveryModuleInfo[i].SavedLoadCapsule ( \
+ PeiServices, This, CapsuleInstance, Buffer );
+ if (EFI_ERROR(Status)) return Status;
+
+ // Recovery image loaded, check if PFAT image then reconstruct the
+ // BIOS image.
+ RecoveryHob.Address = (EFI_PHYSICAL_ADDRESS)Buffer;
+ Status = PfatRecoveryFileLoaded (PeiServices, &RecoveryHob);
+ break;
+ }
+ return EFI_SUCCESS;
+}
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: PfatRecoveryEntry
+//
+// Description:
+//
+// Input: EFI_HANDLE - ImageHandle
+// EFI_SYSTEM_TABLE* - SystemTable
+//
+// Output: EFI_STATUS
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+PfatRecoveryEntry (
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices
+)
+{
+ UINTN i = 0;
+ EFI_STATUS Status;
+ EFI_PEI_DEVICE_RECOVERY_MODULE_PPI *pRecoveryDevice;
+ EFI_GUID guidRecoveryDevice = EFI_PEI_DEVICE_RECOVERY_MODULE_PPI_GUID;
+ EFI_PEI_PPI_DESCRIPTOR *pDummy;
+
+ // Initialize gDeviceRecoveryModuleInfo structure
+ for(i = 0; i < MAX_DEVICE_RECOVERY_MODULE; i++) {
+ gDeviceRecoveryModuleInfo[i].pDRM_Ppi = NULL;
+ gDeviceRecoveryModuleInfo[i].SavedLoadCapsule = NULL;
+ }
+ i = 0;
+ do {
+ // Discover the Device Recovery Module PPIs for hooking the
+ // LoadRecoveryCapule procedure.
+ Status = (*PeiServices)->LocatePpi(PeiServices, \
+ &guidRecoveryDevice, i, &pDummy, &pRecoveryDevice);
+ if (!EFI_ERROR(Status)) {
+ // Save Ppi pointer and LoadRecoveryCapsule procedure for Hook used.
+ gDeviceRecoveryModuleInfo[i].pDRM_Ppi = pRecoveryDevice;
+ gDeviceRecoveryModuleInfo[i++].SavedLoadCapsule = pRecoveryDevice->LoadRecoveryCapsule;
+ // Hook the LaodRecoveryCapsule procedure.
+ pRecoveryDevice->LoadRecoveryCapsule = LoadRecoveryCapsuleHook;
+ }
+ } while(!EFI_ERROR(Status));
+ return EFI_SUCCESS;
+}
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/Pfat/PfatRecovery/PfatRecovery.cif b/Board/EM/Pfat/PfatRecovery/PfatRecovery.cif
new file mode 100644
index 0000000..263e558
--- /dev/null
+++ b/Board/EM/Pfat/PfatRecovery/PfatRecovery.cif
@@ -0,0 +1,12 @@
+<component>
+ name = "PfatRecovery"
+ category = ModulePart
+ LocalRoot = "Board\EM\Pfat\PfatRecovery"
+ RefName = "PfatRecovery"
+[files]
+"PfatRecovery.sdl"
+"PfatRecovery.mak"
+"PfatRecovery.dxs"
+"PfatRecovery.c"
+"PfatRecoveryHook.c"
+<endComponent>
diff --git a/Board/EM/Pfat/PfatRecovery/PfatRecovery.dxs b/Board/EM/Pfat/PfatRecovery/PfatRecovery.dxs
new file mode 100644
index 0000000..3c9e8b5
--- /dev/null
+++ b/Board/EM/Pfat/PfatRecovery/PfatRecovery.dxs
@@ -0,0 +1,58 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2010, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+
+//**********************************************************************
+// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatRecovery/PfatRecovery.dxs 1 4/05/13 5:36p Fredericko $
+//
+// $Revision: 1 $
+//
+// $Date: 4/05/13 5:36p $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatRecovery/PfatRecovery.dxs $
+//
+// 1 4/05/13 5:36p Fredericko
+// [TAG] EIP119706
+// [Category] Improvement
+// [Description] Support Recovery in pfat module
+// [Files] PfatRecovery.cif
+// PfatRecovery.sdl
+// PfatRecovery.mak
+// PfatRecovery.dxs
+// PfatRecovery.c
+// PfatRecoveryHook.c
+//
+//
+//**********************************************************************
+#include <PEI.h>
+#include <PPI\RecoveryModule.h>
+
+DEPENDENCY_START
+ EFI_PEI_BOOT_IN_RECOVERY_MODE_PEIM_PPI AND
+ EFI_PEI_RECOVERY_MODULE_PPI_GUID
+DEPENDENCY_END
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2010, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Board/EM/Pfat/PfatRecovery/PfatRecovery.mak b/Board/EM/Pfat/PfatRecovery/PfatRecovery.mak
new file mode 100644
index 0000000..ebded82
--- /dev/null
+++ b/Board/EM/Pfat/PfatRecovery/PfatRecovery.mak
@@ -0,0 +1,113 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (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/IntelPfat/PfatRecovery/PfatRecovery.mak 1 4/05/13 5:36p Fredericko $
+#
+# $Revision: 1 $
+#
+# $Date: 4/05/13 5:36p $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatRecovery/PfatRecovery.mak $
+#
+# 1 4/05/13 5:36p Fredericko
+# [TAG] EIP119706
+# [Category] Improvement
+# [Description] Support Recovery in pfat module
+# [Files] PfatRecovery.cif
+# PfatRecovery.sdl
+# PfatRecovery.mak
+# PfatRecovery.dxs
+# PfatRecovery.c
+# PfatRecoveryHook.c
+#
+#
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: PfatRecovery.mak
+#
+# Description: Make file for PfatRecovery module part
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+all : PfatRecovery
+
+PFAT_RECOVERY_BUILD_DIR = $(BUILD_DIR)\$(PFAT_RECOVERY_PATH)
+#---------------------------------------------------------------------------
+# Create Fault Tolerant BootBlock Update dependencies
+#---------------------------------------------------------------------------
+$(BUILD_DIR)\PfatRecovery.mak : $(PFAT_RECOVERY_PATH)\$(@B).cif $(PFAT_RECOVERY_PATH)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(PFAT_RECOVERY_PATH)\$(@B).cif $(CIF2MAK_DEFAULTS)
+#---------------------------------------------------------------------------
+# Create Fault Tolerant BootBlock Update DXE Component
+#---------------------------------------------------------------------------
+PfatRecovery: $(BUILD_DIR)\PfatRecovery.mak PfatRecoveryBin
+
+PfatRecoveryIncludes =\
+/I$(PROJECT_CPU_ROOT)\Include
+
+PfatRecoveryObjs = \
+$(PFAT_RECOVERY_BUILD_DIR)\PfatRecovery.obj
+
+PfatRecoveryBin : $(AMIPEILIB)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\PfatRecovery.mak all\
+ OBJECTS="$(PfatRecoveryObjs)" \
+ NAME=PfatRecovery\
+ MAKEFILE=$(BUILD_DIR)\PfatRecovery.mak \
+ "CFLAGS=$(CFLAGS) $(PfatRecoveryIncludes)"\
+ GUID=c2bcc635-779e-46f0-9e1b-b83db1ca4690 \
+ ENTRY_POINT=PfatRecoveryEntry \
+ TYPE=PEIM \
+ DEPEX1=$(PFAT_RECOVERY_PATH)\PfatRecovery.DXS \
+ DEPEX1_TYPE=EFI_SECTION_PEI_DEPEX \
+ COMPRESS=1
+
+#---------------------------------------------------------------------------
+# Create Launch SCLEAN Pei Component
+#---------------------------------------------------------------------------
+PfatRecoveryHook : $(BUILD_DIR)\PfatRecovery.mak PfatRecoveryHookBin
+
+PfatRecoveryHookObjs = \
+$(PFAT_RECOVERY_BUILD_DIR)\PfatRecoveryHook.obj
+
+PfatRecoveryHookBin :
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\PfatRecovery.mak all\
+ OBJECTS="$(PfatRecoveryHookObjs)" \
+ NAME=PfatRecovery \
+ TYPE=PEI_LIBRARY LIBRARY_NAME=$(PfatRecoveryPeiLib)
+
+$(PfatRecoveryPeiLib) : PfatRecoveryHook
+
+RecoveryBin : $(PfatRecoveryPeiLib)
+FwCapsuleRecoveryPPIBin : $(PfatRecoveryPeiLib)
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (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/Pfat/PfatRecovery/PfatRecovery.sdl b/Board/EM/Pfat/PfatRecovery/PfatRecovery.sdl
new file mode 100644
index 0000000..a12b5e2
--- /dev/null
+++ b/Board/EM/Pfat/PfatRecovery/PfatRecovery.sdl
@@ -0,0 +1,169 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (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/IntelPfat/PfatRecovery/PfatRecovery.sdl 3 7/15/13 8:17p Fredericko $
+#
+# $Revision: 3 $
+#
+# $Date: 7/15/13 8:17p $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatRecovery/PfatRecovery.sdl $
+#
+# 3 7/15/13 8:17p Fredericko
+# EIP 124189: Secure Flash failure with Pfat
+#
+# 2 5/29/13 5:44p Fredericko
+# [TAG] EIP124189
+# [Description] [PFAT] Secure Flash is fail using
+# 4.6.5.1_INTEL_PFAT_2_6 or 2_7
+# [Files] PfatPubKeysAndBuildPsl.sdl
+# Pfatrecovery.sdl
+# PfatRecoveryHook.c
+# Recovery.mak
+#
+# 1 4/05/13 5:36p Fredericko
+# [TAG] EIP119706
+# [Category] Improvement
+# [Description] Support Recovery in pfat module
+# [Files] PfatRecovery.cif
+# PfatRecovery.sdl
+# PfatRecovery.mak
+# PfatRecovery.dxs
+# PfatRecovery.c
+# PfatRecoveryHook.c
+#
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: PfatSetup.sdl
+#
+# Description: SDL file for PfatSetup
+#
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+
+TOKEN
+ Name = "PFAT_RECOVERY_SUPPORT"
+ Value = "1"
+ Help = ""
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+ Token = "PfatServices_SUPPORT" "=" "1"
+End
+
+PATH
+ Name = "PFAT_RECOVERY_PATH"
+End
+
+MODULE
+ Help = "Includes PfatRecovery.mak to Project"
+ File = "PfatRecovery.mak"
+End
+
+TOKEN
+ Name = "MAX_DEVICE_RECOVERY_MODULE"
+ Value = "8"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PFAT_RECOVERY_FILE"
+ Value = "AMIPFAT.BIN"
+ TokenType = Expression
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PFAT_RECOVERY_IMAGE_SIZE"
+ Value = "0xFF4CE0"
+ TokenType = Integer
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "PFAT_RECOVERY_IMAGE_SIZE"
+ Value = "0x10050c5"
+ TokenType = Integer
+ TargetH = Yes
+ Token = "OEM_ACTIVATION_TABLE_LOCATION" "=" "1"
+End
+
+TOKEN
+ Name = "PfatRecoveryPeiLib"
+ Value = "$(BUILD_DIR)\PfatRecoveryPeiLib.lib"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+#-ELINK
+#- Name = "$(BUILD_DIR)\PfatRecoveryPeiLib.lib"
+#- Parent = "AMIPEILIB"
+#- InvokeOrder = AfterParent
+#-End
+
+ELINK
+ Name = "$(BUILD_DIR)\PfatRecovery.ffs"
+ Parent = "FV_BB"
+ InvokeOrder = AfterParent
+End
+
+TOKEN
+ Name = "FwCapsuleInfo_enable"
+ Value = "0"
+ TokenType = Boolean
+End
+
+TOKEN
+ Name = "FwCapsuleInfo_enable"
+ Value = "1"
+ TokenType = Boolean
+ Token = "SecureMod_SUPPORT" "=" "1"
+End
+
+ELINK
+ Name = "PfatRecoveryFileInfo"
+ Parent = "AmiGetRecoveryFileInfo"
+ InvokeOrder = ReplaceParent
+ Token = "FwCapsuleInfo_enable" "=" "0"
+End
+
+ELINK
+ Name = "PfatImageInfo"
+ Parent = "FwCapsuleInfo"
+ InvokeOrder = ReplaceParent
+ Token = "FwCapsuleInfo_enable" "=" "1"
+End
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (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/Pfat/PfatRecovery/PfatRecoveryHook.c b/Board/EM/Pfat/PfatRecovery/PfatRecoveryHook.c
new file mode 100644
index 0000000..e0a0bbe
--- /dev/null
+++ b/Board/EM/Pfat/PfatRecovery/PfatRecoveryHook.c
@@ -0,0 +1,187 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/IntelPfat/PfatRecovery/PfatRecoveryHook.c 2 5/29/13 5:45p Fredericko $
+//
+// $Revision: 2 $
+//
+// $Date: 5/29/13 5:45p $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatRecovery/PfatRecoveryHook.c $
+//
+// 2 5/29/13 5:45p Fredericko
+// [TAG] EIP124189
+// [Description] [PFAT] Secure Flash is fail using
+// 4.6.5.1_INTEL_PFAT_2_6 or 2_7
+// [Files] PfatPubKeysAndBuildPsl.sdl
+// Pfatrecovery.sdl
+// PfatRecoveryHook.c
+// Recovery.mak
+//
+// 1 4/05/13 5:37p Fredericko
+// [TAG] EIP119706
+// [Category] Improvement
+// [Description] Support Recovery in pfat module
+// [Files] PfatRecovery.cif
+// PfatRecovery.sdl
+// PfatRecovery.mak
+// PfatRecovery.dxs
+// PfatRecovery.c
+// PfatRecoveryHook.c
+//
+//
+//**********************************************************************
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------
+//
+// Name:
+//
+// Description:
+//
+//----------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+//----------------------------------------------------------------------------
+// Includes
+#include <AmiPeiLib.h>
+#include <token.h>
+#include <Setup.h>
+#include <ppi\ReadOnlyVariable.h>
+
+// Statements that include other files
+
+//----------------------------------------------------------------------------
+// Function Externs
+
+//----------------------------------------------------------------------------
+// Local prototypes
+#if defined(SecFlashUpd_SUPPORT) && SecFlashUpd_SUPPORT == 1
+EFI_STATUS
+FwCapsuleInfo (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT VOID **pCapsuleName,
+ IN OUT UINTN *pCapsuleSize,
+ OUT BOOLEAN *ExtendedVerification
+);
+#else
+AmiGetRecoveryFileInfo (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT VOID **pCapsuleName,
+ IN OUT UINTN *pCapsuleSize,
+ OUT BOOLEAN *ExtendedVerification
+);
+#endif
+
+//----------------------------------------------------------------------------
+
+//----------------------------------------------------------------------------
+// Local Variables
+const char *RecoveryPfatFileName = CONVERT_TO_STRING(PFAT_RECOVERY_FILE);
+const UINTN RecoveryPfatImageSize = PFAT_RECOVERY_IMAGE_SIZE; // 8k should be enough to cover Sec Capsule Hdr overhead
+
+//----------------------------------------------------------------------------
+// Function Definitions
+
+//----------------------------------------------------------------------------
+// Local Variables
+
+//----------------------------------------------------------------------------
+// Function Definitions
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------
+//
+// Procedure: PfatImageInfo
+//
+// Description:
+//
+// Input: EFI_PEI_SERVICES** PeiServices
+// VOID** pPfatImageName
+// UINTN* pPfatImageSize
+// BOOLEAN* ExtendedVerification
+//
+// Output: EFI_STATUS
+//
+//----------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+PfatImageInfo (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT VOID **pPfatImageName,
+ IN OUT UINTN *pPfatImageSize,
+ OUT BOOLEAN *ExtendedVerification
+){
+ EFI_GUID gEfiPeiReadOnlyVariablePpiGuid = EFI_PEI_READ_ONLY_VARIABLE_PPI_GUID;
+ EFI_PEI_READ_ONLY_VARIABLE_PPI *ReadOnlyVar = NULL;
+ EFI_GUID SetupGuid = SETUP_GUID;
+ UINTN VariableSize= sizeof (SETUP_DATA);
+ SETUP_DATA SetupData;
+ EFI_STATUS Status;
+
+ Status = (*PeiServices)->LocatePpi ( PeiServices, \
+ &gEfiPeiReadOnlyVariablePpiGuid, \
+ 0, \
+ NULL, \
+ &ReadOnlyVar );
+ if ( !EFI_ERROR(Status) ) {
+ Status = ReadOnlyVar->GetVariable (
+ PeiServices,
+ L"Setup",
+ &SetupGuid,
+ NULL,
+ &VariableSize,
+ &SetupData
+ );
+ if ( EFI_ERROR( Status ) ) {
+ return Status;
+ }
+ } else {
+ return Status;
+ }
+
+ if ( SetupData.Pfatstate == 0 ) {
+#if defined(SecFlashUpd_SUPPORT) && SecFlashUpd_SUPPORT == 1
+ Status = FwCapsuleInfo(PeiServices, pPfatImageName, pPfatImageSize, ExtendedVerification);
+#else
+ Status = AmiGetRecoveryFileInfo(PeiServices, pPfatImageName, pPfatImageSize, ExtendedVerification);
+#endif
+ return Status;
+ } else {
+ if(!pPfatImageName && !pPfatImageSize && !ExtendedVerification )
+ return EFI_UNSUPPORTED;
+
+ if(ExtendedVerification != NULL)
+ *ExtendedVerification = FALSE;
+
+ *pPfatImageSize = RecoveryPfatImageSize;
+ *pPfatImageName = (VOID*)RecoveryPfatFileName;
+ }
+ 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/Pfat/PfatSetup/PfatSetup.cif b/Board/EM/Pfat/PfatSetup/PfatSetup.cif
new file mode 100644
index 0000000..4f8c466
--- /dev/null
+++ b/Board/EM/Pfat/PfatSetup/PfatSetup.cif
@@ -0,0 +1,11 @@
+<component>
+ name = "PfatSetup"
+ category = ModulePart
+ LocalRoot = "Board\EM\Pfat\PfatSetup"
+ RefName = "PfatSetup"
+[files]
+"PfatSetup.sd"
+"PfatSetup.uni"
+"PfatSetup.sdl"
+"PfatSetup.mak"
+<endComponent>
diff --git a/Board/EM/Pfat/PfatSetup/PfatSetup.mak b/Board/EM/Pfat/PfatSetup/PfatSetup.mak
new file mode 100644
index 0000000..a1936f1
--- /dev/null
+++ b/Board/EM/Pfat/PfatSetup/PfatSetup.mak
@@ -0,0 +1,69 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (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/IntelPfat/PfatSetup/PfatSetup.mak 1 9/17/12 4:49p Fredericko $
+#
+# $Revision: 1 $
+#
+# $Date: 9/17/12 4:49p $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatSetup/PfatSetup.mak $
+#
+# 1 9/17/12 4:49p Fredericko
+# Added PfatSetup Module-part
+#
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: PfatSetup.mak
+#
+# Description: Make file for PfatSetup module part
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+all : PfatSetupSDB
+
+#---------------------------------------------------------------------------
+# Generic AcpiPlatform dependencies
+#---------------------------------------------------------------------------
+$(BUILD_DIR)\PfatSetup.mak : $(PFAT_SETUP_PATH)\PfatSetup.cif $(BUILD_RULES)
+ $(CIF2MAK) $(PFAT_SETUP_PATH)\PfatSetup.cif $(CIF2MAK_DEFAULTS)
+
+#---------------------------------------------------------------------------
+# Create PfatSetup Setup Screens
+#---------------------------------------------------------------------------
+SetupSdbs : $(BUILD_DIR)\PfatSetup.mak PfatSetupSDB
+
+PfatSetupSDB :
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\PfatSetup.mak all \
+ TYPE=SDB NAME=PfatSetup STRING_CONSUMERS=$(PFAT_SETUP_PATH)\PfatSetup.sd
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (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/Pfat/PfatSetup/PfatSetup.sd b/Board/EM/Pfat/PfatSetup/PfatSetup.sd
new file mode 100644
index 0000000..a610378
--- /dev/null
+++ b/Board/EM/Pfat/PfatSetup/PfatSetup.sd
@@ -0,0 +1,119 @@
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (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/IntelPfat/PfatSetup/PfatSetup.sd 1 9/17/12 4:49p Fredericko $
+//
+// $Revision: 1 $
+//
+// $Date: 9/17/12 4:49p $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatSetup/PfatSetup.sd $
+//
+// 1 9/17/12 4:49p Fredericko
+// Added PfatSetup Module-part
+//
+//
+//**********************************************************************
+//<AMI_FHDR_START>
+//
+// Name: PfatSetup.sd
+//
+// Description: Create the setup item for PFAT.
+//
+//<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.
+//---------------------------------------------------------------------------
+ UINT8 Pfatstate;
+#endif
+
+#if defined(VFRCOMPILE) && !defined(CONTROLS_ARE_DEFINED)
+#define CONTROL_DEFINITION
+#endif
+//---------------------------------------------------------------------------
+
+//---------------------------------------------------------------------------
+#ifdef CONTROL_DEFINITION
+
+#define PFAT_ONEOF_STATEENABLE\
+ oneof varid = SETUP_DATA.Pfatstate,\
+ prompt = STRING_TOKEN(STR_PFAT_CONFIGURATION_PROMPT),\
+ help = STRING_TOKEN(STR_PFAT_CONFIGURATION_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 // CONTROL_DEFINITION
+
+#ifdef CONTROLS_WITH_DEFAULTS
+ PFAT_ONEOF_STATEENABLE
+#endif // CONTROLS_WITH_DEFAULTS
+
+//---------------------------------------------------------------------------
+// ADVANCED - CRB Configuration Form
+//---------------------------------------------------------------------------
+#ifdef ADVANCED_FORM_SET
+
+ #ifndef SUPPRESS_GRAYOUT_ENDIF //old Core
+ #define SUPPRESS_GRAYOUT_ENDIF endif;
+ #endif
+
+ #ifdef FORM_SET_GOTO
+ // Define goto commands for the forms defined in this file
+ goto PFAT_CONFIGURATION_FORM_ID,
+ prompt = STRING_TOKEN(STR_PFAT_CONFIGURATION_FORM),
+ help = STRING_TOKEN(STR_PFAT_CONFIGURATION_HELP);
+ #endif
+
+ #ifdef FORM_SET_FORM
+ // Define forms
+ #ifndef PFAT_CONFIGURATION_FORM_SETUP
+ #define PFAT_CONFIGURATION_FORM_SETUP
+
+ form formid = AUTO_ID(PFAT_CONFIGURATION_FORM_ID),
+ title = STRING_TOKEN(STR_PFAT_CONFIGURATION_FORM);
+
+ grayoutif ideqval SYSTEM_ACCESS.Access == SYSTEM_PASSWORD_USER;
+ PFAT_ONEOF_STATEENABLE
+ endif;
+
+ endform; // PFAT_FORM_ID
+
+ #endif // PFAT_CONFIGURATION_FORM_SETUP
+ #endif // FORM_SET_FORM
+
+#endif // ADVANCED_FORM_SET
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/Pfat/PfatSetup/PfatSetup.sdl b/Board/EM/Pfat/PfatSetup/PfatSetup.sdl
new file mode 100644
index 0000000..7c42e9a
--- /dev/null
+++ b/Board/EM/Pfat/PfatSetup/PfatSetup.sdl
@@ -0,0 +1,85 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (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/IntelPfat/PfatSetup/PfatSetup.sdl 1 9/17/12 4:49p Fredericko $
+#
+# $Revision: 1 $
+#
+# $Date: 9/17/12 4:49p $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelPfat/PfatSetup/PfatSetup.sdl $
+#
+# 1 9/17/12 4:49p Fredericko
+# Added PfatSetup Module-part
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: PfatSetup.sdl
+#
+# Description: SDL file for PfatSetup
+#
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+
+TOKEN
+ Name = "PFAT_SETUP_SUPPORT"
+ Value = "1"
+ Help = "Always On Always Connected"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+End
+
+PATH
+ Name = "PFAT_SETUP_PATH"
+End
+
+MODULE
+ Help = "Includes PfatSetup.mak to Project"
+ File = "PfatSetup.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\PfatSetup.sdb"
+ Parent = "SETUP_SDBS"
+ Priority = 40
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(PFAT_SETUP_PATH)\PfatSetup.sd"
+ Parent = "SETUP_DEFINITIONS"
+ Priority = 40
+ InvokeOrder = AfterParent
+End
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (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/Pfat/PfatSetup/PfatSetup.uni b/Board/EM/Pfat/PfatSetup/PfatSetup.uni
new file mode 100644
index 0000000..f325289
--- /dev/null
+++ b/Board/EM/Pfat/PfatSetup/PfatSetup.uni
Binary files differ