summaryrefslogtreecommitdiff
path: root/Board/EM/MeWrapper/TdtWrapper
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/MeWrapper/TdtWrapper
downloadzprj-b7c51c9cf4864df6aabb99a1ae843becd577237c.tar.xz
init. 1AQQW051HEADmaster
Diffstat (limited to 'Board/EM/MeWrapper/TdtWrapper')
-rw-r--r--Board/EM/MeWrapper/TdtWrapper/TDTSetup.sd161
-rw-r--r--Board/EM/MeWrapper/TdtWrapper/TDTSetup.unibin0 -> 8966 bytes
-rw-r--r--Board/EM/MeWrapper/TdtWrapper/TDTWrapper.c521
-rw-r--r--Board/EM/MeWrapper/TdtWrapper/TDTWrapper.cif15
-rw-r--r--Board/EM/MeWrapper/TdtWrapper/TDTWrapper.dxs93
-rw-r--r--Board/EM/MeWrapper/TdtWrapper/TDTWrapper.mak158
-rw-r--r--Board/EM/MeWrapper/TdtWrapper/TDTWrapper.sdl98
-rw-r--r--Board/EM/MeWrapper/TdtWrapper/TdtCallback.h69
-rw-r--r--Board/EM/MeWrapper/TdtWrapper/TdtOfbd.c296
9 files changed, 1411 insertions, 0 deletions
diff --git a/Board/EM/MeWrapper/TdtWrapper/TDTSetup.sd b/Board/EM/MeWrapper/TdtWrapper/TDTSetup.sd
new file mode 100644
index 0000000..2f7d21f
--- /dev/null
+++ b/Board/EM/MeWrapper/TdtWrapper/TDTSetup.sd
@@ -0,0 +1,161 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/ME/MeWrapper/TdtWrapper/TDTSetup.sd 4 9/27/12 4:56a Klzhan $
+//
+// $Revision: 4 $
+//
+// $Date: 9/27/12 4:56a $
+//
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/ME/MeWrapper/TdtWrapper/TDTSetup.sd $
+//
+// 4 9/27/12 4:56a Klzhan
+// [TAG] EIP102254
+// [Category] Spec Update
+// [Severity] Important
+// [Description] Update ME RC 0.7
+// [Files] TDTWrapper.dxs
+// TDTWrapper.c
+// TDTWrapper.mak
+// TDTWrapper.sdl
+// TDTSetup.sd
+// TDTSetup.uni
+// TdtCallback.h
+// TDTWrapper.cif
+//
+// 3 9/19/12 6:31a Klzhan
+// Set AT to default enabled.
+//
+// 2 4/24/12 12:33a Klzhan
+// Update modulepart to latest
+//
+// 1 2/08/12 1:07a Klzhan
+// Initial Check in
+//
+// 2 4/20/11 10:51p Klzhan
+// Improvement : Gray out Suspend item when system is not enroll.
+//
+// 1 2/25/11 1:40a Klzhan
+// Initial Check-in
+//
+// 1 12/03/10 5:09a Klzhan
+// Initial Check-in.
+//
+//
+//**********************************************************************
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: TdtSetup.sd
+//
+// Description: Setup menu for Tdt.
+//
+//----------------------------------------------------------------------------
+//<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 Tdt;
+ UINT8 TdtConfig;
+ UINT8 TdtEnterSuspendState;
+
+#endif
+
+#ifdef ADVANCED_FORM_SET
+ #ifdef FORM_SET_ITEM
+ // Define controls to be added to the main page of the formset
+
+ #endif
+
+#ifdef FORM_SET_TYPEDEF
+
+#include "TdtCallback.h"
+
+#endif
+
+#ifdef FORM_SET_VARSTORE
+ varstore TDT_VOLATILE_SETUP_DATA,
+ key = AUTO_ID(TDT_VOLATILE_SETUP_DATA_VAR),
+ name = TdtAdvancedSetupDataVar,
+ guid = TDT_VOLATILE_SETUP_DATA_GUID;
+
+#endif
+
+ #ifdef FORM_SET_GOTO
+ // Define goto commands for the forms defined in this file
+ goto TDT_FORM_ID,
+
+ prompt = STRING_TOKEN(STR_TDT_FORM),
+ help = STRING_TOKEN(STR_TDT_FORM_HELP);
+ #endif
+
+ #ifdef FORM_SET_FORM
+ // Define forms
+ #ifndef TDT_FORM_SETUP
+ #define TDT_FORM_SETUP
+
+ form formid = AUTO_ID(TDT_FORM_ID),
+ title = STRING_TOKEN(STR_TDT_FORM_TITLE);
+
+ SEPARATOR
+ SUBTITLE(STRING_TOKEN(STR_ITDT_SUBTITLE))
+ SEPARATOR
+
+ grayoutif ideqval TDT_VOLATILE_SETUP_DATA.TdtEnroll == 1 OR ideqval SYSTEM_ACCESS.Access == SYSTEM_PASSWORD_USER;
+ oneof varid = SETUP_DATA.TdtConfig,
+ prompt = STRING_TOKEN(STR_TDT_CONFIG_PROMPT),
+ help = STRING_TOKEN(STR_TDT_CONFIG_HELP),
+ option text = STRING_TOKEN(STR_TDT_DISABLED), value = 0, flags = RESET_REQUIRED, key = 0;
+ option text = STRING_TOKEN(STR_TDT_ENABLED), value = 1, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;
+ endoneof;
+ endif;
+
+ grayoutif ideqval TDT_VOLATILE_SETUP_DATA.TdtEnroll == 0 OR ideqval SYSTEM_ACCESS.Access == SYSTEM_PASSWORD_USER;
+ oneof varid = SETUP_DATA.TdtEnterSuspendState,
+ prompt = STRING_TOKEN(STR_TDT_SUSPEND_PROMPT),
+ help = STRING_TOKEN(STR_TDT_SUSPEND_HELP),
+ option text = STRING_TOKEN(STR_TDT_DISABLED), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;
+ option text = STRING_TOKEN(STR_TDT_ENABLED), value = 1, flags = RESET_REQUIRED, key = 0;
+ endoneof;
+ endif;
+
+ endform;
+ #endif // TDT_FORM_SETUP
+ #endif //End FORM_SET_FORM
+
+#endif //End ADVANCED_FORM_SET
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/MeWrapper/TdtWrapper/TDTSetup.uni b/Board/EM/MeWrapper/TdtWrapper/TDTSetup.uni
new file mode 100644
index 0000000..89c89b3
--- /dev/null
+++ b/Board/EM/MeWrapper/TdtWrapper/TDTSetup.uni
Binary files differ
diff --git a/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.c b/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.c
new file mode 100644
index 0000000..5485043
--- /dev/null
+++ b/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.c
@@ -0,0 +1,521 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/ME/MeWrapper/TdtWrapper/TDTWrapper.c 12 6/18/14 3:04a Larryliu $
+//
+// $Revision: 12 $
+//
+// $Date: 6/18/14 3:04a $
+//
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/ME/MeWrapper/TdtWrapper/TDTWrapper.c $
+//
+// 12 6/18/14 3:04a Larryliu
+// [TAG] EIP173999
+// [Category] Improvement
+// [Description] [HWR]Remove useless comments from Intel ME
+// component.(except RC)
+// [Files] TDTWrapper.c
+//
+// 10 5/14/14 10:04p Tristinchou
+// [TAG] EIP167030
+// [Category] Improvement
+// [Description] Remove the variable runtime attribute and keep original
+// attributes.
+//
+// 9 12/17/13 9:50p Tristinchou
+// [TAG] EIP146961
+// [Category] Bug Fix
+// [Severity] Normal
+// [Symptom] After Initiated Resume, "Enter Intel AT Suspend Mode"
+// option is still enable in Bios setup menu
+// [RootCause] The conditional expression is never true to clean steup
+// item.
+// [Solution] Use MBP data to check AT status.
+//
+// 8 6/21/13 3:08a Klzhan
+// [TAG] EIP127189
+// [Category] Spec Update
+// [Severity] Important
+// [Description] Update ME RC 1.60
+//
+// 7 6/02/13 9:13a Klzhan
+// [TAG] EIPNone
+// [Category] Improvement
+// [Description] Report PBA not support when AT is disabled.
+//
+// 6 4/02/13 1:51a Klzhan
+// [TAG] EIPNone
+// [Category] Bug Fix
+// [Severity] Critical
+// [Symptom] Setup Variable crash
+// [RootCause] Variable not been initialized.
+//
+// 5 9/27/12 4:56a Klzhan
+// [TAG] EIP102254
+// [Category] Spec Update
+// [Severity] Important
+// [Description] Update ME RC 0.7
+// [Files] TDTWrapper.dxs
+// TDTWrapper.c
+// TDTWrapper.mak
+// TDTWrapper.sdl
+// TDTSetup.sd
+// TDTSetup.uni
+// TdtCallback.h
+// TDTWrapper.cif
+//
+// 4 8/30/12 2:57a Klzhan
+//
+// 3 4/24/12 3:33a Klzhan
+//
+// 2 4/24/12 12:33a Klzhan
+// Update modulepart to latest
+//
+// 1 2/08/12 1:07a Klzhan
+// Initial Check in
+//
+// 3 9/20/11 9:40a Klzhan
+// Check TdtConfig by Wrapper not SetupData.
+//
+// 2 4/21/11 2:58a Klzhan
+//
+// 1 2/25/11 1:40a Klzhan
+// Initial Check-in
+//
+// 1 12/03/10 5:09a Klzhan
+// Initial Check-in.
+//
+//
+//**********************************************************************
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: TdtSetup.c
+//
+// Description: Setup Hooks for Tdt.
+//
+//----------------------------------------------------------------------------
+//<AMI_FHDR_END>
+/*++
+
+Copyright (c) 2004-2006 Intel Corporation. All rights reserved
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+Module Name:
+
+ TDTPlatformPolicy.c
+
+Abstract:
+
+ TDTPlatformPolicy to check and set TDT Platform Policy.
+
+--*/
+/*++
+ This file contains an 'Intel Peripheral Driver' and is
+ licensed for Intel CPUs and chipsets under the terms of your
+ license agreement with Intel or your vendor. This file may
+ be modified by the user, subject to additional terms of the
+ license agreement
+--*/
+
+
+//This needs to be merged with AMT Platform Policy.
+
+//
+// Statements that include other files
+//
+//#include "Efi.h"
+
+
+#include <EFI.h>
+#include <AmiDxeLib.h>
+#include <Protocol\SMBios.h>
+#include <Include\Protocol\SmbiosGetFlashDataProtocol.h>
+#if (defined(CSM_SUPPORT) && (CSM_SUPPORT != 0))
+#include <Include\Protocol\LegacyRegion.h>
+#endif
+#include "Setup.h"
+#include "ReferenceCode\ME\Protocol\AtPlatformPolicy\AtPlatformPolicy.h"
+#include "MkhiMsgs.h"
+#include "Protocol\MeBiosPayloadData\MeBiosPayloadData.h"
+#include "TdtCallback.h"
+#define BDS_ALL_DRIVERS_CONNECTED_PROTOCOL_GUID \
+ { 0xdbc9fd21, 0xfad8, 0x45b0, 0x9e, 0x78, 0x27, 0x15, 0x88, 0x67, 0xcc, 0x93 }
+
+#define ME_ALERT_AT_HANDLER_GUID {0xb441df87, 0x8d94, 0x4811, 0x85, 0xf7, 0xf, 0x9a, 0x7b, 0xf8, 0x9d, 0x2a}
+
+#define SMB131_IDENTIFIER_OFFSET 0x38
+#define SMB131_ME_CAPS_OFFSET 0x18
+#define SMB131_AT_ENROLL_OFFSET 0x24
+#define SMB131_BIOS_SEC_CAPS_OFFSET 0x34
+
+EFI_GUID gSetupGuid = SETUP_GUID;
+EFI_GUID gDxePlatformTdtPolicyGuid = DXE_PLATFORM_AT_POLICY_GUID;
+EFI_GUID gEfiSmbiosProtocolGuid = EFI_SMBIOS_PROTOCOL_GUID;
+#if (defined(CSM_SUPPORT) && (CSM_SUPPORT != 0))
+EFI_GUID gEfiLegacyRegionProtocol = EFI_LEGACY_REGION_PROTOCOL_GUID;
+#endif
+EFI_GUID gBdsAllDriversConnectedProtocolGuid = \
+ BDS_ALL_DRIVERS_CONNECTED_PROTOCOL_GUID;
+EFI_GUID gMEAlertATHandlerGuid = ME_ALERT_AT_HANDLER_GUID;
+EFI_EVENT mReady2BootEvent;
+EFI_RUNTIME_SERVICES *gRT;
+EFI_BOOT_SERVICES *gBS;
+
+DXE_AT_POLICY_PROTOCOL *TDTPlatformPolicyInstance;
+
+#define EFI_TPL_DRIVER 6
+#define EFI_TPL_APPLICATION 4
+#define EFI_TPL_CALLBACK 8
+#define EFI_TPL_NOTIFY 16
+#define EFI_TPL_HIGH_LEVEL 31
+
+VOID
+EFIAPI
+TDTEventModSmbiosType131 (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+);
+
+DXE_MBP_DATA_PROTOCOL *mBIOSPayLoad;
+VOID NullFunction(
+ EFI_EVENT Event,
+ VOID *ParentImageHandle
+)
+{
+ return;
+}
+
+//
+// Function implementations
+//
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: TxtExitSetupEvent
+//
+// Description: This routine for reset the TPM Establishment flag.
+//
+// Input: EFI_EVENT - Efi event.
+// VOID* - Image handle.
+//
+// Output: None.
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+TdtAllDriverConnectEvent (
+ IN EFI_EVENT Event,
+ IN VOID *ParentImageHandle
+)
+{
+ EFI_STATUS Status;
+ EFI_EVENT MEAlertAT;
+ UINT32 SetupVarAttr;
+ EFI_GUID TdtSetupDataGuid = TDT_VOLATILE_SETUP_DATA_GUID;
+ TDT_VOLATILE_SETUP_DATA TdtSetupData;
+ SETUP_DATA SetupData;
+ UINTN VariableSize = sizeof(SETUP_DATA);
+
+ // Get current Setup Data.
+ Status = gRT->GetVariable( L"Setup",
+ &gSetupGuid,
+ &SetupVarAttr,
+ &VariableSize,
+ &SetupData );
+ if( !EFI_ERROR(Status) )
+ {
+ if( (mBIOSPayLoad->MeBiosPayload.AtState.State == AT_STATE_INACTIVE) &&
+ (SetupData.TdtEnterSuspendState != 0) )
+ {
+ SetupData.TdtEnterSuspendState = 0;
+ Status = gRT->SetVariable ( L"Setup",
+ &gSetupGuid,
+ SetupVarAttr,
+ VariableSize,
+ &SetupData );
+ }
+ }
+
+ TdtSetupData.TdtEnroll = 0;
+ if (mBIOSPayLoad->MeBiosPayload.AtState.State != 0) TdtSetupData.TdtEnroll = 1;
+ Status = gRT->SetVariable ( TDT_VOLATILE_SETUP_DATA_C_NAME, \
+ &TdtSetupDataGuid, \
+ EFI_VARIABLE_NON_VOLATILE | \
+ EFI_VARIABLE_BOOTSERVICE_ACCESS, \
+ sizeof(TDT_VOLATILE_SETUP_DATA), \
+ &TdtSetupData );
+ // Signal Event To support New AT AM module.
+ Status = gBS->CreateEventEx(
+ EFI_EVENT_NOTIFY_SIGNAL,
+ EFI_TPL_NOTIFY,
+ NullFunction,
+ NULL,
+ &gMEAlertATHandlerGuid,
+ &MEAlertAT);
+ gBS->SignalEvent(MEAlertAT);
+ gBS->CloseEvent(MEAlertAT);
+ return EFI_SUCCESS;
+}
+VOID LocateMBP(IN EFI_EVENT Event, IN VOID *Context)
+{
+ pBS->LocateProtocol (&gMeBiosPayloadDataProtocolGuid, NULL, &mBIOSPayLoad);
+}
+EFI_STATUS
+EFIAPI
+TdtWrapperEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+/*++
+
+Routine Description:
+
+ Entry point for the TDTPlatformPolicy Driver.
+
+Arguments:
+
+ ImageHandle Image handle of this driver.
+ SystemTable Global system service table.
+
+Returns:
+
+ EFI_SUCCESS Initialization complete.
+ EFI_UNSUPPORTED The chipset is unsupported by this driver.
+ EFI_OUT_OF_RESOURCES Do not have enough resources to initialize the driver.
+ EFI_DEVICE_ERROR Device error, driver exits abnormally.
+
+--*/
+{
+ EFI_STATUS Status;
+ EFI_GUID gSetupGuid = SETUP_GUID;
+ UINT32 SetupVarAttr;
+ UINTN VariableSize = 0;
+ SETUP_DATA SetupDataBuffer;
+ SETUP_DATA* SetupData = &SetupDataBuffer;
+ EFI_EVENT AllDriverConnectEvent;
+ VOID *Registration;
+ EFI_GUID TdtSetupDataGuid = TDT_VOLATILE_SETUP_DATA_GUID;
+ TDT_VOLATILE_SETUP_DATA TdtSetupData;
+ //
+ // Initialize the EFI Driver Library
+ //
+
+ VariableSize = sizeof (SETUP_DATA);
+ InitAmiLib(ImageHandle, SystemTable);
+ gBS = SystemTable->BootServices;
+ gRT = SystemTable->RuntimeServices;
+
+ Status = gBS->LocateProtocol(&gMeBiosPayloadDataProtocolGuid, NULL, &mBIOSPayLoad);
+ if (EFI_ERROR (Status))
+ {
+ EFI_EVENT AmiCpuInfoEvt;
+ VOID *CpuNotifyReg;
+
+ Status = RegisterProtocolCallback(
+ &gMeBiosPayloadDataProtocolGuid,
+ LocateMBP,
+ NULL,
+ &AmiCpuInfoEvt,
+ &CpuNotifyReg
+ );
+ }
+ //
+ // Allocate Ide private data structure
+ //
+ Status = gBS->AllocatePool (
+ EfiBootServicesData,
+ sizeof (DXE_AT_POLICY_PROTOCOL),
+ (VOID**)&TDTPlatformPolicyInstance
+ );
+ if (EFI_ERROR(Status))
+ return EFI_OUT_OF_RESOURCES;
+
+ //
+ // Get TDT BIOS Setup
+ //
+ Status = gRT->GetVariable (
+ L"Setup",
+ &gSetupGuid,
+ &SetupVarAttr,
+ &VariableSize,
+ &SetupDataBuffer
+ );
+ VariableSize = sizeof(TDT_VOLATILE_SETUP_DATA);
+ Status = gRT->GetVariable ( TDT_VOLATILE_SETUP_DATA_C_NAME, \
+ &TdtSetupDataGuid, \
+ NULL, \
+ &VariableSize, \
+ &TdtSetupData );
+ // If Tdt is in Enroll state, Set Tdt config to Enable.
+ if((!EFI_ERROR(Status)) && (TdtSetupData.TdtEnroll == 1))
+ {
+ SetupData->TdtConfig = 1;
+ Status = gRT->SetVariable ( L"Setup", \
+ &gSetupGuid, \
+ SetupVarAttr, \
+ sizeof(SETUP_DATA), \
+ &SetupDataBuffer );
+ }
+ if (EFI_ERROR(Status)){
+ TDTPlatformPolicyInstance->At.AtAmBypass = 1;
+ TDTPlatformPolicyInstance->At.AtEnterSuspendState = 0;
+ TDTPlatformPolicyInstance->At.AtSupported = 1;
+ TDTPlatformPolicyInstance->At.AtPba = 1;
+ } else {
+ TDTPlatformPolicyInstance->At.AtAmBypass = SetupData->TdtConfig == 1 ? 0 : 1;
+ TDTPlatformPolicyInstance->At.AtEnterSuspendState = SetupData->TdtEnterSuspendState;
+ TDTPlatformPolicyInstance->At.AtSupported = 1;
+ TDTPlatformPolicyInstance->At.AtPba = 1;
+ }
+ TDTPlatformPolicyInstance->Revision = DXE_PLATFORM_AT_POLICY_PROTOCOL_REVISION_2;
+
+ //
+ // Install the TDT Platform Policy PROTOCOL interface
+ //
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &ImageHandle,
+ &gDxePlatformTdtPolicyGuid, TDTPlatformPolicyInstance,
+ NULL
+ );
+ // If TDT support is disabled in BIOS SETUP, clear the AT support flag of
+ // SMBIOS TYPE131 to avoid that system can be enrolled.
+ Status = RegisterProtocolCallback ( &gBdsAllDriversConnectedProtocolGuid, \
+ TdtAllDriverConnectEvent, \
+ NULL, \
+ &AllDriverConnectEvent, \
+ &Registration );
+
+ // If TDT support is disabled in BIOS SETUP, clear the AT support flag of
+ // SMBIOS TYPE131 to avoid that system can be enrolled.
+ Status = CreateReadyToBootEvent ( TPL_CALLBACK - 1, \
+ TDTEventModSmbiosType131, \
+ NULL, \
+ &mReady2BootEvent );
+
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: TDTEventModSmbiosType131
+//
+// Description: This routine clear the AT support flag of Type 131.
+//
+// Input:
+// IN EFI_EVENT Event - signalled event
+// IN VOID *Context - event context
+//
+// Output: None
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+EFIAPI
+TDTEventModSmbiosType131 (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+)
+{
+ EFI_STATUS Status;
+ EFI_SMBIOS_PROTOCOL *mSmbiosProtocol;
+ SMBIOS_TABLE_ENTRY_POINT *SmbTblEntry;
+#if (defined(CSM_SUPPORT) && (CSM_SUPPORT != 0))
+ EFI_LEGACY_REGION_PROTOCOL* iRegion;
+#endif
+ UINT16 i, MeCaps, AtEnroll, BiosSecurityCaps;
+ UINT8* pStrucPtr;
+ UINTN VariableSize = sizeof(TDT_VOLATILE_SETUP_DATA);
+ EFI_GUID TdtSetupDataGuid = TDT_VOLATILE_SETUP_DATA_GUID;
+ TDT_VOLATILE_SETUP_DATA TdtSetupData;
+
+ Status = gBS->LocateProtocol ( &gEfiSmbiosProtocolGuid, \
+ NULL, \
+ &mSmbiosProtocol );
+ if (EFI_ERROR(Status)) return ;
+
+ Status = gRT->GetVariable ( TDT_VOLATILE_SETUP_DATA_C_NAME, \
+ &TdtSetupDataGuid, \
+ NULL, \
+ &VariableSize, \
+ &TdtSetupData );
+ if (EFI_ERROR(Status)) return ;
+
+ // Get SMBIOS Table Entry Point.
+ SmbTblEntry = mSmbiosProtocol->SmbiosGetTableEntryPoint ();
+
+ // Search SMBIOS Type 131.
+ for ( pStrucPtr = (UINT8*)SmbTblEntry->TableAddress, i = 0; \
+ i < SmbTblEntry->TableLength; i++ ) {
+ // search SMBIOS Type 131 structure identifier - vPro
+ if ( *(UINT32*)(pStrucPtr + i) != 0x6f725076 ) continue;
+ // Pointer to ME Capabilities field.
+ MeCaps = i - (SMB131_IDENTIFIER_OFFSET - SMB131_ME_CAPS_OFFSET);
+ AtEnroll = i - (SMB131_IDENTIFIER_OFFSET - SMB131_AT_ENROLL_OFFSET);
+ BiosSecurityCaps = i - (SMB131_IDENTIFIER_OFFSET - SMB131_BIOS_SEC_CAPS_OFFSET);
+ if (*(UINT32*)(pStrucPtr + MeCaps) & BIT13) {
+#if (defined(CSM_SUPPORT) && (CSM_SUPPORT != 0))
+ Status = pBS->LocateProtocol ( &gEfiLegacyRegionProtocol, \
+ NULL, \
+ &iRegion );
+ if (EFI_ERROR(Status)) return ;
+ // Unlock Shadow ram.
+ iRegion->UnLock ( iRegion, 0xE0000, 0x20000, NULL );
+#endif
+ // AT-P is disabled in SETUP, clear the AT-p support flag to avoid
+ // that system can be enrolled.
+ if (TDTPlatformPolicyInstance->At.AtAmBypass == 1)
+ {
+ *(UINT32*)(pStrucPtr + MeCaps) &= ~BIT13;
+ *(UINT32*)(pStrucPtr + BiosSecurityCaps) &= ~BIT6;
+ }
+ // Set AT is configured if AT is enrolled.
+ if (TdtSetupData.TdtEnroll != 0)
+ *(UINT8*)(pStrucPtr + AtEnroll) |= BIT5;
+ // Lock Shadow ram.
+#if (defined(CSM_SUPPORT) && (CSM_SUPPORT != 0))
+ iRegion->Lock ( iRegion, 0xE0000, 0x20000, NULL );
+#endif
+ }
+ break;
+ }
+ return ;
+}
+
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/MeWrapper/TdtWrapper/TDTWrapper.cif b/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.cif
new file mode 100644
index 0000000..b72653d
--- /dev/null
+++ b/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.cif
@@ -0,0 +1,15 @@
+<component>
+ name = "TdtWrapper"
+ category = ModulePart
+ LocalRoot = "Board\EM\MeWrapper\TdtWrapper\"
+ RefName = "TdtWrapper"
+[files]
+"TDTWrapper.dxs"
+"TDTWrapper.c"
+"TDTWrapper.mak"
+"TDTWrapper.sdl"
+"TDTSetup.sd"
+"TDTSetup.uni"
+"TdtCallback.h"
+"TdtOfbd.c"
+<endComponent>
diff --git a/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.dxs b/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.dxs
new file mode 100644
index 0000000..6226366
--- /dev/null
+++ b/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.dxs
@@ -0,0 +1,93 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/ME/MeWrapper/TdtWrapper/TDTWrapper.dxs 1 2/08/12 1:07a Klzhan $
+//
+// $Revision: 1 $
+//
+// $Date: 2/08/12 1:07a $
+//
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/ME/MeWrapper/TdtWrapper/TDTWrapper.dxs $
+//
+// 1 2/08/12 1:07a Klzhan
+// Initial Check in
+//
+// 1 2/25/11 1:40a Klzhan
+// Initial Check-in
+//
+// 1 12/03/10 5:09a Klzhan
+// Initial Check-in.
+//
+//
+//**********************************************************************
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: TdtSetup.dxs
+//
+// Description: Dependency expression file.
+//
+//----------------------------------------------------------------------------
+//<AMI_FHDR_END>
+/*++
+
+Copyright (c) 2004-2006 Intel Corporation. All rights reserved
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+Module Name:
+
+ TDTPlatformPolicy.h
+
+Abstract:
+
+ Dependency expression file for TDTPlatformPolicy Invocation Driver.
+
+--*/
+/*++
+ This file contains an 'Intel Peripheral Driver' and is
+ licensed for Intel CPUs and chipsets under the terms of your
+ license agreement with Intel or your vendor. This file may
+ be modified by the user, subject to additional terms of the
+ license agreement
+--*/
+
+DEPENDENCY_START
+ TRUE
+DEPENDENCY_END
+
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/MeWrapper/TdtWrapper/TDTWrapper.mak b/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.mak
new file mode 100644
index 0000000..8436e78
--- /dev/null
+++ b/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.mak
@@ -0,0 +1,158 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (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/ME/MeWrapper/TdtWrapper/TDTWrapper.mak 3 2/23/13 6:33a Klzhan $
+#
+# $Revision: 3 $
+#
+# $Date: 2/23/13 6:33a $
+#
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/ME/MeWrapper/TdtWrapper/TDTWrapper.mak $
+#
+# 3 2/23/13 6:33a Klzhan
+# [TAG] EIPNone
+# [Category] Improvement
+# [Description] Fix build error when OFDB disabled
+#
+# 2 1/24/13 3:51a Klzhan
+# [TAG] EIP113197
+# [Category] Improvement
+# [Description] Block AFU when DTimer is running out.
+# [Files] TDTWrapper.dxs
+# TDTWrapper.c
+# TDTWrapper.mak
+# TDTWrapper.sdl
+# TDTSetup.sd
+# TDTSetup.uni
+# TdtCallback.h
+# TDTWrapper.cif
+#
+# 1 2/08/12 1:07a Klzhan
+# Initial Check in
+#
+# 1 2/25/11 1:40a Klzhan
+# Initial Check-in
+#
+# 2 12/03/10 5:56a Klzhan
+# Fix Build error.
+#
+# 1 12/03/10 5:09a Klzhan
+# Initial Check-in.
+#
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: TDTDxe.mak
+#
+# Description:
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+# MAK file for the ModulePart:TDTPlatformPolicy
+!IFDEF OFBD_SUPPORT
+
+!IF $(OFBD_SUPPORT) == 1
+all : TdtWrapper TdtOfbd
+!ELSE #!IF $(OFBD_SUPPORT) == 1
+all : TdtWrapper
+!ENDIF
+
+!ELSE #!IFDEF OFBD_SUPPORT
+all : TdtWrapper
+!ENDIF
+
+BUILD_TDTWRAPPER_DIR = $(BUILD_DIR)\$(TdtWrapper_DIR)
+
+TdtWrapper : $(BUILD_DIR)\TdtWrapper.mak TdtWrapperBin
+
+$(BUILD_DIR)\TdtWrapper.mak : $(TdtWrapper_DIR)\$(@B).cif $(TdtWrapper_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(TdtWrapper_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+
+# MAK file for the eModule:TdtWrapper
+TdtAm_INCLUDES =\
+ $(TDT_INCLUDES)\
+ $(ME_INCLUDES)
+
+TdtWrapper_OBJECTS = $(BUILD_TDTWRAPPER_DIR)\TdtWrapper.obj
+
+TdtWrapper_CFLAGS = $(CFLAGS)
+
+TdtWrapperBin : $(AMIDXELIB) $(AMICSPLib) $(MeLibDxe_LIB)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\TdtWrapper.mak all\
+ "MY_INCLUDES=$(TdtAm_INCLUDES)"\
+ NAME=TdtWrapper\
+ MAKEFILE=$(BUILD_DIR)\TdtWrapper.mak \
+ "CFLAGS=$(TdtWrapper_CFLAGS) /I$(TdtWrapper_DIR)"\
+ GUID=CA5E3DF0-940A-48f1-8C14-DB2FB5998B36\
+ OBJECTS="$(TdtWrapper_OBJECTS)" \
+ ENTRY_POINT=TdtWrapperEntryPoint\
+ TYPE=BS_DRIVER \
+ DEPEX1=$(TdtWrapper_DIR)\TdtWrapper.dxs\
+ DEPEX1_TYPE=EFI_SECTION_DXE_DEPEX\
+ COMPRESS=1
+
+#---------------------------------------------------------------------------
+# Create TDT OFBD Library
+#---------------------------------------------------------------------------
+TdtOfbd : $(BUILD_DIR)\TdtWrapper.mak TdtOfbdLibBin
+
+TDT_OFBD_INCLUDES =\
+/I$(OFBD_DIR)\
+/I$(MeProtocolLib_DIR)\
+/I$(AtAmDxe_DIR)\
+$(ME_INCLUDES)
+
+TdtOfbd_OBJECTS = $(BUILD_TDTWRAPPER_DIR)\TdtOfbd.obj
+
+TdtOfbdLibBin : $(AMIDXELIB)
+ @set INCLUDE=%%INCLUDE%%
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\TdtWrapper.mak all\
+ "MY_INCLUDES=$(TDT_OFBD_INCLUDES)" \
+ "CFLAGS=$(CFLAGS:/W4=/W3)" \
+ OBJECTS="$(TdtOfbd_OBJECTS)" \
+ TYPE=LIBRARY LIBRARY_NAME=$(TDTOFBDLIB)
+
+$(TDTOFBDLIB) : TdtOfbd
+#---------------------------------------------------------------------------
+# Create Intel TDT Setup Screens
+#---------------------------------------------------------------------------
+SetupSdbs : $(BUILD_DIR)\TdtWrapper.mak TDTSetupSDB
+
+TDTSetupSDB :
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\TdtWrapper.mak all \
+ TYPE=SDB NAME=TdtWrapper STRING_CONSUMERS=$(TdtWrapper_DIR)\TDTSetup.sd
+
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (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/MeWrapper/TdtWrapper/TDTWrapper.sdl b/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.sdl
new file mode 100644
index 0000000..cebc89e
--- /dev/null
+++ b/Board/EM/MeWrapper/TdtWrapper/TDTWrapper.sdl
@@ -0,0 +1,98 @@
+TOKEN
+ Name = "TdtWrapper_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable TdtWrapper support in Project"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+ Token = "AT_SUPPORT" "=" "1"
+End
+
+
+PATH
+ Name = "TdtWrapper_DIR"
+End
+
+MODULE
+ Help = "Includes TdtWrapper.mak to Project"
+ File = "TdtWrapper.mak"
+End
+ELINK
+ Name = "$(BUILD_DIR)\TdtWrapper.sdb"
+ Parent = "SETUP_SDBS"
+ Priority = 30
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(TdtWrapper_DIR)\TdtSetup.sd"
+ Parent = "SETUP_DEFINITIONS"
+ Priority = 30
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\TdtWrapper.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End
+
+
+TOKEN
+ Name = "EXPECTED_FLASH_UPDATE_TIME"
+ Value = "300"
+ Help = "Expected Flash update time in seconds. 0 - Disable"
+ TokenType = Integer
+ Token = "OFBD_SUPPORT" "=" "1"
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "TDT_FLASH_UPDATE_ERROR_MESSAGE_1"
+ Value = "DTimer of Anti-Theft Technology is less than the expected time to perform the flash update."
+ TokenType = Expression
+ TargetH = Yes
+ Token = "EXPECTED_FLASH_UPDATE_TIME" "!=" "0"
+ Token = "OFBD_SUPPORT" "=" "1"
+End
+
+TOKEN
+ Name = "TDT_FLASH_UPDATE_ERROR_MESSAGE_2"
+ Value = "BIOS can not be updated at this time and please reconnect to Internet."
+ TokenType = Expression
+ TargetH = Yes
+ Token = "EXPECTED_FLASH_UPDATE_TIME" "!=" "0"
+ Token = "OFBD_SUPPORT" "=" "1"
+End
+
+TOKEN
+ Name = "TDTOFBDLIB"
+ Value = "$(BUILD_DIR)\TDTOFBDLIB.lib"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\TDTOFBDLIB.lib"
+ Parent = "OFBDLISTLIB"
+ Token = "EXPECTED_FLASH_UPDATE_TIME" "!=" "0"
+ InvokeOrder = AfterParent
+ Token = "OFBD_SUPPORT" "=" "1"
+End
+
+ELINK
+ Name = "TDTOfbdEntry,"
+ Parent = "OFBDPartsList"
+ Token = "EXPECTED_FLASH_UPDATE_TIME" "!=" "0"
+ Token = "OFBD_SUPPORT" "=" "1"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "TDTOfbdInSmmEntry,"
+ Parent = "OFBDInSmmFuncList"
+ Token = "EXPECTED_FLASH_UPDATE_TIME" "!=" "0"
+ Token = "OFBD_SUPPORT" "=" "1"
+ InvokeOrder = AfterParent
+End
diff --git a/Board/EM/MeWrapper/TdtWrapper/TdtCallback.h b/Board/EM/MeWrapper/TdtWrapper/TdtCallback.h
new file mode 100644
index 0000000..61b29b9
--- /dev/null
+++ b/Board/EM/MeWrapper/TdtWrapper/TdtCallback.h
@@ -0,0 +1,69 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/ME/MeWrapper/TdtWrapper/TdtCallback.h 1 2/08/12 1:07a Klzhan $
+//
+// $Revision: 1 $
+//
+// $Date: 2/08/12 1:07a $
+//
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/ME/MeWrapper/TdtWrapper/TdtCallback.h $
+//
+// 1 2/08/12 1:07a Klzhan
+// Initial Check in
+//
+// 1 2/25/11 1:40a Klzhan
+// Initial Check-in
+//
+// 1 12/03/10 5:09a Klzhan
+// Initial Check-in.
+//
+//
+//**********************************************************************
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: TdtCallBack.h
+//
+// Description: Setup Var definetion.
+//
+//----------------------------------------------------------------------------
+//<AMI_FHDR_END>
+#define TDT_VOLATILE_SETUP_DATA_GUID \
+{0x7b77fb8b, 0x1e0d, 0x4d7e, 0x95, 0x3f, 0x39, 0x80, 0xa2, 0x61, 0xe0, 0x76}
+
+#define TDT_VOLATILE_SETUP_DATA_C_NAME L"TdtAdvancedSetupDataVar"
+
+typedef struct _TDT_VOLATILE_SETUP_DATA {
+ UINT8 TdtEnroll;
+} TDT_VOLATILE_SETUP_DATA;
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/MeWrapper/TdtWrapper/TdtOfbd.c b/Board/EM/MeWrapper/TdtWrapper/TdtOfbd.c
new file mode 100644
index 0000000..b64b09e
--- /dev/null
+++ b/Board/EM/MeWrapper/TdtWrapper/TdtOfbd.c
@@ -0,0 +1,296 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (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/ME/MeWrapper/TdtWrapper/TdtOfbd.c 7 4/30/13 7:59a Tristinchou $
+//
+// $Revision: 7 $
+//
+// $Date: 4/30/13 7:59a $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/ME/MeWrapper/TdtWrapper/TdtOfbd.c $
+//
+// 7 4/30/13 7:59a Tristinchou
+// [TAG] EIPNone
+// [Category] Bug Fix
+// [Severity] Normal
+// [RootCause] Pointer may be destroyed in smm.
+// [Solution] Get value instead of using pointer.
+// [Files] TdtOfbd.c
+//
+// 6 3/26/13 8:09a Calvinchen
+// [TAG] EIP119036.2
+// [Category] Bug Fix
+// [Severity] Important
+// [Symptom] SecureFlash fail with ME "AT disable"
+// [RootCause] SMM HECI not installed if ME is disabled by FDO Jumper.
+// [Solution] Added check SmmHeci protocol before AtGetTimerInfo call.
+//
+// 5 3/26/13 4:49a Calvinchen
+// [TAG] EIP119036.1
+// [Category] Bug Fix
+// [Severity] Important
+// [Symptom] SecureFlash fail with ME ¡§AT disable¡¨
+// [RootCause] HECI returns "UNSUPPORTED" not "TIMEOUT" if ME is
+// disabled.
+// [Solution] Added check ME Mode and AT state before AtGetTimeInfo
+// call.
+// [Files] TdtOfbd.c
+//
+// 4 3/25/13 10:17a Calvinchen
+// [TAG] EIP119036
+// [Category] Bug Fix
+// [Severity] Important
+// [Symptom] SecureFlash fail with ME "AT disable"
+// [RootCause] HECI Timeout if AtGetTimeInfo call.
+// [Solution] To Skip AtGetTimeInfo call if HECI Timeout at first call.
+// [Files] TdtOfbd.c
+//
+// 3 3/12/13 8:01a Klzhan
+// [TAG] EIPNone
+// [Category] Improvement
+// [Description] Fix AFU can update after frist time enrolled
+//
+// 2 3/04/13 4:48a Klzhan
+// [TAG] EIPNone
+// [Category] Improvement
+// [Description] Update for get timer fail in windows.
+//
+// 1 1/24/13 3:52a Klzhan
+// [TAG] EIP113197
+// [Category] Improvement
+// [Description] Block AFU when AT DTimer is running out
+//
+//
+//**********************************************************************
+//<AMI_FHDR_START>
+//
+// Name: TDTOfbd.c
+//
+// Description:
+//
+//<AMI_FHDR_END>
+//**********************************************************************
+#include <AmiLib.h>
+#include <AmiDxeLib.h>
+#include <Setup.h>
+#include "token.h"
+#include "OFBD.h"
+#include "HeciSmm\HeciSmm.h"
+#include "MkhiMsgs.h"
+#define _ME_LIB_H_
+#include "AtHi.h"
+#include "MeBiosPayloadData\MeBiosPayloadData.h"
+
+EFI_GUID gSetupGuid = SETUP_GUID;
+SMM_HECI_PROTOCOL *mHeci;
+EFI_GUID gSmmHeciProtocolGuid = SMM_HECI_PROTOCOL_GUID;
+DXE_MBP_DATA_PROTOCOL *MbpData;
+EFI_GUID gMeBiosPayloadDataProtocolGuid = ME_BIOS_PAYLOAD_DATA_PROTOCOL_GUID;
+BOOLEAN gIntelAT;
+
+//<AMI_PHDR_START>
+//---------------------------------------------------------------------------
+//
+// Procedure: AsciiStrLen
+//
+// Description:
+//
+// Input:
+//
+//
+// Output:
+//
+//---------------------------------------------------------------------------
+//<AMI_PHDR_END>
+UINTN
+EFIAPI
+AsciiStrLen (
+ IN CONST CHAR8 *String
+ )
+{
+ UINTN Length;
+
+ for (Length = 0; *String != '\0'; String++, Length++) {}
+ return Length;
+}
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------
+// Procedure: HMRFPO_ENABLE_MSG
+//
+// Description: Send Enable HECI message to ME FW.
+//
+// Input: NONE
+//
+// Output: EFI_STATUS
+//
+// Returns:
+//
+//----------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS AtGetTimerInfo (
+ IN OUT UINT32 *Interval,
+ IN OUT UINT32 *TimeLeft
+)
+{
+ UINT32 HeciLength;
+ EFI_STATUS Status;
+
+ ATHI_GET_TIMER_INFO_CMD AtGetTimerInfoCmd;
+ ATHI_GET_TIMER_INFO_RSP AtGetTimerInfoRsp;
+
+ MemSet ((VOID *)&AtGetTimerInfoCmd, sizeof (ATHI_GET_TIMER_INFO_CMD), 0);
+ MemSet ((VOID *)&AtGetTimerInfoRsp, sizeof (ATHI_GET_TIMER_INFO_RSP), 0);
+
+ AtGetTimerInfoCmd.Header.Version.Minor = ATHI_PROTOCOL_VERSION_MINOR;
+ AtGetTimerInfoCmd.Header.Version.Major = ATHI_PROTOCOL_VERSION_MAJOR;
+ AtGetTimerInfoCmd.Header.Command.Category = ATHI_CMD_GROUP_THEFT_DETECTION;
+ AtGetTimerInfoCmd.Header.Command.IsResponse = AT_COMMAND;
+ AtGetTimerInfoCmd.Header.Command.Code = ATHI_THEFT_DETECT_GRP_GET_TIMER_INFO_CMD;
+ //
+ // 0- Length 0 only header with command is send as message
+ //
+ AtGetTimerInfoCmd.Header.Length = sizeof (ATHI_GET_TIMER_INFO_CMD) - sizeof (ATHI_HEADER);
+ AtGetTimerInfoCmd.TimerId = AT_TID_DISABLE_TIMER;
+
+
+ HeciLength = sizeof (ATHI_GET_TIMER_INFO_CMD);
+ Status = mHeci->ResetHeci();
+ Status = mHeci->SendMsg (
+ (UINT32 *) &AtGetTimerInfoCmd,
+ HeciLength,
+ BIOS_FIXED_HOST_ADDR,
+ HECI_AT_MESSAGE_ADDR
+ );
+
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ HeciLength = sizeof (ATHI_GET_TIMER_INFO_RSP);
+
+
+ Status = mHeci->ReadMsg (
+ BLOCKING,
+ (UINT32 *) &AtGetTimerInfoRsp,
+ &HeciLength
+ );
+
+ if (EFI_ERROR (Status)) {
+
+ return Status;
+ }
+
+ *Interval = AtGetTimerInfoRsp.TimerInfo.Interval;
+ *TimeLeft = AtGetTimerInfoRsp.TimerInfo.TimeLeft;
+
+ return EFI_SUCCESS;
+
+}
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: TDTOfbdEntry
+//
+// Description:
+//
+// Input:
+// IN VOID *Buffer
+// IN OUT UINT8 *pOFBDDataHandled
+// Output:
+// VOID
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID TDTOfbdEntry (
+ IN VOID *Buffer,
+ IN OUT UINT8 *pOFBDDataHandled )
+{
+ UINTN VariableSize;
+ UINT32 TimeLeft, Interval;
+ EFI_STATUS Status = EFI_SUCCESS;
+ OFBD_HDR *pOFBDHdr = (OFBD_HDR*)Buffer;
+ char *TDTErrorMsg_1 = \
+ CONVERT_TO_STRING(TDT_FLASH_UPDATE_ERROR_MESSAGE_1);
+ char *TDTErrorMsg_2 = \
+ CONVERT_TO_STRING(TDT_FLASH_UPDATE_ERROR_MESSAGE_2);
+ OFBD_EXT_HDR *pOFBDExtHdr = (OFBD_EXT_HDR*)((UINT8 *)Buffer + pOFBDHdr->OFBD_HDR_SIZE);
+ UINT32 MeMode;
+
+ // Check AT timer one time when AFU is checking OFBD version.
+ if ((pOFBDHdr->OFBD_FS != 0) || (pOFBDExtHdr->TypeCodeID != 0)) return;
+ if ((mHeci == NULL)) return;
+ // Check AT timer if ME is normal state.
+ Status = mHeci->GetMeMode(&MeMode);
+ if (EFI_ERROR(Status) || (MeMode != ME_MODE_NORMAL)) return;
+ // Check AT timer if AT is enabled in FITC.
+ if (!gIntelAT) return;
+ Status = AtGetTimerInfo(&Interval, &TimeLeft);
+ // If not enrolled, TimeLeft will be 0
+ if (EFI_ERROR(Status) || (TimeLeft == 0)) return ;
+ if (TimeLeft > EXPECTED_FLASH_UPDATE_TIME) return ;
+ // Set the AFU Force Exit +>>>
+ VariableSize = AsciiStrLen(TDTErrorMsg_1);
+ (UINT8*)Buffer += pOFBDHdr->OFBD_Size;
+ MemSet ((UINT8*)Buffer + pOFBDHdr->OFBD_Size, VariableSize + 1, 0);
+ MemCpy ((UINT8*)Buffer , TDTErrorMsg_1, VariableSize);
+ (UINT8*)Buffer += VariableSize;
+ VariableSize = AsciiStrLen(TDTErrorMsg_2);
+ MemSet ((UINT8*)Buffer, VariableSize + 1, 0);
+ MemCpy ((UINT8*)Buffer, TDTErrorMsg_2, VariableSize);
+ pOFBDHdr->OFBD_RS |= (OFBD_RS_ERR_OUT + OFBD_RS_DIS_OEMSTR); // Tell the AFU display the OEM Message
+ // Set the AFU Force Exit <<<+
+ return;
+}
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: TDTOfbdInSmmEntry
+//
+// Description:
+//
+// Input:
+// IN VOID *Buffer
+// IN OUT UINT8 *pOFBDDataHandled
+// Output:
+// VOID
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID TDTOfbdInSmmEntry (VOID)
+{
+
+ EFI_STATUS Status;
+
+ Status = pBS->LocateProtocol (&gSmmHeciProtocolGuid, NULL, &mHeci);
+ if (EFI_ERROR (Status)) mHeci = NULL;
+ Status = pBS->LocateProtocol (&gMeBiosPayloadDataProtocolGuid, NULL, (VOID **) &MbpData);
+ if (EFI_ERROR (Status)) gIntelAT = FALSE;
+ else gIntelAT = (BOOLEAN)MbpData->MeBiosPayload.FwCapsSku.FwCapabilities.Fields.IntelAT;
+
+ return ;
+}
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2009, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************