slimbootloader/Silicon/IdavillePkg/Include/MeBiosPayloadData.h

264 lines
6.1 KiB
C

/** @file
Copyright (c) 2020 - 2021, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _ME_BIOS_PAYLOAD_DATA_H_
#define _ME_BIOS_PAYLOAD_DATA_H_
#include <CoreBiosMsg.h>
/**
ME-BIOS Payload Data
<b>Revision 1:</b>
- Initial version.
<b>Revision 2:</b>
- Added Extended Performance data structure.
- Deprecated MBP ICC profile structure.
**/
#define MBP_DATA_REVISION 2
#pragma pack (1)
///
/// Common MBP types
///
typedef struct {
UINT8 MbpSize; ///< Byte 0 - MBP Size in DW including Header
UINT8 NumEntries; ///< Byte 1 - Number of Entries (Data Items) in MBP
UINT16 Reserved; ///< Byte [3:2] - Reserved
} MBP_HEADER;
///
/// MBP items header
///
typedef union {
UINT32 Data;
struct {
UINT32 AppId : 8; ///< Byte 0 - Application ID
UINT32 ItemId : 8; ///< Byte 1 - Item ID
UINT32 Length : 8; ///< Byte 2 - Length in DW
UINT32 Flags : 8; ///< Byte 3 - Flags
} Fields;
} MBP_ITEM_HEADER;
//
// Macro to build abstract MBP Item Id
//
#define MBP_ITEM_ID(ApplicationId, ItemId) ((ApplicationId << 5) | ItemId)
//
// Enum for AppId
//
typedef enum {
MbpAppIdKernel = 1,
MbpAppIdHwa = 4,
MbpAppIdIcc = 5,
MbpAppIdDnx = 7
} MBP_APPLICATION_ID;
//
// Enums for ItemIds
//
typedef enum {
MbpItemIdFwVerName = 1,
MbpItemIdFwCapabilities = 2,
MbpItemIdBiosPlatformKey = 4,
MbpItemIdCsePlatformType = 5,
MbpItemIdUnconfigOnRtc = 8,
MbpItemIdShipState = 9,
MbpItemIdPerfDataEx = 13,
MbpItemIdFwArbSvn = 14,
MbpItemIdMeasuredBoot = 15,
MbpItemIdOemKeyRevoke = 16
} MBP_KERNEL_ITEM_ID;
typedef enum {
MbpItemIdHwaMtu = 1
} MBP_HWA_ITEM_ID;
typedef enum {
MbpItemIdMphyData = 3,
MbpItemIdOemPhyData = 4
} MBP_ICC_ITEM_ID;
//
// Enum for Flags
//
typedef enum {
MbpItemFlagStoreToNvm = 0, ///< Item contains data to be stored in flash
MbpItemFlagSensitive = 1, ///< Item contains sensitive data. Do not store in flash.
MbpItemFlagRuntime = 2, ///< Item is generated at runtime. Do not store in flash.
} MBP_ITEM_FLAGS;
///
/// Kernel AppId
///
typedef struct {
UINT32 MajorVersion : 16;
UINT32 MinorVersion : 16;
UINT32 HotfixVersion : 16;
UINT32 BuildVersion : 16;
} MBP_FW_VERSION_NAME;
typedef struct {
MEFWCAPS_SKU FwCapabilities;
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_FW_CAPS_SKU;
typedef struct {
UINT32 Key[8];
} MBP_PLATFORM_KEY;
typedef struct {
PLATFORM_TYPE_RULE_DATA RuleData;
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_PLAT_TYPE;
typedef struct {
UINT32 DisUnconfigOnRtcClearState : 1;
UINT32 Reserved : 31;
} MBP_ME_UNCONF_ON_RTC_DATA;
typedef struct {
MBP_ME_UNCONF_ON_RTC_DATA UnconfigOnRtcClearData;
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_ME_UNCONF_ON_RTC_STATE;
typedef struct {
MEFWCAPS_SKU FwFeatures;
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_FW_FEATURES_STATE;
typedef struct {
/*
ARB SVN flags:
BIT[0]: set if ARB SVN mismatch is found for any of ARB SVN components.
BIT[1..6]: Reserved, should be 0
BIT[7]: set if ARB_SVN exceeds 1 byte size
*/
UINT8 Flags;
UINT8 MinCseArbSvn; ///< Minimal CSE ARB SVN.
UINT8 CurrCseArbSvn; ///< Current CSE ARB SVN.
UINT8 Reserved; ///< Reserved, should be 0.
} MBP_ARB_SVN_DATA;
typedef struct {
MBP_ARB_SVN_DATA ArbSvnData;
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_ARB_SVN_STATE;
///
/// MBP IFWI DNX request structure containing IFWI Dnx request data
///
typedef struct {
UINT32 EnterRecovery;
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_IFWI_DNX_REQUEST;
typedef struct {
UINT32 MeasuredBoot : 1;
UINT32 Reserved : 31;
} MBP_MEASURED_BOOT_DATA;
typedef struct {
MBP_MEASURED_BOOT_DATA MeasuredBootData;
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_MEASURED_BOOT_SUPPORT;
typedef struct {
UINT32 TimeStamp0;
UINT16 TimeStamp1;
UINT16 TimeStamp2;
UINT16 TimeStamp3;
UINT16 TimeStamp4;
UINT16 TimeStamp5;
UINT16 TimeStamp6;
} MBP_PERF_DATA;
typedef struct {
MBP_PERF_DATA Data;
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_PERF_DATA_EX;
///
/// HWA AppId
///
typedef union {
UINT32 Raw;
struct {
UINT32 MediaTablePush : 1;
UINT32 Reserved : 31;
} Fields;
} HWA_DATA;
typedef struct {
HWA_DATA Data;
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_HWA_REQ;
///
/// ICC AppId
///
typedef struct {
UINT32 ChipsetInitVer[3];
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_MPHY_DATA;
typedef struct {
UINT64 Data;
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_OEM_PHY_DATA;
typedef struct {
UINT32 OemKeyDataRsrvd;
BOOLEAN Available;
UINT8 Reserved[3];
} MBP_OEM_KEY_REVOKE;
///
/// ME BIOS Payload structure containing insensitive data only
///
typedef struct {
MBP_FW_VERSION_NAME FwVersionName;
MBP_FW_CAPS_SKU FwCapsSku;
MBP_FW_FEATURES_STATE FwFeaturesState;
MBP_PLAT_TYPE FwPlatType;
MBP_HWA_REQ HwaRequest;
MBP_ME_UNCONF_ON_RTC_STATE UnconfigOnRtcClearState;
MBP_ARB_SVN_STATE ArbSvnState;
MBP_MPHY_DATA MphyData;
MBP_IFWI_DNX_REQUEST IfwiDnxRequest;
UINT32 Reserved;
MBP_MEASURED_BOOT_SUPPORT MeasuredBootSupport;
MBP_PERF_DATA_EX PerfDataEx;
MBP_OEM_PHY_DATA OemPhyData;
MBP_OEM_KEY_REVOKE OemKeyRevoke;
} ME_BIOS_PAYLOAD;
///
/// All items which can't be available when 3rd part OPROMs/drivers are loaded
/// must be added to below structure only
///
typedef struct {
MBP_PLATFORM_KEY PlatformKey;
} ME_BIOS_PAYLOAD_SENSITIVE;
#pragma pack ()
#endif