Reviewed-by: Eric Dong <eric.d...@intel.com> > -----Original Message----- > From: Tan, Ming <ming....@intel.com> > Sent: Friday, June 12, 2020 11:41 AM > To: devel@edk2.groups.io > Cc: Dong, Eric <eric.d...@intel.com>; Gao, Liming <liming....@intel.com> > Subject: [PATCH v3] Features/Intel/PostCodeDebugFeaturePkg: add it. > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2478 > > The PostCodeDebugFeaturePkg include some useful post code debug > libraries, such as get post code from status code and show it. > > It provide a library PostCodeStatusCodeHandlerLib used by edk2 > StatusCodeHandler.efi, used to show the post code. > It also provide a library of PostCodeMap lib, it map the status code > to post code. > > Cc: Eric Dong <eric.d...@intel.com> > Cc: Liming Gao <liming....@intel.com> > Signed-off-by: Ming Tan <ming....@intel.com> > --- > V3: Modify according Eric's comments. > Modify some bugs about dsc file when it is included. > Update Readme.md. > V2: Delete the last empty line in > PostCodeDebugFeaturePkg/Library/PostCodeMapLib/PostCodeMapLib.inf > .../Include/Library/PostCodeMapLib.h | 32 +++ > .../Include/PostCodeDebugFeature.dsc | 200 +++++++++++++ > .../PlatformStatusCodesInternal.h | 270 ++++++++++++++++++ > .../Library/PostCodeMapLib/PostCodeMapLib.c | 207 ++++++++++++++ > .../Library/PostCodeMapLib/PostCodeMapLib.inf | 27 ++ > .../PeiPostCodeStatusCodeHandlerLib.c | 102 +++++++ > .../PeiPostCodeStatusCodeHandlerLib.inf | 49 ++++ > .../RuntimeDxePostCodeStatusCodeHandlerLib.c | 188 ++++++++++++ > ...RuntimeDxePostCodeStatusCodeHandlerLib.inf | 51 ++++ > .../SmmPostCodeStatusCodeHandlerLib.c | 141 +++++++++ > .../SmmPostCodeStatusCodeHandlerLib.inf | 50 ++++ > .../PostCodeDebugFeaturePkg.dec | 32 +++ > .../PostCodeDebugFeaturePkg.dsc | 30 ++ > .../PostCodeDebugFeaturePkg/Readme.md | 117 ++++++++ > 14 files changed, 1496 insertions(+) > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Include/Library/Post > CodeMapLib.h > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Include/PostCodeDe > bugFeature.dsc > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeMa > pLib/PlatformStatusCodesInternal.h > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeMa > pLib/PostCodeMapLib.c > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeMa > pLib/PostCodeMapLib.inf > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeStat > usCodeHandlerLib/PeiPostCodeStatusCodeHandlerLib.c > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeStat > usCodeHandlerLib/PeiPostCodeStatusCodeHandlerLib.inf > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeStat > usCodeHandlerLib/RuntimeDxePostCodeStatusCodeHandlerLib.c > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeStat > usCodeHandlerLib/RuntimeDxePostCodeStatusCodeHandlerLib.inf > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeStat > usCodeHandlerLib/SmmPostCodeStatusCodeHandlerLib.c > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeStat > usCodeHandlerLib/SmmPostCodeStatusCodeHandlerLib.inf > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/PostCodeDebugFeat > urePkg.dec > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/PostCodeDebugFeat > urePkg.dsc > create mode 100644 > Features/Intel/Debugging/PostCodeDebugFeaturePkg/Readme.md > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Include/Library/Po > stCodeMapLib.h > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Include/Library/Po > stCodeMapLib.h > new file mode 100644 > index 0000000000..834be623a1 > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Include/Library/Po > stCodeMapLib.h > @@ -0,0 +1,32 @@ > +/** @file > > + This library class provides Platform PostCode Map. > > + > > + Copyright (c) 2011 - 2020, Intel Corporation. All rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#ifndef __POST_CODE_MAP_LIB__ > > +#define __POST_CODE_MAP_LIB__ > > + > > +/** > > + Get PostCode from status code type and value. > > + > > + @param CodeType Indicates the type of status code being reported. > > + @param Value Describes the current status of a hardware or > > + software entity. This includes information about > the class and > > + subclass that is used to classify the entity as > well as an > operation. > > + For progress codes, the operation is the current > activity. > > + For error codes, it is the exception.For debug > codes,it is not > defined at this time. > > + > > + @return PostCode > > + > > +**/ > > +UINT32 > > +EFIAPI > > +GetPostCodeFromStatusCode ( > > + IN EFI_STATUS_CODE_TYPE CodeType, > > + IN EFI_STATUS_CODE_VALUE Value > > + ); > > + > > +#endif > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Include/PostCode > DebugFeature.dsc > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Include/PostCode > DebugFeature.dsc > new file mode 100644 > index 0000000000..2852b9cf7c > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Include/PostCode > DebugFeature.dsc > @@ -0,0 +1,200 @@ > +## @file > > +# This package provides PostCode Debug feature. > > +# This file should be included into another package DSC file to build this > feature. > > +# > > +# The DEC files are used by the utilities that parse DSC and > > +# INF files to generate AutoGen.c and AutoGen.h files > > +# for the build infrastructure. > > +# > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +## > > + > > +######################################################### > ####################### > > +# > > +# Defines Section - statements that will be processed to create a Makefile. > > +# > > +######################################################### > ####################### > > +[Defines] > > +!ifndef $(PEI_ARCH) > > + !error "PEI_ARCH must be specified to build this feature!" > > +!endif > > +!ifndef $(DXE_ARCH) > > + !error "DXE_ARCH must be specified to build this feature!" > > +!endif > > + > > +######################################################### > ####################### > > +# > > +# PCD Section - list of PCD Entries modified by the feature. > > +# > > +######################################################### > ####################### > > + > > +# Unmark the following and StatusCodeHandler.efi to build the .dsc file > directly > > +#[PcdsDynamicDefault] > > +# > gPostCodeDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUsePostCode| > TRUE > > + > > +######################################################### > ####################### > > +# > > +# Library Class section - list of all Library Classes needed by this feature. > > +# > > +######################################################### > ####################### > > +[LibraryClasses] > > + ####################################### > > + # Edk2 Packages > > + ####################################### > > + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf > > + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf > > + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf > > + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf > > + DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf > > + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf > > + PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf > > + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf > > + > TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTem > plate.inf > > + > UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBo > otServicesTableLib.inf > > + > UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntry > Point.inf > > + UefiLib|MdePkg/Library/UefiLib/UefiLib.inf > > + > UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib > /UefiRuntimeServicesTableLib.inf > > + PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf > > + > > +[LibraryClasses.common.PEIM] > > + ####################################### > > + # Edk2 Packages > > + ####################################### > > + HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf > > + > MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemory > AllocationLib.inf > > + > PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/P > eiServicesTablePointerLibIdt.inf > > + > > +[LibraryClasses.IA32.PEIM,LibraryClasses.IA32.PEI_CORE,LibraryClasses.IA32 > .SEC] > > + ####################################### > > + # Edk2 Packages > > + ####################################### > > + > ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiR > eportStatusCodeLib.inf > > + > > +[LibraryClasses.common.DXE_DRIVER] > > + ####################################### > > + # Edk2 Packages > > + ####################################### > > + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf > > + > MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemo > ryAllocationLib.inf > > + > > +[LibraryClasses.common.DXE_RUNTIME_DRIVER] > > + ####################################### > > + # Edk2 Packages > > + ####################################### > > + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf > > + > MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemo > ryAllocationLib.inf > > + UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf > > + > ReportStatusCodeLib|MdeModulePkg/Library/RuntimeDxeReportStatusCod > eLib/RuntimeDxeReportStatusCodeLib.inf > > + > > +[LibraryClasses.common.UEFI_DRIVER] > > + ####################################### > > + # Edk2 Packages > > + ####################################### > > + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf > > + > MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemo > ryAllocationLib.inf > > + > > +[LibraryClasses.X64.DXE_SMM_DRIVER] > > + ####################################### > > + # Edk2 Packages > > + ####################################### > > + > SmmServicesTableLib|MdePkg/Library/SmmServicesTableLib/SmmServicesT > ableLib.inf > > + > MemoryAllocationLib|MdePkg/Library/SmmMemoryAllocationLib/SmmMe > moryAllocationLib.inf > > + SmmIoLib|MdePkg/Library/SmmIoLib/SmmIoLib.inf > > + SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf > > + > ReportStatusCodeLib|MdeModulePkg/Library/SmmReportStatusCodeLib/S > mmReportStatusCodeLib.inf > > + > > +######################################################### > ####################### > > +# > > +# Component section - list of all components that need built for this > feature. > > +# > > +# Note: The EDK II DSC file is not used to specify how compiled binary > images get placed > > +# into firmware volume images. This section is just a list of modules > to > compile from > > +# source into UEFI-compliant binaries. > > +# It is the FDF file that contains information on combining binary > files into > firmware > > +# volume images, whose concept is beyond UEFI and is described in PI > specification. > > +# There may also be modules listed in this section that are not > required > in the FDF file, > > +# When a module listed here is excluded from FDF file, then UEFI- > compliant binary will be > > +# generated for it, but the binary will not be put into any firmware > volume. > > +# > > +######################################################### > ####################### > > +# > > +# Feature PEI Components > > +# > > + > > +# @todo: Change below line to [Components.$(PEI_ARCH)] after > https://bugzilla.tianocore.org/show_bug.cgi?id=2308 > > +# is completed. > > +[Components.IA32] > > + ##################################### > > + # PostCode Debug Feature Package > > + ##################################### > > + > > + # Add library instances here that are not included in package components > and should be tested > > + # in the package build. > > + > PostCodeDebugFeaturePkg/Library/PostCodeStatusCodeHandlerLib/PeiPost > CodeStatusCodeHandlerLib.inf > > + > > + # The following is an example for used with StatusCodeHandler: > > +# > MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.in > f { > > +# <LibraryClasses> > > +# > OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibN > ull/OemHookStatusCodeLibNull.inf > > +# > SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.in > f > > +# > PostCodeLib|MdePkg/Library/BasePostCodeLibDebug/BasePostCodeLibDeb > ug.inf > > +# > PostCodeMapLib|PostCodeDebugFeaturePkg/Library/PostCodeMapLib/Post > CodeMapLib.inf > > +# > NULL|PostCodeDebugFeaturePkg/Library/PostCodeStatusCodeHandlerLib/P > eiPostCodeStatusCodeHandlerLib.inf > > +# } > > + > > + # Add components here that should be included in the package build. > > + > > +# > > +# Feature DXE Components > > +# > > + > > +# @todo: Change below line to [Components.$(DXE_ARCH)] after > https://bugzilla.tianocore.org/show_bug.cgi?id=2308 > > +# is completed. > > +[Components.X64] > > + ##################################### > > + # PostCode Debug Feature Package > > + ##################################### > > + > > + # Add library instances here that are not included in package components > and should be tested > > + # in the package build. > > + > PostCodeDebugFeaturePkg/Library/PostCodeStatusCodeHandlerLib/Runtim > eDxePostCodeStatusCodeHandlerLib.inf > > + > PostCodeDebugFeaturePkg/Library/PostCodeStatusCodeHandlerLib/SmmPo > stCodeStatusCodeHandlerLib.inf > > + > > + # The following is an example for used with StatusCodeHandler: > > +# > MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHan > dlerRuntimeDxe.inf { > > +# <LibraryClasses> > > +# > OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibN > ull/OemHookStatusCodeLibNull.inf > > +# > SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.in > f > > +# > PostCodeLib|MdePkg/Library/BasePostCodeLibDebug/BasePostCodeLibDeb > ug.inf > > +# > PostCodeMapLib|PostCodeDebugFeaturePkg/Library/PostCodeMapLib/Post > CodeMapLib.inf > > +# > NULL|PostCodeDebugFeaturePkg/Library/PostCodeStatusCodeHandlerLib/R > untimeDxePostCodeStatusCodeHandlerLib.inf > > +# } > > + > > +# > MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSm > m.inf { > > +# <LibraryClasses> > > +# > OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibN > ull/OemHookStatusCodeLibNull.inf > > +# > SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.in > f > > +# > PostCodeLib|MdePkg/Library/BasePostCodeLibDebug/BasePostCodeLibDeb > ug.inf > > +# > PostCodeMapLib|PostCodeDebugFeaturePkg/Library/PostCodeMapLib/Post > CodeMapLib.inf > > +# > NULL|PostCodeDebugFeaturePkg/Library/PostCodeStatusCodeHandlerLib/S > mmPostCodeStatusCodeHandlerLib.inf > > +# } > > + > > + # Add components here that should be included in the package build. > > + > > +######################################################### > ########################################## > > +# > > +# BuildOptions Section - Define the module specific tool chain flags that > should be used as > > +# the default flags for a module. These flags are > appended to > any > > +# standard flags that are defined by the build > process. They can > be > > +# applied for any modules or only those modules with > the > specific > > +# module style (EDK or EDKII) specified in > [Components] section. > > +# > > +# For advanced features, it is recommended to enable > [BuildOptions] in > > +# the applicable INF file so it does not affect the > whole board > package > > +# build when this DSC file is active. > > +# > > +######################################################### > ########################################## > > +[BuildOptions] > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCode > MapLib/PlatformStatusCodesInternal.h > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCode > MapLib/PlatformStatusCodesInternal.h > new file mode 100644 > index 0000000000..7c8daf052d > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCode > MapLib/PlatformStatusCodesInternal.h > @@ -0,0 +1,270 @@ > +/** @file > > + PostCode status code definition. > > + > > + Copyright (c) 2010 - 2020, Intel Corporation. All rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#ifndef __PLATFORM_STATUS_CODES_INTERNAL_H__ > > +#define __PLATFORM_STATUS_CODES_INTERNAL_H__ > > + > > +#include <Pi/PiStatusCode.h> > > + > > +typedef struct{ > > + EFI_STATUS_CODE_VALUE Value; > > + UINT32 Data; > > +} STATUS_CODE_TO_DATA_MAP; > > + > > +// > > +// Enable PEI/DXE status code > > +// > > +#define PEI_STATUS_CODE 1 > > +#define DXE_STATUS_CODE 1 > > + > > +#define STATUS_CODE_TYPE(Type) > ((Type)&EFI_STATUS_CODE_TYPE_MASK) > > +#define STATUS_CODE_CLASS(Value) > ((Value)&EFI_STATUS_CODE_CLASS_MASK) > > + > > +//Progress/Error codes > > +#define PEI_CORE_STARTED (EFI_SOFTWARE_PEI_CORE | > EFI_SW_PEI_CORE_PC_ENTRY_POINT) > > +#define PEI_RESET_NOT_AVAILABLE (EFI_SOFTWARE_PEI_CORE | > EFI_SW_PS_EC_RESET_NOT_AVAILABLE) > > +#define PEI_DXEIPL_NOT_FOUND (EFI_SOFTWARE_PEI_CORE | > EFI_SW_PEI_CORE_EC_DXEIPL_NOT_FOUND) > > +#define PEI_DXE_CORE_NOT_FOUND (EFI_SOFTWARE_PEI_CORE | > EFI_SW_PEI_CORE_EC_DXE_CORRUPT) > > +#define PEI_S3_RESUME_ERROR (EFI_SOFTWARE_PEI_CORE | > EFI_SW_PEI_EC_S3_RESUME_FAILED) > > +#define PEI_RECOVERY_FAILED (EFI_SOFTWARE_PEI_CORE | > EFI_SW_PEI_EC_RECOVERY_FAILED) > > +#define DXE_CORE_STARTED (EFI_SOFTWARE_DXE_CORE | > EFI_SW_DXE_CORE_PC_ENTRY_POINT) > > + > > +//#define DXE_EXIT_BOOT_SERVICES_BEGIN 0xF8 > > +#define DXE_EXIT_BOOT_SERVICES_END > (EFI_SOFTWARE_EFI_BOOT_SERVICE | > EFI_SW_BS_PC_EXIT_BOOT_SERVICES) > > + > > +// Reported by CPU PEIM > > +#define PEI_CAR_CPU_INIT > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | > EFI_CU_HP_PC_POWER_ON_INIT) > > + > > +// Reported by NB PEIM > > +//#define PEI_CAR_NB_INIT (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CU_CHIPSET_NORTH_INIT) > > + > > +// Reported by SB PEIM > > +//#define PEI_CAR_SB_INIT (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CU_CHIPSET_PC_SOUTH_INIT) > > + > > +//Reported by Memory Detection PEIM > > +#define PEI_MEMORY_SPD_READ > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_PC_SPD_READ) > > +#define PEI_MEMORY_PRESENCE_DETECT > (EFI_COMPUTING_UNIT_MEMORY | > EFI_CU_MEMORY_PC_PRESENCE_DETECT) > > +#define PEI_MEMORY_TIMING > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_PC_TIMING) > > +#define PEI_MEMORY_CONFIGURING > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_PC_CONFIGURING) > > +#define PEI_MEMORY_OPTIMIZING > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_PC_OPTIMIZING) > > +#define PEI_MEMORY_INIT (EFI_COMPUTING_UNIT_MEMORY > | EFI_CU_MEMORY_PC_INIT) > > +#define PEI_MEMORY_TEST (EFI_COMPUTING_UNIT_MEMORY > | EFI_CU_MEMORY_PC_TEST) > > +#define PEI_MEMORY_INVALID_TYPE > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_INVALID_TYPE) > > +#define PEI_MEMORY_INVALID_SPEED > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_INVALID_SPEED) > > +#define PEI_MEMORY_SPD_FAIL > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_SPD_FAIL) > > +#define PEI_MEMORY_INVALID_SIZE > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_INVALID_SIZE) > > +#define PEI_MEMORY_MISMATCH > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_MISMATCH) > > +#define PEI_MEMORY_S3_RESUME_FAILED > (EFI_COMPUTING_UNIT_MEMORY | > EFI_CU_MEMORY_EC_S3_RESUME_FAIL) > > +#define PEI_MEMORY_NOT_DETECTED > (EFI_COMPUTING_UNIT_MEMORY | > EFI_CU_MEMORY_EC_NONE_DETECTED) > > +#define PEI_MEMORY_NONE_USEFUL > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_NONE_USEFUL) > > +#define PEI_MEMORY_ERROR > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_EC_NON_SPECIFIC) > > +#define PEI_MEMORY_INSTALLED (EFI_SOFTWARE_PEI_SERVICE | > EFI_SW_PS_PC_INSTALL_PEI_MEMORY) > > +#define PEI_MEMORY_NOT_INSTALLED > (EFI_SOFTWARE_PEI_SERVICE | > EFI_SW_PEI_CORE_EC_MEMORY_NOT_INSTALLED) > > +#define PEI_MEMORY_INSTALLED_TWICE > (EFI_SOFTWARE_PEI_SERVICE | > EFI_SW_PS_EC_MEMORY_INSTALLED_TWICE) > > + > > +//Reported by CPU PEIM > > +#define PEI_CPU_INIT > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_PC_INIT_BEGIN) > > +#define PEI_CPU_CACHE_INIT > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_CACHE_INIT) > > +#define PEI_CPU_BSP_SELECT > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_BSP_SELECT) > > +#define PEI_CPU_AP_INIT > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_AP_INIT) > > +#define PEI_CPU_SMM_INIT > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_PC_SMM_INIT) > > +#define PEI_CPU_INVALID_TYPE > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | > EFI_CU_HP_EC_INVALID_TYPE) > > +#define PEI_CPU_INVALID_SPEED > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | > EFI_CU_HP_EC_INVALID_SPEED) > > +#define PEI_CPU_MISMATCH > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_MISMATCH) > > +#define PEI_CPU_SELF_TEST_FAILED > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_SELF_TEST) > > +#define PEI_CPU_CACHE_ERROR > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_CACHE) > > +#define PEI_CPU_MICROCODE_UPDATE_FAILED > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | > EFI_CU_HP_EC_MICROCODE_UPDATE) > > +#define PEI_CPU_NO_MICROCODE > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | > EFI_CU_HP_EC_NO_MICROCODE_UPDATE) > > +//If non of the errors above apply use this one > > +#define PEI_CPU_INTERNAL_ERROR > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_INTERNAL) > > +//Generic CPU error. It should only be used if non of the errors above apply > > +#define PEI_CPU_ERROR > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_EC_NON_SPECIFIC) > > + > > +// Reported by NB PEIM > > +#define PEI_MEM_NB_INIT (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CHIPSET_PC_PEI_MEM_NB_INIT) > > +// Reported by SB PEIM > > +#define PEI_MEM_SB_INIT (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CHIPSET_PC_PEI_MEM_SB_INIT) > > + > > +//Reported by PEIM which detected forced or auto recovery condition > > +#define PEI_RECOVERY_AUTO (EFI_SOFTWARE_PEI_MODULE | > EFI_SW_PEI_PC_RECOVERY_AUTO) > > +#define PEI_RECOVERY_USER (EFI_SOFTWARE_PEI_MODULE | > EFI_SW_PEI_PC_RECOVERY_USER) > > + > > +//Reported by DXE IPL > > +#define PEI_RECOVERY_PPI_NOT_FOUND > (EFI_SOFTWARE_PEI_MODULE | > EFI_SW_PEI_EC_RECOVERY_PPI_NOT_FOUND) > > +#define PEI_S3_RESUME_PPI_NOT_FOUND > (EFI_SOFTWARE_PEI_MODULE | > EFI_SW_PEI_EC_S3_RESUME_PPI_NOT_FOUND) > > +#define PEI_S3_RESUME_FAILED (EFI_SOFTWARE_PEI_MODULE | > EFI_SW_PEI_EC_S3_RESUME_FAILED) > > + > > +//Reported by Recovery PEIM > > +#define PEI_RECOVERY_STARTED (EFI_SOFTWARE_PEI_MODULE | > EFI_SW_PEI_PC_RECOVERY_BEGIN) > > +#define PEI_RECOVERY_CAPSULE_FOUND > (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_CAPSULE_LOAD) > > +#define PEI_RECOVERY_NO_CAPSULE > (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_EC_NO_RECOVERY_CAPSULE) > > +#define PEI_RECOVERY_CAPSULE_LOADED > (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_CAPSULE_START) > > +#define PEI_RECOVERY_INVALID_CAPSULE > (EFI_SOFTWARE_PEI_MODULE | > EFI_SW_PEI_EC_INVALID_CAPSULE_DESCRIPTOR) > > + > > +//Reported by S3 Resume PEIM > > +#define PEI_S3_BOOT_SCRIPT (EFI_SOFTWARE_PEI_MODULE | > EFI_SW_PEI_PC_S3_BOOT_SCRIPT) > > +#define PEI_S3_OS_WAKE (EFI_SOFTWARE_PEI_MODULE | > EFI_SW_PEI_PC_OS_WAKE) > > +#define PEI_S3_BOOT_SCRIPT_ERROR > (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_EC_S3_BOOT_SCRIPT_ERROR) > > +#define PEI_S3_OS_WAKE_ERROR (EFI_SOFTWARE_PEI_MODULE > | EFI_SW_PEI_EC_S3_OS_WAKE_ERROR) > > + > > +#define PEI_PEIM_STARTED (EFI_SOFTWARE_PEI_CORE | > EFI_SW_PC_INIT_BEGIN) > > +#define PEI_PEIM_ENDED (EFI_SOFTWARE_PEI_CORE | > EFI_SW_PC_INIT_END) > > + > > +//Reported by DXE IPL > > +#define PEI_DXE_IPL_STARTED (EFI_SOFTWARE_PEI_CORE | > EFI_SW_PEI_CORE_PC_HANDOFF_TO_NEXT) > > + > > +//Reported by PEIM which installs Reset PPI > > +#define PEI_RESET_SYSTEM (EFI_SOFTWARE_PEI_SERVICE | > EFI_SW_PS_PC_RESET_SYSTEM) > > + > > +//Reported by the PEIM or DXE driver which detected the error > > +#define GENERIC_MEMORY_CORRECTABLE_ERROR > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_CORRECTABLE) > > +#define GENERIC_MEMORY_UNCORRECTABLE_ERROR > (EFI_COMPUTING_UNIT_MEMORY | > EFI_CU_MEMORY_EC_UNCORRECTABLE) > > + > > +//Reported by Flash Update DXE driver > > +#define DXE_FLASH_UPDATE_FAILED > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_UPDATE_FAIL) > > + > > +//Reported by the PEIM or DXE driver which detected the error > > +#define GENERIC_CPU_THERMAL_ERROR > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_THERMAL) > > +#define GENERIC_CPU_LOW_VOLTAGE > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | > EFI_CU_HP_EC_LOW_VOLTAGE) > > +#define GENERIC_CPU_HIGH_VOLTAGE > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | > EFI_CU_HP_EC_HIGH_VOLTAGE) > > +#define GENERIC_CPU_CORRECTABLE_ERROR > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | > EFI_CU_HP_EC_CORRECTABLE) > > +#define GENERIC_CPU_UNCORRECTABLE_ERROR > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | > EFI_CU_HP_EC_UNCORRECTABLE) > > +#define GENERIC_BAD_DATE_TIME_ERROR > (EFI_SOFTWARE_UNSPECIFIED | EFI_SW_EC_BAD_DATE_TIME) > > +#define GENERIC_MEMORY_SIZE_DECREASE > (EFI_COMPUTING_UNIT_MEMORY | EFI_CU_MEMORY_EC_MISMATCH) > > + > > +//Reported by DXE Core > > +#define DXE_DRIVER_STARTED > (EFI_SOFTWARE_EFI_DXE_SERVICE | EFI_SW_PC_INIT_BEGIN) > > +#define DXE_DRIVER_ENED (EFI_SOFTWARE_DXE_CORE | > EFI_SW_PC_INIT_END) > > +#define DXE_ARCH_PROTOCOLS_AVAILABLE > (EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_PC_ARCH_READY) > > +#define DXE_DRIVER_CONNECTED (EFI_SOFTWARE_DXE_CORE | > EFI_SW_DXE_CORE_PC_START_DRIVER) > > +#define DXE_ARCH_PROTOCOL_NOT_AVAILABLE > (EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_EC_NO_ARCH) > > + > > +//Reported by DXE CPU driver > > +#define DXE_CPU_SELF_TEST_FAILED > (EFI_COMPUTING_UNIT_HOST_PROCESSOR | EFI_CU_HP_EC_SELF_TEST) > > + > > +//Reported by PCI Host Bridge driver > > +#define DXE_NB_HB_INIT (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CHIPSET_PC_DXE_HB_INIT ) > > + > > +// Reported by NB Driver > > +#define DXE_NB_INIT (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CHIPSET_PC_DXE_NB_INIT ) > > +#define DXE_NB_SMM_INIT (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CHIPSET_PC_DXE_NB_SMM_INIT ) > > +#define DXE_NB_ERROR (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CHIPSET_EC_DXE_NB_ERROR ) > > + > > +// Reported by SB Driver(s) > > +#define DXE_SBRUN_INIT (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CHIPSET_PC_DXE_SB_RT_INIT ) > > +#define DXE_SB_INIT (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CHIPSET_PC_DXE_SB_INIT ) > > +#define DXE_SB_SMM_INIT (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CHIPSET_PC_DXE_SB_SMM_INIT ) > > +#define DXE_SB_DEVICES_INIT (EFI_COMPUTING_UNIT_CHIPSET > | EFI_CHIPSET_PC_DXE_SB_DEVICES_INIT ) > > +#define DXE_SB_BAD_BATTERY (EFI_COMPUTING_UNIT_CHIPSET > | EFI_CHIPSET_EC_BAD_BATTERY) > > +#define DXE_SB_ERROR (EFI_COMPUTING_UNIT_CHIPSET | > EFI_CHIPSET_EC_DXE_SB_ERROR ) > > + > > +//Reported by DXE Core > > +#define DXE_BDS_STARTED (EFI_SOFTWARE_DXE_CORE | > EFI_SW_DXE_CORE_PC_HANDOFF_TO_NEXT) > > + > > +//Reported by BDS > > +//#define DXE_BDS_CONNECT_DRIVERS > (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_DXE_BS_PC_BEGIN_CONNECTING_DRIVERS) > > + > > +//Reported by Boot Manager > > +#define DXE_READY_TO_BOOT (EFI_SOFTWARE_DXE_BS_DRIVER > | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT) > > + > > +//Reported by DXE Core > > +#define DXE_EXIT_BOOT_SERVICES > (EFI_SOFTWARE_EFI_BOOT_SERVICE | > EFI_SW_BS_PC_EXIT_BOOT_SERVICES) > > +#define DXE_EXIT_BOOT_SERVICES_EVENT > (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_DXE_BS_PC_EXIT_BOOT_SERVICES_EVENT) > > + > > +//Reported by driver that installs Runtime AP > > +#define RT_SET_VIRTUAL_ADDRESS_MAP_BEGIN > (EFI_SOFTWARE_EFI_RUNTIME_SERVICE | > EFI_SW_RS_PC_SET_VIRTUAL_ADDRESS_MAP) > > +#define RT_SET_VIRTUAL_ADDRESS_MAP_END > (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_DXE_BS_PC_VIRTUAL_ADDRESS_CHANGE_EVENT) > > + > > +//Reported by CSM > > +#define DXE_LEGACY_OPROM_INIT > (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_DXE_BS_PC_LEGACY_OPROM_INIT) > > +#define DXE_LEGACY_BOOT (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_DXE_BS_PC_LEGACY_BOOT_EVENT) > > +#define DXE_LEGACY_OPROM_NO_SPACE > (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_DXE_BS_EC_LEGACY_OPROM_NO_SPACE) > > + > > +//Reported by SETUP > > +//#define DXE_SETUP_VERIFYING_PASSWORD > (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_DXE_BS_PC_VERIFYING_PASSWORD) > > +#define DXE_SETUP_START (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_PC_USER_SETUP) > > +#define DXE_SETUP_INPUT_WAIT > (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_PC_INPUT_WAIT) > > +#define DXE_INVALID_PASSWORD > (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_DXE_BS_EC_INVALID_PASSWORD) > > +#define DXE_INVALID_IDE_PASSWORD > (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_DXE_BS_EC_INVALID_IDE_PASSWORD) > > +#define DXE_BOOT_OPTION_LOAD_ERROR > (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_DXE_BS_EC_BOOT_OPTION_LOAD_ERROR) > > +#define DXE_BOOT_OPTION_FAILED > (EFI_SOFTWARE_DXE_BS_DRIVER | > EFI_SW_DXE_BS_EC_BOOT_OPTION_FAILED) > > + > > +//Reported by a Driver that installs Reset AP > > +#define DXE_RESET_SYSTEM > (EFI_SOFTWARE_EFI_RUNTIME_SERVICE | EFI_SW_RS_PC_RESET_SYSTEM) > > +#define DXE_RESET_NOT_AVAILABLE > (EFI_SOFTWARE_EFI_RUNTIME_SERVICE | > EFI_SW_PS_EC_RESET_NOT_AVAILABLE) > > + > > +// Reported by PCI bus driver > > +#define DXE_PCI_BUS_BEGIN (EFI_IO_BUS_PCI | > EFI_IOB_PC_INIT) > > +#define DXE_PCI_BUS_ENUM (EFI_IO_BUS_PCI | > EFI_IOB_PCI_BUS_ENUM) > > +#define DXE_PCI_BUS_HPC_INIT (EFI_IO_BUS_PCI | > EFI_IOB_PCI_HPC_INIT) > > +#define DXE_PCI_BUS_REQUEST_RESOURCES (EFI_IO_BUS_PCI | > EFI_IOB_PCI_RES_ALLOC) > > +#define DXE_PCI_BUS_ASSIGN_RESOURCES (EFI_IO_BUS_PCI | > EFI_IOB_PC_ENABLE) > > +#define DXE_PCI_BUS_HOTPLUG (EFI_IO_BUS_PCI | > EFI_IOB_PC_HOTPLUG) > > +#define DXE_PCI_BUS_OUT_OF_RESOURCES (EFI_IO_BUS_PCI | > EFI_IOB_EC_RESOURCE_CONFLICT) > > + > > +// Reported by USB bus driver > > +#define DXE_USB_BEGIN (EFI_IO_BUS_USB | > EFI_IOB_PC_INIT) > > +#define DXE_USB_RESET (EFI_IO_BUS_USB | > EFI_IOB_PC_RESET) > > +#define DXE_USB_DETECT (EFI_IO_BUS_USB | > EFI_IOB_PC_DETECT) > > +#define DXE_USB_ENABLE (EFI_IO_BUS_USB | > EFI_IOB_PC_ENABLE) > > +#define DXE_USB_HOTPLUG (EFI_IO_BUS_USB | > EFI_IOB_PC_HOTPLUG) > > + > > +//Reported by IDE bus driver > > +#define DXE_IDE_BEGIN (EFI_IO_BUS_ATA_ATAPI | > EFI_IOB_PC_INIT) > > +#define DXE_IDE_RESET (EFI_IO_BUS_ATA_ATAPI | > EFI_IOB_PC_RESET) > > +#define DXE_IDE_DETECT (EFI_IO_BUS_ATA_ATAPI | > EFI_IOB_PC_DETECT) > > +#define DXE_IDE_ENABLE (EFI_IO_BUS_ATA_ATAPI | > EFI_IOB_PC_ENABLE) > > +#define DXE_IDE_SMART_ERROR (EFI_IO_BUS_ATA_ATAPI | > EFI_IOB_ATA_BUS_SMART_OVERTHRESHOLD) > > +#define DXE_IDE_CONTROLLER_ERROR (EFI_IO_BUS_ATA_ATAPI | > EFI_IOB_EC_CONTROLLER_ERROR) > > +#define DXE_IDE_DEVICE_FAILURE (EFI_IO_BUS_ATA_ATAPI | > EFI_IOB_EC_INTERFACE_ERROR) > > + > > +// Reported by SCSI bus driver > > +#define DXE_SCSI_BEGIN (EFI_IO_BUS_SCSI | > EFI_IOB_PC_INIT) > > +#define DXE_SCSI_RESET (EFI_IO_BUS_SCSI | > EFI_IOB_PC_RESET) > > +#define DXE_SCSI_DETECT (EFI_IO_BUS_SCSI | > EFI_IOB_PC_DETECT) > > +#define DXE_SCSI_ENABLE (EFI_IO_BUS_SCSI | > EFI_IOB_PC_ENABLE) > > + > > +// Reported by Super I/O driver > > +#define DXE_SIO_INIT (EFI_IO_BUS_LPC | > EFI_IOB_PC_INIT) > > + > > +// Reported by Keyboard driver > > +#define DXE_KEYBOARD_INIT (EFI_PERIPHERAL_KEYBOARD | > EFI_P_PC_INIT) > > +#define DXE_KEYBOARD_RESET (EFI_PERIPHERAL_KEYBOARD | > EFI_P_PC_RESET) > > +#define DXE_KEYBOARD_DISABLE (EFI_PERIPHERAL_KEYBOARD | > EFI_P_PC_DISABLE) > > +#define DXE_KEYBOARD_DETECT (EFI_PERIPHERAL_KEYBOARD | > EFI_P_PC_PRESENCE_DETECT) > > +#define DXE_KEYBOARD_ENABLE (EFI_PERIPHERAL_KEYBOARD | > EFI_P_PC_ENABLE) > > +#define DXE_KEYBOARD_CLEAR_BUFFER > (EFI_PERIPHERAL_KEYBOARD | EFI_P_KEYBOARD_PC_CLEAR_BUFFER) > > +#define DXE_KEYBOARD_SELF_TEST (EFI_PERIPHERAL_KEYBOARD | > EFI_P_KEYBOARD_PC_SELF_TEST) > > + > > +// Reported by Mouse driver > > +#define DXE_MOUSE_INIT (EFI_PERIPHERAL_MOUSE | > EFI_P_PC_INIT) > > +#define DXE_MOUSE_RESET (EFI_PERIPHERAL_MOUSE | > EFI_P_PC_RESET) > > +#define DXE_MOUSE_DISABLE (EFI_PERIPHERAL_MOUSE | > EFI_P_PC_DISABLE) > > +#define DXE_MOUSE_DETECT (EFI_PERIPHERAL_MOUSE | > EFI_P_PC_PRESENCE_DETECT) > > +#define DXE_MOUSE_ENABLE (EFI_PERIPHERAL_MOUSE | > EFI_P_PC_ENABLE) > > + > > +// Reported by Mass Storage drivers > > +#define DXE_FIXED_MEDIA_INIT (EFI_PERIPHERAL_FIXED_MEDIA > | EFI_P_PC_INIT) > > +#define DXE_FIXED_MEDIA_RESET (EFI_PERIPHERAL_FIXED_MEDIA > | EFI_P_PC_RESET) > > +#define DXE_FIXED_MEDIA_DISABLE > (EFI_PERIPHERAL_FIXED_MEDIA | EFI_P_PC_DISABLE) > > +#define DXE_FIXED_MEDIA_DETECT > (EFI_PERIPHERAL_FIXED_MEDIA | EFI_P_PC_PRESENCE_DETECT) > > +#define DXE_FIXED_MEDIA_ENABLE > (EFI_PERIPHERAL_FIXED_MEDIA | EFI_P_PC_ENABLE) > > +#define DXE_REMOVABLE_MEDIA_INIT > (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_INIT) > > +#define DXE_REMOVABLE_MEDIA_RESET > (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_RESET) > > +#define DXE_REMOVABLE_MEDIA_DISABLE > (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_DISABLE) > > +#define DXE_REMOVABLE_MEDIA_DETECT > (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_PRESENCE_DETECT) > > +#define DXE_REMOVABLE_MEDIA_ENABLE > (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_ENABLE) > > + > > + > > +// Reported by BDS > > +#define DXE_CON_OUT_CONNECT > (EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_PC_INIT) > > +#define DXE_CON_IN_CONNECT (EFI_PERIPHERAL_KEYBOARD | > EFI_P_PC_INIT) > > +#define DXE_NO_CON_OUT > (EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_EC_NOT_DETECTED) > > +#define DXE_NO_CON_IN (EFI_PERIPHERAL_KEYBOARD | > EFI_P_EC_NOT_DETECTED) > > + > > +#endif > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCode > MapLib/PostCodeMapLib.c > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCode > MapLib/PostCodeMapLib.c > new file mode 100644 > index 0000000000..2246e59f8b > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCode > MapLib/PostCodeMapLib.c > @@ -0,0 +1,207 @@ > +/** @file > > + PostCodeMap implementation. > > + > > + Copyright (c) 2010 - 2020, Intel Corporation. All rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include <Base.h> > > +#include <Uefi.h> > > + > > +#include "PlatformStatusCodesInternal.h" > > + > > +STATUS_CODE_TO_DATA_MAP mPostCodeProgressMap[] = { > > + // > > + // PEI > > + // > > + //Regular boot > > + { PEI_CORE_STARTED, 0x10 }, > > + { PEI_CAR_CPU_INIT, 0x11 }, > > + { PEI_MEMORY_SPD_READ, 0x1D }, > > + { PEI_MEMORY_PRESENCE_DETECT, 0x1E }, > > + { PEI_MEMORY_TIMING, 0x1F}, > > + { PEI_MEMORY_CONFIGURING, 0x20 }, > > + { PEI_MEMORY_INIT, 0x21 }, > > + { PEI_MEMORY_INSTALLED, 0x31 }, > > + { PEI_CPU_INIT, 0x32 }, > > + { PEI_CPU_CACHE_INIT, 0x33 }, > > + { PEI_CPU_BSP_SELECT, 0x34 }, > > + { PEI_CPU_AP_INIT, 0x35 }, > > + { PEI_CPU_SMM_INIT, 0x36 }, > > + { PEI_MEM_NB_INIT, 0x37 }, > > + { PEI_MEM_SB_INIT, 0x3B }, > > + { PEI_DXE_IPL_STARTED, 0x4F }, > > + //Recovery > > + { PEI_RECOVERY_AUTO, 0xF0 }, > > + { PEI_RECOVERY_USER, 0xF1 }, > > + { PEI_RECOVERY_STARTED, 0xF2 }, > > + { PEI_RECOVERY_CAPSULE_FOUND, 0xF3 }, > > + { PEI_RECOVERY_CAPSULE_LOADED, 0xF4 }, > > + //S3 > > + //{ PEI_S3_STARTED, 0xE0 }, > > + { PEI_S3_BOOT_SCRIPT, 0xE1 }, > > + //{ PEI_S3_VIDEO_REPOST, 0xE2 }, > > + { PEI_S3_OS_WAKE, 0xE3 }, > > + > > + // > > + // DXE > > + // > > + { DXE_CORE_STARTED, 0x1060 }, > > + { DXE_SBRUN_INIT, 0x1062 }, > > + { DXE_NB_HB_INIT, 0x1068 }, > > + { DXE_NB_INIT, 0x1069 }, > > + { DXE_NB_SMM_INIT, 0x106A }, > > + { DXE_SB_INIT, 0x1070 }, > > + { DXE_SB_SMM_INIT, 0x1071 }, > > + { DXE_SB_DEVICES_INIT, 0x1072 }, > > + { DXE_BDS_STARTED, 0x1090 }, > > + { DXE_PCI_BUS_BEGIN, 0x1092 }, > > + { DXE_PCI_BUS_HPC_INIT, 0x1093 }, > > + { DXE_PCI_BUS_ENUM, 0x1094 }, > > + { DXE_PCI_BUS_REQUEST_RESOURCES, 0x1095 }, > > + { DXE_PCI_BUS_ASSIGN_RESOURCES, 0x1096 }, > > + { DXE_CON_OUT_CONNECT, 0x1097 }, > > + { DXE_CON_IN_CONNECT, 0x1098 }, > > + { DXE_SIO_INIT, 0x1099 }, > > + { DXE_USB_BEGIN, 0x109A }, > > + { DXE_USB_RESET, 0x109B }, > > + { DXE_USB_DETECT, 0x109C }, > > + { DXE_USB_ENABLE, 0x109D }, > > + { DXE_IDE_BEGIN, 0x10A1 }, > > + { DXE_IDE_RESET, 0x10A2 }, > > + { DXE_IDE_DETECT, 0x10A3 }, > > + { DXE_IDE_ENABLE, 0x10A4 }, > > + { DXE_SCSI_BEGIN, 0x10A5 }, > > + { DXE_SCSI_RESET, 0x10A6 }, > > + { DXE_SCSI_DETECT, 0x10A7 }, > > + { DXE_SCSI_ENABLE, 0x10A8 }, > > + { DXE_SETUP_START, 0x10AB }, > > + { DXE_SETUP_INPUT_WAIT, 0x10AC }, > > + { DXE_READY_TO_BOOT, 0x10AD }, > > + { DXE_LEGACY_BOOT, 0x10AE }, > > + { DXE_EXIT_BOOT_SERVICES, 0x10AF }, > > + { RT_SET_VIRTUAL_ADDRESS_MAP_BEGIN, 0x10B0 }, > > + { RT_SET_VIRTUAL_ADDRESS_MAP_END, 0x10B1 }, > > + { DXE_LEGACY_OPROM_INIT, 0x10B2 }, > > + { DXE_RESET_SYSTEM, 0x10B3 }, > > + { DXE_USB_HOTPLUG, 0x10B4 }, > > + { DXE_PCI_BUS_HOTPLUG, 0x10B5 }, > > + {0,0} > > +}; > > + > > +STATUS_CODE_TO_DATA_MAP mPostCodeErrorMap[] = { > > + // > > + // PEI > > + // > > + //Regular boot > > + { PEI_MEMORY_INVALID_TYPE, 0x50 }, > > + { PEI_MEMORY_INVALID_SPEED, 0x50 }, > > + { PEI_MEMORY_SPD_FAIL, 0x51 }, > > + { PEI_MEMORY_INVALID_SIZE, 0x52 }, > > + { PEI_MEMORY_MISMATCH, 0x52 }, > > + { PEI_MEMORY_NOT_DETECTED, 0x53 }, > > + { PEI_MEMORY_NONE_USEFUL, 0x53 }, > > + { PEI_MEMORY_ERROR, 0x54 }, > > + { PEI_MEMORY_NOT_INSTALLED, 0x55 }, > > + { PEI_CPU_INVALID_TYPE, 0x56 }, > > + { PEI_CPU_INVALID_SPEED, 0x56 }, > > + { PEI_CPU_MISMATCH, 0x57 }, > > + { PEI_CPU_SELF_TEST_FAILED, 0x58 }, > > + { PEI_CPU_CACHE_ERROR, 0x58 }, > > + { PEI_CPU_MICROCODE_UPDATE_FAILED, 0x59 }, > > + { PEI_CPU_NO_MICROCODE, 0x59 }, > > + { PEI_CPU_INTERNAL_ERROR, 0x5A }, > > + { PEI_CPU_ERROR, 0x5A }, > > + { PEI_RESET_NOT_AVAILABLE,0x5B }, > > + //Recovery > > + { PEI_RECOVERY_PPI_NOT_FOUND, 0xF8 }, > > + { PEI_RECOVERY_NO_CAPSULE, 0xF9 }, > > + { PEI_RECOVERY_INVALID_CAPSULE, 0xFA }, > > + //S3 Resume > > + { PEI_MEMORY_S3_RESUME_FAILED, 0xE8 }, > > + { PEI_S3_RESUME_PPI_NOT_FOUND, 0xE9 }, > > + { PEI_S3_BOOT_SCRIPT_ERROR, 0xEA }, > > + { PEI_S3_OS_WAKE_ERROR, 0xEB }, > > + > > + // > > + // DXE > > + // > > + { DXE_CPU_SELF_TEST_FAILED, 0x1058 }, > > + { DXE_NB_ERROR, 0x10D1 }, > > + { DXE_SB_ERROR, 0x10D2 }, > > + { DXE_ARCH_PROTOCOL_NOT_AVAILABLE, 0x10D3 }, > > + { DXE_PCI_BUS_OUT_OF_RESOURCES, 0x10D4 }, > > + { DXE_LEGACY_OPROM_NO_SPACE, 0x10D5 }, > > + { DXE_NO_CON_OUT, 0x10D6 }, > > + { DXE_NO_CON_IN, 0x10D7 }, > > + { DXE_INVALID_PASSWORD, 0x10D8 }, > > + { DXE_BOOT_OPTION_LOAD_ERROR, 0x10D9 }, > > + { DXE_BOOT_OPTION_FAILED, 0x10DA }, > > + { DXE_FLASH_UPDATE_FAILED, 0x10DB }, > > + { DXE_RESET_NOT_AVAILABLE, 0x10DC }, > > + {0,0} > > +}; > > + > > +STATUS_CODE_TO_DATA_MAP *mPostCodeStatusCodesMap[] = { > > + //#define EFI_PROGRESS_CODE 0x00000001 > > + mPostCodeProgressMap, > > + //#define EFI_ERROR_CODE 0x00000002 > > + mPostCodeErrorMap > > + //#define EFI_DEBUG_CODE 0x00000003 > > +}; > > + > > +/** > > + Find the post code data from status code value. > > + > > + @param Map The map used to find in. > > + @param Value The status code value. > > + > > + @return PostCode 0 for not found. > > + > > +**/ > > +UINT32 > > +FindPostCodeData ( > > + IN STATUS_CODE_TO_DATA_MAP *Map, > > + IN EFI_STATUS_CODE_VALUE Value > > + ) > > +{ > > + while (Map->Value != 0) { > > + if (Map->Value == Value) { > > + return Map->Data; > > + } > > + Map++; > > + } > > + return 0; > > +} > > + > > +/** > > + Get PostCode from status code type and value. > > + > > + @param CodeType Indicates the type of status code being reported. > > + @param Value Describes the current status of a hardware or > > + software entity. This includes information about > the class and > > + subclass that is used to classify the entity as > well as an > operation. > > + For progress codes, the operation is the current > activity. > > + For error codes, it is the exception.For debug > codes,it is not > defined at this time. > > + > > + @return PostCode > > + > > +**/ > > +UINT32 > > +EFIAPI > > +GetPostCodeFromStatusCode ( > > + IN EFI_STATUS_CODE_TYPE CodeType, > > + IN EFI_STATUS_CODE_VALUE Value > > + ) > > +{ > > + UINT32 CodeTypeIndex; > > + > > + CodeTypeIndex = STATUS_CODE_TYPE (CodeType) - 1; > > + > > + if (CodeTypeIndex >= sizeof (mPostCodeStatusCodesMap) / > sizeof(mPostCodeStatusCodesMap[0])) { > > + return 0; > > + } > > + > > + return FindPostCodeData (mPostCodeStatusCodesMap[CodeTypeIndex], > Value); > > +} > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCode > MapLib/PostCodeMapLib.inf > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCode > MapLib/PostCodeMapLib.inf > new file mode 100644 > index 0000000000..18a8ac6116 > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCode > MapLib/PostCodeMapLib.inf > @@ -0,0 +1,27 @@ > +## @file > > +# Instance of Platform Post Code Map Library. > > +# > > +# Copyright (c) 2011 - 2020, Intel Corporation. All rights reserved.<BR> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010017 > > + BASE_NAME = PostCodeMapLib > > + FILE_GUID = 1C579857-5328-4304-8607-77B0BC978554 > > + VERSION_STRING = 1.0 > > + MODULE_TYPE = BASE > > + LIBRARY_CLASS = PostCodeMapLib > > +# > > +# The following information is for reference only and not required by the > build tools. > > +# > > +# VALID_ARCHITECTURES = IA32 X64 IPF EBC > > +# > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + > > +[Sources] > > + PostCodeMapLib.c > > + PlatformStatusCodesInternal.h > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/PeiPostCodeStatusCodeHandlerLib.c > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/PeiPostCodeStatusCodeHandlerLib.c > new file mode 100644 > index 0000000000..85d7a3d9a8 > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/PeiPostCodeStatusCodeHandlerLib.c > @@ -0,0 +1,102 @@ > +/** @file > > + PostCode status code implementation. > > + > > + Copyright (c) 2010 - 2020, Intel Corporation. All rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include <Library/PeiServicesLib.h> > > +#include <Library/PeimEntryPoint.h> > > +#include <Library/PcdLib.h> > > +#include <Library/DebugLib.h> > > +#include <Library/ReportStatusCodeLib.h> > > +#include <Ppi/ReportStatusCodeHandler.h> > > + > > +#include <Library/PostCodeMapLib.h> > > +#include <Library/PostCodeLib.h> > > + > > +/** > > + Convert status code value and write data to post code. > > + > > + @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table > published by the PEI Foundation. > > + @param CodeType Indicates the type of status code being reported. > > + @param Value Describes the current status of a hardware or > > + software entity. This includes information about > the class and > > + subclass that is used to classify the entity as > well as an > operation. > > + For progress codes, the operation is the current > activity. > > + For error codes, it is the exception.For debug > codes,it is not > defined at this time. > > + @param Instance The enumeration of a hardware or software entity > within > > + the system. A system may contain multiple > entities that match > a class/subclass > > + pairing. The instance differentiates between > them. An > instance of 0 indicates > > + that instance information is unavailable, not > meaningful, or > not relevant. > > + Valid instance numbers start with 1. > > + @param 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 Data This optional parameter may be used to pass > additional data. > > + > > + @retval EFI_SUCCESS Status code reported to post code successfully. > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PostCodeStatusCodeReportWorker ( > > + IN CONST EFI_PEI_SERVICES **PeiServices, > > + IN EFI_STATUS_CODE_TYPE CodeType, > > + IN EFI_STATUS_CODE_VALUE Value, > > + IN UINT32 Instance, > > + IN CONST EFI_GUID *CallerId, > > + IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL > > + ) > > +{ > > + UINT32 PostCodeValue; > > + > > + PostCodeValue = GetPostCodeFromStatusCode (CodeType, Value); > > + if (PostCodeValue != 0) { > > + DEBUG ((EFI_D_INFO, "POSTCODE=<%02x>\n", PostCodeValue)); > > + PostCode (PostCodeValue); > > + } > > + > > + return EFI_SUCCESS; > > +} > > + > > +/** > > + Constructor function of PeiPostCodeStatusCodeHandlerLib. > > + > > + This function is the constructor function of this PostCode Status Code > Handler Library for PEI Phase. > > + It check whether need post code, and register it to > gEfiPeiRscHandlerPpiGuid. > > + > > + @param FileHandle Handle of the file being invoked. > > + @param PeiServices Describes the list of possible PEI Services. > > + > > + @retval EFI_SUCESS The entry point of DXE IPL PEIM executes successfully. > > + > > +**/ > > +RETURN_STATUS > > +EFIAPI > > +PeiPostCodeStatusCodeHandlerLibConstructor ( > > + IN EFI_PEI_FILE_HANDLE FileHandle, > > + IN CONST EFI_PEI_SERVICES **PeiServices > > + ) > > +{ > > + EFI_STATUS Status; > > + EFI_PEI_RSC_HANDLER_PPI *RscHandlerPpi; > > + > > + if (!PcdGetBool (PcdStatusCodeUsePostCode)) { > > + return RETURN_SUCCESS; > > + } > > + > > + Status = PeiServicesLocatePpi ( > > + &gEfiPeiRscHandlerPpiGuid, > > + 0, > > + NULL, > > + (VOID **) &RscHandlerPpi > > + ); > > + ASSERT_EFI_ERROR (Status); > > + > > + Status = RscHandlerPpi->Register (PostCodeStatusCodeReportWorker); > > + ASSERT_EFI_ERROR (Status); > > + > > + return RETURN_SUCCESS; > > +} > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/PeiPostCodeStatusCodeHandlerLib.inf > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/PeiPostCodeStatusCodeHandlerLib.inf > new file mode 100644 > index 0000000000..c27578fe90 > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/PeiPostCodeStatusCodeHandlerLib.inf > @@ -0,0 +1,49 @@ > +## @file > > +# PostCode status code implementation. > > +# > > +# Copyright (c) 2010 - 2020, Intel Corporation. All rights reserved.<BR> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +# vendor. This file may not be modified, except as allowed by > > +# additional terms of your license agreement. > > +# > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010005 > > + BASE_NAME = PeiPostCodeStatusCodeHandlerLib > > + FILE_GUID = FA32350A-63DB-4AC6-88D1-BC5327EE7ECE > > + MODULE_TYPE = PEIM > > + CONSTRUCTOR = PeiPostCodeStatusCodeHandlerLibConstructor > > + LIBRARY_CLASS = StatusCodeHandlerLib|SEC PEIM PEI_COR > > + > > +# > > +# The following information is for reference only and not required by the > build tools. > > +# > > +# VALID_ARCHITECTURES = IA32 X64 IPF EBC (EBC is only for build) > > +# > > + > > +[Sources] > > + PeiPostCodeStatusCodeHandlerLib.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + MdeModulePkg/MdeModulePkg.dec > > + PostCodeDebugFeaturePkg/PostCodeDebugFeaturePkg.dec > > + > > +[LibraryClasses] > > + PeiServicesLib > > + DebugLib > > + PcdLib > > + ReportStatusCodeLib > > + PostCodeMapLib > > + PostCodeLib > > + > > +[Pcd] > > + > gPostCodeDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUsePostCode > ## CONSUMES > > + > > +[Ppis] > > + gEfiPeiRscHandlerPpiGuid ## CONSUMES > > + > > +[Depex] > > + TRUE > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/RuntimeDxePostCodeStatusCodeHandlerLib.c > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/RuntimeDxePostCodeStatusCodeHandlerLib.c > new file mode 100644 > index 0000000000..59b531fe7c > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/RuntimeDxePostCodeStatusCodeHandlerLib.c > @@ -0,0 +1,188 @@ > +/** @file > > + PostCode status code implementation. > > + > > + Copyright (c) 2010 - 2020, Intel Corporation. All rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include <Library/UefiDriverEntryPoint.h> > > +#include <Library/UefiBootServicesTableLib.h> > > +#include <Guid/EventGroup.h> > > +#include <Library/HobLib.h> > > +#include <Library/PcdLib.h> > > +#include <Library/DebugLib.h> > > +#include <Library/ReportStatusCodeLib.h> > > +#include <Protocol/ReportStatusCodeHandler.h> > > + > > +#include <Library/PostCodeMapLib.h> > > +#include <Library/PostCodeLib.h> > > + > > +EFI_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL; > > +EFI_EVENT mExitBootServicesEvent = NULL; > > +BOOLEAN mRegisted = FALSE; > > + > > +/** > > + Convert status code value and write data to post code. > > + > > + @param CodeType Indicates the type of status code being reported. > > + @param Value Describes the current status of a hardware or > > + software entity. This includes information about > the class and > > + subclass that is used to classify the entity as > well as an > operation. > > + For progress codes, the operation is the current > activity. > > + For error codes, it is the exception.For debug > codes,it is not > defined at this time. > > + @param Instance The enumeration of a hardware or software entity > within > > + the system. A system may contain multiple > entities that match > a class/subclass > > + pairing. The instance differentiates between > them. An > instance of 0 indicates > > + that instance information is unavailable, not > meaningful, or > not relevant. > > + Valid instance numbers start with 1. > > + @param 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 Data This optional parameter may be used to pass > additional data. > > + > > + @retval EFI_SUCCESS Status code reported to post code successfully. > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PostCodeStatusCodeReportWorker ( > > + IN EFI_STATUS_CODE_TYPE CodeType, > > + IN EFI_STATUS_CODE_VALUE Value, > > + IN UINT32 Instance, > > + IN EFI_GUID *CallerId, > > + IN EFI_STATUS_CODE_DATA *Data OPTIONAL > > + ) > > +{ > > + UINT32 PostCodeValue; > > + > > + PostCodeValue = GetPostCodeFromStatusCode (CodeType, Value); > > + if (PostCodeValue != 0) { > > + DEBUG ((EFI_D_INFO, "POSTCODE=<%02x>\n", PostCodeValue)); > > + PostCode (PostCodeValue); > > + } > > + > > + return EFI_SUCCESS; > > +} > > + > > +/** > > + Unregister status code callback functions only available at boot time from > > + report status code router when exiting boot services. > > + > > + @param Event Event whose notification function is being invoked. > > + @param Context Pointer to the notification function's context, > which is > > + always zero in current implementation. > > + > > +**/ > > +VOID > > +EFIAPI > > +UnregisterPostCodeBootTimeHandlers ( > > + IN EFI_EVENT Event, > > + IN VOID *Context > > + ) > > +{ > > + if (mRegisted) { > > + mRscHandlerProtocol->Unregister (PostCodeStatusCodeReportWorker); > > + } > > +} > > + > > + > > + > > +/** > > + Register status code callback function only when Report Status Code > protocol > > + is installed. > > + > > + @param Event Event whose notification function is being invoked. > > + @param Context Pointer to the notification function's context, > which is > > + always zero in current implementation. > > + > > +**/ > > +VOID > > +EFIAPI > > +RegisterPostCodeBootTimeHandlers ( > > + IN EFI_EVENT Event, > > + IN VOID *Context > > + ) > > +{ > > + EFI_STATUS Status; > > + > > + Status = gBS->LocateProtocol ( > > + &gEfiRscHandlerProtocolGuid, > > + NULL, > > + (VOID **) &mRscHandlerProtocol > > + ); > > + ASSERT_EFI_ERROR (Status); > > + > > + mRscHandlerProtocol->Register (PostCodeStatusCodeReportWorker, > TPL_HIGH_LEVEL); > > + ASSERT_EFI_ERROR (Status); > > + mRegisted = TRUE; > > + > > + Status = gBS->CreateEventEx ( > > + EVT_NOTIFY_SIGNAL, > > + TPL_NOTIFY, > > + UnregisterPostCodeBootTimeHandlers, > > + NULL, > > + &gEfiEventExitBootServicesGuid, > > + &mExitBootServicesEvent > > + ); > > + ASSERT_EFI_ERROR (Status); > > +} > > + > > +/** > > + Constructor function of RuntimeDxePostCodeStatusCodeHandlerLib. > > + > > + This function allocates memory for extended status code data, caches > > + the report status code service, and registers events. > > + > > + @param ImageHandle The firmware allocated handle for the EFI image. > > + @param SystemTable A pointer to the EFI System Table. > > + > > + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +RuntimeDxePostCodeStatusCodeHandlerLibConstructor ( > > + IN EFI_HANDLE ImageHandle, > > + IN EFI_SYSTEM_TABLE *SystemTable > > + ) > > +{ > > + EFI_STATUS Status; > > + EFI_EVENT RegisterStatusCodeHandlerEvent; > > + VOID *Registration; > > + > > + if (!PcdGetBool (PcdStatusCodeUsePostCode)) { > > + return EFI_SUCCESS; > > + } > > + > > + Status = gBS->LocateProtocol ( > > + &gEfiRscHandlerProtocolGuid, > > + NULL, > > + (VOID **) &mRscHandlerProtocol > > + ); > > + > > + if (!EFI_ERROR (Status)) { > > + RegisterPostCodeBootTimeHandlers (NULL, NULL); > > + } else { > > + Status = gBS->CreateEvent ( > > + EVT_NOTIFY_SIGNAL, > > + TPL_NOTIFY, > > + RegisterPostCodeBootTimeHandlers, > > + NULL, > > + &RegisterStatusCodeHandlerEvent > > + ); > > + ASSERT_EFI_ERROR (Status); > > + > > + // > > + // Register for protocol notifications on this event > > + // > > + Status = gBS->RegisterProtocolNotify ( > > + &gEfiRscHandlerProtocolGuid, > > + RegisterStatusCodeHandlerEvent, > > + &Registration > > + ); > > + ASSERT_EFI_ERROR (Status); > > + } > > + > > + return EFI_SUCCESS; > > +} > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/RuntimeDxePostCodeStatusCodeHandlerLib.inf > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/RuntimeDxePostCodeStatusCodeHandlerLib.inf > new file mode 100644 > index 0000000000..21012980fe > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/RuntimeDxePostCodeStatusCodeHandlerLib.inf > @@ -0,0 +1,51 @@ > +## @file > > +# PostCode status code implementation. > > +# > > +# Copyright (c) 2010 - 2020, Intel Corporation. All rights reserved.<BR> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +# vendor. This file may not be modified, except as allowed by > > +# additional terms of your license agreement. > > +# > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010005 > > + BASE_NAME = RuntimeDxePostCodeStatusCodeHandlerLib > > + FILE_GUID = FC4F3901-3E9B-4CA3-AB6C-1B65E9AA6960 > > + MODULE_TYPE = DXE_RUNTIME_DRIVER > > + VERSION_STRING = 1.0 > > + CONSTRUCTOR = > RuntimeDxePostCodeStatusCodeHandlerLibConstructor > > + LIBRARY_CLASS = StatusCodeHandlerLib|DXE_RUNTIME_DRIVER > > + > > +# > > +# The following information is for reference only and not required by the > build tools. > > +# > > +# VALID_ARCHITECTURES = IA32 X64 IPF EBC (EBC is only for build) > > +# > > + > > +[Sources] > > + RuntimeDxePostCodeStatusCodeHandlerLib.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + MdeModulePkg/MdeModulePkg.dec > > + PostCodeDebugFeaturePkg/PostCodeDebugFeaturePkg.dec > > + > > +[LibraryClasses] > > + UefiBootServicesTableLib > > + UefiRuntimeLib > > + DebugLib > > + PcdLib > > + ReportStatusCodeLib > > + PostCodeMapLib > > + PostCodeLib > > + > > +[Pcd] > > + > gPostCodeDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUsePostCode > ## CONSUMES > > + > > +[Protocols] > > + gEfiRscHandlerProtocolGuid ## CONSUMES > > + > > +[Depex] > > + TRUE > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/SmmPostCodeStatusCodeHandlerLib.c > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/SmmPostCodeStatusCodeHandlerLib.c > new file mode 100644 > index 0000000000..efd3a7ee6f > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/SmmPostCodeStatusCodeHandlerLib.c > @@ -0,0 +1,141 @@ > +/** @file > > + PostCode status code implementation. > > + > > + Copyright (c) 2010 - 2020, Intel Corporation. All rights reserved.<BR> > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include <Library/UefiDriverEntryPoint.h> > > +#include <Library/SmmServicesTableLib.h> > > +#include <Library/HobLib.h> > > +#include <Library/PcdLib.h> > > +#include <Library/DebugLib.h> > > +#include <Library/ReportStatusCodeLib.h> > > +#include <Protocol/SmmReportStatusCodeHandler.h> > > + > > +#include <Library/PostCodeLib.h> > > +#include <Library/PostCodeMapLib.h> > > + > > + > > +/** > > + Convert status code value and write data to post code. > > + > > + @param CodeType Indicates the type of status code being reported. > > + @param Value Describes the current status of a hardware or > > + software entity. This includes information about > the class and > > + subclass that is used to classify the entity as > well as an > operation. > > + For progress codes, the operation is the current > activity. > > + For error codes, it is the exception.For debug > codes,it is not > defined at this time. > > + @param Instance The enumeration of a hardware or software entity > within > > + the system. A system may contain multiple > entities that match > a class/subclass > > + pairing. The instance differentiates between > them. An > instance of 0 indicates > > + that instance information is unavailable, not > meaningful, or > not relevant. > > + Valid instance numbers start with 1. > > + @param 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 Data This optional parameter may be used to pass > additional data. > > + > > + @retval EFI_SUCCESS Status code reported to post code successfully. > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +PostCodeStatusCodeReportWorker ( > > + IN EFI_STATUS_CODE_TYPE CodeType, > > + IN EFI_STATUS_CODE_VALUE Value, > > + IN UINT32 Instance, > > + IN EFI_GUID *CallerId, > > + IN EFI_STATUS_CODE_DATA *Data OPTIONAL > > + ) > > +{ > > + UINT32 PostCodeValue; > > + > > + PostCodeValue = GetPostCodeFromStatusCode (CodeType, Value); > > + if (PostCodeValue != 0) { > > + DEBUG ((EFI_D_INFO, "POSTCODE=<%02x>\n", PostCodeValue)); > > + PostCode (PostCodeValue); > > + } > > + > > + return EFI_SUCCESS; > > +} > > + > > +/** > > + Register status code callback function only when Report Status Code > protocol > > + is installed. > > + > > + @param Protocol Points to the protocol's unique identifier. > > + @param Interface Points to the interface instance. > > + @param Handle The handle on which the interface was installed. > > + > > + @retval EFI_SUCCESS Notification runs successfully. > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +RegisterPostCodeBootTimeHandlers ( > > + IN CONST EFI_GUID *Protocol, > > + IN VOID *Interface, > > + IN EFI_HANDLE Handle > > + ) > > +{ > > + EFI_STATUS Status; > > + EFI_SMM_RSC_HANDLER_PROTOCOL *RscHandlerProtocol; > > + > > + Status = gSmst->SmmLocateProtocol ( > > + &gEfiSmmRscHandlerProtocolGuid, > > + NULL, > > + (VOID **) &RscHandlerProtocol > > + ); > > + ASSERT_EFI_ERROR (Status); > > + > > + RscHandlerProtocol->Register (PostCodeStatusCodeReportWorker); > > + > > + return EFI_SUCCESS; > > +} > > + > > +/** > > + Constructor function of SmmPostCodeStatusCodeHandlerLib. > > + > > + This function allocates memory for extended status code data, caches > > + the report status code service, and registers events. > > + > > + @param ImageHandle The firmware allocated handle for the EFI image. > > + @param SystemTable A pointer to the EFI System Table. > > + > > + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +SmmPostCodeStatusCodeHandlerLibConstructor ( > > + IN EFI_HANDLE ImageHandle, > > + IN EFI_SYSTEM_TABLE *SystemTable > > + ) > > +{ > > + EFI_STATUS Status; > > + VOID *Registration; > > + EFI_SMM_RSC_HANDLER_PROTOCOL *RscHandlerProtocol; > > + > > + if (!PcdGetBool (PcdStatusCodeUsePostCode)) { > > + return EFI_SUCCESS; > > + } > > + > > + Status = gSmst->SmmLocateProtocol ( > > + &gEfiSmmRscHandlerProtocolGuid, > > + NULL, > > + (VOID **) &RscHandlerProtocol > > + ); > > + if (!EFI_ERROR (Status)) { > > + RegisterPostCodeBootTimeHandlers (NULL, NULL, NULL); > > + } else { > > + gSmst->SmmRegisterProtocolNotify ( > > + &gEfiSmmRscHandlerProtocolGuid, > > + RegisterPostCodeBootTimeHandlers, > > + &Registration > > + ); > > + } > > + > > + return EFI_SUCCESS; > > +} > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/SmmPostCodeStatusCodeHandlerLib.inf > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/SmmPostCodeStatusCodeHandlerLib.inf > new file mode 100644 > index 0000000000..7cc357fd49 > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Library/PostCodeS > tatusCodeHandlerLib/SmmPostCodeStatusCodeHandlerLib.inf > @@ -0,0 +1,50 @@ > +## @file > > +# PostCode status code implementation. > > +# > > +# Copyright (c) 2010 - 2020, Intel Corporation. All rights reserved.<BR> > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +# vendor. This file may not be modified, except as allowed by > > +# additional terms of your license agreement. > > +# > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010005 > > + BASE_NAME = SmmPostCodeStatusCodeHandlerLib > > + FILE_GUID = AE5C0A80-309A-42F7-BFDD-80CDA1BA2D7E > > + MODULE_TYPE = DXE_SMM_DRIVER > > + VERSION_STRING = 1.0 > > + CONSTRUCTOR = > SmmPostCodeStatusCodeHandlerLibConstructor > > + LIBRARY_CLASS = StatusCodeHandlerLib|DXE_SMM_DRIVER > > + > > +# > > +# The following information is for reference only and not required by the > build tools. > > +# > > +# VALID_ARCHITECTURES = IA32 X64 IPF EBC (EBC is only for build) > > +# > > + > > +[Sources] > > + SmmPostCodeStatusCodeHandlerLib.c > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + MdeModulePkg/MdeModulePkg.dec > > + PostCodeDebugFeaturePkg/PostCodeDebugFeaturePkg.dec > > + > > +[LibraryClasses] > > + SmmServicesTableLib > > + DebugLib > > + PcdLib > > + ReportStatusCodeLib > > + PostCodeMapLib > > + PostCodeLib > > + > > +[Pcd] > > + > gPostCodeDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUsePostCode > ## CONSUMES > > + > > +[Protocols] > > + gEfiSmmRscHandlerProtocolGuid ## CONSUMES > > + > > +[Depex] > > + TRUE > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/PostCodeDebugFe > aturePkg.dec > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/PostCodeDebugFe > aturePkg.dec > new file mode 100644 > index 0000000000..7d0e474965 > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/PostCodeDebugFe > aturePkg.dec > @@ -0,0 +1,32 @@ > +## @file > > +# This package provides PostCode Debug feature. > > +# This package should only depend on EDK II Core packages, IntelSiliconPkg, > and MinPlatformPkg. > > +# > > +# The DEC files are used by the utilities that parse DSC and > > +# INF files to generate AutoGen.c and AutoGen.h files > > +# for the build infrastructure. > > +# > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +## > > + > > +[Defines] > > + DEC_SPECIFICATION = 0x00010017 > > + PACKAGE_NAME = PostCodeDebugFeaturePkg > > + PACKAGE_GUID = A579E0A8-0D27-4CA6-900E-D613003729DE > > + PACKAGE_VERSION = 0.1 > > + > > +[Includes] > > + Include > > + > > +[LibraryClasses] > > + ## @libraryclass Provide the function to map the status code to post > code. > > + PostCodeMapLib|Include/Library/PostCodeMapLib.h > > + > > +[Guids] > > + gPostCodeDebugFeaturePkgTokenSpaceGuid = {0x68886ac8, 0x7a29, > 0x4845, {0xa7, 0x02, 0xe9, 0x83, 0xc8, 0x7f, 0xfb, 0xab}} > > + > > +[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx] > > + > gPostCodeDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUsePostCode| > TRUE|BOOLEAN|0x00000001 > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/PostCodeDebugFe > aturePkg.dsc > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/PostCodeDebugFe > aturePkg.dsc > new file mode 100644 > index 0000000000..4f0bec4a6f > --- /dev/null > +++ > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/PostCodeDebugFe > aturePkg.dsc > @@ -0,0 +1,30 @@ > +## @file > > +# This package provides PostCode Debug feature. > > +# This package should only depend on EDK II Core packages, IntelSiliconPkg, > and MinPlatformPkg. > > +# > > +# The DEC files are used by the utilities that parse DSC and > > +# INF files to generate AutoGen.c and AutoGen.h files > > +# for the build infrastructure. > > +# > > +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > +## > > + > > +[Defines] > > + PLATFORM_NAME = PostCodeFeaturePkg > > + PLATFORM_GUID = 4ADE0B1A-7929-495D-A221-6576C7884CAC > > + PLATFORM_VERSION = 0.1 > > + DSC_SPECIFICATION = 0x00010005 > > + OUTPUT_DIRECTORY = Build/$(PLATFORM_NAME) > > + SUPPORTED_ARCHITECTURES = IA32|X64 > > + BUILD_TARGETS = DEBUG|RELEASE|NOOPT > > + SKUID_IDENTIFIER = DEFAULT > > + PEI_ARCH = IA32 > > + DXE_ARCH = X64 > > + > > +# > > +# This package always builds the feature. > > +# > > +!include Include/PostCodeDebugFeature.dsc > > diff --git > a/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Readme.md > b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Readme.md > new file mode 100644 > index 0000000000..c49db35999 > --- /dev/null > +++ b/Features/Intel/Debugging/PostCodeDebugFeaturePkg/Readme.md > @@ -0,0 +1,117 @@ > +# Overview > > +* **Feature Name:** Post Code Debug > > +* **PI Phase(s) Supported:** PEI, DXE, SMM > > +* **SMM Required?** Yes > > + > > +More Information: > > + > > +## Purpose > > +The PostCodeDebugFeaturePkg include some useful post code debug > libraries, such as get post code from status code and show it. > > +This is an important capability in firmware development to get and analyze > the post code. > > + > > + > > +# High-Level Theory of Operation > > +It provide a library PostCodeStatusCodeHandlerLib used by edk2 > StatusCodeHandler.efi, used to show the post code. > > +It also provide a library of PostCodeMap lib, it map the status code to post > code. > > +A library of PostCode lib is needed by platform. > > + > > +In the library contstructor function, PostCodeStatusCodeHandlerLib register > the call back function for ReportStatusCode. > > +When called, it call GetPostCodeFromStatusCode() in PostCodeMapLib to > get post code from status code, and call PostCode() in PostCodeLib to show > the post code. > > + > > +PostCodeStatusCodeHandlerLib include 3 libraries for PEI, RuntimeDxe, > SMM: > > +* PeiPostCodeStatusCodeHandlerLib > > +* RuntimeDxePostCodeStatusCodeHandlerLib > > +* SmmPostCodeStatusCodeHandlerLib > > + > > +## Firmware Volumes > > +Linked with StatusCodeHandler.efi, and make sure put the > StatusCodeHandler.efi after the ReportStatusCodeRouter.efi. > > + > > +## Modules > > +* PostCodeStatusCodeHandlerLib > > +* PostCodeMapLib > > + > > +## PostCodeStatusCodeHandlerLib > > +This library register the call back function for ReportStatusCode, and get > post code from status code, and show post code. > > + > > +## PostCodeMapLib > > +This library provide a function to get post code from status code. > > + > > +## Key Functions > > +* In PeiPostCodeStatusCodeHandlerLib: > > + EFI_STATUS > > + EFIAPI > > + PostCodeStatusCodeReportWorker ( > > + IN CONST EFI_PEI_SERVICES **PeiServices, > > + IN EFI_STATUS_CODE_TYPE CodeType, > > + IN EFI_STATUS_CODE_VALUE Value, > > + IN UINT32 Instance, > > + IN CONST EFI_GUID *CallerId, > > + IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL > > + ) > > + > > +* In RuntimeDxePostCodeStatusCodeHandlerLib: > > + EFI_STATUS > > + EFIAPI > > + PostCodeStatusCodeReportWorker ( > > + IN EFI_STATUS_CODE_TYPE CodeType, > > + IN EFI_STATUS_CODE_VALUE Value, > > + IN UINT32 Instance, > > + IN EFI_GUID *CallerId, > > + IN EFI_STATUS_CODE_DATA *Data OPTIONAL > > + ) > > + > > +* In SmmPostCodeStatusCodeHandlerLib: > > + EFI_STATUS > > + EFIAPI > > + PostCodeStatusCodeReportWorker ( > > + IN EFI_STATUS_CODE_TYPE CodeType, > > + IN EFI_STATUS_CODE_VALUE Value, > > + IN UINT32 Instance, > > + IN EFI_GUID *CallerId, > > + IN EFI_STATUS_CODE_DATA *Data OPTIONAL > > + ) > > + > > +* In PostCodeMapLib: > > + UINT32 > > + EFIAPI > > + GetPostCodeFromStatusCode ( > > + IN EFI_STATUS_CODE_TYPE CodeType, > > + IN EFI_STATUS_CODE_VALUE Value > > + ) > > + > > +## Configuration > > +* Link the library to StatusCodeHandler.efi. > > + Example: > > + > MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHan > dlerRuntimeDxe.inf { > > + <LibraryClasses> > > + > NULL|PostCodeDebugFeaturePkg/Library/PostCodeStatusCodeHandlerLib/R > untimeDxePostCodeStatusCodeHandlerLib.inf > > + } > > + Refer to PostCodeDebugFeature.dsc for other example. > > +* Config PCD > gPostCodeDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUsePostCode. > > + In platform .dsc file, need to config the type of > gPostCodeDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUsePostCode. > > + Use PcdsFixedAtBuild to save binary size, and use PcdsDynamic if want to > enable/disable in runtime. > > +* Implemented platform's special PostCodeMapLib if needed. > > +* Provide the platform's special PostCodeLib. > > +* Make sure put the StatusCodeHandler.efi after the > ReportStatusCodeRouter.efi. > > + > > +## Data Flows > > +Status Code (ReportStatusCode) -> Post Code > (GetPostCodeFromStatusCode). > > + > > +## Control Flows > > +ReportStatusCode() -> PostCodeStatusCodeReportWorker() -> > GetPostCodeFromStatusCode() -> PostCode() > > + > > +## Build Flows > > +There is not special build flows. > > + > > +## Test Point Results > > +Verify the post code shown is correct. > > + > > +## Functional Exit Criteria > > +N/A > > + > > +## Feature Enabling Checklist > > +* Set the PCD > gPostCodeDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUsePostCode > to TRUE. > > +* The post code can be shown. > > + > > +## Common Optimizations > > +* Implemented platform's special PostCodeMapLib if needed. > > -- > 2.24.0.windows.2
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#61262): https://edk2.groups.io/g/devel/message/61262 Mute This Topic: https://groups.io/mt/74833104/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-