summaryrefslogtreecommitdiff
path: root/Board/EM/Pfat/PfatCpuPolicyOverride
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/PfatCpuPolicyOverride
downloadzprj-b7c51c9cf4864df6aabb99a1ae843becd577237c.tar.xz
init. 1AQQW051HEADmaster
Diffstat (limited to 'Board/EM/Pfat/PfatCpuPolicyOverride')
-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
8 files changed, 803 insertions, 0 deletions
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 **
+#** **
+#**********************************************************************
+#**********************************************************************