diff options
Diffstat (limited to 'ReferenceCode/ME/Library/PttHeci/Dxe')
6 files changed, 338 insertions, 0 deletions
diff --git a/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.c b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.c new file mode 100644 index 0000000..2e87dd6 --- /dev/null +++ b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.c @@ -0,0 +1,145 @@ +/** @file + Implements Platform Trust Technology (FTPM) HECI SkuMgr Interface Library. + +@copyright + Copyright (c) 2012 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. + + This file contains an 'Intel Peripheral Driver' and uniquely + identified as "Intel Reference Module" 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 + +**/ + +#if !defined(EDK_RELEASE_VERSION) || (EDK_RELEASE_VERSION < 0x00020000) +#include "EdkIIGlueBase.h" +#endif + +#ifdef PTT_FLAG +#include "PttHeciLib.h" +#include "HeciMsgLib.h" + +#define PTT_BITMASK 0x20000000 //BIT29 + +#define CLEAR_PTT_BIT 0x00000000 + +/** + Checks whether ME FW has the Platform Trust Technology capability. + + @param[out] PttCapability TRUE if PTT is supported, FALSE othewrwise. + + @retval EFI_SUCCESS Command succeeded + @retval EFI_DEVICE_ERROR HECI Device error, command aborts abnormally +**/ +EFI_STATUS +EFIAPI +PttHeciGetCapability( + OUT BOOLEAN *PttCapability + ) +{ + EFI_STATUS Status; + GEN_GET_FW_CAPSKU MsgGenGetFwCapsSku; + GEN_GET_FW_CAPS_SKU_ACK MsgGenGetFwCapsSkuAck; + + *PttCapability = FALSE; + + Status = HeciGetFwCapsSkuMsg (&MsgGenGetFwCapsSku, &MsgGenGetFwCapsSkuAck); + if (EFI_ERROR (Status)) { + return Status; + } + + if (((MsgGenGetFwCapsSkuAck.MKHIHeader.Fields.Command) == FWCAPS_GET_RULE_CMD) && + ((MsgGenGetFwCapsSkuAck.MKHIHeader.Fields.IsResponse) == 1) && + (MsgGenGetFwCapsSkuAck.MKHIHeader.Fields.Result == 0) + ) { + + if (MsgGenGetFwCapsSkuAck.Data.FWCapSku.Fields.PTT) { + *PttCapability = TRUE; + } + } + DEBUG ((EFI_D_INFO, "PTT SkuMgr: PttCapability = %d\n", *PttCapability)); + + return EFI_SUCCESS; +} + +/** + Checks Platform Trust Technology enablement state. + + @param[out] IsPttEnabledState TRUE if PTT is enabled, FALSE othewrwise. + + @retval EFI_SUCCESS Command succeeded + @retval EFI_DEVICE_ERROR HECI Device error, command aborts abnormally +**/ +EFI_STATUS +EFIAPI +PttHeciGetState( + OUT BOOLEAN *IsPttEnabledState + ) +{ + EFI_STATUS Status; + MEFWCAPS_SKU CurrentFeatures; + + *IsPttEnabledState = FALSE; + + Status = HeciGetFwFeatureStateMsg (&CurrentFeatures); + if (EFI_ERROR (Status)) { + return Status; + } + + if (CurrentFeatures.Fields.PTT) { + *IsPttEnabledState = TRUE; + } + + DEBUG ((EFI_D_INFO, "PTT SkuMgr: PttState = %d\n", *IsPttEnabledState)); + + return EFI_SUCCESS; +} + +/** + Changes current Platform Trust Technology state. + + @param[in] PttEnabledState TRUE to enable, FALSE to disable. + + @retval EFI_SUCCESS Command succeeded + @retval EFI_DEVICE_ERROR HECI Device error, command aborts abnormally +**/ +EFI_STATUS +EFIAPI +PttHeciSetState( + IN BOOLEAN PttEnabledState + ) +{ + EFI_STATUS Status; + UINT32 EnableBitmap; + UINT32 DisableBitmap; + + if (PttEnabledState) { + // + // Enable PTT + // + DEBUG ((EFI_D_INFO, "PTT SkuMgr: Enable PTT\n")); + EnableBitmap = PTT_BITMASK; + DisableBitmap = CLEAR_PTT_BIT; + } else { + // + // Disable PTT + // + DEBUG ((EFI_D_INFO, "PTT SkuMgr: Disable PTT\n")); + EnableBitmap = CLEAR_PTT_BIT; + DisableBitmap = PTT_BITMASK; + } + Status = HeciFwFeatureStateOverride (EnableBitmap, DisableBitmap); + + return Status; +} + +#endif // PTT_FLAG diff --git a/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.cif b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.cif new file mode 100644 index 0000000..60dd251 --- /dev/null +++ b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.cif @@ -0,0 +1,12 @@ +<component> + name = "PttHeciDxeLib" + category = ModulePart + LocalRoot = "ReferenceCode\Me\Library\PttHeci\Dxe\" + RefName = "PttHeciDxeLib" +[files] +"PttHeciDxeLib.sdl" +"PttHeciDxeLib.mak" +"PttHeciDxeLib.c" +"PttHeciDxeLib.h" +"PttHeciDxeLib.inf" +<endComponent> diff --git a/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.h b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.h new file mode 100644 index 0000000..6b370f4 --- /dev/null +++ b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.h @@ -0,0 +1,37 @@ +/** @file + Platform Trust Technology (FTPM) HECI SkuMgr Dxe Library + +@copyright + Copyright (c) 2012 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. + + This file contains an 'Intel Peripheral Driver' and uniquely + identified as "Intel Reference Module" 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 +**/ +#ifndef _PTT_HECI_DXE_LIB_H_ +#define _PTT_HECI_DXE_LIB_H_ + +#ifdef PTT_FLAG +/// +/// External include files do NOT need to be explicitly specified in real EDKII +/// environment +/// +#if !defined(EDK_RELEASE_VERSION) || (EDK_RELEASE_VERSION < 0x00020000) +#include "EdkIIGlueDxe.h" +#endif +/// +/// Common header for HECI Library +/// +#include "PttHeciLib.h" +#endif // PTT_FLAG +#endif diff --git a/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.inf b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.inf new file mode 100644 index 0000000..da2f485 --- /dev/null +++ b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.inf @@ -0,0 +1,68 @@ +## @file +# Component description file for PTT Heci DXE Library. +# +#@copyright +# Copyright (c) 2012 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. +# +# This file contains a 'Sample Driver' and is licensed as such +# under the terms of your license agreement with Intel or your +# vendor. This file may be modified by the user, subject to +# the additional terms of the license agreement +# + +[defines] +BASE_NAME = PttHeciDxeLib +COMPONENT_TYPE = LIBRARY + +[sources.common] + PttHeciDxeLib.h + PttHeciDxeLib.c + ../Include/PttHeciLib.h + +[includes.common] + $(EFI_SOURCE)/$(PROJECT_ME_ROOT) + $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/Library/PttHeci/Include + $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/Library/MeKernel + $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/Library/MeKernel/include + $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/Library/MeKernel/Dxe + +# +# EDK II Glue Library utilizes some standard headers from EDK +# + $(EDK_SOURCE)/Foundation + $(EDK_SOURCE)/Foundation/Core/Dxe + $(EDK_SOURCE)/Foundation/Efi + $(EDK_SOURCE)/Foundation/Efi/Include + $(EDK_SOURCE)/Foundation/Framework + $(EDK_SOURCE)/Foundation/Framework/Include + $(EDK_SOURCE)/Foundation/Include + $(EDK_SOURCE)/Foundation/Include/IndustryStandard + $(EDK_SOURCE)/Foundation/Library/Dxe/Include + $(EDK_SOURCE)/Foundation/Library/EdkIIGlueLib/Include + +# +# Typically the sample code referenced will be available in the code base already +# So keep this include at the end to defer to the source base definition +# and only use the sample code definition if source base does not include these files. +# + $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/SampleCode + $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/SampleCode/Include + +[libraries.common] + EdkIIGlueBaseLib + EdkIIGlueUefiLib + EdkIIGlueDxeDebugLibReportStatusCode + MeLib + +[nmake.common] + C_FLAGS = $(C_FLAGS) -D __EDKII_GLUE_BASE_LIB__ \ + -D __EDKII_GLUE_UEFI_LIB__ \ + -D __EDKII_GLUE_DXE_DEBUG_LIB_REPORT_STATUS_CODE__ \ + -D PTT_FLAG
\ No newline at end of file diff --git a/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.mak b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.mak new file mode 100644 index 0000000..ed8afdd --- /dev/null +++ b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.mak @@ -0,0 +1,40 @@ +all : PttHeciDxeLib + +$(BUILD_DIR)\PttHeciDxeLib.lib : PttHeciDxeLib + +PttHeciDxeLib : $(BUILD_DIR)\PttHeciDxeLib.mak PttHeciDxeLibBin + +$(BUILD_DIR)\PttHeciDxeLib.mak : $(PttHeciDxeLib_DIR)\$(@B).cif $(PttHeciDxeLib_DIR)\$(@B).mak $(BUILD_RULES) + $(CIF2MAK) $(PttHeciDxeLib_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS) + +PttHeciDxeLib_INCLUDES=\ + $(EDK_INCLUDES) \ + $(EdkIIGlueLib_INCLUDES) \ + $(ME_INCLUDES) \ + -I$(INTEL_COUGAR_POINT_DIR)\ + $(INTEL_PCH_INCLUDES) + +PttHeciDxeLib_DEFINES=$(MY_DEFINES)\ + /D __EDKII_GLUE_BASE_LIB__ \ + /D __EDKII_GLUE_UEFI_LIB__ \ + /D __EDKII_GLUE_DXE_DEBUG_LIB_REPORT_STATUS_CODE__ \ + /D PTT_FLAG + +PttHeciDxeLib_LIBS=\ + $(EdkIIGlueBaseLib_LIB)\ +!IF "$(x64_BUILD)"=="1" + $(EdkIIGlueBaseLibX64_LIB)\ +!ELSE + $(EdkIIGlueBaseLibIA32_LIB)\ +!ENDIF + $(EdkIIGlueUefiLib_LIB)\ + $(EdkIIGlueDxeDebugLibReportStatusCode_LIB)\ + $(MeProtocolLib_LIB)\ + + +PttHeciDxeLibBin : $(PttHeciDxeLib_LIBS) + $(MAKE) /$(MAKEFLAGS) $(EDKIIGLUE_DEFAULTS) \ + /f $(BUILD_DIR)\PttHeciDxeLib.mak all \ + "MY_INCLUDES=$(PttHeciDxeLib_INCLUDES)" \ + "MY_DEFINES=$(PttHeciDxeLib_DEFINES)"\ + TYPE=LIBRARY \ diff --git a/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.sdl b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.sdl new file mode 100644 index 0000000..8d6ba28 --- /dev/null +++ b/ReferenceCode/ME/Library/PttHeci/Dxe/PttHeciDxeLib.sdl @@ -0,0 +1,36 @@ +TOKEN + Name = "PttHeciDxeLib_SUPPORT" + Value = "1" + TokenType = Boolean + TargetEQU = Yes + TargetMAK = Yes + Master = Yes + Help = "Main switch to enable PttHeciDxeLib support in Project" +End + +MODULE + Help = "Includes PttHeciDxeLib.mak to Project" + File = "PttHeciDxeLib.mak" +End + +PATH + Name = "PttHeciDxeLib_DIR" + Help = "Me Library file source directory" +End + +ELINK + Name = "PttHeciDxeLib_LIB" + InvokeOrder = ReplaceParent +End + +ELINK + Name = "$(BUILD_DIR)\PttHeciDxeLib.lib" + Parent = "PttHeciDxeLib_LIB" + InvokeOrder = AfterParent +End + +ELINK + Name = "/I$(PttHeciDxeLib_DIR)" + Parent = "ME_INCLUDES" + InvokeOrder = AfterParent +End |