diff options
author | raywu <raywu0301@gmail.com> | 2018-06-15 00:00:50 +0800 |
---|---|---|
committer | raywu <raywu0301@gmail.com> | 2018-06-15 00:00:50 +0800 |
commit | b7c51c9cf4864df6aabb99a1ae843becd577237c (patch) | |
tree | eebe9b0d0ca03062955223097e57da84dd618b9a /Board/EM/MeWrapper/TdtWrapper | |
download | zprj-b7c51c9cf4864df6aabb99a1ae843becd577237c.tar.xz |
Diffstat (limited to 'Board/EM/MeWrapper/TdtWrapper')
-rw-r--r-- | Board/EM/MeWrapper/TdtWrapper/TDTSetup.sd | 161 | ||||
-rw-r--r-- | Board/EM/MeWrapper/TdtWrapper/TDTSetup.uni | bin | 0 -> 8966 bytes | |||
-rw-r--r-- | Board/EM/MeWrapper/TdtWrapper/TDTWrapper.c | 521 | ||||
-rw-r--r-- | Board/EM/MeWrapper/TdtWrapper/TDTWrapper.cif | 15 | ||||
-rw-r--r-- | Board/EM/MeWrapper/TdtWrapper/TDTWrapper.dxs | 93 | ||||
-rw-r--r-- | Board/EM/MeWrapper/TdtWrapper/TDTWrapper.mak | 158 | ||||
-rw-r--r-- | Board/EM/MeWrapper/TdtWrapper/TDTWrapper.sdl | 98 | ||||
-rw-r--r-- | Board/EM/MeWrapper/TdtWrapper/TdtCallback.h | 69 | ||||
-rw-r--r-- | Board/EM/MeWrapper/TdtWrapper/TdtOfbd.c | 296 |
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 Binary files differnew file mode 100644 index 0000000..89c89b3 --- /dev/null +++ b/Board/EM/MeWrapper/TdtWrapper/TDTSetup.uni 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 ** +//** ** +//************************************************************************* +//************************************************************************* |