alder_lake_bios/Intel/AlderLake/ClientOneSiliconPkg/Cpu/TxtInit/Dxe/TxtDxeLib.h

306 lines
9.2 KiB
C

/** @file
This file contains function definitions that can determine
the TXT capabilities of a platform during DXE and perform
certain specific platform tasks that are required for TXT
during DXE.
@copyright
INTEL CONFIDENTIAL
Copyright 1999 - 2020 Intel Corporation.
The source code contained or described herein and all documents related to the
source code ("Material") are owned by Intel Corporation or its suppliers or
licensors. Title to the Material remains with Intel Corporation or its suppliers
and licensors. The Material may contain trade secrets and proprietary and
confidential information of Intel Corporation and its suppliers and licensors,
and is protected by worldwide copyright and trade secret laws and treaty
provisions. No part of the Material may be used, copied, reproduced, modified,
published, uploaded, posted, transmitted, distributed, or disclosed in any way
without Intel's prior express written permission.
No license under any patent, copyright, trade secret or other intellectual
property right is granted to or conferred upon you by disclosure or delivery
of the Materials, either expressly, by implication, inducement, estoppel or
otherwise. Any license under such intellectual property rights must be
express and approved by Intel in writing.
Unless otherwise agreed by Intel in writing, you may not remove or alter
this notice or any other notice embedded in Materials by Intel or
Intel's suppliers or licensors in any way.
This file contains an 'Intel Peripheral Driver' and is 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.
@par Specification Reference:
**/
#ifndef _TXT_DXE_LIB_H_
#define _TXT_DXE_LIB_H_
#include <Protocol/MpService.h>
#include <Library/IoLib.h>
#include <Library/UefiLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/BaseMemoryLib.h>
#include <TxtInfoHob.h>
#include <Library/CpuCommonLib.h>
#include <CpuInitDataHob.h>
#include <Library/TimerLib.h>
#include <Register/Cpuid.h>
#include <Register/Msr.h>
///
/// The following switch is used in EfiScriptLib.h file. If enabled -
/// forces linking to EfiScriptLib library
///
#define BASE_ADDR_MASK 0xFFFFF000
#define TEST_PATTERN 0x5A5A5A5A5A5A5A5A
#define MP_TIMEOUT_FOR_STARTUP_ALL_APS 0 ///< Set 0 for BSP always wait for APs
///
/// Chispet register
///
#define TXT_OPT_IN_VMX_AND_SMX_MSR_VALUE 0xFF03
#define LOCAL_APIC_THERMAL_DEF 0x330
#pragma pack(push, 1)
typedef struct _TXT_DXE_LIB_CONTEXT_ {
EFI_HANDLE ImageHandle;
EFI_SYSTEM_TABLE *SystemTable;
EFI_MP_SERVICES_PROTOCOL *MpService;
UINTN CpuCount;
TXT_INFO_DATA *TxtInfoData;
} TXT_DXE_LIB_CONTEXT;
#pragma pack(pop)
/**
This routine initializes and collects all Protocols and data required
by the routines in this file.
@param[in] ImageHandle A pointer to the Image Handle for this file.
@param[in] SystemTable A pointer to the EFI System Table
@param[in][out] TxtDxeCtx A pointer to a caller allocated data structure that contains
all of the Protocols and data required by the routines
in this file.
@retval EFI_SUCCESS Return EFI_SUCCESS if no error happen
@retval EFI_NOT_FOUND If TxtInfoHob is not found
**/
EFI_STATUS
InitializeTxtDxeLib (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable,
IN OUT TXT_DXE_LIB_CONTEXT *TxtDxeCtx
);
/**
Determines whether or not the current processor is TXT Capable.
@retval TRUE If the current processor supports TXT
@retval FALSE If the current processor does not support TXT
**/
BOOLEAN
IsTxtProcessor (
VOID
);
/**
Determines whether or not the platform has executed an TXT launch by
examining the TPM Establishment bit.
@param[in] TxtDxeCtx A pointer to an initialized TXT DXE Context data structure
@retval TRUE If the TPM establishment bit is asserted.
@retval FALSE If the TPM establishment bit is unasserted.
**/
BOOLEAN
IsTxtEstablished (
IN TXT_DXE_LIB_CONTEXT *TxtDxeCtx
);
/**
Determines whether or not the platform has executed an TXT launch by
examining the TPM Establishment bit.
@param[in] TxtDxeCtx A pointer to an initialized TXT DXE Context data structure
@retval TRUE If the TPM establishment bit is asserted.
@retval FALSE If the TPM establishment bit is unasserted.
**/
BOOLEAN
IsTxtResetSet (
IN TXT_DXE_LIB_CONTEXT *TxtDxeCtx
);
/**
Determines whether or not the platform requires initialization for TXT use.
@param[in] TxtDxeCtx A pointer to an initialized TXT DXE Context data structure
@retval TRUE If the the platoform should be configured for TXT.
@retval FALSE If TXT is not to be used.
**/
BOOLEAN
IsTxtEnabled (
IN TXT_DXE_LIB_CONTEXT *TxtDxeCtx
);
/**
Allocates 1 MB of 1MB-aligned memory for use as TXT Device Memory. Records
the location of TXT Device Memory in TXT Chipset registers and then adds
programming instructions for these registers into BootScript.
@param[in] TxtDxeCtx A pointer to an initialized TXT DXE Context data structure
@retval EFI_SUCCESS TXT Device memory has been successfully initialized.
@retval EFI_ERROR TXT Device memory not awailable.
**/
EFI_STATUS
SetupTxtDeviceMemory (
IN TXT_DXE_LIB_CONTEXT *TxtDxeCtx
);
/**
Invokes TxtDxeLibLaunchBiosAcm to execute the SCHECK function.
@param[in] TxtDxeCtx A pointer to an initialized TXT DXE Context data structure
@retval EFI_SUCCESS Always.
**/
EFI_STATUS
DoScheck (
IN TXT_DXE_LIB_CONTEXT *TxtDxeCtx
);
/**
Invokes TxtDxeLibLaunchBiosAcm to reset the TPM's establishment bit.
@param[in] TxtDxeCtx A pointer to an initialized TXT DXE Context data structure
@retval EFI_SUCCESS Always.
**/
EFI_STATUS
ResetTpmEstBit (
IN TXT_DXE_LIB_CONTEXT *TxtDxeCtx
);
/**
Sets up the system and then launches the TXT BIOS ACM to run the function
requested by AcmFunction.
@param[in] AcmBase Base address of BIOS ACM location
@param[in] Funct Function number of BIOS ACM to be executed
@retval EFI_SUCCESS Always.
**/
VOID
LaunchBiosAcm (
IN UINT64 AcmBase,
IN UINT64 Funct
);
/**
Sets up the system and then launches the TXT BIOS ACM to run the function
requested by AcmFunction.
@param[in] AcmFunction Constant that represents the function from the BIOS ACM
that should be executed.
@param[in] TxtDxeCtx A pointer to an initialized TXT DXE Context data structure
@retval EFI_SUCCESS Always.
**/
EFI_STATUS
TxtDxeLibLaunchBiosAcm (
IN TXT_DXE_LIB_CONTEXT *TxtDxeCtx,
IN UINT64 AcmFunction
);
/**
AP initial routine executed through MP service for TXT SCHECK
@param[in] Buffer Not used.
**/
VOID
EFIAPI
DoApInit (
IN VOID *Buffer
);
/**
Save AP configuration routine executed through MP service for TXT SCHECK
@param[in] Buffer Not used.
**/
VOID
EFIAPI
ApSaveConfig (
IN VOID *Buffer
);
/**
Restore AP configuration routine executed through MP service for TXT SCHECK
@param[in] Buffer Not used.
**/
VOID
EFIAPI
ApRestoreConfig (
IN VOID *Buffer
);
/**
Disable or restore possible SMI sources before or after POST SCHECK
@param[in] TxtDxeCtx A pointer to an initialized TXT DXE Context data structure
@param[in] Operation Boolean value telling what operation is requested:
TRUE - to save and then disable possible SMI sources
FALSE - to restore original SMI settings
@retval EFI_SUCCESS always return EFI_SUCCESS
**/
EFI_STATUS
DisableSmiSources (
IN TXT_DXE_LIB_CONTEXT *TxtDxeCtx,
IN BOOLEAN Operation
);
/**
This function gets called before/after run the SCHECK function, intend to avoid platform specific SMIs to interfere in BIOS POST
if BIOS SMM MP services or synchonization code is not well considered that some of APs are not waken up from Wait-for-SIPI state.
Function should preserve original SMI enabling setting in augument is TRUE, and then restore it in augurment is FALSE.
The caller is DisableSmiSources() in TxtDxeLib.c
@param[in] TxtDxeCtx
@param[in] Operation = TRUE Calling before SCHECK to saved and disable platform specific SMIs setting
= FALSE Calling after SCHECK to restore platform specific SMIs setting
@retval EFI_SUCCESS Always.
**/
extern
EFI_STATUS
EFIAPI
TxtDxeOemDisableSmi (
IN TXT_DXE_LIB_CONTEXT *TxtDxeCtx,
IN BOOLEAN Operation
);
/**
Read policy protocol to reset AUX content
@param[in] TxtDxeCtx A pointer to an initialized TXT DXE Context data structure
@retval EFI_SUCCESS No error happend
@retval EFI_NOT_FOUND TxtPolicyProtocol is not found
**/
EFI_STATUS
ResetTpmAux (
IN TXT_DXE_LIB_CONTEXT *TxtDxeCtx
);
#endif