summaryrefslogtreecommitdiff
path: root/ReferenceCode/ME/ActiveManagement/AlertStandardFormat
diff options
context:
space:
mode:
authorraywu <raywu0301@gmail.com>2018-06-15 00:00:50 +0800
committerraywu <raywu0301@gmail.com>2018-06-15 00:00:50 +0800
commitb7c51c9cf4864df6aabb99a1ae843becd577237c (patch)
treeeebe9b0d0ca03062955223097e57da84dd618b9a /ReferenceCode/ME/ActiveManagement/AlertStandardFormat
downloadzprj-b7c51c9cf4864df6aabb99a1ae843becd577237c.tar.xz
init. 1AQQW051HEADmaster
Diffstat (limited to 'ReferenceCode/ME/ActiveManagement/AlertStandardFormat')
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/AlertStandardFormat.cif12
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/AlertStandardFormat.sdl19
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.c1561
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.cif10
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.h397
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.sdl10
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.c1234
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.cif13
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.dxs47
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.h340
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.inf99
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.mak59
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.sdl25
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.c437
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.cif13
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.dxs29
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.h204
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.inf93
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.mak50
-rw-r--r--ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.sdl25
20 files changed, 4677 insertions, 0 deletions
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/AlertStandardFormat.cif b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/AlertStandardFormat.cif
new file mode 100644
index 0000000..ad65d2c
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/AlertStandardFormat.cif
@@ -0,0 +1,12 @@
+<component>
+ name = "AlertStandardFormat"
+ category = ModulePart
+ LocalRoot = "ReferenceCode\ME\ActiveManagement\AlertStandardFormat\Heci\"
+ RefName = "AlertStandardFormat"
+[files]
+"AlertStandardFormat.sdl"
+[parts]
+"AlertStandardFormatCommon"
+"AlertStandardFormatDxe"
+"AlertStandardFormatPei"
+<endComponent>
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/AlertStandardFormat.sdl b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/AlertStandardFormat.sdl
new file mode 100644
index 0000000..d02eb68
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/AlertStandardFormat.sdl
@@ -0,0 +1,19 @@
+TOKEN
+ Name = AlertStandardFormat_SUPPORT
+ Value = 1
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+ Help = "Main switch to enable AlertStandardFormat support in Project"
+End
+
+PATH
+ Name = "AlertStandardFormat_SOURCE"
+ Help = "AlertStandardFormat Driver files source directory"
+End
+
+ELINK
+ Name = "AlertStandardFormat_INCLUDES"
+ InvokeOrder = ReplaceParent
+End
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.c b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.c
new file mode 100644
index 0000000..7f5bf69
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.c
@@ -0,0 +1,1561 @@
+/** @file
+ Processes ASF messages
+
+@copyright
+ Copyright (c) 2010 - 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
+**/
+EFI_ASF_DATA_HUB_MAP mAsfProgressDataHubMap[] = {
+ {
+ EfiAsfMessageBiosPresent,
+ EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_POWER_ON_INIT
+ },
+ {
+ EfiAsfMessageMemInit,
+ EFI_COMPUTING_UNIT_MEMORY | EFI_CU_HP_PC_RAM_INIT
+ },
+ {
+ EfiAsfMessageMemInitDone,
+ EFI_COMPUTING_UNIT_MEMORY | EFI_CU_PC_INIT_END
+ },
+ {
+ EfiAsfMessageCacheInit,
+ EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_CACHE_INIT
+ },
+ {
+ EfiAsfMessageSmbusInit,
+ EFI_IO_BUS_SMBUS | EFI_P_PC_ENABLE
+ },
+ {
+ EfiAsfMessageOSWakeVector,
+ EFI_SOFTWARE_PEI_MODULE | EFI_SW_DXE_RT_PC_S3
+ },
+ {
+ EfiAsfMessageMotherBoardInit,
+ EFI_COMPUTING_UNIT_CHIPSET | EFI_CU_PC_INIT_BEGIN
+ },
+ {
+ EfiAsfMessageBspInit,
+ EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_BSP_SELECT
+ },
+#ifndef ASF_PEI
+ {
+ EfiAsfMessageHddInit,
+ EFI_PERIPHERAL_FIXED_MEDIA | EFI_P_PC_ENABLE
+ },
+ {
+ EfiAsfMessageApInit,
+ EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_AP_INIT
+ },
+ {
+ EfiAsfMessageUserAuthentication,
+ EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_PC_AUTHENTICATE_BEGIN
+ },
+ {
+ EfiAsfMessageUserInitSetup,
+ EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_PC_USER_SETUP
+ },
+ {
+ EfiAsfMessageUsbResourceConfig,
+ EFI_IO_BUS_USB | EFI_P_PC_ENABLE
+ },
+ {
+ EfiAsfMessagePciResourceConfig,
+ EFI_IO_BUS_PCI | EFI_IOB_PCI_PC_BUS_ENUM
+ },
+ {
+ EfiAsfMessageOptionRomInit,
+ EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_LEGACY_OPROM_INIT
+ },
+ {
+ EfiAsfMessageVideoInit,
+ EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_PC_ENABLE
+ },
+ {
+ EfiAsfMessageKbcInit,
+ EFI_PERIPHERAL_KEYBOARD | EFI_P_PC_ENABLE
+ },
+ {
+ EfiAsfMessageEmControllerInit,
+ EFI_PERIPHERAL_EMBEDDED_CONTROLLER | EFI_P_PC_INIT
+ },
+ {
+ EfiAsfMessageDockAttached,
+ EFI_PERIPHERAL_DOCK | EFI_P_PC_INIT
+ },
+ {
+ EfiAsfMessageEnableDock,
+ EFI_PERIPHERAL_DOCK | EFI_P_PC_ENABLE
+ },
+ {
+ EfiAsfMessageDockEject,
+ EFI_PERIPHERAL_DOCK | EFI_P_PC_RESET
+ },
+ {
+ EfiAsfMessageDisableDock,
+ EFI_PERIPHERAL_DOCK | EFI_P_PC_DISABLE
+ },
+ {
+ EfiAsfMessageFdcInit,
+ EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_ENABLE
+ },
+ {
+ EfiAsfMessageKeyboardTest,
+ EFI_PERIPHERAL_KEYBOARD | EFI_P_KEYBOARD_PC_SELF_TEST
+ },
+ {
+ EfiAsfMessageMouseTest,
+ EFI_PERIPHERAL_MOUSE | EFI_P_MOUSE_PC_SELF_TEST
+ },
+ {
+ EfiAsfMessageAmtBxDone,
+ EFI_SOFTWARE_UNSPECIFIED | EFI_SW_DXE_AMTBX_OPROM_DONE
+ },
+ {
+ EfiAsfMessageBatteryPresenceDetected,
+ EFI_PERIPHERAL_BATTERY | EFI_P_PC_PRESENCE_DETECT
+ },
+#endif
+};
+
+EFI_ASF_DATA_HUB_MAP mAsfErrorDataHubMap[] = {
+ {
+ EfiAsfMessageNoMemory,
+ EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_NONE_DETECTED
+ },
+ {
+ EfiAsfMessageMemoryFailure,
+ EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_NONE_USEFUL
+ },
+ {
+ EfiAsfMessageBoardFailure,
+ EFI_COMPUTING_UNIT_CHIPSET | EFI_CU_EC_NOT_CONFIGURED
+ },
+ {
+ EfiAsfMessageFirmwareCorruption,
+ EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_CORE_EC_DXE_CORRUPT
+ },
+ {
+ EfiAsfMessageChassisIntrusion,
+ EFI_COMPUTING_UNIT_CHIPSET | EFI_CU_CHIPSET_PC_INTRUDER_DETECT
+ },
+#ifndef ASF_PEI
+ {
+ EfiAsfMessageHddFailure,
+ EFI_PERIPHERAL_FIXED_MEDIA | EFI_P_EC_NOT_DETECTED
+ },
+ {
+ EfiAsfMessageFdcFailure,
+ EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_EC_CONTROLLER_ERROR
+ },
+ {
+ EfiAsfMessageHdcFailure,
+ EFI_PERIPHERAL_FIXED_MEDIA | EFI_P_EC_CONTROLLER_ERROR
+ },
+ {
+ EfiAsfMessageKbdFailure,
+ EFI_PERIPHERAL_KEYBOARD | EFI_P_EC_NOT_DETECTED
+ },
+ {
+ EfiAsfMessageNoFdd,
+ EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_EC_NOT_DETECTED
+ },
+ {
+ EfiAsfMessageVideoControllerFailure,
+ EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_EC_CONTROLLER_ERROR
+ },
+ {
+ EfiAsfMessageNoVideo,
+ EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_EC_NOT_DETECTED
+ },
+ {
+ EfiAsfMessageCpuVidMismatch,
+ EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_VID_MISMATCH
+ },
+ {
+ EfiAsfMessageCpuSpeedMatchingFailure,
+ EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_SPEED_MATCHING_FAILURE
+ },
+ {
+ EfiAsfMessageNoBootMedia,
+ EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_NO_BOOT_MEDIA
+ },
+ {
+ EfiAsfMessageUserAuthenticationInvalid,
+ EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_AUTHENTICATE_USER_INVALID
+ },
+ {
+ EfiAsfMessageHddAuthenticationInvalid,
+ EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_AUTHENTICATE_HDD_INVALID,
+ },
+ {
+ EfiAsfMessageTemperatureGenericCritical,
+ EFI_PERIPHERAL_TEMPERATURE | EFI_P_TEMERATURE_EC_GENERIC_CRITICAL
+ },
+ {
+ EfiAsfMessageTemperatureOverCritical,
+ EFI_PERIPHERAL_TEMPERATURE | EFI_P_TEMERATURE_EC_OVER_CRITICAL
+ },
+ {
+ EfiAsfMessageTemperatureUnderCritical,
+ EFI_PERIPHERAL_TEMPERATURE | EFI_P_TEMERATURE_EC_UNDER_CRITICAL
+ },
+ {
+ EfiAsfMessageVoltageGenericCritical,
+ EFI_PERIPHERAL_VOLTAGE | EFI_P_VOLTAGE_EC_GENERIC_CRITICAL
+ },
+ {
+ EfiAsfMessageVoltageOverCritical,
+ EFI_PERIPHERAL_VOLTAGE | EFI_P_VOLTAGE_EC_OVER_CRITICAL
+ },
+ {
+ EfiAsfMessageVoltageUnderCritical,
+ EFI_PERIPHERAL_VOLTAGE | EFI_P_VOLTAGE_EC_UNDER_CRITICAL
+ },
+ {
+ EfiAsfMessageFanGenericCritical,
+ EFI_PERIPHERAL_FAN | EFI_P_FAN_EC_GENERIC_CRITICAL
+ },
+ {
+ EfiAsfMessageFanPredictiveFailure,
+ EFI_PERIPHERAL_FAN | EFI_P_FAN_EC_PREDICTIVE_FAILURE
+ },
+ {
+ EfiAsfMessageFanLowSpeedCritical,
+ EFI_PERIPHERAL_FAN | EFI_P_FAN_EC_LOW_SPEED_CRITICAL
+ },
+ {
+ EfiAsfMessageBatteryLowCritical,
+ EFI_PERIPHERAL_BATTERY | EFI_P_BATTERY_EC_LOW_CRITICAL
+ },
+ {
+ EfiAsfMessageTemperatureGenericWarning,
+ EFI_PERIPHERAL_TEMPERATURE | EFI_P_TEMERATURE_PC_GENERIC_WARNING
+ },
+ {
+ EfiAsfMessageTemperatureOverWarning,
+ EFI_PERIPHERAL_TEMPERATURE | EFI_P_TEMERATURE_PC_OVER_WARNING
+ },
+ {
+ EfiAsfMessageTemperatureUnderWarning,
+ EFI_PERIPHERAL_TEMPERATURE | EFI_P_TEMERATURE_PC_UNDER_WARNING
+ },
+ {
+ EfiAsfMessageFanLowSpeedWarning,
+ EFI_PERIPHERAL_FAN | EFI_P_FAN_PC_LOW_SPEED_WARNING
+ },
+ {
+ EfiAsfMessageBatteryLowWarning,
+ EFI_PERIPHERAL_BATTERY | EFI_P_BATTERY_PC_LOW_WARNING
+ },
+ {
+ EfiAsfMessagePowerFailure,
+ EFI_PERIPHERAL_POWER_SUPPLY | EFI_P_BATTERY_PC_LOW_WARNING
+ },
+ {
+ EfiAsfMessageAmtBxNotStarted,
+ EFI_SOFTWARE_UNSPECIFIED | EFI_SW_DXE_AMTBX_OPROM_NOT_STARTED
+ },
+ {
+ EfiAsfMessageAmtBxSleepS4ReportedNotTaken,
+ EFI_SOFTWARE_UNSPECIFIED | EFI_SW_DXE_AMTBX_SLEEP_S4_NOT_TAKEN
+ },
+ {
+ EfiAsfMessageAmtBxSleepS5ReportedNotTaken,
+ EFI_SOFTWARE_UNSPECIFIED | EFI_SW_DXE_AMTBX_SLEEP_S5_NOT_TAKEN
+ },
+ {
+ EfiAsfMessageAmtBxSleepUnspecifiedReportedNotTaken,
+ EFI_SOFTWARE_UNSPECIFIED | EFI_SW_DXE_AMTBX_SLEEP_UNSPECD_NOT_TAKEN
+ },
+ {
+ EfiAsfMessageAmtBxErrActionIntF,
+ EFI_SOFTWARE_UNSPECIFIED | EFI_SW_DXE_AMTBX_ERROR_ACTION_INTF
+ },
+ {
+ EfiAsfMessageAmtBxErrActionInv,
+ EFI_SOFTWARE_UNSPECIFIED | EFI_SW_DXE_AMTBX_ERROR_ACTION_INV
+ },
+ {
+ EfiAsfMessageAmtBxErrActionSetup,
+ EFI_SOFTWARE_UNSPECIFIED | EFI_SW_DXE_AMTBX_ERROR_ACTION_SETUP
+ },
+ {
+ EfiAsfMessageAmtBxErrActionFailure,
+ EFI_SOFTWARE_UNSPECIFIED | EFI_SW_DXE_AMTBX_ERROR_ACTION_FAIL
+ },
+ {
+ EfiAsfMessageAmtBxErrActionUnspecified,
+ EFI_SOFTWARE_UNSPECIFIED | EFI_SW_DXE_AMTBX_ERROR_ACTION_UNSPECD
+ },
+ {
+ EfiAsfMessageAmtBxOtherUnspecified,
+ EFI_SOFTWARE_UNSPECIFIED | EFI_SW_DXE_AMTBX_OTHER_UNSPECD
+ },
+#endif
+};
+
+EFI_ASF_FRAMEWORK_MESSAGE mAsfFrameworkMessage[] = {
+ {
+ EfiAsfMessageBiosPresent,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_ENTITY_PRESENCE,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_BIOS,
+ 0,
+ 0x40,
+ EFI_ASF_FP_BOARD_INIT
+ }
+ },
+ {
+ EfiAsfMessageMemInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_MEMORY,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_MEMORY_INIT
+ }
+ },
+ {
+ EfiAsfMessageMemInitDone,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS | 0x80, // Exit
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_MEMORY,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_MEMORY_INIT
+ }
+ },
+ {
+ EfiAsfMessageCacheInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_PROCESSOR,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_CACHE_INIT
+ }
+ },
+ {
+ EfiAsfMessageSmbusInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_SMBUS_INIT
+ }
+ },
+ {
+ EfiAsfMessageOSWakeVector,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_UNSPECIFIED,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_WAKE_OS
+ }
+ },
+ {
+ EfiAsfMessageMotherBoardInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_BOARD_INIT
+ }
+ },
+ //
+ // Error Event
+ //
+ {
+ EfiAsfMessageNoMemory,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_MEMORY,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_NO_MEMORY
+ }
+ },
+ {
+ EfiAsfMessageMemoryFailure,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_MEMORY,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_MEMORY_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageBoardFailure,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_BOARD_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageFirmwareCorruption,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Insnce
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_ROM_CORRUPTED
+ }
+ },
+ //
+ // Chassis Intrusion
+ //
+ {
+ EfiAsfMessageChassisIntrusion,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_CHASSIS_INTRUSION,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_CHASSIS_INTRUSION_GENERIC,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+#ifndef ASF_PEI
+ //
+ // Progress Event
+ //
+ {
+ EfiAsfMessageHddInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_DISK,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_HDD_INIT
+ }
+ },
+ {
+ EfiAsfMessageApInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_PROCESSOR,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_AP_INIT
+ }
+ },
+ {
+ EfiAsfMessageUserAuthentication,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_BIOS,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_USER_AUTHENTICATION
+ }
+ },
+ {
+ EfiAsfMessageUserInitSetup,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_BIOS,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_USER_SETUP
+ }
+ },
+ {
+ EfiAsfMessageUsbResourceConfig,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_BIOS,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_USB_RESOURCE_CONFIG
+ }
+ },
+ {
+ EfiAsfMessagePciResourceConfig,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_BIOS,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_PCI_RESOURCE_CONFIG
+ }
+ },
+ {
+ EfiAsfMessageOptionRomInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_ADDIN_CARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_OPTION_ROM_INIT
+ }
+ },
+ {
+ EfiAsfMessageVideoInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_VIDEO_INIT
+ }
+ },
+ {
+ EfiAsfMessageKbcInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_KBC_INIT
+ }
+ },
+ {
+ EfiAsfMessageEmControllerInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_EC_INIT
+ }
+ },
+ {
+ EfiAsfMessageDockAttached,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_ATTACH_DOCK
+ }
+ },
+ {
+ EfiAsfMessageEnableDock,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_ENABLE_DOCK
+ }
+ },
+ {
+ EfiAsfMessageDockEject,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_EJECT_DOCK
+ }
+ },
+ {
+ EfiAsfMessageDisableDock,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_DISABLE_DOCK
+ }
+ },
+ {
+ EfiAsfMessageFdcInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_FDC_INIT
+ }
+ },
+ {
+ EfiAsfMessageKeyboardTest,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_KBD_TEST
+ }
+ },
+ {
+ EfiAsfMessageMouseTest,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_MOUSE_TEST
+ }
+ },
+ {
+ EfiAsfMessageBspInit,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_PROCESSOR,
+ 0, // Instance
+ EFI_ASF_FP_EVENT_DATA0,
+ EFI_ASF_FP_BSP_INIT
+ }
+ },
+ //
+ // Error Event
+ //
+ {
+ EfiAsfMessageHddFailure,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_DISK,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_HDD_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageFdcFailure,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_DISK,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_FDC_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageHdcFailure,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_DISK,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_HDC_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageKbdFailure,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_KBD_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageNoFdd,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_DISK,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_REMOVABLE_BOOT_MEDIA_NOT_FOUND
+ }
+ },
+ {
+ EfiAsfMessageVideoControllerFailure,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_DISK,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_VIDEO_CONTROLLER_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageNoVideo,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_VIDEO_DEVICE_NOT_FOUND
+ }
+ },
+ {
+ EfiAsfMessageCpuVidMismatch,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_PROCESSOR,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_CPU_VOLTAGE_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageCpuSpeedMatchingFailure,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_PROCESSOR,
+ 0, // Instance
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_CPU_MISMATCH_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageUserAuthenticationInvalid,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_RETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SECURITY_VIOLATION,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SECURITY_VIOLATION_USER_PASSWORD,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_BIOS,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageHddAuthenticationInvalid,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_RETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SECURITY_VIOLATION,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SECURITY_VIOLATION_OTHER_PASSWORD,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_BIOS,
+ 0, // Instance
+ }
+ },
+ //
+ // Boot Error
+ //
+ {
+ EfiAsfMessageNoBootMedia,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_DISK,
+ 0, // Insnce
+ EFI_ASF_FE_EVENT_DATA0,
+ EFI_ASF_FE_REMOVABLE_BOOT_MEDIA_NOT_FOUND
+ }
+ },
+ {
+ EfiAsfMessageAmtBxDone,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_INTEL_AMT,
+ 0,
+ 0x40,
+ EFI_ASF_FP_AMTBX_INIT
+ }
+ },
+ {
+ EfiAsfMessageAmtBxNotStarted,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_INTEL_AMT,
+ 0,
+ 0x40,
+ EFI_ASF_FE_AMTBX_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageAmtBxSleepS4ReportedNotTaken,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_INTEL_AMT,
+ 0,
+ 0x40,
+ EFI_ASF_FE_AMTBX_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageAmtBxSleepS5ReportedNotTaken,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_INTEL_AMT,
+ 0,
+ 0x40,
+ EFI_ASF_FE_AMTBX_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageAmtBxSleepUnspecifiedReportedNotTaken,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_INTEL_AMT,
+ 0,
+ 0x40,
+ EFI_ASF_FE_AMTBX_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageAmtBxErrActionIntF,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_INTEL_AMT,
+ 0,
+ 0x40,
+ EFI_ASF_FE_AMTBX_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageAmtBxErrActionInv,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_INTEL_AMT,
+ 0,
+ 0x40,
+ EFI_ASF_FE_AMTBX_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageAmtBxErrActionSetup,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_INTEL_AMT,
+ 0,
+ 0x40,
+ EFI_ASF_FE_AMTBX_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageAmtBxErrActionFailure,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_INTEL_AMT,
+ 0,
+ 0x40,
+ EFI_ASF_FE_AMTBX_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageAmtBxErrActionUnspecified,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_INTEL_AMT,
+ 0,
+ 0x40,
+ EFI_ASF_FE_AMTBX_FAILURE
+ }
+ },
+ {
+ EfiAsfMessageAmtBxOtherUnspecified,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ 0xFF,
+ 0xFF,
+ EFI_ASF_ENTITY_INTEL_AMT,
+ 0,
+ 0x40,
+ EFI_ASF_FE_AMTBX_FAILURE
+ }
+ },
+ //
+ // Temperature
+ //
+ {
+ EfiAsfMessageTemperatureGenericCritical,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_TEMPERATURE,
+ EFI_ASF_EVENT_TYPE_SEVERITY_STATE,
+ EFI_ASF_EVENT_OFFSET_SEVERITY_MORE_CRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_CRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageTemperatureGenericWarning,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_TEMPERATURE,
+ EFI_ASF_EVENT_TYPE_SEVERITY_STATE,
+ EFI_ASF_EVENT_OFFSET_SEVERITY_MORE_NONCRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageTemperatureOverCritical,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_TEMPERATURE,
+ EFI_ASF_EVENT_TYPE_THRESHOLD_BASED,
+ EFI_ASF_EVENT_OFFSET_THRESHOLD_UPPER_CRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_CRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageTemperatureOverWarning,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_TEMPERATURE,
+ EFI_ASF_EVENT_TYPE_THRESHOLD_BASED,
+ EFI_ASF_EVENT_OFFSET_THRESHOLD_UPPER_NONCRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageTemperatureUnderCritical,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_TEMPERATURE,
+ EFI_ASF_EVENT_TYPE_THRESHOLD_BASED,
+ EFI_ASF_EVENT_OFFSET_THRESHOLD_LOWER_CRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_CRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageTemperatureUnderWarning,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_TEMPERATURE,
+ EFI_ASF_EVENT_TYPE_THRESHOLD_BASED,
+ EFI_ASF_EVENT_OFFSET_THRESHOLD_LOWER_NONCRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ //
+ // Voltage
+ //
+ {
+ EfiAsfMessageVoltageGenericCritical,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_VOLTAGE,
+ EFI_ASF_EVENT_TYPE_SEVERITY_STATE,
+ EFI_ASF_EVENT_OFFSET_SEVERITY_MORE_CRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_CRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageVoltageOverCritical,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_VOLTAGE,
+ EFI_ASF_EVENT_TYPE_THRESHOLD_BASED,
+ EFI_ASF_EVENT_OFFSET_THRESHOLD_UPPER_CRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_CRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageVoltageUnderCritical,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_VOLTAGE,
+ EFI_ASF_EVENT_TYPE_THRESHOLD_BASED,
+ EFI_ASF_EVENT_OFFSET_THRESHOLD_LOWER_CRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_CRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ //
+ // Fan
+ //
+ {
+ EfiAsfMessageFanGenericCritical,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_FAN,
+ EFI_ASF_EVENT_TYPE_SEVERITY_STATE,
+ EFI_ASF_EVENT_OFFSET_SEVERITY_MORE_CRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_CRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageFanPredictiveFailure,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_FAN,
+ EFI_ASF_EVENT_TYPE_DISCRETE_EVENT_PREDICTIVE_FAIL,
+ EFI_ASF_EVENT_OFFSET_DISCRETE_EVENT_PREDICTIVE_FAIL_ASSERT,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_CRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageFanLowSpeedCritical,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_FAN,
+ EFI_ASF_EVENT_TYPE_THRESHOLD_BASED,
+ EFI_ASF_EVENT_OFFSET_THRESHOLD_LOWER_CRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_CRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageFanLowSpeedWarning,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_FAN,
+ EFI_ASF_EVENT_TYPE_THRESHOLD_BASED,
+ EFI_ASF_EVENT_OFFSET_THRESHOLD_LOWER_NONCRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Instance
+ }
+ },
+ //
+ // Battery
+ //
+ {
+ EfiAsfMessageBatteryLowWarning,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_BATTERY,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_BATTERY_LOW_WARNING,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_POWER_SUPPLY,
+ 0, // Instance
+ }
+ },
+ {
+ EfiAsfMessageBatteryLowCritical,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_BATTERY,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_BATTERY_LOW_CRITICAL,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_CRITICAL,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_POWER_SUPPLY,
+ 0, // Insnce
+ }
+ },
+ {
+ EfiAsfMessageBatteryPresenceDetected,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_BATTERY,
+ EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC,
+ EFI_ASF_EVENT_OFFSET_BATTERY_PRESENCE_DETECTED,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_MONITOR,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_POWER_SUPPLY,
+ 0, // Insnce
+ }
+ },
+ {
+ EfiAsfMessagePowerFailure,
+ {
+ EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT,
+ EFI_ASF_VERSION,
+ EFI_ASF_EVENT_SENSOR_TYPE_POWER_SUPPLY,
+ EFI_ASF_EVENT_TYPE_SEVERITY_STATE,
+ EFI_ASF_EVENT_OFFSET_POWER_SUPPLY_FAILURE,
+ EFI_ASF_EVENT_SOURCE_TYPE_ASF10,
+ EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE,
+ EFI_ASF_SENSOR_DEVICE,
+ EFI_ASF_SENSOR_NUMBER,
+ EFI_ASF_ENTITY_SYSTEM_BOARD,
+ 0, // Insnce
+ }
+ },
+#endif
+};
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.cif b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.cif
new file mode 100644
index 0000000..ee34575
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.cif
@@ -0,0 +1,10 @@
+<component>
+ name = "AlertStandardFormatCommon"
+ category = ModulePart
+ LocalRoot = "ReferenceCode\ME\ActiveManagement\AlertStandardFormat\Heci\Common\"
+ RefName = "AlertStandardFormatCommon"
+[files]
+"AlertStandardFormatCommon.sdl"
+"AlertStandardFormatCommon.c"
+"AlertStandardFormatCommon.h"
+<endComponent>
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.h b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.h
new file mode 100644
index 0000000..5949fb9
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.h
@@ -0,0 +1,397 @@
+/** @file
+ Include file for ASF Driver
+
+@copyright
+ Copyright (c) 2010 - 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 _ALERT_STANDARD_FORMAT_COMMON_H
+#define _ALERT_STANDARD_FORMAT_COMMON_H
+
+#define EFI_ASF_VERSION 0x10
+
+//
+// ASF SMBUS Messages
+//
+#define EFI_ASF_MESSAGE_COMMAND_SENSE_DEVICE_SYSTEM_STATE 0x01
+#define EFI_ASF_MESSAGE_COMMAND_MANAGEMENT_CONTROL 0x02
+#define EFI_ASF_MESSAGE_COMMAND_ASF_CONFIGURATION 0x03
+#define EFI_ASF_MESSAGE_COMMAND_MESSAGE 0x04
+#define EFI_ASF_MESSAGE_COMMAND_GETUUID 0xC7
+
+#define EFI_ASF_MESSAGE_BYTECOUNT_RETURN_BOOT_OPT 0x0D
+#define EFI_ASF_MESSAGE_BYTECOUNT_CLEAR_BOOT_OPT 0x02
+#define EFI_ASF_MESSAGE_BYTEOUNTT_GET_BOOT_OPT 0x02
+#define EFI_ASF_MESSAGE_BYTECOUNT_DEVICE_TYPE_POLL 0x03
+#define EFI_ASF_MESSAGE_BYTECOUNT_STOP_WATCH_DOG_TIMER 0x02
+#define EFI_ASF_MESSAGE_BYTECOUNT_START_WATCH_DOG_TIMER 0x0D
+
+#define EFI_ASF_MESSAGE_SUBCOMMAND_RETURN_BOOT_OPT 0x16
+#define EFI_ASF_MESSAGE_SUBCOMMAND_CLEAR_BOOT_OPT 0x15
+#define EFI_ASF_MESSAGE_SUBCOMMAND_DEVICE_TYPE_POLL 0x13
+#define EFI_ASF_MESSAGE_SUBCOMMAND_STOP_WATCH_DOG_TIMER 0x14
+#define EFI_ASF_MESSAGE_SUBCOMMAND_START_WATCH_DOG_TIMER 0x13
+#define EFI_ASF_MESSAGE_SUBCOMMAND_RETRANSMIT 0x15
+#define EFI_ASF_MESSAGE_SUBCOMMAND_NORETRANSMIT 0x16
+#define EFI_ASF_MESSAGE_SUBCOMMAND_SYSTEM_STATE 0x18
+
+#define EFI_ASF_MESSAGE_VERSIONNUMBER 0x10
+
+//
+// ASF Event Sensor Type Codes
+//
+#define EFI_ASF_EVENT_SENSOR_TYPE_SYS_FW_ERR_PROG 0x0F
+#define EFI_ASF_EVENT_SENSOR_TYPE_POST_ERR_PROG 0x0F
+#define EFI_ASF_EVENT_SENSOR_TYPE_BOOT_ERROR 0x1E
+#define EFI_ASF_EVENT_SENSOR_TYPE_OS_BOOT 0x1F
+#define EFI_ASF_EVENT_SENSOR_TYPE_ENTITY_PRESENCE 0x25
+#define EFI_ASF_EVENT_SENSOR_TYPE_WATCHDOG2 0x23
+
+#define EFI_ASF_EVENT_SENSOR_TYPE_TEMPERATURE 0x01
+#define EFI_ASF_EVENT_SENSOR_TYPE_VOLTAGE 0x02
+#define EFI_ASF_EVENT_SENSOR_TYPE_FAN 0x04
+#define EFI_ASF_EVENT_SENSOR_TYPE_CHASSIS_INTRUSION 0x05
+#define EFI_ASF_EVENT_SENSOR_TYPE_SECURITY_VIOLATION 0x06
+#define EFI_ASF_EVENT_SENSOR_TYPE_PROCESSOR 0x07
+#define EFI_ASF_EVENT_SENSOR_TYPE_POWER_SUPPLY 0x08
+#define EFI_ASF_EVENT_SENSOR_TYPE_POWER_UNIT 0x09
+#define EFI_ASF_EVENT_SENSOR_TYPE_CHIPSET 0x19
+#define EFI_ASF_EVENT_SENSOR_TYPE_BATTERY 0x29
+
+//
+// ASF Event Type Codes
+// IPMI/PET related stuff
+//
+#define EFI_ASF_EVENT_TYPE_SENSOR_SPECIFIC 0x6F
+
+#define EFI_ASF_EVENT_TYPE_THRESHOLD_BASED 0x01
+#define EFI_ASF_EVENT_TYPE_USAGE_STATE 0x02
+#define EFI_ASF_EVENT_TYPE_DISCRETE_EVENT_STATE 0x03
+#define EFI_ASF_EVENT_TYPE_DISCRETE_EVENT_PREDICTIVE_FAIL 0x04
+#define EFI_ASF_EVENT_TYPE_DISCRETE_EVENT_LIMIT 0x05
+#define EFI_ASF_EVENT_TYPE_DISCRETE_EVENT_PERFORMANCE 0x06
+#define EFI_ASF_EVENT_TYPE_SEVERITY_STATE 0x07
+#define EFI_ASF_EVENT_TYPE_AVAILABILITY_STATUS_PRESENT 0x08
+#define EFI_ASF_EVENT_TYPE_AVAILABILITY_STATUS_ENABLE 0x09
+#define EFI_ASF_EVENT_TYPE_AVAILABILITY_STATUS_RUNNING 0x0A
+#define EFI_ASF_EVENT_TYPE_AVAILABILITY_STATUS_OTHER 0x0B
+#define EFI_ASF_EVENT_TYPE_DEVICE_POWER_STATES 0x0C
+
+//
+// ASF Event Offset Codes
+// IPMI/PET related stuff
+//
+#define EFI_ASF_EVENT_OFFSET_ENTITY_PRESENT 0x00
+#define EFI_ASF_EVENT_OFFSET_TIMER_EXPIRED 0x00
+#define EFI_ASF_EVENT_OFFSET_SYS_FW_ERROR 0x00
+#define EFI_ASF_EVENT_OFFSET_SYS_FW_HANG 0x01
+#define EFI_ASF_EVENT_OFFSET_SYS_FW_PROGRESS 0x02
+
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_LOWER_NONCRITICAL 0x00
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_LOWER_NONCRITICAL_GO_HIGH 0x01
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_LOWER_CRITICAL 0x02
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_LOWER_CRITICAL_GO_HIGH 0x03
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_LOWER_NONRECOVERABLE 0x04
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_LOWER_NONRECOVERABLE_GO_HIGH 0x05
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_UPPER_NONCRITICAL_GO_LOW 0x06
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_UPPER_NONCRITICAL 0x07
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_UPPER_CRITICAL_GO_LOW 0x08
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_UPPER_CRITICAL 0x09
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_UPPER_NONRECOVERABLE_GO_LOW 0x0A
+#define EFI_ASF_EVENT_OFFSET_THRESHOLD_UPPER_NONRECOVERABLE 0x0B
+
+#define EFI_ASF_EVENT_OFFSET_DISCRETE_EVENT_PREDICTIVE_FAIL_DEASSERT 0x00
+#define EFI_ASF_EVENT_OFFSET_DISCRETE_EVENT_PREDICTIVE_FAIL_ASSERT 0x01
+
+#define EFI_ASF_EVENT_OFFSET_SEVERITY_TO_OK 0x00
+#define EFI_ASF_EVENT_OFFSET_SEVERITY_MORE_NONCRITICAL 0x01
+#define EFI_ASF_EVENT_OFFSET_SEVERITY_MORE_CRITICAL 0x02
+#define EFI_ASF_EVENT_OFFSET_SEVERITY_MORE_NONRECOVERABLE 0x03
+#define EFI_ASF_EVENT_OFFSET_SEVERITY_LESS_NONCRITICAL 0x04
+#define EFI_ASF_EVENT_OFFSET_SEVERITY_LESS_CRITICAL 0x05
+#define EFI_ASF_EVENT_OFFSET_SEVERITY_TO_NONRECOVERABLE 0x06
+#define EFI_ASF_EVENT_OFFSET_SEVERITY_MONITOR 0x07
+#define EFI_ASF_EVENT_OFFSET_SEVERITY_INFORMATIONAL 0x08
+
+#define EFI_ASF_EVENT_OFFSET_CHASSIS_INTRUSION_GENERIC 0x00
+
+#define EFI_ASF_EVENT_OFFSET_PROCESSOR_IERR 0x00
+
+#define EFI_ASF_EVENT_OFFSET_SECURITY_VIOLATION_USER_PASSWORD 0x01
+#define EFI_ASF_EVENT_OFFSET_SECURITY_VIOLATION_SUPERVISOR_PASSWORD 0x02
+#define EFI_ASF_EVENT_OFFSET_SECURITY_VIOLATION_NETWORK_PASSWORD 0x03
+#define EFI_ASF_EVENT_OFFSET_SECURITY_VIOLATION_OTHER_PASSWORD 0x04
+#define EFI_ASF_EVENT_OFFSET_SECURITY_VIOLATION_OUTOFBAND_PASSWORD 0x05
+
+#define EFI_ASF_EVENT_OFFSET_BATTERY_LOW_WARNING 0x00
+#define EFI_ASF_EVENT_OFFSET_BATTERY_LOW_CRITICAL 0x01
+#define EFI_ASF_EVENT_OFFSET_BATTERY_PRESENCE_DETECTED 0x02
+
+#define EFI_ASF_EVENT_OFFSET_POWER_SUPPLY_PRESENCE 0x00
+#define EFI_ASF_EVENT_OFFSET_POWER_SUPPLY_FAILURE 0x01
+#define EFI_ASF_EVENT_OFFSET_POWER_SUPPLY_PREDICTIVE_FAILURE 0x02
+
+#define EFI_ASF_EVENT_OFFSET_POWER_UNIT_DOWN 0x00
+#define EFI_ASF_EVENT_OFFSET_POWER_UNIT_CYCLE 0x01
+#define EFI_ASF_EVENT_OFFSET_POWER_UNIT_240VA_DOWN 0x02
+#define EFI_ASF_EVENT_OFFSET_POWER_UNIT_INTERLOCK_DOWN 0x03
+#define EFI_ASF_EVENT_OFFSET_POWER_UNIT_AC_LOST 0x04
+#define EFI_ASF_EVENT_OFFSET_POWER_UNIT_SOFT_CONTROL_FAILURE 0x05
+#define EFI_ASF_EVENT_OFFSET_POWER_UNIT_FAILURE 0x06
+
+//
+// ASF Event Source Type Code
+// IPMI/PET related stuff
+//
+#define EFI_ASF_EVENT_SOURCE_TYPE_ASF10 0x68
+#define EFI_ASF_EVENT_SOURCE_TYPE_PLATFORM_FIRMWARE 0x00
+#define EFI_ASF_EVENT_SOURCE_TYPE_OS 0x48
+
+//
+// ASF Event Severity Codes
+// IPMI/PET related stuff
+//
+#define EFI_ASF_EVENT_SEVERITY_CODE_MONITOR 0x01
+#define EFI_ASF_EVENT_SEVERITY_CODE_INFORMATION 0x02
+#define EFI_ASF_EVENT_SEVERITY_CODE_OK 0x04
+#define EFI_ASF_EVENT_SEVERITY_CODE_NONCRITICAL 0x08
+#define EFI_ASF_EVENT_SEVERITY_CODE_CRITICAL 0x10
+#define EFI_ASF_EVENT_SEVERITY_CODE_NONRECOVERABLE 0x20
+
+///
+/// ASF Sensor Device Codes
+/// IPMI/PET related stuff
+///
+#define EFI_ASF_SENSOR_DEVICE 0xFF
+
+///
+/// ASF Sensor Number Codes
+/// IPMI/PET related stuff
+///
+#define EFI_ASF_SENSOR_NUMBER 0xFF
+
+//
+// ASF Entity Codes
+// IPMI/PET related stuff
+//
+#define EFI_ASF_ENTITY_UNSPECIFIED 0x00
+#define EFI_ASF_ENTITY_OTHER 0x01
+#define EFI_ASF_ENTITY_UNKNOWN 0x02
+#define EFI_ASF_ENTITY_PROCESSOR 0x03
+#define EFI_ASF_ENTITY_DISK 0x04
+#define EFI_ASF_ENTITY_PERIPHERAL 0x05
+#define EFI_ASF_ENTITY_SYSTEM_MGMT_MOD 0x06
+#define EFI_ASF_ENTITY_SYSTEM_BOARD 0x07
+#define EFI_ASF_ENTITY_POWER_SUPPLY 0x0A
+#define EFI_ASF_ENTITY_ADDIN_CARD 0x0B
+#define EFI_ASF_ENTITY_CHASIS_BACK_PANEL_BOARD 0x17
+#define EFI_ASF_ENTITY_MEMORY 0x20
+#define EFI_ASF_ENTITY_SYSTEM_MGMT_SW 0x21
+#define EFI_ASF_ENTITY_BIOS 0x22
+#define EFI_ASF_ENTITY_OS 0x23
+#define EFI_ASF_ENTITY_REMOTE_OOB_MGMT 0x26
+#define EFI_ASF_ENTITY_INTEL_AMT 0x26
+
+///
+/// ASF Event Data Codes for System Firmware Progress Events
+/// IPMI/PET related stuff
+///
+#define EFI_ASF_FP_EVENT_DATA0 0x40
+
+#define EFI_ASF_FP_UNSPECIFIED 0x00
+#define EFI_ASF_FP_MEMORY_INIT 0x01
+#define EFI_ASF_FP_HDD_INIT 0x02
+#define EFI_ASF_FP_AP_INIT 0x03
+#define EFI_ASF_FP_USER_AUTHENTICATION 0x04
+#define EFI_ASF_FP_USER_SETUP 0x05
+#define EFI_ASF_FP_USB_RESOURCE_CONFIG 0x06
+#define EFI_ASF_FP_PCI_RESOURCE_CONFIG 0x07
+#define EFI_ASF_FP_OPTION_ROM_INIT 0x08
+#define EFI_ASF_FP_VIDEO_INIT 0x09
+#define EFI_ASF_FP_CACHE_INIT 0x0A
+#define EFI_ASF_FP_SMBUS_INIT 0x0B
+#define EFI_ASF_FP_KBC_INIT 0x0C
+#define EFI_ASF_FP_EC_INIT 0x0D
+#define EFI_ASF_FP_AMTBX_INIT 0x0D
+#define EFI_ASF_FP_ATTACH_DOCK 0x0E
+#define EFI_ASF_FP_ENABLE_DOCK 0x0F
+#define EFI_ASF_FP_EJECT_DOCK 0x10
+#define EFI_ASF_FP_DISABLE_DOCK 0x11
+#define EFI_ASF_FP_WAKE_OS 0x12
+#define EFI_ASF_FP_BOOT_OS 0x13
+#define EFI_ASF_FP_BOARD_INIT 0x14
+#define EFI_ASF_FP_RESERVED 0x15
+#define EFI_ASF_FP_FDC_INIT 0x16
+#define EFI_ASF_FP_KBD_TEST 0x17
+#define EFI_ASF_FP_MOUSE_TEST 0x18
+#define EFI_ASF_FP_BSP_INIT 0x19
+
+///
+/// ASF Event Data Codes for System Firmware Error Events
+/// IPMI/PET related stuff
+///
+#define EFI_ASF_FE_EVENT_DATA0 0x40
+
+#define EFI_ASF_FE_UNSPECIFIED 0x00
+#define EFI_ASF_FE_AMTBX_FAILURE 0x00
+#define EFI_ASF_FE_NO_MEMORY 0x01
+#define EFI_ASF_FE_MEMORY_FAILURE 0x02
+#define EFI_ASF_FE_HDD_FAILURE 0x03
+#define EFI_ASF_FE_BOARD_FAILURE 0x04
+#define EFI_ASF_FE_FDC_FAILURE 0x05
+#define EFI_ASF_FE_HDC_FAILURE 0x06
+#define EFI_ASF_FE_KBD_FAILURE 0x07
+#define EFI_ASF_FE_REMOVABLE_BOOT_MEDIA_NOT_FOUND 0x08
+#define EFI_ASF_FE_VIDEO_CONTROLLER_FAILURE 0x09
+#define EFI_ASF_FE_VIDEO_DEVICE_NOT_FOUND 0x0A
+#define EFI_ASF_FE_ROM_CORRUPTED 0x0B
+#define EFI_ASF_FE_CPU_VOLTAGE_FAILURE 0x0C
+#define EFI_ASF_FE_CPU_MISMATCH_FAILURE 0x0D
+
+//
+// AMT BX Software Class DXE Subclass Progress Code definitions.
+//
+#define EFI_SW_DXE_AMTBX_OPROM_DONE (EFI_OEM_SPECIFIC | 0x00000000)
+#define EFI_SW_DXE_AMTBX_OPROM_NOT_STARTED (EFI_OEM_SPECIFIC | 0x00000001)
+#define EFI_SW_DXE_AMTBX_SLEEP_S4_NOT_TAKEN (EFI_OEM_SPECIFIC | 0x00000002)
+#define EFI_SW_DXE_AMTBX_SLEEP_S5_NOT_TAKEN (EFI_OEM_SPECIFIC | 0x00000003)
+#define EFI_SW_DXE_AMTBX_SLEEP_UNSPECD_NOT_TAKEN (EFI_OEM_SPECIFIC | 0x00000004)
+#define EFI_SW_DXE_AMTBX_ERROR_ACTION_INTF (EFI_OEM_SPECIFIC | 0x00000005)
+#define EFI_SW_DXE_AMTBX_ERROR_ACTION_INV (EFI_OEM_SPECIFIC | 0x00000006)
+#define EFI_SW_DXE_AMTBX_ERROR_ACTION_SETUP (EFI_OEM_SPECIFIC | 0x00000007)
+#define EFI_SW_DXE_AMTBX_ERROR_ACTION_FAIL (EFI_OEM_SPECIFIC | 0x00000008)
+#define EFI_SW_DXE_AMTBX_ERROR_ACTION_UNSPECD (EFI_OEM_SPECIFIC | 0x00000009)
+#define EFI_SW_DXE_AMTBX_OTHER_UNSPECD (EFI_OEM_SPECIFIC | 0x00000009)
+
+typedef enum {
+ EfiAsfMessageBiosPresent,
+ EfiAsfMessageMemInit,
+ EfiAsfMessageMemInitDone,
+ EfiAsfMessageHddInit,
+ EfiAsfMessageApInit,
+ EfiAsfMessageUserAuthentication,
+ EfiAsfMessageUserInitSetup,
+ EfiAsfMessageUsbResourceConfig,
+ EfiAsfMessagePciResourceConfig,
+ EfiAsfMessageOptionRomInit,
+ EfiAsfMessageVideoInit,
+ EfiAsfMessageCacheInit,
+ EfiAsfMessageSmbusInit,
+ EfiAsfMessageKbcInit,
+ EfiAsfMessageEmControllerInit,
+ EfiAsfMessageDockAttached,
+ EfiAsfMessageEnableDock,
+ EfiAsfMessageDockEject,
+ EfiAsfMessageDisableDock,
+ EfiAsfMessageOSWakeVector,
+ EfiAsfMessageMotherBoardInit,
+ EfiAsfMessageFdcInit,
+ EfiAsfMessageKeyboardTest,
+ EfiAsfMessageMouseTest,
+ EfiAsfMessageBspInit,
+ EfiAsfMessageAmtBxDone,
+ EfiAsfMessageAmtBxNotStarted,
+ EfiAsfMessageAmtBxSleepS4ReportedNotTaken,
+ EfiAsfMessageAmtBxSleepS5ReportedNotTaken,
+ EfiAsfMessageAmtBxSleepUnspecifiedReportedNotTaken,
+ EfiAsfMessageAmtBxErrActionIntF,
+ EfiAsfMessageAmtBxErrActionInv,
+ EfiAsfMessageAmtBxErrActionSetup,
+ EfiAsfMessageAmtBxErrActionFailure,
+ EfiAsfMessageAmtBxErrActionUnspecified,
+ EfiAsfMessageAmtBxOtherUnspecified,
+ EfiAsfMessageNoMemory,
+ EfiAsfMessageMemoryFailure,
+ EfiAsfMessageHddFailure,
+ EfiAsfMessageBoardFailure,
+ EfiAsfMessageFdcFailure,
+ EfiAsfMessageHdcFailure,
+ EfiAsfMessageKbdFailure,
+ EfiAsfMessageNoFdd,
+ EfiAsfMessageVideoControllerFailure,
+ EfiAsfMessageNoVideo,
+ EfiAsfMessageFirmwareCorruption,
+ EfiAsfMessageCpuVidMismatch,
+ EfiAsfMessageCpuSpeedMatchingFailure,
+ EfiAsfMessageUserAuthenticationInvalid,
+ EfiAsfMessageHddAuthenticationInvalid,
+ EfiAsfMessageNoBootMedia,
+ EfiAsfMessageTemperatureGenericCritical,
+ EfiAsfMessageTemperatureGenericWarning,
+ EfiAsfMessageTemperatureOverCritical,
+ EfiAsfMessageTemperatureOverWarning,
+ EfiAsfMessageTemperatureUnderCritical,
+ EfiAsfMessageTemperatureUnderWarning,
+ EfiAsfMessageVoltageGenericCritical,
+ EfiAsfMessageVoltageOverCritical,
+ EfiAsfMessageVoltageUnderCritical,
+ EfiAsfMessageFanGenericCritical,
+ EfiAsfMessageFanPredictiveFailure,
+ EfiAsfMessageFanLowSpeedCritical,
+ EfiAsfMessageFanLowSpeedWarning,
+ EfiAsfMessageBatteryLowWarning,
+ EfiAsfMessageBatteryLowCritical,
+ EfiAsfMessageBatteryPresenceDetected,
+ EfiAsfMessagePowerFailure,
+ EfiAsfMessageChassisIntrusion,
+} EFI_FRAMEWORK_MESSAGE_TYPE;
+
+//
+// StatusCode extension for ASF -- start
+//
+#define EFI_CU_HP_EC_VID_MISMATCH (EFI_SUBCLASS_SPECIFIC | 0x0000000E)
+#define EFI_CU_HP_EC_SPEED_MATCHING_FAILURE (EFI_SUBCLASS_SPECIFIC | 0x0000000F)
+
+#define EFI_PERIPHERAL_EMBEDDED_CONTROLLER (EFI_PERIPHERAL | 0x000D0000)
+#define EFI_PERIPHERAL_DOCK (EFI_PERIPHERAL | 0x000E0000)
+
+#define EFI_PERIPHERAL_BATTERY (EFI_PERIPHERAL | 0x000F0000)
+#define EFI_P_BATTERY_PC_LOW_WARNING (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_P_BATTERY_EC_LOW_CRITICAL (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+
+#define EFI_PERIPHERAL_FAN (EFI_PERIPHERAL | 0x00100000)
+#define EFI_P_FAN_EC_GENERIC_CRITICAL (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_P_FAN_EC_PREDICTIVE_FAILURE (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_P_FAN_EC_LOW_SPEED_CRITICAL (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_P_FAN_PC_LOW_SPEED_WARNING (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+
+#define EFI_PERIPHERAL_TEMPERATURE (EFI_PERIPHERAL | 0x00110000)
+#define EFI_P_TEMERATURE_EC_GENERIC_CRITICAL (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_P_TEMERATURE_PC_GENERIC_WARNING (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_P_TEMERATURE_EC_OVER_CRITICAL (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_P_TEMERATURE_PC_OVER_WARNING (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_P_TEMERATURE_EC_UNDER_CRITICAL (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_P_TEMERATURE_PC_UNDER_WARNING (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+
+#define EFI_PERIPHERAL_VOLTAGE (EFI_PERIPHERAL | 0x00120000)
+#define EFI_P_VOLTAGE_EC_GENERIC_CRITICAL (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_P_VOLTAGE_EC_OVER_CRITICAL (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_P_VOLTAGE_EC_UNDER_CRITICAL (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+
+#define EFI_PERIPHERAL_POWER_SUPPLY (EFI_PERIPHERAL | 0x00130000)
+#define EFI_P_POWER_SUPPLY_EC_FAILURE (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_P_POWER_SUPPLY_EC_PREDICTIVE_FAILURE (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+
+#define EFI_CU_CHIPSET_PC_INTRUDER_DETECT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+
+#define EFI_SW_DXE_BS_EC_NO_BOOT_MEDIA (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_SW_DXE_BS_EC_AUTHENTICATE_USER_INVALID (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_SW_DXE_BS_EC_AUTHENTICATE_HDD_INVALID (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+
+//
+// StatusCode extension for ASF -- end
+//
+#endif
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.sdl b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.sdl
new file mode 100644
index 0000000..8ec0f9c
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Common/AlertStandardFormatCommon.sdl
@@ -0,0 +1,10 @@
+PATH
+ Name = "AlertStandardFormatCommon_DIR"
+ Help = "AlertStandardFormat files source directory"
+End
+
+ELINK
+ Name = "/I$(AlertStandardFormatCommon_DIR)"
+ Parent = "AlertStandardFormat_INCLUDES"
+ InvokeOrder = AfterParent
+End
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.c b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.c
new file mode 100644
index 0000000..5119b8e
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.c
@@ -0,0 +1,1234 @@
+/** @file
+ Processes ASF messages
+
+@copyright
+ Copyright (c) 2005 - 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
+
+**/
+
+//
+// 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"
+#include "AlertStandardFormatDxe.h"
+#include "MeLib.h"
+#endif
+
+#include "AlertStandardFormatCommon.c"
+
+UINT64 mAsfMonotonicCount;
+EFI_ASF_BOOT_OPTIONS mAsfBootOptions;
+BOOLEAN mBootOptionsValid;
+BOOLEAN mAsfAddressValid;
+BOOLEAN mProgressEventEnabled;
+
+ALERT_STANDARD_FORMAT_INSTANCE *mAsfContext;
+
+EFI_GUID gAmtForcePushPetVariableGuid = AMT_FORCE_PUSH_PET_VARIABLE_GUID;
+EFI_GUID gAmtPetQueueHobGuid = AMT_PET_QUEUE_HOB_GUID;
+EFI_GUID gAmtForcePushPetHobGuid = AMT_FORCE_PUSH_PET_HOB_GUID;
+
+AMT_PET_QUEUE_PROTOCOL gAmtPetQueue;
+AMT_PET_QUEUE_PROTOCOL *gAmtPetQueueProtocol;
+AMT_FORCE_PUSH_PET_POLICY_HOB *gAmtForcePushPETPolicyHob;
+
+/**
+ Update ASF Boot Options data in ACPI ASF RCMP table
+
+ @param[in] AsfBootOptions ASF Boot Options data for ACPI ASF RCMP table used
+**/
+VOID
+UpdateAcpiAsfRcmpBootOptions (
+ EFI_ASF_BOOT_OPTIONS *AsfBootOptions
+ )
+{
+ EFI_STATUS Status;
+ EFI_ACPI_1_0_ASF_DESCRIPTION_TABLE *AcpiAsfTable;
+ UINTN Handle;
+ UINTN VersionCount;
+ UINT16 *WordPointer;
+ EFI_ACPI_TABLE_VERSION Version[] = {
+ EFI_ACPI_TABLE_VERSION_1_0B,
+ EFI_ACPI_TABLE_VERSION_2_0,
+ EFI_ACPI_TABLE_VERSION_3_0
+ };
+ EFI_ACPI_TABLE_PROTOCOL *AcpiTable;
+
+ ///
+ /// Locate ACPI Table Protocol
+ ///
+ Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **) &AcpiTable);
+
+ ///
+ /// Initialize ASL manipulation library
+ ///
+ InitializeAslUpdateLib ();
+
+ for (VersionCount = 0; VersionCount < sizeof (Version) / sizeof (EFI_ACPI_TABLE_VERSION); VersionCount++) {
+ Handle = 0;
+ ///
+ /// Locate the ASF Table
+ ///
+ Status = LocateAcpiTableBySignature (
+ EFI_ACPI_1_0_ASF_DESCRIPTION_TABLE_SIGNATURE,
+ (EFI_ACPI_DESCRIPTION_HEADER **) &AcpiAsfTable,
+ &Handle,
+ &Version[VersionCount]
+ );
+ if (EFI_ERROR (Status)) {
+ continue;
+ }
+
+ if (AsfBootOptions->SubCommand == ASF_BOOT_OPTIONS_PRESENT) {
+ ///
+ /// Check Asf table if get boot option successfully
+ ///
+ AcpiAsfTable->AsfRmcp.RMCPCompletionCode = 00;
+ AcpiAsfTable->AsfRmcp.RMCPIANA = AsfBootOptions->IanaId;
+ AcpiAsfTable->AsfRmcp.RMCPSpecialCommand = AsfBootOptions->SpecialCommand;
+ WordPointer = (UINT16 *) &AcpiAsfTable->AsfRmcp.RMCPSpecialCommandParameter;
+ *WordPointer = AsfBootOptions->SpecialCommandParam;
+ WordPointer = (UINT16 *) &AcpiAsfTable->AsfRmcp.RMCPBootOptions;
+ *WordPointer = AsfBootOptions->BootOptions;
+ WordPointer = (UINT16 *) &AcpiAsfTable->AsfRmcp.RMCPOEMParameters;
+ *WordPointer = AsfBootOptions->OemParameters;
+ } else {
+ ///
+ /// Failed to get boot option, update the completion code to 0x1
+ ///
+ AcpiAsfTable->AsfRmcp.RMCPCompletionCode = 01;
+ }
+ if (Handle != 0) {
+ Status = AcpiTable->UninstallAcpiTable (
+ AcpiTable,
+ Handle
+ );
+ }
+ ///
+ /// Update the Acpi Asf table
+ ///
+ Status = AcpiTable->InstallAcpiTable (
+ AcpiTable,
+ AcpiAsfTable,
+ sizeof(EFI_ACPI_1_0_ASF_DESCRIPTION_TABLE),
+ &Handle
+ );
+ FreePool (AcpiAsfTable);
+ }
+}
+
+/**
+ 16 bits are changed backward for string transfer to value used
+
+ @param[in] Value The value to be transferred
+
+ @retval UINT16 Value The value after transferring
+**/
+UINT16
+Swap16 (
+ IN UINT16 Value
+ )
+{
+ UINT16 OutValue;
+ UINT8 *TempIn;
+ UINT8 *TempOut;
+
+ TempIn = (UINT8 *) &Value;
+ TempOut = (UINT8 *) &OutValue;
+
+ TempOut[0] = TempIn[1];
+ TempOut[1] = TempIn[0];
+
+ return OutValue;
+}
+
+/**
+ The driver entry point - detect ASF support or not, if support, will install relative protocol.
+
+ @param[in] ImageHandle Handle for this drivers loaded image protocol.
+ @param[in] SystemTable EFI system table.
+
+ @retval EFI_SUCCESS The driver installed without error.
+ @exception EFI_UNSUPPORTED The chipset is unsupported by this driver.
+ @retval EFI_OUT_OF_RESOURCES Unable to allocate necessary data structures.
+**/
+EFI_STATUS
+EFIAPI
+AlertStandardFormatDriverEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ EFI_DATA_HUB_PROTOCOL *DataHub;
+ EFI_EVENT DataHubEvent;
+ UINT64 DataClass;
+ EFI_ASF_BOOT_OPTIONS *AsfBootOptions;
+
+ ///
+ /// First check if ASF support is enabled in Setup.
+ ///
+ if (!AsfSupported ()) {
+ return EFI_UNSUPPORTED;
+ }
+
+ mBootOptionsValid = FALSE;
+ mAsfAddressValid = FALSE;
+
+ mAsfContext = AllocateZeroPool (sizeof (ALERT_STANDARD_FORMAT_INSTANCE));
+ ASSERT (mAsfContext != NULL);
+ if (mAsfContext == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ ///
+ /// Get the Data Hub Protocol. Assume only one instance
+ /// of Data Hub Protocol is available in the system.
+ ///
+ Status = gBS->LocateProtocol (
+ &gEfiDataHubProtocolGuid,
+ NULL,
+ (VOID **) &DataHub
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ mAsfContext->Handle = ImageHandle;
+ mAsfContext->Signature = ALERT_STANDARD_FORMAT_PRIVATE_DATA_SIGNATURE;
+ mAsfContext->AlertStandardFormat.GetSmbusAddr = GetSmbusAddr;
+ mAsfContext->AlertStandardFormat.SetSmbusAddr = SetSmbusAddr;
+ mAsfContext->AlertStandardFormat.GetBootOptions = GetBootOptions;
+ mAsfContext->AlertStandardFormat.SendAsfMessage = SendAsfMessage;
+
+ ///
+ /// Sending ASF Messaging if ManageabilityMode is not zero
+ ///
+ if (ManageabilityModeSetting () != MNT_OFF) {
+ ///
+ /// ActiveManagement Protocol is not ready at this point. Need to Check Boot Options Manually
+ ///
+ mProgressEventEnabled = FALSE;
+ Status = GetBootOptions (&(mAsfContext->AlertStandardFormat), &AsfBootOptions);
+ if (!EFI_ERROR (Status)) {
+ if (AsfBootOptions->SubCommand == ASF_BOOT_OPTIONS_PRESENT) {
+ if ((AsfBootOptions->BootOptions & FORCE_PROGRESS_EVENTS) == FORCE_PROGRESS_EVENTS) {
+ mProgressEventEnabled = TRUE;
+ }
+ }
+ }
+ ///
+ /// If no boot options available, check policy
+ ///
+ if (!mProgressEventEnabled) {
+ mProgressEventEnabled = FwProgressSupport ();
+ }
+ ///
+ /// Create message queue
+ ///
+ AmtCreateMessageQueue ();
+
+ ///
+ /// Get ForcePushPetPolicy Hob
+ ///
+ gAmtForcePushPETPolicyHob = GetForcePushPetPolicy ();
+
+ ///
+ /// save PEI force push error event from hob to variable
+ ///
+ SaveForcePushErrorEventFromPeiToDxe ();
+
+ ///
+ /// Try to send message
+ ///
+ SendPETMessageInQueue ();
+
+ ///
+ /// Register our Setup Data Filter Function.
+ /// This function is notified at the lowest TPL
+ ///
+ Status = gBS->CreateEvent (
+ EVENT_NOTIFY_SIGNAL,
+ TPL_CALLBACK,
+ DataHubEventCallback,
+ NULL,
+ &DataHubEvent
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ if (mProgressEventEnabled) {
+ DataClass = EFI_DATA_RECORD_CLASS_ERROR | EFI_DATA_RECORD_CLASS_PROGRESS_CODE;
+ } else {
+ DataClass = EFI_DATA_RECORD_CLASS_ERROR;
+ }
+
+ Status = DataHub->RegisterFilterDriver (
+ DataHub,
+ DataHubEvent,
+ EFI_TPL_APPLICATION,
+ DataClass,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
+ ///
+ /// Install the AlertStandardFormat interface
+ ///
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &mAsfContext->Handle,
+ &gEfiAlertStandardFormatProtocolGuid,
+ &mAsfContext->AlertStandardFormat,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
+
+/**
+ Return the SMBus address used by the ASF driver.
+ Not applicable in Intel ME/HECI system, need to return EFI_UNSUPPORTED.
+
+ @param[in] This The address of protocol
+ @param[in] SmbusDeviceAddress Out put the Smbus Address
+
+ @exception EFI_UNSUPPORTED The function is unsupported by this driver
+**/
+EFI_STATUS
+EFIAPI
+GetSmbusAddr (
+ IN EFI_ALERT_STANDARD_FORMAT_PROTOCOL *This,
+ OUT UINTN *SmbusDeviceAddress
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Set the SMBus address used by the ASF driver. 0 is an invalid address.
+ Not applicable in Intel ME/HECI system, need to return EFI_UNSUPPORTED.
+
+ @param[in] This The address of protocol
+ @param[in] SmbusDeviceAddress SMBus address of the device
+
+ @exception EFI_UNSUPPORTED The function is unsupported by this driver
+**/
+EFI_STATUS
+EFIAPI
+SetSmbusAddr (
+ IN EFI_ALERT_STANDARD_FORMAT_PROTOCOL *This,
+ IN UINTN SmbusDeviceAddress
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Return EFI_SUCCESS if Firmware Init Complete is set in HFS[9].
+
+ @param[in] Heci EFI_HECI_PROTOCOL
+ @param[in] Timeout Time in second
+
+ @retval EFI_SUCCESS Firmware Init Complete is set
+ @retval EFI_TIMEOUT Firmware Init Complete is not set in 5 seconds
+**/
+EFI_STATUS
+WaitFirmwareInitDone (
+ EFI_HECI_PROTOCOL *Heci,
+ UINT32 Timeout
+ )
+{
+ UINT32 idx;
+ EFI_STATUS Status;
+ UINT32 MeStatus;
+
+ Status = EFI_SUCCESS;
+ idx = 0;
+
+ Heci->GetMeStatus (&MeStatus);
+
+ while (!ME_STATUS_IS_ME_FW_INIT_COMPLETE (MeStatus)) {
+ gBS->Stall (100000);
+ idx++;
+ if (idx > Timeout * 10) {
+ Status = EFI_TIMEOUT;
+ break;
+ }
+
+ Heci->GetMeStatus (&MeStatus);
+ }
+
+ return Status;
+}
+
+/**
+ Initialize KVM by sending HECI messafe to ME
+
+ @param[in] Event The event registered.
+ @param[in] Context Event context. Not used in this event handler.
+**/
+VOID
+EFIAPI
+QueryKvm (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ BdsKvmInitialization ();
+ gBS->CloseEvent (Event);
+}
+
+/**
+ Return the ASF Boot Options obtained from the controller. If the
+ Boot Options parameter is NULL and no boot options have been retrieved,
+ Query the ASF controller for its boot options.
+ Get ASF Boot Options through HECI.
+
+ @param[in] This The address of protocol
+ @param[in] AsfBootOptions Pointer to ASF boot options to copy current ASF Boot options
+
+ @retval EFI_SUCCESS Boot options copied
+ @retval EFI_NOT_READY No boot options
+**/
+EFI_STATUS
+EFIAPI
+GetBootOptions (
+ IN EFI_ALERT_STANDARD_FORMAT_PROTOCOL *This,
+ IN OUT EFI_ASF_BOOT_OPTIONS **AsfBootOptions
+ )
+{
+ EFI_STATUS Status;
+ UINT8 ConsoleLock;
+ UINT32 MeStatus;
+ UINT32 MeMode;
+ EFI_STATUS TempStatus;
+ VOID *AfterConsolOutNotifyReg;
+ EFI_EVENT AfterConsolOutInstalledEvent;
+ EFI_GUID guidConOutStarted = EFI_CONSOLE_OUT_DEVICE_GUID;
+ EFI_HECI_PROTOCOL *Heci;
+ HECI_ASF_GET_BOOT_OPTIONS_RESPONSE HeciAsfGetBootOptionsResponse;
+ HECI_ASF_CLEAR_BOOT_OPTION HeciAsfClearBootOption;
+ UINT32 HeciLength;
+
+ if (!mBootOptionsValid) {
+ Status = gBS->LocateProtocol (
+ &gEfiHeciProtocolGuid,
+ NULL,
+ (VOID **) &Heci
+ );
+
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "ASF Get Boot Options failed!, Status = %r\n", Status));
+ return Status;
+ }
+
+ ZeroMem ((VOID *) &mAsfBootOptions, sizeof (EFI_ASF_BOOT_OPTIONS));
+ mAsfBootOptions.SubCommand = ASF_BOOT_OPTIONS_NOT_PRESENT;
+ mAsfBootOptions.Version = 0x10;
+ UpdateAcpiAsfRcmpBootOptions (&mAsfBootOptions);
+
+ ///
+ /// Get ME Status
+ ///
+ TempStatus = Heci->GetMeStatus (&MeStatus);
+ ASSERT_EFI_ERROR (TempStatus);
+
+ ///
+ /// Get ME Operation Mode
+ ///
+ Heci->GetMeMode (&MeMode);
+
+ ///
+ /// Only Send ASF Get Boot Options message when ME is ready and ME FW INIT is completed
+ ///
+ if (ME_STATUS_IS_ME_FW_BOOT_OPTIONS_PRESENT (MeStatus) &&
+ (ManageabilityModeSetting () != MNT_OFF) &&
+ (MeMode == ME_MODE_NORMAL)
+ ) {
+ if (WaitFirmwareInitDone (Heci, 5) != EFI_TIMEOUT) {
+ ///
+ /// Prepare Boot Option Command header
+ ///
+ HeciAsfGetBootOptionsResponse.Command = EFI_ASF_MESSAGE_COMMAND_ASF_CONFIGURATION;
+ HeciAsfGetBootOptionsResponse.ByteCount = EFI_ASF_MESSAGE_BYTEOUNTT_GET_BOOT_OPT;
+ HeciAsfGetBootOptionsResponse.AsfBootOptions.SubCommand = EFI_ASF_MESSAGE_SUBCOMMAND_RETURN_BOOT_OPT;
+ HeciAsfGetBootOptionsResponse.AsfBootOptions.Version = 0x10;
+ HeciLength = HECI_ASF_GET_BOOT_OPTIONS_LENGTH;
+ Status = Heci->SendMsg (
+ (UINT32 *) &HeciAsfGetBootOptionsResponse,
+ HeciLength,
+ BIOS_ASF_HOST_ADDR,
+ HECI_ASF_MESSAGE_ADDR
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "ASF Get Boot Options failed!(SendwACK), Status = %r\n", Status));
+ return Status;
+ }
+
+ HeciLength = HECI_ASF_GET_BOOT_OPTIONS_RESPONSE_LENGTH;
+ Status = Heci->ReadMsg (
+ BLOCKING,
+ (UINT32 *) &HeciAsfGetBootOptionsResponse,
+ &HeciLength
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "ASF Get Boot Options failed!(ReadMsg), Status = %r\n", Status));
+ return Status;
+ }
+
+ CopyMem (
+ (VOID *) &mAsfBootOptions,
+ (VOID *) &(HeciAsfGetBootOptionsResponse.AsfBootOptions),
+ sizeof (EFI_ASF_BOOT_OPTIONS)
+ );
+
+ ///
+ /// By default, this table is belong to all ACPI table versions.
+ /// It is ok if the table is not found and that means the platform does not publish that version.
+ ///
+ UpdateAcpiAsfRcmpBootOptions (&mAsfBootOptions);
+
+ mAsfBootOptions.SpecialCommandParam = Swap16 (mAsfBootOptions.SpecialCommandParam);
+
+ ///
+ /// ASF Get Boot Options - Clear Boot Options
+ /// Need to do this so don't get caught in an endless loop plus by
+ /// definition get boot options is a one time boot situation.
+ /// So if server on other end of ASF device wants another back to back
+ /// boot it will request it. Do this only if there were boot options
+ ///
+ if (mAsfBootOptions.SubCommand == ASF_BOOT_OPTIONS_PRESENT) {
+ HeciAsfClearBootOption.Command = EFI_ASF_MESSAGE_COMMAND_ASF_CONFIGURATION;
+ HeciAsfClearBootOption.AsfClearBootOptions.SubCommand = EFI_ASF_MESSAGE_SUBCOMMAND_CLEAR_BOOT_OPT;
+ HeciAsfClearBootOption.AsfClearBootOptions.Version = EFI_ASF_MESSAGE_VERSIONNUMBER;
+ HeciAsfClearBootOption.ByteCount = EFI_ASF_MESSAGE_BYTECOUNT_CLEAR_BOOT_OPT;
+ HeciLength = HECI_ASF_CLEAR_BOOT_OPTION_LENGTH;
+
+ Status = Heci->SendMsg (
+ (UINT32 *) &HeciAsfClearBootOption,
+ HeciLength,
+ BIOS_ASF_HOST_ADDR,
+ HECI_ASF_MESSAGE_ADDR
+ );
+
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "ASF Clear Boot Options failed!, Status = %r\n", Status));
+ return Status;
+ }
+ }
+ }
+ }
+ ///
+ /// Set flag so we don't try to get the Boot options again.
+ ///
+ mBootOptionsValid = TRUE;
+
+ ///
+ /// Set up Event for KVM for when Output Display Console is installed
+ ///
+ if ((mAsfBootOptions.SpecialCommandParam & USE_KVM) == USE_KVM) {
+
+ Status = gBS->CreateEvent (
+ EFI_EVENT_NOTIFY_SIGNAL,
+ EFI_TPL_NOTIFY,
+ QueryKvm,
+ NULL,
+ &AfterConsolOutInstalledEvent
+ );
+
+ Status = gBS->RegisterProtocolNotify (
+ &guidConOutStarted,
+ AfterConsolOutInstalledEvent,
+ &AfterConsolOutNotifyReg
+ );
+
+ }
+ ///
+ /// Check for keyboard locking in the boot options
+ ///
+ ConsoleLock = NO_LOCK_CONSOLE;
+
+ if (mAsfBootOptions.SubCommand == ASF_BOOT_OPTIONS_PRESENT) {
+ if ((mAsfBootOptions.BootOptions & LOCK_KEYBOARD) == LOCK_KEYBOARD) {
+ ConsoleLock = LOCK_CONSOLE;
+ }
+ }
+ ///
+ /// Save the console lock flag for later usage in console locking determination
+ ///
+ gRT->SetVariable (
+ EFI_CONSOLE_LOCK_VARIABLE_NAME,
+ &gEfiConsoleLockGuid,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
+ sizeof (ConsoleLock),
+ &ConsoleLock
+ );
+ }
+
+ if (AsfBootOptions) {
+ *AsfBootOptions = &mAsfBootOptions;
+
+ ///
+ /// If we're asking for the options, then resend them to the debug output just encase they've been hosed.
+ ///
+ DEBUG ((EFI_D_ERROR, "mAsfBootOptions.SubCommand = 0x%x\n", mAsfBootOptions.SubCommand));
+ DEBUG ((EFI_D_ERROR, "mAsfBootOptions.Version = 0x%x\n", mAsfBootOptions.Version));
+ DEBUG ((EFI_D_ERROR, "mAsfBootOptions.IanaId = 0x%x\n", mAsfBootOptions.IanaId));
+ DEBUG ((EFI_D_ERROR, "mAsfBootOptions.SpecialCommand = 0x%x\n", mAsfBootOptions.SpecialCommand));
+ DEBUG ((EFI_D_ERROR, "mAsfBootOptions.SpecialCommandParam = 0x%x\n", mAsfBootOptions.SpecialCommandParam));
+ DEBUG ((EFI_D_ERROR, "mAsfBootOptions.BootOptions = 0x%x\n", mAsfBootOptions.BootOptions));
+ DEBUG ((EFI_D_ERROR, "mAsfBootOptions.OemParameters = 0x%x\n", mAsfBootOptions.OemParameters));
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Send ASF Message through HECI.
+
+ @param[in] This The address of protocol
+ @param[in] AsfMessage Pointer to ASF message
+
+ @retval EFI_SUCCESS Boot options copied
+ @retval EFI_INVALID_PARAMETER Invalid pointer
+ @retval EFI_NOT_READY No controller
+**/
+EFI_STATUS
+EFIAPI
+SendAsfMessage (
+ IN EFI_ALERT_STANDARD_FORMAT_PROTOCOL *This,
+ IN EFI_ASF_MESSAGE *AsfMessage
+ )
+{
+ EFI_STATUS Status;
+ EFI_HECI_PROTOCOL *Heci;
+ UINT32 HeciLength;
+ HECI_ASF_PUSH_PROGRESS_CODE HeciAsfPushProgressCode;
+ UINT32 MeStatus;
+ UINT32 MeMode;
+ EFI_STATUS TempStatus;
+
+ Status = gBS->LocateProtocol (
+ &gEfiHeciProtocolGuid,
+ NULL,
+ (VOID **) &Heci
+ );
+
+ if (!EFI_ERROR (Status)) {
+ TempStatus = Heci->GetMeStatus (&MeStatus);
+ ASSERT_EFI_ERROR (TempStatus);
+
+ ///
+ /// Get ME Operation Mode
+ ///
+ Heci->GetMeMode (&MeMode);
+
+ ///
+ /// Only send ASF Push Progress code when ME is ready and ME is in normal mode. Ignore FW Init Status.
+ ///
+ if (ME_STATUS_ME_STATE_ONLY (MeStatus) == ME_READY && MeMode == ME_MODE_NORMAL) {
+ ZeroMem ((VOID *) &HeciAsfPushProgressCode, sizeof (HECI_ASF_PUSH_PROGRESS_CODE));
+ HeciAsfPushProgressCode.Command = EFI_ASF_MESSAGE_COMMAND_MESSAGE;
+ HeciAsfPushProgressCode.ByteCount = 0x10;
+ HeciLength = HECI_ASF_PUSH_PROGRESS_CODE_LENGTH;
+ CopyMem ((VOID *) &(HeciAsfPushProgressCode.AsfMessage), (VOID *) AsfMessage, sizeof (EFI_ASF_MESSAGE));
+
+ Status = Heci->SendMsg (
+ (UINT32 *) &HeciAsfPushProgressCode,
+ HeciLength,
+ BIOS_ASF_HOST_ADDR,
+ HECI_ASF_MESSAGE_ADDR
+ );
+ }
+ }
+
+ return Status;
+}
+
+/**
+ This routine returns ForcePushPetPolicy information.
+
+ @param[in] None
+
+ @retval AMT_FORCE_PUSH_PET_POLICY_HOB ForcePushPetPolicy information.
+**/
+AMT_FORCE_PUSH_PET_POLICY_HOB *
+GetForcePushPetPolicy (
+ VOID
+ )
+{
+ AMT_FORCE_PUSH_PET_POLICY_HOB *AmtForcePushPETPolicyHob;
+ EFI_STATUS Status;
+
+ Status = EfiGetSystemConfigurationTable (&gEfiHobListGuid, (VOID **) &AmtForcePushPETPolicyHob);
+ ASSERT_EFI_ERROR (Status);
+
+ return GetNextGuidHob (&gAmtForcePushPetPolicyGuid, AmtForcePushPETPolicyHob);
+}
+
+/**
+ This routine checks whethre current message is ForcePush message.
+
+ @param[in] MessageType AMT PET Message Type.
+
+ @retval TRUE It is ForcePush message.
+ @retval FALSE It is not ForcePush message.
+**/
+BOOLEAN
+IsForcePushErrorEvent (
+ IN EFI_FRAMEWORK_MESSAGE_TYPE MessageType
+ )
+{
+ UINTN Index;
+ UINTN Number;
+
+ Number = (gAmtForcePushPETPolicyHob->EfiHobGuidType.Header.HobLength - sizeof (EFI_HOB_GUID_TYPE)) /
+ sizeof (EFI_FRAMEWORK_MESSAGE_TYPE);
+ for (Index = 0; Index < Number; Index++) {
+ if (gAmtForcePushPETPolicyHob->MessageType[Index] == MessageType) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+/**
+ Filters all the progress and error codes for Asf.
+
+ @param[in] Event The event registered.
+ @param[in] Context Event context. Not used in this event handler.
+**/
+VOID
+EFIAPI
+DataHubEventCallback (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ EFI_STATUS Status;
+ EFI_DATA_HUB_PROTOCOL *DataHub;
+ EFI_DATA_RECORD_HEADER *Record;
+ DATA_HUB_STATUS_CODE_DATA_RECORD *StatusRecord;
+ UINTN Index;
+
+ ///
+ /// Get the Data Hub Protocol. Assume only one instance
+ ///
+ Status = gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (VOID **) &DataHub);
+ ASSERT_EFI_ERROR (Status);
+
+ ///
+ /// Get all available data records from data hub
+ ///
+ Record = NULL;
+
+ do {
+ Status = DataHub->GetNextRecord (DataHub, &mAsfMonotonicCount, &Event, &Record);
+ if (!EFI_ERROR (Status)) {
+ if (mProgressEventEnabled) {
+ if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_PROGRESS_CODE) {
+ StatusRecord = (DATA_HUB_STATUS_CODE_DATA_RECORD *) (Record + 1);
+ for (Index = 0; Index < sizeof (mAsfProgressDataHubMap) / sizeof (EFI_ASF_DATA_HUB_MAP); Index++) {
+ if (mAsfProgressDataHubMap[Index].StatusCodeValue == StatusRecord->Value) {
+ Status = SendPostPacket (mAsfProgressDataHubMap[Index].MessageType);
+ break;
+ }
+ }
+ }
+ }
+
+ if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_ERROR) {
+ StatusRecord = (DATA_HUB_STATUS_CODE_DATA_RECORD *) (Record + 1);
+ for (Index = 0; Index < sizeof (mAsfErrorDataHubMap) / sizeof (EFI_ASF_DATA_HUB_MAP); Index++) {
+ if (mAsfErrorDataHubMap[Index].StatusCodeValue == StatusRecord->Value) {
+ Status = SendPostPacket (mAsfErrorDataHubMap[Index].MessageType);
+ if ((Status == EFI_DEVICE_ERROR) && IsForcePushErrorEvent (mAsfErrorDataHubMap[Index].MessageType)) {
+ SaveForcePushErrorEvent (mAsfErrorDataHubMap[Index].MessageType);
+ }
+ break;
+ }
+ }
+ }
+ }
+ } while (!EFI_ERROR (Status) && (mAsfMonotonicCount != 0));
+}
+
+/**
+ Sends a POST packet across ASF
+
+ @param[in] MessageType POST Status Code
+
+ @retval EFI_DEVICE_ERROR No message found
+ @retval EFI_SUCCESS Boot options copied
+ @retval EFI_INVALID_PARAMETER Invalid pointer
+ @retval EFI_NOT_READY No controller
+**/
+EFI_STATUS
+SendPostPacket (
+ IN EFI_FRAMEWORK_MESSAGE_TYPE MessageType
+ )
+{
+ EFI_STATUS Status;
+ UINTN Index;
+
+ Status = EFI_DEVICE_ERROR;
+ ///
+ /// Find the message to send across the wire
+ ///
+ for (Index = 0; Index < sizeof (mAsfFrameworkMessage) / sizeof (EFI_ASF_FRAMEWORK_MESSAGE); Index++) {
+ if (mAsfFrameworkMessage[Index].MessageType == MessageType) {
+ Status = SendAsfMessage (NULL, &mAsfFrameworkMessage[Index].Message);
+ break;
+ }
+ }
+
+ return Status;
+}
+
+/**
+ Provides an interface that a software module can call to report an ASF DXE status code.
+
+ @param[in] Type Indicates the type of status code being reported.
+ @param[in] Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is
+ used to classify the entity as well as an operation.
+ @param[in] Instance The enumeration of a hardware or software entity within
+ the system. Valid instance numbers start with 1.
+ @param[in] CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different
+ rules to different callers.
+ @param[in] Data This optional parameter may be used to pass additional data.
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_DEVICE_ERROR The function should not be completed due to a device error.
+**/
+EFI_STATUS
+EFIAPI
+AmtReportStatusCode (
+ IN EFI_STATUS_CODE_TYPE Type,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID * CallerId OPTIONAL,
+ IN EFI_STATUS_CODE_DATA * Data OPTIONAL
+ )
+{
+ UINTN Index;
+ EFI_STATUS Status;
+
+ if (mProgressEventEnabled) {
+ if ((Type & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) {
+ for (Index = 0; Index < sizeof (mAsfProgressDataHubMap) / sizeof (EFI_ASF_DATA_HUB_MAP); Index++) {
+ if (mAsfProgressDataHubMap[Index].StatusCodeValue == Value) {
+ return SendPostPacket (mAsfProgressDataHubMap[Index].MessageType);
+ }
+ }
+ }
+ }
+
+ if ((Type & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) {
+ for (Index = 0; Index < sizeof (mAsfErrorDataHubMap) / sizeof (EFI_ASF_DATA_HUB_MAP); Index++) {
+ if (mAsfErrorDataHubMap[Index].StatusCodeValue == Value) {
+ Status = SendPostPacket (mAsfErrorDataHubMap[Index].MessageType);
+ if ((Status == EFI_DEVICE_ERROR) && IsForcePushErrorEvent (mAsfErrorDataHubMap[Index].MessageType)) {
+ SaveForcePushErrorEvent (mAsfErrorDataHubMap[Index].MessageType);
+ }
+
+ return Status;
+ }
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This routine puts PET message to MessageQueue, which will be sent later.
+
+ @param[in] Type StatusCode message type.
+ @param[in] Value StatusCode message value.
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_OUT_OF_RESOURCES Unable to allocate necessary data structures
+**/
+EFI_STATUS
+QueuePetMessage (
+ IN EFI_STATUS_CODE_TYPE Type,
+ IN EFI_STATUS_CODE_VALUE Value
+ )
+{
+ AMT_PET_QUEUE_NODE *NewNode;
+
+ NewNode = AllocateZeroPool (sizeof (AMT_PET_QUEUE_NODE));
+ ASSERT (NewNode != NULL);
+ if (NewNode == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ NewNode->Signature = AMT_PET_QUEUE_NODE_SIGNATURE;
+ NewNode->Type = Type;
+ NewNode->Value = Value;
+ InsertTailList ((LIST_ENTRY *) &gAmtPetQueueProtocol->MessageList, (LIST_ENTRY *) &NewNode->Link);
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This routine sends PET message in MessageQueue.
+
+ @param[in] PeiServices PeiServices pointer.
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_NOT_READY No controller
+**/
+EFI_STATUS
+SendPETMessageInQueue (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ AMT_PET_QUEUE_HOB *PETQueueHob;
+ EFI_LIST_ENTRY *Link;
+ AMT_PET_QUEUE_NODE *Node;
+ EFI_PEI_HOB_POINTERS Hob;
+
+ EFI_HECI_PROTOCOL *Heci;
+ UINT32 MeStatus;
+ EFI_STATUS TempStatus;
+
+ ///
+ /// Try HECI state
+ ///
+ Status = gBS->LocateProtocol (
+ &gEfiHeciProtocolGuid,
+ NULL,
+ (VOID **) &Heci
+ );
+ if (EFI_ERROR (Status)) {
+ return EFI_NOT_READY;
+ }
+
+ TempStatus = Heci->GetMeStatus (&MeStatus);
+ ASSERT_EFI_ERROR (TempStatus);
+
+ ///
+ /// Only send ASF Push Progress code when ME is ready. Ignore FW Init Status.
+ ///
+ if (ME_STATUS_ME_STATE_ONLY (MeStatus) != ME_READY) {
+ return EFI_NOT_READY;
+ }
+ ///
+ /// Get PETQueueHob
+ ///
+ Status = EfiGetSystemConfigurationTable (&gEfiHobListGuid, (VOID **) &PETQueueHob);
+
+ while (TRUE) {
+ PETQueueHob = GetNextGuidHob (&gAmtPetQueueHobGuid, PETQueueHob);
+ if (PETQueueHob == NULL) {
+ break;
+ }
+ ///
+ /// Send message
+ ///
+ AmtReportStatusCode (PETQueueHob->Type, PETQueueHob->Value, 0, NULL, NULL);
+
+ ///
+ /// Mark it as sent
+ ///
+ PETQueueHob->Type = (UINT32) -1;
+
+ ///
+ /// Need find next one
+ ///
+ Hob.Raw = (VOID *) PETQueueHob;
+ PETQueueHob = (AMT_PET_QUEUE_HOB *) GET_NEXT_HOB (Hob);
+ }
+ ///
+ /// Send DXEQueue
+ ///
+ Link = (EFI_LIST_ENTRY *) GetFirstNode ((LIST_ENTRY *) &gAmtPetQueueProtocol->MessageList);
+
+ while (!IsNull ((LIST_ENTRY *) &gAmtPetQueueProtocol->MessageList, (LIST_ENTRY *) Link)) {
+ Node = AMT_PET_QUEUE_NODE_FROM_LINK (Link);
+
+ ///
+ /// Send message
+ ///
+ AmtReportStatusCode (Node->Type, Node->Value, 0, NULL, NULL);
+
+ ///
+ /// Mark it as sent
+ ///
+ Node->Type = (UINT32) -1;
+
+ Link = (EFI_LIST_ENTRY *) GetNextNode (
+ (LIST_ENTRY *) &gAmtPetQueueProtocol->MessageList,
+ (LIST_ENTRY *) &Node->Link
+ );
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This routine creats PET MessageQueue.
+
+ @param[in] None
+
+ @retval EFI_SUCCESS The function completed successfully
+**/
+EFI_STATUS
+AmtCreateMessageQueue (
+ VOID
+ )
+{
+ ///
+ /// Create Queue for later usage
+ ///
+ gAmtPetQueueProtocol = &gAmtPetQueue;
+
+ InitializeListHead ((LIST_ENTRY *) &gAmtPetQueueProtocol->MessageList);
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This routine saves current ForcePush ErrorEvent to Variable, which will be sent again.
+
+ @param[in] MessageType ASF PET message type.
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_OUT_OF_RESOURCES Unable to allocate necessary data structures
+**/
+EFI_STATUS
+SaveForcePushErrorEvent (
+ IN EFI_FRAMEWORK_MESSAGE_TYPE MessageType
+ )
+{
+ EFI_STATUS Status;
+ UINTN Size;
+ EFI_FRAMEWORK_MESSAGE_TYPE *Message;
+
+ ///
+ /// Create PET queue variable
+ ///
+ Message = NULL;
+ Size = 0;
+ Status = gRT->GetVariable (
+ AMT_FORCE_PUSH_PET_VARIABLE_NAME,
+ &gAmtForcePushPetVariableGuid,
+ NULL,
+ &Size,
+ NULL
+ );
+ if (Status == EFI_BUFFER_TOO_SMALL) {
+ ///
+ /// Get the exist message
+ ///
+ Message = AllocateZeroPool (Size + sizeof (MessageType));
+ ASSERT (Message != NULL);
+ if (Message == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ Status = gRT->GetVariable (
+ AMT_FORCE_PUSH_PET_VARIABLE_NAME,
+ &gAmtForcePushPetVariableGuid,
+ NULL,
+ &Size,
+ Message
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ ///
+ /// Fill new item
+ ///
+ *(EFI_FRAMEWORK_MESSAGE_TYPE *) ((UINTN) Message + Size) = MessageType;
+ Size += sizeof (MessageType);
+ } else if (Status == EFI_NOT_FOUND) {
+ ///
+ /// Create a new one
+ ///
+ Size = sizeof (MessageType);
+ Message = AllocateZeroPool (sizeof (MessageType));
+ ASSERT (Message != NULL);
+ if (Message == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ *Message = MessageType;
+ } else {
+ ASSERT (FALSE);
+ }
+ ///
+ /// Set PET message to variable
+ ///
+ if (Message != NULL) {
+ Status = gRT->SetVariable (
+ AMT_FORCE_PUSH_PET_VARIABLE_NAME,
+ &gAmtForcePushPetVariableGuid,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
+ Size,
+ Message
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ FreePool (Message);
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This routine converts Hob ForcePush ErrorEvent to Variable, which will be sent again.
+
+ @param[in] None
+
+ @retval EFI_SUCCESS The function completed successfully
+**/
+EFI_STATUS
+SaveForcePushErrorEventFromPeiToDxe (
+ VOID
+ )
+{
+ AMT_FORCE_PUSH_PET_HOB *AmtForcePushPETHob;
+ EFI_STATUS Status;
+ EFI_PEI_HOB_POINTERS Hob;
+
+ ///
+ /// Find ASF ForcePush PET Hob
+ ///
+ Status = EfiGetSystemConfigurationTable (&gEfiHobListGuid, (VOID **) &AmtForcePushPETHob);
+
+ while (TRUE) {
+ AmtForcePushPETHob = GetNextGuidHob (&gAmtForcePushPetHobGuid, AmtForcePushPETHob);
+ if (AmtForcePushPETHob == NULL) {
+ break;
+ }
+
+ SaveForcePushErrorEvent (AmtForcePushPETHob->MessageType);
+
+ ///
+ /// Need find next one
+ ///
+ Hob.Raw = (VOID *) AmtForcePushPETHob;
+ AmtForcePushPETHob = (AMT_FORCE_PUSH_PET_HOB *) GET_NEXT_HOB (Hob);
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This routine tries to send all ForcePush ErrorEvent.
+ If message is sent, it will be deleted from Variable.
+ If message is not sent, it will be still stored to Variable.
+
+ @param[in] None
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_OUT_OF_RESOURCES Unable to allocate necessary data structures
+**/
+EFI_STATUS
+SendAllForcePushErrorEvent (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UINTN Size;
+ EFI_FRAMEWORK_MESSAGE_TYPE *Message;
+ UINTN Index;
+ EFI_FRAMEWORK_MESSAGE_TYPE *NewMessage;
+ UINTN NewIndex;
+
+ ///
+ /// Create PET queue variable
+ ///
+ Message = NULL;
+ Size = 0;
+ Status = gRT->GetVariable (
+ AMT_FORCE_PUSH_PET_VARIABLE_NAME,
+ &gAmtForcePushPetVariableGuid,
+ NULL,
+ &Size,
+ NULL
+ );
+ if (Status == EFI_NOT_FOUND) {
+ return EFI_SUCCESS;
+ }
+
+ if (Status != EFI_BUFFER_TOO_SMALL) {
+ return Status;
+ }
+ ///
+ /// Get the exist message
+ ///
+ Message = AllocateZeroPool (Size);
+ ASSERT (Message != NULL);
+ if (Message == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ NewMessage = AllocateZeroPool (Size);
+ ASSERT (NewMessage != NULL);
+ if (NewMessage == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ Status = gRT->GetVariable (
+ AMT_FORCE_PUSH_PET_VARIABLE_NAME,
+ &gAmtForcePushPetVariableGuid,
+ NULL,
+ &Size,
+ Message
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ NewIndex = 0;
+ for (Index = 0; Index < Size / sizeof (EFI_FRAMEWORK_MESSAGE_TYPE); Index++) {
+ Status = SendPostPacket (Message[Index]);
+ if (EFI_ERROR (Status)) {
+ ///
+ /// Fail, save it again.
+ ///
+ NewMessage[NewIndex] = Message[Index];
+ NewIndex++;
+ }
+ }
+
+ FreePool (Message);
+
+ ///
+ /// SetVariable again
+ ///
+ if (NewIndex == 0) {
+ FreePool (NewMessage);
+ NewMessage = NULL;
+ }
+
+ Status = gRT->SetVariable (
+ AMT_FORCE_PUSH_PET_VARIABLE_NAME,
+ &gAmtForcePushPetVariableGuid,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
+ NewIndex * sizeof (EFI_FRAMEWORK_MESSAGE_TYPE),
+ NewMessage
+ );
+
+ if (NewMessage != NULL) {
+ FreePool (NewMessage);
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.cif b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.cif
new file mode 100644
index 0000000..f091a20
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.cif
@@ -0,0 +1,13 @@
+<component>
+ name = "AlertStandardFormatDxe"
+ category = ModulePart
+ LocalRoot = "ReferenceCode\ME\ActiveManagement\AlertStandardFormat\Heci\Dxe\"
+ RefName = "AlertStandardFormatDxe"
+[files]
+"AlertStandardFormatDxe.sdl"
+"AlertStandardFormatDxe.mak"
+"AlertStandardFormatDxe.c"
+"AlertStandardFormatDxe.dxs"
+"AlertStandardFormatDxe.h"
+"AlertStandardFormatDxe.inf"
+<endComponent>
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.dxs b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.dxs
new file mode 100644
index 0000000..dd340c9
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.dxs
@@ -0,0 +1,47 @@
+/** @file
+ Dependency expression source file.
+
+@copyright
+ Copyright (c) 2005 - 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
+
+**/
+
+//
+// Common for R8 and R9 codebase
+//
+#include "AutoGen.h"
+#include "DxeDepex.h"
+
+//
+// BUILD_WITH_GLUELIB and BUILD_WITH_EDKII_GLUE_LIB are both "defined" in R8 codebase;
+// BUILD_WITH_EDKII_GLUE_LIB is defined in Edk-Dev-Snapshot-20070228 and later version
+// BUILD_WITH_GLUELIB and BUILD_WITH_EDKII_GLUE_LIB are "not defined" in R9 codebase.
+//
+#if defined (BUILD_WITH_GLUELIB) || defined (BUILD_WITH_EDKII_GLUE_LIB)
+#include "EfiDepex.h"
+
+#include EFI_PROTOCOL_DEFINITION (DataHub)
+#include EFI_PROTOCOL_DEFINITION (Heci)
+#include EFI_PROTOCOL_DEFINITION (AcpiSupport)
+#include EFI_PROTOCOL_DEFINITION (AmtPlatformPolicy)
+
+#endif
+
+DEPENDENCY_START
+ EFI_DATA_HUB_PROTOCOL_GUID AND
+ EFI_HECI_PROTOCOL_GUID AND
+ EFI_ACPI_SUPPORT_GUID AND
+ DXE_PLATFORM_AMT_POLICY_GUID
+DEPENDENCY_END
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.h b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.h
new file mode 100644
index 0000000..0e6b947
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.h
@@ -0,0 +1,340 @@
+/** @file
+ Include file for ASF Driver
+
+@copyright
+ Copyright (c) 2005 - 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 _ALERT_STANDARD_FORMAT_H
+#define _ALERT_STANDARD_FORMAT_H
+
+#include "AslUpdateLib.h"
+#include "AlertStandardFormatTable.h"
+#include "AmtLib.h"
+#include "AlertStandardFormatCommon.h"
+
+//
+// Driver Consumed Protocol Prototypes
+//
+#include EFI_PROTOCOL_CONSUMER (DataHub)
+#include EFI_PROTOCOL_CONSUMER (AlertStandardFormat)
+#include EFI_PROTOCOL_CONSUMER (HECI)
+#include EFI_PROTOCOL_CONSUMER (ConsoleControl)
+#include EFI_GUID_DEFINITION (ConsoleLock)
+#include EFI_GUID_DEFINITION (AmtForcePushPetPolicy)
+
+///
+/// ASF Over HECI
+///
+typedef struct _HECI_ASF_PUSH_PROGRESS_CODE {
+ UINT8 Command;
+ UINT8 ByteCount;
+ EFI_ASF_MESSAGE AsfMessage;
+ UINT8 EventData[3];
+ UINT8 Reserved[2];
+} HECI_ASF_PUSH_PROGRESS_CODE;
+
+#define HECI_ASF_PUSH_PROGRESS_CODE_LENGTH 0x12
+
+typedef struct _HECI_ASF_GET_BOOT_OPTIONS {
+ UINT8 Command;
+ UINT8 ByteCount;
+ UINT8 SubCommand;
+ UINT8 VersionNumber;
+} HECI_ASF_GET_BOOT_OPTIONS;
+
+#define HECI_ASF_GET_BOOT_OPTIONS_LENGTH 0x04
+
+typedef struct _HECI_ASF_GET_BOOT_OPTIONS_RESPONSE {
+ UINT8 Command;
+ UINT8 ByteCount;
+ EFI_ASF_BOOT_OPTIONS AsfBootOptions;
+ UINT8 Reserved;
+} HECI_ASF_GET_BOOT_OPTIONS_RESPONSE;
+
+#define HECI_ASF_GET_BOOT_OPTIONS_RESPONSE_LENGTH 0x0F
+
+typedef struct _HECI_ASF_CLEAR_BOOT_OPTION {
+ UINT8 Command;
+ UINT8 ByteCount;
+ EFI_ASF_CLEAR_BOOT_OPTIONS AsfClearBootOptions;
+} HECI_ASF_CLEAR_BOOT_OPTION;
+
+#define HECI_ASF_CLEAR_BOOT_OPTION_LENGTH 0x04
+
+typedef enum _HASFM_COMMAND_CODE
+{
+ ASF_MESSAGING_CMD = 0x04,
+ ASF_PUSH_PROGESS_CODE_SUBCMD = 0x12,
+ ASF_MENAGEMENT_CONTROL = 0x02,
+ ASF_WDT_START_SUBCMD = 0x13,
+ ASF_WDT_STOP_SUBCMD = 0x14,
+ ASF_CONFIGURATION_CMD = 0x03,
+ ASF_CLEAR_BOOT_OPTION_SUBCMD = 0x15,
+ ASF_RETURN_BOOT_OPTION_SUBCMD = 0x16,
+ ASF_NO_BOOT_OPTION_SUBCMD = 0x17
+} HASFM_COMMAND_CODE;
+
+typedef struct {
+ EFI_FRAMEWORK_MESSAGE_TYPE MessageType;
+ EFI_ASF_MESSAGE Message;
+} EFI_ASF_FRAMEWORK_MESSAGE;
+
+typedef struct {
+ EFI_FRAMEWORK_MESSAGE_TYPE MessageType;
+ EFI_STATUS_CODE_VALUE StatusCodeValue;
+} EFI_ASF_DATA_HUB_MAP;
+
+#define ALERT_STANDARD_FORMAT_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('a', 's', 'f', 'd')
+
+///
+/// Declare a local instance structure for this driver
+///
+typedef struct _ALERT_STANDARD_FORMAT_INSTANCE {
+ UINTN Signature;
+ EFI_HANDLE Handle;
+
+ ///
+ /// Published interface
+ ///
+ EFI_ALERT_STANDARD_FORMAT_PROTOCOL AlertStandardFormat;
+
+} ALERT_STANDARD_FORMAT_INSTANCE;
+
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (AmtStatusCode)
+
+#define EFI_CONSOLE_OUT_DEVICE_GUID \
+ { \
+ 0xd3b36f2c, 0xd551, 0x11d4, \
+ { \
+ 0x9a, 0x46, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d \
+ } \
+ }
+
+#define AMT_FORCE_PUSH_PET_VARIABLE_GUID \
+ { \
+ 0xd7ac94af, 0xa498, 0x45ec, 0xbf, 0xa2, 0xa5, 0x6e, 0x95, 0x34, 0x61, 0x8b \
+ }
+
+#define AMT_FORCE_PUSH_PET_VARIABLE_NAME L"AmtForcePushErrorPET"
+
+#define AMT_PET_QUEUE_NODE_SIGNATURE EFI_SIGNATURE_32 ('A', 'M', 'T', 'Q')
+
+typedef struct _AMT_PET_QUEUE_NODE {
+ UINT32 Signature;
+ EFI_LIST_ENTRY Link;
+ EFI_STATUS_CODE_VALUE Value;
+ EFI_STATUS_CODE_TYPE Type;
+} AMT_PET_QUEUE_NODE;
+
+#define AMT_PET_QUEUE_NODE_FROM_LINK(_node) CR (_node, AMT_PET_QUEUE_NODE, Link, AMT_PET_QUEUE_NODE_SIGNATURE)
+
+typedef struct {
+ EFI_LIST_ENTRY MessageList;
+} AMT_PET_QUEUE_PROTOCOL;
+
+//
+// Prototypes
+//
+
+/**
+ The driver entry point - detect ASF support or not, if support, will install relative protocol.
+
+ @param[in] ImageHandle Handle for this drivers loaded image protocol.
+ @param[in] SystemTable EFI system table.
+
+ @retval EFI_SUCCESS The driver installed without error.
+ @exception EFI_UNSUPPORTED The chipset is unsupported by this driver.
+ @retval EFI_OUT_OF_RESOURCES Unable to allocate necessary data structures.
+**/
+EFI_STATUS
+EFIAPI
+AlertStandardFormatDriverEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+;
+
+/**
+ Return the SMBus address used by the ASF driver.
+ Not applicable in Intel ME/HECI system, need to return EFI_UNSUPPORTED.
+
+ @param[in] This The address of protocol
+ @param[in] SmbusDeviceAddress Out put the Smbus Address
+
+ @exception EFI_UNSUPPORTED The function is unsupported by this driver
+**/
+EFI_STATUS
+EFIAPI
+GetSmbusAddr (
+ IN EFI_ALERT_STANDARD_FORMAT_PROTOCOL *This,
+ OUT UINTN *SmbusDeviceAddress
+ )
+;
+
+/**
+ Set the SMBus address used by the ASF driver. 0 is an invalid address.
+ Not applicable in Intel ME/HECI system, need to return EFI_UNSUPPORTED.
+
+ @param[in] This The address of protocol
+ @param[in] SmbusDeviceAddress SMBus address of the device
+
+ @exception EFI_UNSUPPORTED The function is unsupported by this driver
+**/
+EFI_STATUS
+EFIAPI
+SetSmbusAddr (
+ IN EFI_ALERT_STANDARD_FORMAT_PROTOCOL *This,
+ IN UINTN SmbusDeviceAddress
+ )
+;
+
+/**
+ Return the ASF Boot Options obtained from the controller. If the
+ Boot Options parameter is NULL and no boot options have been retrieved,
+ Query the ASF controller for its boot options.
+ Get ASF Boot Options through HECI.
+
+ @param[in] This The address of protocol
+ @param[in] AsfBootOptions Pointer to ASF boot options to copy current ASF Boot options
+
+ @retval EFI_SUCCESS Boot options copied
+ @retval EFI_NOT_READY No boot options
+**/
+EFI_STATUS
+EFIAPI
+GetBootOptions (
+ IN EFI_ALERT_STANDARD_FORMAT_PROTOCOL *This,
+ IN OUT EFI_ASF_BOOT_OPTIONS **AsfBootOptions
+ )
+;
+
+/**
+ Send ASF Message through HECI.
+
+ @param[in] This The address of protocol
+ @param[in] AsfMessage Pointer to ASF message
+
+ @retval EFI_SUCCESS Boot options copied
+ @retval EFI_INVALID_PARAMETER Invalid pointer
+ @retval EFI_NOT_READY No controller
+**/
+EFI_STATUS
+EFIAPI
+SendAsfMessage (
+ IN EFI_ALERT_STANDARD_FORMAT_PROTOCOL *This,
+ IN EFI_ASF_MESSAGE *AsfMessage
+ )
+;
+
+/**
+ This routine returns ForcePushPetPolicy information.
+
+ @param[in] None
+
+ @retval AMT_FORCE_PUSH_PET_POLICY_HOB ForcePushPetPolicy information.
+**/
+AMT_FORCE_PUSH_PET_POLICY_HOB *
+GetForcePushPetPolicy (
+ VOID
+ )
+;
+
+/**
+ Filters all the progress and error codes for Asf.
+
+ @param[in] Event The event registered.
+ @param[in] Context Event context. Not used in this event handler.
+**/
+VOID
+EFIAPI
+DataHubEventCallback (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+;
+
+/**
+ Sends a POST packet across ASF
+
+ @param[in] MessageType POST Status Code
+
+ @retval EFI_DEVICE_ERROR No message found
+ @retval EFI_SUCCESS Boot options copied
+ @retval EFI_INVALID_PARAMETER Invalid pointer
+ @retval EFI_NOT_READY No controller
+**/
+EFI_STATUS
+SendPostPacket (
+ IN EFI_FRAMEWORK_MESSAGE_TYPE MessageType
+ )
+;
+
+/**
+ This routine sends PET message in MessageQueue.
+
+ @param[in] PeiServices PeiServices pointer.
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_NOT_READY No controller
+**/
+EFI_STATUS
+SendPETMessageInQueue (
+ VOID
+ )
+;
+
+/**
+ This routine creats PET MessageQueue.
+
+ @param[in] None
+
+ @retval EFI_SUCCESS The function completed successfully
+**/
+EFI_STATUS
+AmtCreateMessageQueue (
+ VOID
+ )
+;
+
+/**
+ This routine saves current ForcePush ErrorEvent to Variable, which will be sent again.
+
+ @param[in] MessageType ASF PET message type.
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_OUT_OF_RESOURCES Unable to allocate necessary data structures
+**/
+EFI_STATUS
+SaveForcePushErrorEvent (
+ IN EFI_FRAMEWORK_MESSAGE_TYPE MessageType
+ )
+;
+
+/**
+ This routine converts Hob ForcePush ErrorEvent to Variable, which will be sent again.
+
+ @param[in] None
+
+ @retval EFI_SUCCESS The function completed successfully
+**/
+EFI_STATUS
+SaveForcePushErrorEventFromPeiToDxe (
+ VOID
+ )
+;
+#endif
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.inf b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.inf
new file mode 100644
index 0000000..b484230
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.inf
@@ -0,0 +1,99 @@
+## @file
+# Component description file for Alert Standard Format driver.
+#
+#@copyright
+# Copyright (c) 2005 - 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 = AlertStandardFormatDxe
+FILE_GUID = 33c6406d-2f6b-41b5-8705-52bafb633c09
+COMPONENT_TYPE = BS_DRIVER
+
+[sources.common]
+ AlertStandardFormatDxe.c
+ AlertStandardFormatDxe.h
+
+#
+# Edk II Glue Driver Entry Point
+#
+ EdkIIGlueDxeDriverEntryPoint.c
+
+[libraries.common]
+ AmtLib
+ MeGuidLib
+ MeProtocolLib
+ AslUpdateLib
+ EdkProtocolLib
+ EdkFrameworkProtocolLib
+ EdkIIGlueBaseMemoryLib
+ EdkIIGlueDxeReportStatusCodeLib
+ EdkIIGlueDxeHobLib
+ EdkIIGlueDxeDebugLibReportStatusCode
+ EdkIIGlueUefiBootServicesTableLib
+ EdkIIGlueUefiRuntimeServicesTableLib
+ EdkIIGlueDxeMemoryAllocationLib
+
+[includes.common]
+ $(EDK_SOURCE)/Foundation
+ $(EDK_SOURCE)/Foundation/Framework
+ $(EDK_SOURCE)/Foundation/Efi
+ $(EDK_SOURCE)/Foundation/Core/Dxe
+ $(EDK_SOURCE)/Foundation/Include
+ $(EDK_SOURCE)/Foundation/Efi/Include
+ $(EDK_SOURCE)/Foundation/Framework/Include
+ $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+ $(EDK_SOURCE)/Foundation/Library/Dxe/Include
+ $(EFI_SOURCE)/$(PROJECT_ME_ROOT)
+ $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/ActiveManagement/AlertStandardFormat/Heci/Common
+ $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/Heci/Include
+ $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/Library/AMT/Dxe
+ $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/Library/MeKernel/Dxe
+ $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/Library/MeKernel/Include
+ $(EFI_SOURCE)/$(PROJECT_PCH_ROOT)/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/Include
+
+#
+# Edk II Glue Library, some hearder are included by R9 header so have to include
+#
+
+ $(EFI_SOURCE)
+ $(EFI_SOURCE)/Framework
+ $(EDK_SOURCE)/Foundation
+ $(EDK_SOURCE)/Foundation/Framework
+ $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+ $(EDK_SOURCE)/Foundation/Core/Dxe
+ $(EDK_SOURCE)/Foundation/Include/Pei
+ $(EDK_SOURCE)/Foundation/Library/Dxe/Include
+ $(EDK_SOURCE)/Foundation/Library/EdkIIGlueLib/Include
+
+[nmake.common]
+ IMAGE_ENTRY_POINT = _ModuleEntryPoint
+ DPX_SOURCE = AlertStandardFormatDxe.dxs
+#
+# Module Entry Point
+#
+ C_FLAGS = $(C_FLAGS) -D __EDKII_GLUE_MODULE_ENTRY_POINT__=AlertStandardFormatDriverEntryPoint
+ C_FLAGS = $(C_FLAGS) -D __EDKII_GLUE_BASE_MEMORY_LIB__ \
+ -D __EDKII_GLUE_DXE_REPORT_STATUS_CODE_LIB__ \
+ -D __EDKII_GLUE_DXE_DEBUG_LIB_REPORT_STATUS_CODE__ \
+ -D __EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__ \
+ -D __EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.mak b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.mak
new file mode 100644
index 0000000..202d1c9
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.mak
@@ -0,0 +1,59 @@
+# MAK file for the ModulePart:AlertStandardFormatDxe
+
+all : AlertStandardFormatDxe
+
+AlertStandardFormatDxe : $(BUILD_DIR)\AlertStandardFormatDxe.mak AlertStandardFormatDxeBin
+
+$(BUILD_DIR)\AlertStandardFormatDxe.mak : $(AlertStandardFormatDxe_DIR)\$(@B).cif $(AlertStandardFormatDxe_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(AlertStandardFormatDxe_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+AlertStandardFormatDxe_INCLUDES=\
+ $(EDK_INCLUDES)\
+ $(EdkIIGlueLib_INCLUDES)\
+ $(ME_INCLUDES)\
+ $(AlertStandardFormat_INCLUDES)\
+ $(IndustryStandard_INCLUDES)\
+ $(INTEL_PCH_INCLUDES)\
+
+AlertStandardFormatDxe_LIBS=\
+ $(EDKPROTOCOLLIB)\
+ $(EDKFRAMEWORKPROTOCOLLIB)\
+ $(AmtLibDxe_LIB)\
+ $(MeGuidLib_LIB)\
+ $(MeProtocolLib_LIB)\
+ $(MeAslUpdateLib_LIB)\
+ $(EdkIIGlueBaseLib_LIB)\
+!IF "$(x64_BUILD)"=="1"
+ $(EdkIIGlueBaseLibX64_LIB)\
+!ELSE
+ $(EdkIIGlueBaseLibIA32_LIB)\
+!ENDIF
+ $(EdkIIGlueUefiLib_LIB)\
+ $(EdkIIGlueBaseMemoryLib_LIB)\
+ $(EdkIIGlueDxeReportStatusCodeLib_LIB)\
+ $(EdkIIGlueEdkDxeRuntimeDriverLib_LIB)\
+ $(EdkIIGlueDxeDebugLibReportStatusCode_LIB)\
+ $(EdkIIGlueUefiBootServicesTableLib_LIB)\
+ $(EdkIIGlueDxeMemoryAllocationLib_LIB)\
+ $(EdkIIGlueDxeHobLib_LIB)\
+
+AlertStandardFormatDxe_DEFINES=\
+ $(MY_DEFINES)\
+ /D"__EDKII_GLUE_MODULE_ENTRY_POINT__=AlertStandardFormatDriverEntryPoint"\
+ /D __EDKII_GLUE_BASE_MEMORY_LIB__ \
+ /D __EDKII_GLUE_DXE_REPORT_STATUS_CODE_LIB__ \
+ /D __EDKII_GLUE_DXE_DEBUG_LIB_REPORT_STATUS_CODE__ \
+ /D __EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__\
+
+AlertStandardFormatDxeBin : $(AlertStandardFormatDxe_LIBS)
+ $(MAKE) /$(MAKEFLAGS) $(EDKIIGLUE_DEFAULTS)\
+ /f $(BUILD_DIR)\AlertStandardFormatDxe.mak all\
+ "MY_INCLUDES=$(AlertStandardFormatDxe_INCLUDES)" \
+ "MY_DEFINES=$(AlertStandardFormatDxe_DEFINES)"\
+ GUID=33c6406d-2f6b-41b5-8705-52bafb633c09 \
+ ENTRY_POINT=_ModuleEntryPoint \
+ EDKIIModule=DXEDRIVER\
+ TYPE=BS_DRIVER \
+ DEPEX1=$(AlertStandardFormatDxe_DIR)\AlertStandardFormatDxe.dxs \
+ DEPEX1_TYPE=EFI_SECTION_DXE_DEPEX \
+ COMPRESS=1
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.sdl b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.sdl
new file mode 100644
index 0000000..938ff01
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Dxe/AlertStandardFormatDxe.sdl
@@ -0,0 +1,25 @@
+TOKEN
+ Name = AlertStandardFormatDxe_SUPPORT
+ Value = 1
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+ Help = "Main switch to enable AlertStandardFormatDxe support in Project"
+End
+
+MODULE
+ Help = "Includes AlertStandardFormatDxe.mak to Project"
+ File = "AlertStandardFormatDxe.mak"
+End
+
+PATH
+ Name = "AlertStandardFormatDxe_DIR"
+ Help = "AlertStandardFormatDxe files source directory"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\AlertStandardFormatDxe.ffs"
+ Parent = "FV_MAIN"
+ InvokeOrder = AfterParent
+End \ No newline at end of file
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.c b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.c
new file mode 100644
index 0000000..10afe73
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.c
@@ -0,0 +1,437 @@
+/** @file
+ Processes ASF messages
+
+@copyright
+ Copyright (c) 2010 - 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
+
+**/
+
+//
+// External include files do NOT need to be explicitly specified in real EDKII
+// environment
+//
+#if !defined(EDK_RELEASE_VERSION) || (EDK_RELEASE_VERSION < 0x00020000)
+#include "EdkIIGluePeim.h"
+#include "AlertStandardFormatPei.h"
+#include "MeLibPei.h"
+#endif
+
+#define ASF_PEI
+#include "AlertStandardFormatCommon.c"
+
+static PEI_AMT_STATUS_CODE_PPI mPeiAmtStatusCodePpi = { PeiAmtReportStatusCode };
+
+static EFI_PEI_PPI_DESCRIPTOR mInstallPeiAmtStatusCodePpi = {
+ EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &gPeiAmtStatusCodePpiGuid,
+ &mPeiAmtStatusCodePpi
+};
+
+/**
+ Perform AMT PET message sending
+
+ @param[in] FfsHeader FFS file header pointer of this driver.
+ @param[in] PeiServices General purpose services available to every PEIM.
+
+ @retval EFI_SUCCESS if the AMT StatusCode PPI is successfully installed.
+ @exception EFI_UNSUPPORTED ASF is not enabled or ManageabilityMode is zero.
+**/
+EFI_STATUS
+EFIAPI
+AlertStandardFormatDriverPeiEntryPoint (
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status;
+
+ ///
+ /// First check if ASF support is enabled in Setup.
+ ///
+ if (!PeiAsfSupported (PeiServices)) {
+ return EFI_UNSUPPORTED;
+ }
+ ///
+ /// Sending ASF Messaging if ManageabilityMode is not zero
+ ///
+ if (ManageabilityModeSetting (PeiServices) == MNT_OFF) {
+ return EFI_UNSUPPORTED;
+ }
+ ///
+ /// Install AMT report status code PPI
+ ///
+ Status = (**PeiServices).InstallPpi (PeiServices, &mInstallPeiAmtStatusCodePpi);
+ ASSERT_EFI_ERROR (Status);
+
+ ///
+ /// Try to send PET message
+ ///
+ SendPETMessageInQueue (PeiServices);
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Send ASF Message.
+
+ @param[in] PeiServices General purpose services available to every PEIM.
+ @param[in] AsfMessage Pointer to ASF message
+
+ @retval EFI_SUCCESS Boot options copied
+ @retval EFI_INVALID_PARAMETER Invalid pointer
+ @retval EFI_NOT_READY No controller
+ @retval EFI_DEVICE_ERROR The function should not be completed due to a device error
+**/
+EFI_STATUS
+SendAsfMessage (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_ASF_MESSAGE *AsfMessage
+ )
+{
+ EFI_STATUS Status;
+ PEI_HECI_PPI *Heci;
+ UINT32 HeciMemBar;
+ UINT32 HeciLength;
+ HECI_ASF_PUSH_PROGRESS_CODE HeciAsfPushProgressCode;
+ UINT32 MeStatus;
+
+ Status = (*PeiServices)->LocatePpi (
+ PeiServices,
+ &gPeiHeciPpiGuid, // GUID
+ 0, // INSTANCE
+ NULL, // EFI_PEI_PPI_DESCRIPTOR
+ (VOID **) &Heci // PPI
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ Status = Heci->InitializeHeci (PeiServices, Heci, &HeciMemBar);
+ if (EFI_ERROR (Status)) {
+ return EFI_NOT_READY;
+ }
+
+ Status = Heci->GetMeStatus (PeiServices, &MeStatus);
+ ASSERT_EFI_ERROR (Status);
+
+ ///
+ /// Only send ASF Push Progress code when ME is ready. Ignore FW Init Status.
+ ///
+ if (ME_STATUS_ME_STATE_ONLY (MeStatus) != ME_READY) {
+ return EFI_NOT_READY;
+ }
+
+ ZeroMem ((VOID *) &HeciAsfPushProgressCode, sizeof (HECI_ASF_PUSH_PROGRESS_CODE));
+ HeciAsfPushProgressCode.Command = EFI_ASF_MESSAGE_COMMAND_MESSAGE;
+ HeciAsfPushProgressCode.ByteCount = 0x10;
+ HeciLength = HECI_ASF_PUSH_PROGRESS_CODE_LENGTH;
+ CopyMem ((VOID *) &(HeciAsfPushProgressCode.AsfMessage), (VOID *) AsfMessage, sizeof (EFI_ASF_MESSAGE));
+
+ Status = Heci->SendMsg (
+ PeiServices,
+ Heci,
+ (UINT32 *) &HeciAsfPushProgressCode,
+ HeciMemBar,
+ HeciLength,
+ BIOS_ASF_HOST_ADDR,
+ HECI_ASF_MESSAGE_ADDR
+ );
+ if (EFI_ERROR (Status)) {
+ return EFI_DEVICE_ERROR;
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This routine checks whethre current message is ForcePush message.
+
+ @param[in] PeiServices PeiServices pointer.
+ @param[in] MessageType AMT PET Message Type.
+
+ @retval TRUE It is ForcePush message.
+ @retval FALSE It is not ForcePush message.
+**/
+BOOLEAN
+IsForcePushErrorEvent (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_FRAMEWORK_MESSAGE_TYPE MessageType
+ )
+{
+ AMT_FORCE_PUSH_PET_POLICY_HOB *AmtForcePushPETPolicyHob;
+ UINTN Index;
+ UINTN Number;
+ EFI_STATUS Status;
+
+ Status = (*PeiServices)->GetHobList (PeiServices, (VOID **) &AmtForcePushPETPolicyHob);
+ ASSERT_EFI_ERROR (Status);
+
+ AmtForcePushPETPolicyHob = GetNextGuidHob (&gAmtForcePushPetPolicyGuid, AmtForcePushPETPolicyHob);
+ if (AmtForcePushPETPolicyHob == NULL) {
+ return FALSE;
+ }
+
+ Number = (AmtForcePushPETPolicyHob->EfiHobGuidType.Header.HobLength - sizeof (EFI_HOB_GUID_TYPE)) /
+ sizeof (EFI_FRAMEWORK_MESSAGE_TYPE);
+ for (Index = 0; Index < Number; Index++) {
+ if (AmtForcePushPETPolicyHob->MessageType[Index] == MessageType) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+/**
+ Provides an interface that a software module can call to report an ASF PEI status code.
+
+ @param[in] PeiServices PeiServices pointer.
+ @param[in] This This interface.
+ @param[in] Type Indicates the type of status code being reported.
+ @param[in] Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is
+ used to classify the entity as well as an operation.
+ @param[in] Instance The enumeration of a hardware or software entity within
+ the system. Valid instance numbers start with 1.
+ @param[in] CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different
+ rules to different callers.
+ @param[in] Data This optional parameter may be used to pass additional data.
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_DEVICE_ERROR The function should not be completed due to a device error.
+**/
+EFI_STATUS
+EFIAPI
+PeiAmtReportStatusCode (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_AMT_STATUS_CODE_PPI * This,
+ IN EFI_STATUS_CODE_TYPE Type,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID * CallerId OPTIONAL,
+ IN EFI_STATUS_CODE_DATA * Data OPTIONAL
+ )
+{
+ UINTN Index;
+ EFI_STATUS Status;
+
+ Status = EFI_SUCCESS;
+
+ if (PeiFwProgressSupport (PeiServices)) {
+ if ((Type & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) {
+ for (Index = 0; Index < sizeof (mAsfProgressDataHubMap) / sizeof (EFI_ASF_DATA_HUB_MAP); Index++) {
+ if (mAsfProgressDataHubMap[Index].StatusCodeValue == Value) {
+ ///
+ /// Queue Progress Code and send PET after checking Boot Options
+ ///
+ QueuePetMessage (PeiServices, Type, Value);
+ }
+ }
+ }
+ }
+
+ if ((Type & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) {
+ for (Index = 0; Index < sizeof (mAsfErrorDataHubMap) / sizeof (EFI_ASF_DATA_HUB_MAP); Index++) {
+ if (mAsfErrorDataHubMap[Index].StatusCodeValue == Value) {
+ Status = SendPostPacket (PeiServices, mAsfErrorDataHubMap[Index].MessageType);
+ if ((Status == EFI_DEVICE_ERROR) && IsForcePushErrorEvent (PeiServices, mAsfErrorDataHubMap[Index].MessageType)) {
+ SaveForcePushErrorEvent (PeiServices, mAsfErrorDataHubMap[Index].MessageType);
+ }
+
+ if (Status == EFI_NOT_READY) {
+ QueuePetMessage (PeiServices, Type, Value);
+ }
+ }
+ }
+ }
+
+ return Status;
+}
+
+/**
+ Sends a POST packet across ASF
+
+ @param[in] PeiServices General purpose services available to every PEIM.
+ @param[in] MessageType POST Status Code
+
+ @retval EFI_SUCCESS The function completed successfully
+**/
+EFI_STATUS
+SendPostPacket (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_FRAMEWORK_MESSAGE_TYPE MessageType
+ )
+{
+ UINTN Index;
+
+ ///
+ /// Find the message to send across the wire
+ ///
+ for (Index = 0; Index < sizeof (mAsfFrameworkMessage) / sizeof (EFI_ASF_FRAMEWORK_MESSAGE); Index++) {
+ if (mAsfFrameworkMessage[Index].MessageType == MessageType) {
+ return SendAsfMessage (PeiServices, &mAsfFrameworkMessage[Index].Message);
+ }
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This routine saves current ForcePush ErrorEvent to Hob, which will be sent again.
+
+ @param[in] PeiServices PeiServices pointer.
+ @param[in] MessageType ASF PET message type.
+
+ @retval EFI_SUCCESS The function completed successfully
+**/
+EFI_STATUS
+SaveForcePushErrorEvent (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_FRAMEWORK_MESSAGE_TYPE MessageType
+ )
+{
+ AMT_FORCE_PUSH_PET_HOB *ForcePushPETHob;
+ EFI_STATUS Status;
+
+ ///
+ /// Create PET queue hob
+ ///
+ Status = (**PeiServices).CreateHob (
+ PeiServices,
+ EFI_HOB_TYPE_GUID_EXTENSION,
+ sizeof (AMT_FORCE_PUSH_PET_HOB),
+ (VOID **) &ForcePushPETHob
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ ForcePushPETHob->EfiHobGuidType.Name = gAmtForcePushPetHobGuid;
+ ForcePushPETHob->MessageType = MessageType;
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This routine puts PET message to MessageQueue, which will be sent later.
+
+ @param[in] PeiServices PeiServices pointer.
+ @param[in] Type StatusCode message type.
+ @param[in] Value StatusCode message value.
+
+ @retval EFI_SUCCESS The function completed successfully
+**/
+EFI_STATUS
+QueuePetMessage (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_STATUS_CODE_TYPE Type,
+ IN EFI_STATUS_CODE_VALUE Value
+ )
+{
+ AMT_PET_QUEUE_HOB *PETQueueHob;
+ EFI_STATUS Status;
+
+ ///
+ /// Create PET queue hob
+ ///
+ Status = (**PeiServices).CreateHob (
+ PeiServices,
+ EFI_HOB_TYPE_GUID_EXTENSION,
+ sizeof (AMT_PET_QUEUE_HOB),
+ (VOID **) &PETQueueHob
+ );
+ ASSERT_EFI_ERROR (Status);
+ PETQueueHob->EfiHobGuidType.Name = gAmtPetQueueHobGuid;
+ PETQueueHob->Value = Value;
+
+ return EFI_SUCCESS;
+}
+
+/**
+ This routine sends PET message in MessageQueue.
+
+ @param[in] PeiServices PeiServices pointer.
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_NOT_READY No controller
+**/
+EFI_STATUS
+SendPETMessageInQueue (
+ IN EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status;
+ AMT_PET_QUEUE_HOB *PETQueueHob;
+ EFI_PEI_HOB_POINTERS Hob;
+
+ PEI_HECI_PPI *Heci;
+ UINT32 HeciMemBar;
+ UINT32 MeStatus;
+
+ ///
+ /// Try HECI state
+ ///
+ Status = (*PeiServices)->LocatePpi (
+ PeiServices,
+ &gPeiHeciPpiGuid, // GUID
+ 0, // INSTANCE
+ NULL, // EFI_PEI_PPI_DESCRIPTOR
+ (VOID **) &Heci // PPI
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ Status = Heci->InitializeHeci (PeiServices, Heci, &HeciMemBar);
+ if (EFI_ERROR (Status)) {
+ return EFI_NOT_READY;
+ }
+
+ Status = Heci->GetMeStatus (PeiServices, &MeStatus);
+ ASSERT_EFI_ERROR (Status);
+
+ ///
+ /// Only send ASF Push Progress code when ME is ready. Ignore FW Init Status.
+ ///
+ if (ME_STATUS_ME_STATE_ONLY (MeStatus) != ME_READY) {
+ return EFI_NOT_READY;
+ }
+ ///
+ /// Get PETQueueHob
+ ///
+ Status = (*PeiServices)->GetHobList (PeiServices, (VOID **) &PETQueueHob);
+ ASSERT_EFI_ERROR (Status);
+
+ while (TRUE) {
+ PETQueueHob = GetNextGuidHob (&gAmtPetQueueHobGuid, PETQueueHob);
+ if (PETQueueHob == NULL) {
+ break;
+ }
+ ///
+ /// Send message
+ ///
+ PeiAmtReportStatusCode (PeiServices, NULL, PETQueueHob->Type, PETQueueHob->Value, 0, NULL, NULL);
+
+ ///
+ /// Mark it as sent
+ ///
+ PETQueueHob->Type = (UINT32) -1;
+
+ ///
+ /// Need find next one
+ ///
+ Hob.Raw = (VOID *) PETQueueHob;
+ PETQueueHob = (AMT_PET_QUEUE_HOB *) GET_NEXT_HOB (Hob);
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.cif b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.cif
new file mode 100644
index 0000000..ee123bf
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.cif
@@ -0,0 +1,13 @@
+<component>
+ name = "AlertStandardFormatPei"
+ category = ModulePart
+ LocalRoot = "ReferenceCode\ME\ActiveManagement\AlertStandardFormat\Heci\Pei\"
+ RefName = "AlertStandardFormatPei"
+[files]
+"AlertStandardFormatPei.sdl"
+"AlertStandardFormatPei.mak"
+"AlertStandardFormatPei.c"
+"AlertStandardFormatPei.dxs"
+"AlertStandardFormatPei.h"
+"AlertStandardFormatPei.inf"
+<endComponent>
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.dxs b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.dxs
new file mode 100644
index 0000000..236c6ec
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.dxs
@@ -0,0 +1,29 @@
+/** @file
+ Dependency expression source file.
+
+@copyright
+ Copyright (c) 2010 - 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
+
+**/
+
+#include "EfiDepex.h"
+
+#include EFI_PPI_DEFINITION (Heci)
+#include EFI_PPI_DEFINITION (AmtPlatformPolicyPei)
+
+DEPENDENCY_START
+ PEI_HECI_PPI_GUID AND
+ PEI_AMT_PLATFORM_POLICY_PPI_GUID
+DEPENDENCY_END
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.h b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.h
new file mode 100644
index 0000000..b24dd69
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.h
@@ -0,0 +1,204 @@
+/** @file
+ Processes ASF messages
+
+@copyright
+ Copyright (c) 2010 - 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 _ALERT_STANDARD_FORMAT_PEI_H
+#define _ALERT_STANDARD_FORMAT_PEI_H
+
+#include "AmtLibPei.h"
+#include "MkhiMsgs.h"
+#include "AlertStandardFormatCommon.h"
+
+//
+// Driver Consumed Protocol Prototypes
+//
+#include EFI_PPI_CONSUMER (HECI)
+#include EFI_PPI_PRODUCER (AmtStatusCode)
+#include EFI_GUID_DEFINITION (MeBiosExtensionSetup)
+#include EFI_GUID_DEFINITION (AmtForcePushPetPolicy)
+
+///
+/// ASF Over HECI
+///
+#pragma pack(1)
+typedef struct {
+ UINT8 SubCommand;
+ UINT8 Version;
+ UINT8 EventSensorType;
+ UINT8 EventType;
+ UINT8 EventOffset;
+ UINT8 EventSourceType;
+ UINT8 EventSeverity;
+ UINT8 SensorDevice;
+ UINT8 SensorNumber;
+ UINT8 Entity;
+ UINT8 EntityInstance;
+ UINT8 Data0;
+ UINT8 Data1;
+} EFI_ASF_MESSAGE;
+#pragma pack()
+
+typedef struct _HECI_ASF_PUSH_PROGRESS_CODE {
+ UINT8 Command;
+ UINT8 ByteCount;
+ EFI_ASF_MESSAGE AsfMessage;
+ UINT8 EventData[3];
+ UINT8 Reserved[2];
+} HECI_ASF_PUSH_PROGRESS_CODE;
+
+#define HECI_ASF_PUSH_PROGRESS_CODE_LENGTH 0x12
+
+typedef enum _HASFM_COMMAND_CODE
+{
+ ASF_MESSAGING_CMD = 0x04,
+ ASF_PUSH_PROGESS_CODE_SUBCMD = 0x12,
+ ASF_MENAGEMENT_CONTROL = 0x02,
+ ASF_WDT_START_SUBCMD = 0x13,
+ ASF_WDT_STOP_SUBCMD = 0x14,
+ ASF_CONFIGURATION_CMD = 0x03,
+ ASF_CLEAR_BOOT_OPTION_SUBCMD = 0x15,
+ ASF_RETURN_BOOT_OPTION_SUBCMD = 0x16,
+ ASF_NO_BOOT_OPTION_SUBCMD = 0x17
+} HASFM_COMMAND_CODE;
+
+typedef struct {
+ EFI_FRAMEWORK_MESSAGE_TYPE MessageType;
+ EFI_ASF_MESSAGE Message;
+} EFI_ASF_FRAMEWORK_MESSAGE;
+
+typedef struct {
+ EFI_FRAMEWORK_MESSAGE_TYPE MessageType;
+ EFI_STATUS_CODE_VALUE StatusCodeValue;
+} EFI_ASF_DATA_HUB_MAP;
+
+//
+// Prototypes
+//
+
+/**
+ Send ASF Message.
+
+ @param[in] PeiServices General purpose services available to every PEIM.
+ @param[in] AsfMessage Pointer to ASF message
+
+ @retval EFI_SUCCESS Boot options copied
+ @retval EFI_INVALID_PARAMETER Invalid pointer
+ @retval EFI_NOT_READY No controller
+ @retval EFI_DEVICE_ERROR The function should not be completed due to a device error
+**/
+EFI_STATUS
+SendAsfMessage (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_ASF_MESSAGE *AsfMessage
+ )
+;
+
+/**
+ Provides an interface that a software module can call to report an ASF PEI status code.
+
+ @param[in] PeiServices PeiServices pointer.
+ @param[in] This This interface.
+ @param[in] Type Indicates the type of status code being reported.
+ @param[in] Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is
+ used to classify the entity as well as an operation.
+ @param[in] Instance The enumeration of a hardware or software entity within
+ the system. Valid instance numbers start with 1.
+ @param[in] CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different
+ rules to different callers.
+ @param[in] Data This optional parameter may be used to pass additional data.
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_DEVICE_ERROR The function should not be completed due to a device error.
+**/
+EFI_STATUS
+EFIAPI
+PeiAmtReportStatusCode (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_AMT_STATUS_CODE_PPI * This,
+ IN EFI_STATUS_CODE_TYPE Type,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID * CallerId OPTIONAL,
+ IN EFI_STATUS_CODE_DATA * Data OPTIONAL
+ )
+;
+
+/**
+ Sends a POST packet across ASF
+
+ @param[in] PeiServices General purpose services available to every PEIM.
+ @param[in] MessageType POST Status Code
+
+ @retval EFI_SUCCESS The function completed successfully
+**/
+EFI_STATUS
+SendPostPacket (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_FRAMEWORK_MESSAGE_TYPE MessageType
+ )
+;
+
+/**
+ This routine saves current ForcePush ErrorEvent to Hob, which will be sent again.
+
+ @param[in] PeiServices PeiServices pointer.
+ @param[in] MessageType ASF PET message type.
+
+ @retval EFI_SUCCESS The function completed successfully
+**/
+EFI_STATUS
+SaveForcePushErrorEvent (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_FRAMEWORK_MESSAGE_TYPE MessageType
+ )
+;
+
+/**
+ This routine puts PET message to MessageQueue, which will be sent later.
+
+ @param[in] PeiServices PeiServices pointer.
+ @param[in] Type StatusCode message type.
+ @param[in] Value StatusCode message value.
+
+ @retval EFI_SUCCESS The function completed successfully
+**/
+EFI_STATUS
+QueuePetMessage (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_STATUS_CODE_TYPE Type,
+ IN EFI_STATUS_CODE_VALUE Value
+ )
+;
+
+/**
+ This routine sends PET message in MessageQueue.
+
+ @param[in] PeiServices PeiServices pointer.
+
+ @retval EFI_SUCCESS The function completed successfully
+ @retval EFI_NOT_READY No controller
+**/
+EFI_STATUS
+SendPETMessageInQueue (
+ IN EFI_PEI_SERVICES **PeiServices
+ )
+;
+#endif
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.inf b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.inf
new file mode 100644
index 0000000..8bd8d0f
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.inf
@@ -0,0 +1,93 @@
+## @file
+# Component description file for Alert Standard Format driver.
+#
+#@copyright
+# Copyright (c) 2005 - 2013 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 = AlertStandardFormatPei
+FILE_GUID = 3e4817fd-2742-4351-b59f-91493280329c
+COMPONENT_TYPE = PE32_PEIM
+
+[sources.common]
+ AlertStandardFormatPei.c
+ AlertStandardFormatPei.h
+
+#
+# Edk II Glue Driver Entry Point
+#
+ EdkIIGluePeimEntryPoint.c
+
+[libraries.common]
+ PeiLib
+ AmtLibPei
+ MeGuidLib
+ MeLibPpi
+ EdkIIGlueBaseIoLibIntrinsic
+ EdkIIGluePeiDebugLibReportStatusCode
+ EdkIIGluePeiReportStatusCodeLib
+ EdkIIGluePeiServicesLib
+ EdkIIGlueBasePciLibPciExpress
+ EdkIIGlueBasePciExpressLib
+ EdkIIGluePeiHobLib
+
+[includes.common]
+ $(EDK_SOURCE)/Foundation/library/Pei/Include
+ $(EDK_SOURCE)/Foundation
+ $(EDK_SOURCE)/Foundation/Framework
+ $(EDK_SOURCE)/Foundation/Efi
+ $(EDK_SOURCE)/Foundation/Include
+ $(EDK_SOURCE)/Foundation/Efi/Include
+ $(EDK_SOURCE)/Foundation/Framework/Include
+ $(EDK_SOURCE)/Foundation/Library/Pei
+ $(EFI_SOURCE)/$(PROJECT_ME_ROOT)
+ $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/ActiveManagement/AlertStandardFormat/Heci/Common
+ $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/Library/AMT/Pei
+ $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/Library/MeKernel/Pei
+ $(EFI_SOURCE)/$(PROJECT_ME_ROOT)/Library/MeKernel/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/Include
+
+#
+# Edk II Glue Library, some hearder are included by R9 header so have to include
+#
+ $(EFI_SOURCE)
+ $(EFI_SOURCE)/Framework
+ $(EDK_SOURCE)/Foundation
+ $(EDK_SOURCE)/Foundation/Framework
+ $(EDK_SOURCE)/Foundation/Include/IndustryStandard
+ $(EDK_SOURCE)/Foundation/Core/Dxe
+ $(EDK_SOURCE)/Foundation/Include/Pei
+ $(EDK_SOURCE)/Foundation/Library/Dxe/Include
+ $(EDK_SOURCE)/Foundation/Library/EdkIIGlueLib/Include
+
+[nmake.common]
+ IMAGE_ENTRY_POINT = _ModuleEntryPoint
+ DPX_SOURCE = AlertStandardFormatPei.dxs
+#
+# Module Entry Point
+#
+ C_FLAGS = $(C_FLAGS) -D __EDKII_GLUE_MODULE_ENTRY_POINT__=AlertStandardFormatDriverPeiEntryPoint
+ C_FLAGS = $(C_FLAGS) -D __EDKII_GLUE_BASE_IO_LIB_INTRINSIC__ \
+ -D __EDKII_GLUE_PEI_DEBUG_LIB_REPORT_STATUS_CODE__ \
+ -D __EDKII_GLUE_PEI_REPORT_STATUS_CODE_LIB__ \
+ -D __EDKII_GLUE_PEI_SERVICES_LIB__ \
+ -D __EDKII_GLUE_BASE_PCI_LIB_PCI_EXPRESS__
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.mak b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.mak
new file mode 100644
index 0000000..8ff971a
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.mak
@@ -0,0 +1,50 @@
+# MAK file for the ModulePart:AlertStandardFormat
+all : AlertStandardFormatPei
+
+AlertStandardFormatPei : $(BUILD_DIR)\AlertStandardFormatPei.mak AlertStandardFormatPeiBin
+
+$(BUILD_DIR)\AlertStandardFormatPei.mak : $(AlertStandardFormatPei_DIR)\$(@B).cif $(AlertStandardFormatPei_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(AlertStandardFormatPei_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+AlertStandardFormatPei_INCLUDES=\
+ $(EDK_INCLUDES)\
+ $(EdkIIGlueLib_INCLUDES)\
+ $(ME_INCLUDES)\
+ $(AlertStandardFormat_INCLUDES)\
+ $(IndustryStandard_INCLUDES)\
+
+AlertStandardFormatPei_LIBS=\
+ $(EDKPROTOCOLLIB)\
+ $(MeGuidLib_LIB)\
+ $(MeLibPpi_LIB)\
+ $(AmtLibPei_LIB)\
+ $(EdkIIGlueBaseLib_LIB)\
+ $(EdkIIGlueBaseMemoryLib_LIB)\
+ $(EdkIIGlueBaseLibIA32_LIB)\
+ $(EdkIIGlueBaseMemoryLib_LIB)\
+ $(EdkIIGluePeiDebugLibReportStatusCode_LIB)\
+ $(EdkIIGluePeiReportStatusCodeLib_LIB)\
+ $(EdkIIGluePeiServicesLib_LIB)\
+ $(EdkIIGluePeiHobLib_LIB)\
+
+AlertStandardFormatPei_DEFINES=\
+ $(MY_DEFINES)\
+ /D"__EDKII_GLUE_MODULE_ENTRY_POINT__=AlertStandardFormatDriverPeiEntryPoint"\
+ /D __EDKII_GLUE_BASE_MEMORY_LIB__ \
+ /D __EDKII_GLUE_PEI_DEBUG_LIB_REPORT_STATUS_CODE__ \
+ /D __EDKII_GLUE_PEI_REPORT_STATUS_CODE_LIB__ \
+ /D __EDKII_GLUE_PEI_SERVICES_LIB__\
+ /D __EDKII_GLUE_PEI_MEMORY_ALLOCATION_LIB__ \
+
+AlertStandardFormatPeiBin : $(AlertStandardFormatPei_LIBS)
+ $(MAKE) /$(MAKEFLAGS) $(EDKIIGLUE_DEFAULTS)\
+ /f $(BUILD_DIR)\AlertStandardFormatPei.mak all\
+ "MY_INCLUDES=$(AlertStandardFormatPei_INCLUDES)"\
+ "MY_DEFINES=$(AlertStandardFormatPei_DEFINES)"\
+ GUID=3e4817fd-2742-4351-b59f-91493280329c \
+ ENTRY_POINT=_ModuleEntryPoint \
+ EDKIIModule=PEIM\
+ TYPE=PEIM \
+ DEPEX1=$(AlertStandardFormatPei_DIR)\AlertStandardFormatPei.dxs \
+ DEPEX1_TYPE=EFI_SECTION_PEI_DEPEX \
+ COMPRESS=0
diff --git a/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.sdl b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.sdl
new file mode 100644
index 0000000..ec7b2cd
--- /dev/null
+++ b/ReferenceCode/ME/ActiveManagement/AlertStandardFormat/Heci/Pei/AlertStandardFormatPei.sdl
@@ -0,0 +1,25 @@
+TOKEN
+ Name = AlertStandardFormatPei_SUPPORT
+ Value = 1
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+ Help = "Main switch to enable AlertStandardFormat support in Project"
+End
+
+MODULE
+ Help = "Includes AlertStandardFormat.mak to Project"
+ File = "AlertStandardFormatPei.mak"
+End
+
+PATH
+ Name = "AlertStandardFormatPei_DIR"
+ Help = "AlertStandardFormatPei files source directory"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\AlertStandardFormatPei.ffs"
+ Parent = "FV_BB"
+ InvokeOrder = AfterParent
+End