diff options
Diffstat (limited to 'Board/EM/MeWrapper/AmtWrapper/AmtSetup/AmtSetup.c')
-rw-r--r-- | Board/EM/MeWrapper/AmtWrapper/AmtSetup/AmtSetup.c | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/Board/EM/MeWrapper/AmtWrapper/AmtSetup/AmtSetup.c b/Board/EM/MeWrapper/AmtWrapper/AmtSetup/AmtSetup.c new file mode 100644 index 0000000..a643c62 --- /dev/null +++ b/Board/EM/MeWrapper/AmtWrapper/AmtSetup/AmtSetup.c @@ -0,0 +1,236 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (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/AmtWrapper/AmtSetup/AmtSetup.c 5 5/14/14 9:48p Tristinchou $ +// +// $Revision: 5 $ +// +// $Date: 5/14/14 9:48p $ +//********************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/ME/AmtWrapper/AmtSetup/AmtSetup.c $ +// +// 5 5/14/14 9:48p Tristinchou +// [TAG] EIP167030 +// [Category] Improvement +// [Description] Remove the variable runtime attribute and keep original +// attributes. +// +// 4 9/19/12 6:37a Klzhan +// Fix entry point return type. +// +// 3 6/05/12 2:05a Klzhan +// [TAG] EIP91581 +// [Category] Improvement +// [Description] Avoid system crash when HECI reset +// +// 1 2/08/12 1:08a Klzhan +// Initial Check in +// +// 2 7/14/11 7:45a Klzhan +// Add "Disable ME" setup item. +// +// 1 2/25/11 1:44a Klzhan +// Initial Check-in +// +// 1 12/03/10 5:11a Klzhan +// Initial Check-in. +// +//********************************************************************** +// +//<AMI_FHDR_START> +//--------------------------------------------------------------------------- +// Name: AMTSetup.c +// +// Description: AMT TSE Functions. +// +//--------------------------------------------------------------------------- +//<AMI_FHDR_END> +#include "Token.h" +#include "Efi.h" +#include "EfiDriverLib.h" +#include "EfiCommonLib.h" +#include "Amt.h" +#include "EfiScriptLib.h" +#include "AmtLib.h" +#include "Include\Protocol\LegacySredir.h" +#include "AmtSetup.h" +#include <SetupDataDefinition.h> +#include "MELib.h" +#include EFI_PROTOCOL_CONSUMER (AmtPlatformPolicy) +#include EFI_PROTOCOL_CONSUMER (AmtWrapper) +#include EFI_PROTOCOL_DEFINITION (MeBiosPayloadData) +#include "Protocol\AmtWrapper\AmtWrapper.h" + +EFI_GUID gEfiAmtWrapperProtocolGuid = EFI_AMT_WRAPPER_PROTOCOL_GUID; + +#define SETUP_GUID { 0xEC87D643, 0xEBA4, 0x4BB5, 0xA1, 0xE5, 0x3F, 0x3E, 0x36, 0xB2, 0x0D, 0xA9 } +EFI_GUID gEfiSetupGuid = SETUP_GUID; + +VOID +SetMEDisable ( + IN UINT8 Grayout +) +{ +#if defined(iAMT_SUPPORT) && (iAMT_SUPPORT == 1) + SETUP_DATA gSetupData; + UINTN SetupDataSize; + EFI_STATUS Status; + EFI_HECI_PROTOCOL *Heci; + UINT32 MeMode; + DXE_MBP_DATA_PROTOCOL *mBIOSPayLoad; + + Status = gBS->LocateProtocol ( + &gEfiHeciProtocolGuid, + NULL, + &Heci + ); + + if (EFI_ERROR (Status)) { + return; + } + + Status = Heci->GetMeMode (&MeMode); + + if (EFI_ERROR (Status)) { + return; + } + + SetupDataSize = sizeof(SETUP_DATA); + Status = gRT->GetVariable ( L"Setup", \ + &gEfiSetupGuid, \ + NULL, \ + &SetupDataSize, \ + &gSetupData ); + + if (EFI_ERROR (Status)) { + return; + } + + Status = gBS->LocateProtocol(&gMeBiosPayloadDataProtocolGuid, + NULL, &mBIOSPayLoad); + + if (EFI_ERROR (Status)) { + return; + } + + if(gSetupData.MEDisabled) + { + // AT in Inactive mode, and no SOL or IDER or KVM session + // can't set ME to disabled + if((MeMode == ME_MODE_NORMAL) && + (mBIOSPayLoad->MeBiosPayload.AtState.State == 0) && + (Grayout == 0)) + { + Status = HeciSetMeDisableMsg(); + if(!EFI_ERROR(Status)) + { + Status = HeciSendCbmResetRequest (CBM_RR_REQ_ORIGIN_BIOS_POST, CBM_HRR_GLOBAL_RESET); + if(!EFI_ERROR(Status)) + EFI_DEADLOOP(); + } + } + }else + { + if(MeMode == ME_MODE_TEMP_DISABLED) + { + Status = HeciSetMeEnableMsg(); + if(!EFI_ERROR(Status)) + { + Status = HeciSendCbmResetRequest (CBM_RR_REQ_ORIGIN_BIOS_POST, CBM_HRR_GLOBAL_RESET); + if(!EFI_ERROR(Status)) + EFI_DEADLOOP(); + } + } + } +#endif +} + + +EFI_STATUS +InitializeAmtSetup ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable +) +{ + SETUP_AMT_FEATURES SetupAmtFeatures; + EFI_STATUS Status; + UINT32 VarAttr; + UINTN VariableSize; + UINTN Update = 0; + UINT8 GrayOut; + AMT_WRAPPER_PROTOCOL *pAmtWrapper = NULL; + + + EfiInitializeDriverLib (ImageHandle, SystemTable); + + Status = gBS->LocateProtocol( + &gEfiAmtWrapperProtocolGuid, + NULL, + &pAmtWrapper); + + ASSERT_EFI_ERROR(Status); + + VariableSize = sizeof(SETUP_AMT_FEATURES); + Status = gRT->GetVariable( + L"SetupAmtFeatures", + &gEfiSetupGuid, + &VarAttr, + &VariableSize, + &SetupAmtFeatures); + + if ( pAmtWrapper->ActiveManagementEnableIdeR() || + pAmtWrapper->ActiveManagementEnableSol() || + pAmtWrapper->ActiveManagementEnableKvm()) { + GrayOut = 1; + } else { + GrayOut = 0; + } + + if (SetupAmtFeatures.GrayOut != GrayOut) { + SetupAmtFeatures.GrayOut = GrayOut; + Update = 1; + } + + if (Update || EFI_ERROR(Status)) { + if( Status == EFI_NOT_FOUND ) + VarAttr = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS; + Status = gRT->SetVariable( + L"SetupAmtFeatures", + &gEfiSetupGuid, + VarAttr, + sizeof(SETUP_AMT_FEATURES), + &SetupAmtFeatures); + ASSERT_EFI_ERROR(Status); + } + SetMEDisable(GrayOut); + + + return EFI_SUCCESS; +} + +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2010, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//*************************************************************************
\ No newline at end of file |