mirror of https://review.coreboot.org/STM.git
901 lines
21 KiB
C
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
|