STM/Test/FrmPkg/Include/Library/Smx.h

901 lines
21 KiB
C

/** @file
SMX header file
Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _SMX_H_
#define _SMX_H_
#define TXT_PRIVATE_SPACE 0xFED20000
#define TXT_PUBLIC_SPACE 0xFED30000
#define TXT_STS 0x0
#define TXT_STS_SENTER_DONE 0x1
#define TXT_STS_SEXIT_DONE 0x2
#define TXT_ESTS 0x8
#define TXT_ERRORCODE 0x30
#define TXT_CMD_SYS_RESET 0x38
#define TXT_CMD_CLOSE_PRIVATE 0x48
#define TXT_VER_FSBIF 0x100
#define TXT_DIDVID 0x110
#define TXT_CMD_UNLOCK_MEM_CONFIG 0x218
#define TXT_SINIT_BASE 0x270
#define TXT_SINIT_SIZE 0x278
#define TXT_MLE_JOIN 0x290
#define TXT_HEAP_BASE 0x300
#define TXT_HEAP_SIZE 0x308
#define TXT_DPR_REG 0x330
#define TXT_DPR_REG_LCK 0x1
#define TXT_DPR_REG_SIZE_MASK 0xFF0
#define TXT_DPR_REG_SIZE_OFFSET 16
#define TXT_DPR_REG_BASE_MASK 0xFFF00000
#define TXT_CMD_OPEN_LOCALITY1 0x380
#define TXT_CMD_CLOSE_LOCALITY1 0x388
#define TXT_CMD_OPEN_LOCALITY2 0x390
#define TXT_CMD_CLOSE_LOCALITY2 0x398
#define TXT_CMD_SECRETS 0x8E0
#define TXT_CMD_NO_SECRETS 0x8E8
#define TXT_E2STS 0x8F0
#define GETSEC_PARAMETER_TYPE_MASK 0x1F
#define GETSEC_PARAMETER_TYPE_ACM_VERSION 1
#define GETSEC_PARAMETER_TYPE_ACM_MAX_SIZE 2
#define GETSEC_PARAMETER_TYPE_EXTERN_MEM_TYPE 3
#define GETSEC_PARAMETER_TYPE_SENTER_DIS_CONTOL 4
#define GETSEC_PARAMETER_TYPE_EXTERNSION 5
#pragma pack (push, 1)
#define TXT_MLE_HEADER_UUID \
{ 0x9082AC5A, 0x74A7476F, 0xA2555C0F, 0x42B651CB }
typedef struct {
UINT32 Uuid0;
UINT32 Uuid1;
UINT32 Uuid2;
UINT32 Uuid3;
} TXT_UUID;
#define TXT_MLE_HEADER_VERSION_1 0x10000
#define TXT_MLE_HEADER_VERSION_1_1 0x10001
#define TXT_MLE_HEADER_VERSION_2 0x20000
#define TXT_MLE_HEADER_VERSION_2_1 0x20001
#define TXT_MLE_HEADER_VERSION TXT_MLE_HEADER_VERSION_2
#define TXT_MLE_SINIT_CAPABILITY_GETSET_WAKEUP 1u
#define TXT_MLE_SINIT_CAPABILITY_MONITOR_ADDRESS_RLP_WAKEUP (1u << 1)
#define TXT_MLE_SINIT_CAPABILITY_ECX_HAS_PAGE_TABLE (1u << 2)
#define TXT_MLE_SINIT_CAPABILITY_STM (1u << 3)
#define TXT_MLE_SINIT_CAPABILITY_TPM12_PCR_NO_LEGACY (1u << 4)
#define TXT_MLE_SINIT_CAPABILITY_TPM12_PCR_DETAIL_AUTHORITY (1u << 5)
#define TXT_MLE_SINIT_CAPABILITY_PLATFORM_TYPE_CLIENT (1u << 6)
#define TXT_MLE_SINIT_CAPABILITY_PLATFORM_TYPE_SERVER (1u << 7)
#define TXT_MLE_SINIT_CAPABILITY_MAXPHYADDR_SUPPORT (1u << 8)
#define TXT_MLE_SINIT_CAPABILITY_TCG2_COMPATIBILE_EVENTLOG (1u << 9)
typedef struct {
TXT_UUID Uuid;
UINT32 HeaderLen;
UINT32 Version;
UINT32 EntryPoint;
//#if (TXT_MLE_HEADER_VERSION >= TXT_MLE_HEADER_VERSION_1_1)
UINT32 FirstValidPage;
UINT32 MleStart;
UINT32 MleEnd;
//#if (TXT_MLE_HEADER_VERSION >= TXT_MLE_HEADER_VERSION_2)
UINT32 Capabilities;
//#if (TXT_MLE_HEADER_VERSION >= TXT_MLE_HEADER_VERSION_2_1)
UINT32 CmdlineStart;
UINT32 CmdlineEnd;
//#endif
//#endif
//#endif
} TXT_MLE_HEADER;
#define ACM_PKCS_1_5_RSA_SIGNATURE_SIZE 256
#define TXT_ACM_MODULE_TYPE_CHIPSET_ACM 2
#define TXT_ACM_MODULE_SUBTYPE_CAPABLE_OF_EXECUTE_AT_RESET 1
#define TXT_ACM_MODULE_FLAG_PREPRODUCTION 0x4000
#define TXT_ACM_MODULE_FLAG_DEBUG_SIGN 0x8000
typedef struct {
UINT16 ModuleType;
UINT16 ModuleSubType;
UINT32 HeaderLen;
UINT32 HeaderVersion;
UINT16 ChipsetID;
UINT16 Flags;
UINT32 ModuleVendor;
UINT32 Date;
UINT32 Size;
UINT32 Rsvd1;
UINT32 CodeControl;
UINT32 ErrorEntryPoint;
UINT32 GDTLimit;
UINT32 GDTBasePtr;
UINT32 SegSel;
UINT32 EntryPoint;
UINT8 Rsvd2[64];
UINT32 KeySize; // 64
UINT32 ScratchSize; // 2 * KeySize + 15
//UINT8 RSAPubKey[64 * 4]; // KeySize * 4
//UINT32 RSAPubExp;
//UINT8 RSASig[256];
// End of AC module header
//UINT8 Scratch[(64 * 2 + 15) * 4]; // ScratchSize * 4
// User Area
//UINT8 UserArea[1];
} TXT_ACM_FORMAT;
#define TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION_2 0x02
#define TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION_3 0x03
#define TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION_4 0x04
#define TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION_5 0x05
#define TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION_6 0x06
#define TXT_CHIPSET_ACM_INFORMATION_TABLE_UUID_V03 \
{ 0x7FC03AAA, 0x18DB46A7, 0x8F69AC2E, 0x5A7F418D }
#define TXT_CHIPSET_ACM_INFORMATION_TABLE_UUID_V02 \
{ 0x8024D6CD, 0x2A624733, 0x893AF1D1, 0xBC82113B }
#define TXT_CHIPSET_ACM_TYPE_BIOS 0
#define TXT_CHIPSET_ACM_TYPE_SINIT 1
typedef struct {
TXT_UUID Uuid;
UINT8 ChipsetACMType;
UINT8 Version;
UINT16 Length;
UINT32 ChipsetIDList;
UINT32 OsSinitTableVer;
UINT32 MinMleHeaderVer;
//#if (TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION >= TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION_3)
UINT32 Capabilities;
UINT8 AcmVersion;
//#if (TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION >= TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION_6)
UINT8 AcmRevision[3];
//#endif
//#endif
//#if (TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION >= TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION_4)
UINT32 ProcessorIDList;
//#endif
//#if (TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION >= TXT_CHIPSET_ACM_INFORMATION_TABLE_VERSION_5)
UINT32 TPMInfoList;
//#endif
} TXT_CHIPSET_ACM_INFORMATION_TABLE;
#define TXT_ACM_CHIPSET_ID_REVISION_ID_MAKE 0x1
typedef struct {
UINT32 Flags;
UINT16 VendorID;
UINT16 DeviceID;
UINT16 RevisionID;
UINT8 Reserved[2];
UINT32 ExtendedID;
} TXT_ACM_CHIPSET_ID;
typedef struct {
UINT32 Count;
TXT_ACM_CHIPSET_ID ChipsetID[1];
} TXT_CHIPSET_ID_LIST;
typedef struct {
UINT32 FMS;
UINT32 FMSMask;
UINT64 PlatformID;
UINT64 PlatformMask;
} TXT_ACM_PROCESSOR_ID;
typedef struct {
UINT32 Count;
TXT_ACM_PROCESSOR_ID ProcessorID[1];
} TXT_PROCESSOR_ID_LIST;
#define TXT_ACM_TPM_CAPABILITY_MAXIMUM_AGILITY_POLICY 1u
#define TXT_ACM_TPM_CAPABILITY_MAXIMUM_PERFORMANCE_POLICY (1u << 1)
#define TXT_ACM_TPM_CAPABILITY_DISCRETE_TPM_12_SUPPORT (1u << 2)
#define TXT_ACM_TPM_CAPABILITY_DISCRETE_TPM_20_SUPPORT (1u << 3)
#define TXT_ACM_TPM_CAPABILITY_FIRMWARE_TPM_20_SUPPORT (1u << 5)
#define TXT_ACM_TPM_CAPABILITY_TCG2_COMPLIANT_NV_INDEX (1u << 6)
typedef struct {
UINT32 Capabilities;
UINT16 Count;
UINT16 AlgorithmID[1];
} TXT_ACM_TPM_INFO_LIST;
#define TXT_BIOS_TO_OS_DATA_VERSION_1 1
#define TXT_BIOS_TO_OS_DATA_VERSION_2 2
#define TXT_BIOS_TO_OS_DATA_VERSION_3 3
#define TXT_BIOS_TO_OS_DATA_VERSION_4 4 // For optional element
#define TXT_BIOS_TO_OS_DATA_VERSION_5 5
#define TXT_BIOS_TO_OS_DATA_VERSION_6 6
typedef struct {
UINT32 Version;
UINT32 BiosSinitSize;
//#if (TXT_BIOS_TO_OS_DATA_VERSION >= TXT_BIOS_TO_OS_DATA_VERSION_2)
UINT64 LcpPdBase;
UINT64 LcpPdSize;
UINT32 NumLogProcs;
//#if (TXT_BIOS_TO_OS_DATA_VERSION >= TXT_BIOS_TO_OS_DATA_VERSION_3)
UINT32 SinitFlags;
//#if (TXT_BIOS_TO_OS_DATA_VERSION >= TXT_BIOS_TO_OS_DATA_VERSION_5)
UINT32 MleFlags;
//#endif
//#if (TXT_BIOS_TO_OS_DATA_VERSION >= TXT_BIOS_TO_OS_DATA_VERSION_4)
//TXT_HEAP_EXT_DATA_ELEMENT ExtDataElements[];
//#endif
//#endif
//#endif
} TXT_BIOS_TO_OS_DATA;
typedef struct {
UINT32 Type; // HEAP_EXTDATA_TYPE_* (global for all of heap)
UINT32 Size;
//UINT8 Data[Size - 12];
} TXT_HEAP_EXT_DATA_ELEMENT;
#define TXT_HEAP_EXTDATA_TYPE_END 0
typedef struct {
UINT32 Type; // = 0
UINT32 Size; // = 8
} TXT_HEAP_END_ELEMENT;
#define TXT_HEAP_EXTDATA_TYPE_BIOS_SPEC_VER 1
typedef struct { // For TXT BIOS Spec version
UINT16 SpecVerMajor; // (Decimal)
UINT16 SpecVerMinor; // (Decimal)
UINT16 SpecVerRevision; // (Decimal)
} TXT_HEAP_BIOS_SPEC_VER_ELEMENT;
#define TXT_HEAP_EXTDATA_TYPE_BIOSACM 2
typedef struct {
UINT32 NumAcms; // Number of BIOS ACMs carried by BIOS
//UINT64 BiosAcmAddrs[NumAcms]; // 64bit physical address of BIOS ACM(s)
} TXT_HEAP_BIOSACM_ELEMENT;
#define TXT_HEAP_EXTDATA_TYPE_BIOS_EXT 3
typedef struct {
UINT8 StmSpecVerMajor; // <major>.<minor> current = 0x00010000
UINT8 StmSpecVerMinor;
UINT16 BiosSmmFlags;
UINT16 StmFeatureFlags;
UINT32 RequiredStmSmmRevId;
UINT32 Reserved;
UINT8 GetBiosAcStatusCmd;
UINT8 UpdateBiosAcCmd;
UINT8 GetSinitAcStatusCmd;
UINT8 UpdateSinitAcCmd;
UINT8 GetStmStatusCmd;
UINT8 UpdateStmCmd;
UINT8 ReservedCmd[20];
UINT8 HandleBiosResourcesCmd;
UINT8 AccessResourcesCmd;
UINT8 LoadStmCmd;
UINT8 ReservedCmdForDebug[3];
} TXT_HEAP_BIOS_EXT_ELEMENT;
#define TXT_HEAP_EXTDATA_TYPE_CUSTOM 4
typedef struct {
UINT32 Data1;
UINT16 Data2;
UINT16 Data3;
UINT16 Data4;
UINT8 Data5[6];
} UUID;
typedef struct {
UUID Uuid;
//UINT8 Data[];
} TXT_HEAP_CUSTOM_ELEMENT;
#define TXT_HEAP_EXTDATA_TYPE_EVENTLOG_PTR 5
#define TXT_EVENTLOG_SIGNATURE "TXT Event Container\0"
#define TXT_EVENTLOG_CONTAINER_MAJOR_VERSION 1
#define TXT_EVENTLOG_CONTAINER_MINOR_VERSION 0
#define TXT_EVENTLOG_EVENT_MAJOR_VERSION 1
#define TXT_EVENTLOG_EVENT_MINOR_VERSION 0
typedef struct {
UINT32 PcrIndex;
UINT32 Type;
UINT8 Digest[20];
UINT32 DataSize;
// UINT8 Data[];
} TPM12_PCR_EVENT;
typedef struct {
UINT8 Signature[20];
UINT8 Reserved[12];
UINT8 ContainerVersionMajor;
UINT8 ContainerVersionMinor;
UINT8 PcrEventVersionMajor;
UINT8 PcrEventVersionMinor;
UINT32 Size;
UINT32 PcrEventsOffset;
UINT32 NextEventOffset;
// TPM12_PCR_EVENT PcrEvents[];
} TXT_EVENT_LOG_CONTAINER;
typedef struct {
UINT64 EventLogAddress;
} TXT_HEAP_EVENTLOG_EXT_ELEMENT;
#define TXT_HEAP_EXTDATA_TYPE_MADT 6
#define TXT_HEAP_EXTDATA_TYPE_EVENT_LOG_POINTER2 7
typedef struct {
UINT16 HashAlgID;
UINT16 Reserved;
UINT64 PhysicalAddress;
UINT32 AllocatedEventContainerSize;
UINT32 FirstRecordOffset;
UINT32 NextRecordOffset;
} TXT_HEAP_EVENT_LOG_DESCR;
typedef struct {
UINT32 Count; // Number of EventLogDescr entries
//TXT_HEAP_EVENT_LOG_DESCR EventLogDescr[Count]; // Eventlog descriptor structure
} TXT_HEAP_EVENT_LOG_POINTER_ELEMENT2;
typedef struct {
UINT32 PCRIndex;
UINT32 EventType;
//UINT8 Digest[DigestSize];
//UINT32 EventDataSize;
//UINT8 EventData[EventDataSize];
} TCG_PCR_EVENT_EX;
#define TCG_LOG_DESCRIPTOR_SIGNATURE "FRMT ID EVENT00\0"
#define TCG_LOG_DESCRIPTOR_REVISION 1
#define DIGEST_ALG_ID_SHA_1 0x00000001
#define DIGEST_ALG_ID_SHA_2_256 0x00000002
#define DIGEST_ALG_ID_SHA_2_384 0x00000003
#define DIGEST_ALG_ID_SHA_2_512 0x00000004
typedef struct {
UINT8 Signature[0x10];
UINT32 Revision;
UINT32 DigestAlgID;
UINT32 DigestSize;
} TCG_LOG_DESCRIPTOR;
#define TXT_HEAP_EXTDATA_TYPE_EVENT_LOG_POINTER2_1 8
typedef struct {
UINT64 PhysicalAddress;
UINT32 AllocatedEventContainerSize;
UINT32 FirstRecordOffset;
UINT32 NextRecordOffset;
} TXT_HEAP_EVENT_LOG_POINTER_ELEMENT2_1;
#define TXT_HEAP_EXTDATA_TYPE_MCFG 9
#define TXT_OS_TO_SINIT_DATA_VERSION_1 1
#define TXT_OS_TO_SINIT_DATA_VERSION_3 3
#define TXT_OS_TO_SINIT_DATA_VERSION_4 4
#define TXT_OS_TO_SINIT_DATA_VERSION_5 5
#define TXT_OS_TO_SINIT_DATA_VERSION_6 6
#define TXT_OS_TO_SINIT_DATA_VERSION_7 7
#define TXT_OS_TO_SINIT_DATA_VERSION TXT_OS_TO_SINIT_DATA_VERSION_7
typedef struct {
UINT32 Version;
//#if (TXT_OS_TO_SINIT_DATA_VERSION >= TXT_OS_TO_SINIT_DATA_VERSION_7)
UINT32 Flags;
//#endif
UINT64 MLEPageTableBase;
UINT64 MLESize;
UINT64 MLEHeaderBase;
//#if (TXT_OS_TO_SINIT_DATA_VERSION >= TXT_OS_TO_SINIT_DATA_VERSION_3)
UINT64 PMRLowBase;
UINT64 PMRLowSize;
UINT64 PMRHighBase;
UINT64 PMRHighSize;
UINT64 LCPPOBase;
UINT64 LCPPOSize;
//#if (TXT_OS_TO_SINIT_DATA_VERSION >= TXT_OS_TO_SINIT_DATA_VERSION_4)
UINT32 Capabilities;
//#if (TXT_OS_TO_SINIT_DATA_VERSION >= TXT_OS_TO_SINIT_DATA_VERSION_5)
UINT64 RsdpPtr;
//#if (TXT_OS_TO_SINIT_DATA_VERSION >= TXT_OS_TO_SINIT_DATA_VERSION_6)
//TXT_HEAP_EXT_DATA_ELEMENT ExtDataElements[];
//#endif
//#endif
//#endif
//#endif
} TXT_OS_TO_SINIT_DATA;
#define TXT_OS_TO_SINIT_DATA_FLAGS_MAX_AGILE_POLICY 0
#define TXT_OS_TO_SINIT_DATA_FLAGS_MAX_PERF_POLICY 1
#define TXT_SINIT_TO_MLE_DATA_VERSION_1 1
#define TXT_SINIT_TO_MLE_DATA_VERSION_3 3
#define TXT_SINIT_TO_MLE_DATA_VERSION_5 5
#define TXT_SINIT_TO_MLE_DATA_VERSION_6 6
#define TXT_SINIT_TO_MLE_DATA_VERSION_7 7
#define TXT_SINIT_TO_MLE_DATA_VERSION_8 8
#define TXT_SINIT_TO_MLE_DATA_VERSION_9 9
typedef struct {
UINT32 Version;
//#if (TXT_SINIT_TO_MLE_DATA_VERSION <= TXT_SINIT_TO_MLE_DATA_VERSION_8)
UINT8 BiosAcmID[20];
UINT32 EdxSenterFlags;
UINT64 MsegValid;
UINT8 SinitHash[20];
UINT8 MleHash[20];
UINT8 StmHash[20];
//#if (TXT_SINIT_TO_MLE_DATA_VERSION >= TXT_SINIT_TO_MLE_DATA_VERSION_3)
UINT8 LcpPolicyHash[20];
UINT32 PolicyControl;
//#endif
//#endif
//#if (TXT_SINIT_TO_MLE_DATA_VERSION >= TXT_SINIT_TO_MLE_DATA_VERSION_3)
//#if (TXT_SINIT_TO_MLE_DATA_VERSION >= TXT_SINIT_TO_MLE_DATA_VERSION_5)
UINT32 RlpWakeupAddr; // Write non-0 will wakeup AP.
//#endif
UINT32 Reserved;
UINT32 NumberOfSinitMdrs;
UINT32 SinitMdrTableOffset;
UINT32 SinitVtdDmarTableSize;
UINT32 SinitVtdDmarTableOffset;
//#if (TXT_SINIT_TO_MLE_DATA_VERSION >= TXT_SINIT_TO_MLE_DATA_VERSION_8)
UINT32 ProcessorSCRTMStatus;
//#endif
//#endif
//#if (TXT_SINIT_TO_MLE_DATA_VERSION >= TXT_SINIT_TO_MLE_DATA_VERSION_9)
//TXT_HEAP_EXT_DATA_ELEMENT ExtDataElements[];
//#endif
} TXT_SINIT_TO_MLE_DATA;
#define TXT_SINIT_MDR_TYPE_USABLE_MEMORY 0
#define TXT_SINIT_MDR_TYPE_OVERLAYED_SMRAM 1
#define TXT_SINIT_MDR_TYPE_NON_OVERLAYED_SMRAM 2
#define TXT_SINIT_MDR_TYPE_PCIE 3
#define TXT_SINIT_MDR_TYPE_PROTECTED 4
typedef struct {
UINT64 Address;
UINT64 Length;
UINT8 Type;
UINT8 Reserved[7];
} TXT_SINIT_MEMORY_DESCRIPTOR_RECORD;
typedef struct {
UINT32 GDTLimit;
UINT32 GDTBasePtr;
UINT32 Cs;
UINT32 LinearEntryPoint;
} TXT_MLE_JOIN_DATA;
typedef struct {
UINT32 ChipsetPresent:1;
UINT32 Undefined1:1;
UINT32 EnterAccs:1;
UINT32 ExitAc:1;
UINT32 Senter:1;
UINT32 Sexit:1;
UINT32 Parameters:1;
UINT32 Smctrl:1;
UINT32 Wakeup:1;
UINT32 Undefined2:22;
UINT32 ExtendedLeafs:1;
} TXT_GETSEC_CAPABILITIES_BITS;
typedef union {
TXT_GETSEC_CAPABILITIES_BITS Bits;
UINT32 Uint32;
} TXT_GETSEC_CAPABILITIES;
typedef struct {
UINT16 VendorID;
UINT16 DeviceID;
UINT16 RevisionID;
UINT16 ExtendedID;
} TXT_DID_VID_BITS;
typedef union {
TXT_DID_VID_BITS Bits;
UINT64 Uint64;
} TXT_DID_VID;
#define TXT_EVTYPE_BASE 0x400
#define TXT_EVTYPE_PCRMAPPING (TXT_EVTYPE_BASE + 1)
#define TXT_EVTYPE_HASH_START (TXT_EVTYPE_BASE + 2)
#define TXT_EVTYPE_COMBINED_HASH (TXT_EVTYPE_BASE + 3)
#define TXT_EVTYPE_MLE_HASH (TXT_EVTYPE_BASE + 4)
#define TXT_EVTYPE_BIOSAC_REG_DATA (TXT_EVTYPE_BASE + 10)
#define TXT_EVTYPE_CPU_SCRTM_STAT (TXT_EVTYPE_BASE + 11)
#define TXT_EVTYPE_LCP_CONTROL_HASH (TXT_EVTYPE_BASE + 12)
#define TXT_EVTYPE_ELEMENTS_HASH (TXT_EVTYPE_BASE + 13)
#define TXT_EVTYPE_STM_HASH (TXT_EVTYPE_BASE + 14)
#define TXT_EVTYPE_OSSINITDATA_CAP_HASH (TXT_EVTYPE_BASE + 15)
#define TXT_EVTYPE_SINIT_PUBKEY_HASH (TXT_EVTYPE_BASE + 16)
#define TXT_EVTYPE_LCP_HASH (TXT_EVTYPE_BASE + 17)
#define TXT_EVTYPE_LCP_DETAILS_HASH (TXT_EVTYPE_BASE + 18)
#define TXT_EVTYPE_LCP_AUTHORITIES_HASH (TXT_EVTYPE_BASE + 19)
#define TXT_EVTYPE_NV_INFO_HASH (TXT_EVTYPE_BASE + 20)
#define TXT_EVTYPE_CAP_VALUE (TXT_EVTYPE_BASE + 255)
#pragma pack (pop)
//
// Function
//
/**
This function return GETSEC capabilities.
@param Index GETSEC capabilities index
@retval GETSEC capabilities
**/
UINT32
AsmGetSecCapabilities (
IN UINT32 Index
);
/**
This function run GETSEC SENTER.
@param AcmBase Acm base
@param AcmSize Acm base
@param FunctionalityLevel functionality level
**/
VOID
AsmGetSecSenter (
IN UINT32 AcmBase,
IN UINT32 AcmSize,
IN UINT32 FunctionalityLevel
);
/**
This function run GETSEC SEXIT.
**/
VOID
AsmGetSecSexit (
VOID
);
/**
This function run GETSEC SMCTRL.
@param Operation SMCTRL operation
**/
VOID
AsmGetSecSmctrl (
IN UINT32 Operation
);
/**
This function run GETSEC parameters.
@param Index GETSEC parameters index
@param RegEax GETSEC parameters RegEax
@param RegEbx GETSEC parameters RegEbx
@param RegEcx GETSEC parameters RegEcx
**/
VOID
AsmGetSecParameters (
IN UINT32 Index,
OUT UINT32 *RegEax,
OUT UINT32 *RegEbx,
OUT UINT32 *RegEcx
);
/**
This function run GETSEC WAKEUP.
**/
VOID
AsmGetSecWakeup (
VOID
);
/**
This function read TXT public space.
@param Offset TXT public space register
@return TXT public space data
**/
UINT32
TxtPubRead32 (
IN UINTN Offset
);
/**
This function write TXT public space.
@param Offset TXT public space register
@param Data TXT public space data
**/
VOID
TxtPubWrite32 (
IN UINTN Offset,
IN UINT32 Data
);
/**
This function read TXT public space.
@param Offset TXT public space register
@return TXT public space data
**/
UINT64
TxtPubRead64 (
IN UINTN Offset
);
/**
This function write TXT public space.
@param Offset TXT public space register
@param Data TXT public space data
**/
VOID
TxtPubWrite64 (
IN UINTN Offset,
IN UINT64 Data
);
/**
This function read TXT private space.
@param Offset TXT private space register
@return TXT private space data
**/
UINT32
TxtPriRead32 (
IN UINTN Offset
);
/**
This function write TXT private space.
@param Offset TXT private space register
@param Data TXT private space data
**/
VOID
TxtPriWrite32 (
IN UINTN Offset,
IN UINT32 Data
);
/**
This function read TXT private space.
@param Offset TXT private space register
@return TXT private space data
**/
UINT64
TxtPriRead64 (
IN UINTN Offset
);
/**
This function write TXT private space.
@param Offset TXT private space register
@param Data TXT private space data
**/
VOID
TxtPriWrite64 (
IN UINTN Offset,
IN UINT64 Data
);
/**
This function open locality2.
**/
VOID
OpenLocality2 (
VOID
);
/**
This function close locality2.
**/
VOID
CloseLocality2 (
VOID
);
/**
This function open locality1.
**/
VOID
OpenLocality1 (
VOID
);
/**
This function close locality1.
**/
VOID
CloseLocality1 (
VOID
);
/**
This function set secrets.
**/
VOID
SetSecrets (
VOID
);
/**
This function set no-secrets.
**/
VOID
SetNoSecrets (
VOID
);
/**
This function unlock memory configuration.
**/
VOID
UnlockMemConfig (
VOID
);
/**
This function close private.
**/
VOID
ClosePrivate (
VOID
);
/**
This function return TXT heap.
@return TXT heap
**/
VOID *
GetTxtHeap (
VOID
);
/**
This function return TXT heap size.
@return TXT heap size
**/
UINTN
GetTxtHeapSize (
VOID
);
/**
This function return TXT BiosToOs region.
@return TXT BiosToOs region
**/
TXT_BIOS_TO_OS_DATA *
GetTxtBiosToOsData (
VOID
);
/**
This function return TXT OsToMle region.
@return TXT OsToMle region
**/
VOID *
GetTxtOsToMleData (
VOID
);
/**
This function return TXT OsToSinit region.
@return TXT OsToSinit region
**/
TXT_OS_TO_SINIT_DATA *
GetTxtOsToSinitData (
VOID
);
/**
This function return TXT SinitToMle region.
@return TXT SinitToMle region
**/
TXT_SINIT_TO_MLE_DATA *
GetTxtSinitToMleData (
VOID
);
/**
This function return TXT Heap occupied size.
@return TXT Heap occupied size
**/
UINTN
GetTxtHeapOccupiedSize (
VOID
);
#endif