public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Dandan Bi" <dandan.bi@intel.com>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>,
	"Tan, Ming" <ming.tan@intel.com>
Cc: "Dong, Eric" <eric.dong@intel.com>, "Gao, Liming" <liming.gao@intel.com>
Subject: Re: [edk2-devel] [PATCH v7 1/2] Features/Intel/BeepDebugFeaturePkg: add it.
Date: Wed, 17 Jun 2020 08:25:18 +0000	[thread overview]
Message-ID: <BN6PR11MB13930054DDCA01E5B7EEE71BEA9A0@BN6PR11MB1393.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20200616112549.50544-1-ming.tan@intel.com>

Hi Min,

I have one minor comment about the function name of RegisterBeepBootTimeHandlers.
Since this is the notification function of installation of status code handler protocol, could you help update it to make it more readable?
Same comment for the function RegisterPostCodeBootTimeHandlers in patch 2.

Thanks,
Dandan
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Tan,
> Ming
> Sent: Tuesday, June 16, 2020 7:26 PM
> To: devel@edk2.groups.io
> Cc: Dong, Eric <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>
> Subject: [edk2-devel] [PATCH v7 1/2] Features/Intel/BeepDebugFeaturePkg:
> add it.
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2792
> 
> The BeepDebugFeaturePkg include some useful beep debug
> libraries, such as get beep value from status code and beep.
> 
> It provide a library BeepStatusCodeHandlerLib used by edk2
> StatusCodeHandler.efi, used to do beep if needed.
> It also provide a library of BeepMap lib, it map the status code
> to beep value.
> A library of Beep lib is needed by platform, and this pkg has a
> Null implementation.
> 
> Cc: Eric Dong <eric.dong@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Signed-off-by: Ming Tan <ming.tan@intel.com>
> ---
> V7: Add the dec files in AdvancedFeaturesPcd.dsc. Combine Beep and
> PostCode to 2/2 patchs.
> V6: Modify some bug when include the platform dsc file. And modify
> Readme.md.
> V5: In .inf files, remove some useless library.
>     In RuntimeDxeBeepStatusCodeHandlerLib.c, add a variable to indicate
> whether need unregister.
> V4: Change Include/BeepDebugFeature.dsc, make it can be included in
> platform dsc file.
> V3: Modify according the Eric's review comments.
> V2: Delete the last empty line in
> BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.inf
>  .../Include/AdvancedFeaturesPcd.dsc           |  83 +++---
>  .../BeepDebugFeaturePkg.dec                   |  36 +++
>  .../BeepDebugFeaturePkg.dsc                   |  30 ++
>  .../Include/BeepDebugFeature.dsc              | 201 +++++++++++++
>  .../Include/Library/BeepLib.h                 |  33 +++
>  .../Include/Library/BeepMapLib.h              |  32 +++
>  .../Library/BeepLib/BeepLibNull.c             |  37 +++
>  .../Library/BeepLib/BeepLibNull.inf           |  26 ++
>  .../Library/BeepMapLib/BeepMapLib.c           | 116 ++++++++
>  .../Library/BeepMapLib/BeepMapLib.inf         |  27 ++
>  .../BeepMapLib/PlatformStatusCodesInternal.h  | 270
> ++++++++++++++++++
>  .../PeiBeepStatusCodeHandlerLib.c             | 101 +++++++
>  .../PeiBeepStatusCodeHandlerLib.inf           |  49 ++++
>  .../RuntimeDxeBeepStatusCodeHandlerLib.c      | 184 ++++++++++++
>  .../RuntimeDxeBeepStatusCodeHandlerLib.inf    |  51 ++++
>  .../SmmBeepStatusCodeHandlerLib.c             | 138 +++++++++
>  .../SmmBeepStatusCodeHandlerLib.inf           |  50 ++++
>  .../Debugging/BeepDebugFeaturePkg/Readme.md   | 125 ++++++++
>  18 files changed, 1548 insertions(+), 41 deletions(-)
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg.d
> ec
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg.d
> sc
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Include/BeepDebugFeat
> ure.dsc
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepLib.
> h
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepMa
> pLib.h
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLib
> Null.c
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLib
> Null.inf
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/Bee
> pMapLib.c
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/Bee
> pMapLib.inf
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/Plat
> formStatusCodesInternal.h
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCode
> HandlerLib/PeiBeepStatusCodeHandlerLib.c
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCode
> HandlerLib/PeiBeepStatusCodeHandlerLib.inf
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCode
> HandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.c
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCode
> HandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.inf
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCode
> HandlerLib/SmmBeepStatusCodeHandlerLib.c
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCode
> HandlerLib/SmmBeepStatusCodeHandlerLib.inf
>  create mode 100644
> Features/Intel/Debugging/BeepDebugFeaturePkg/Readme.md
> 
> diff --git
> a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeaturesPcd.dsc
> b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeaturesPcd.dsc
> index 836da7c944..366b551bd3 100644
> ---
> a/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeaturesPcd.dsc
> +++
> b/Features/Intel/AdvancedFeaturePkg/Include/AdvancedFeaturesPcd.dsc
> @@ -1,41 +1,42 @@
> -## @file
> 
> 
> -#  DSC file for defining Pcd of advanced features.
> 
> 
> -#
> 
> 
> -#  This file is intended to be included into another package so advanced
> features
> 
> 
> -#  can be conditionally built by enabling the respective feature via its
> FeaturePCD.
> 
> 
> -#
> 
> 
> -# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> 
> -#
> 
> 
> -# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> -#
> 
> 
> -##
> 
> 
> -
> 
> 
> -#
> 
> 
> -# The section references the package DEC files,
> 
> 
> -# it allow a FeaturePCD to be used in a conditional statement
> 
> 
> -#
> 
> 
> -[Packages]
> 
> 
> -  MdePkg/MdePkg.dec
> 
> 
> -  AcpiDebugFeaturePkg/AcpiDebugFeaturePkg.dec
> 
> 
> -  Usb3DebugFeaturePkg/Usb3DebugFeaturePkg.dec
> 
> 
> -  NetworkFeaturePkg/NetworkFeaturePkg.dec
> 
> 
> -  IpmiFeaturePkg/IpmiFeaturePkg.dec
> 
> 
> -  S3FeaturePkg/S3FeaturePkg.dec
> 
> 
> -  SmbiosFeaturePkg/SmbiosFeaturePkg.dec
> 
> 
> -  UserAuthFeaturePkg/UserAuthFeaturePkg.dec
> 
> 
> -  LogoFeaturePkg/LogoFeaturePkg.dec
> 
> 
> -
> 
> 
> -#
> 
> 
> -# The section below sets all PCDs to FALSE in this DSC file so the feature is
> not enabled by default.
> 
> 
> -# Board can set PCDs to TRUE in its DSC file to enable a subset of advanced
> features
> 
> 
> -#
> 
> 
> -[PcdsFeatureFlag]
> 
> 
> -  gAcpiDebugFeaturePkgTokenSpaceGuid.PcdAcpiDebugFeatureEnable
> |FALSE
> 
> 
> -  gIpmiFeaturePkgTokenSpaceGuid.PcdIpmiFeatureEnable                      |FALSE
> 
> 
> -  gNetworkFeaturePkgTokenSpaceGuid.PcdNetworkFeatureEnable
> |FALSE
> 
> 
> -  gS3FeaturePkgTokenSpaceGuid.PcdS3FeatureEnable                          |FALSE
> 
> 
> -  gSmbiosFeaturePkgTokenSpaceGuid.PcdSmbiosFeatureEnable
> |FALSE
> 
> 
> -  gUsb3DebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugFeatureEnable
> |FALSE
> 
> 
> -
> gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnabl
> e    |FALSE
> 
> 
> -  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> |FALSE
> 
> 
> -  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
> 
> 
> +## @file
> 
> +#  DSC file for defining Pcd of advanced features.
> 
> +#
> 
> +#  This file is intended to be included into another package so advanced
> features
> 
> +#  can be conditionally built by enabling the respective feature via its
> FeaturePCD.
> 
> +#
> 
> +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +#
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +#
> 
> +# The section references the package DEC files,
> 
> +# it allow a FeaturePCD to be used in a conditional statement
> 
> +#
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  AcpiDebugFeaturePkg/AcpiDebugFeaturePkg.dec
> 
> +  Usb3DebugFeaturePkg/Usb3DebugFeaturePkg.dec
> 
> +  NetworkFeaturePkg/NetworkFeaturePkg.dec
> 
> +  IpmiFeaturePkg/IpmiFeaturePkg.dec
> 
> +  S3FeaturePkg/S3FeaturePkg.dec
> 
> +  SmbiosFeaturePkg/SmbiosFeaturePkg.dec
> 
> +  UserAuthFeaturePkg/UserAuthFeaturePkg.dec
> 
> +  LogoFeaturePkg/LogoFeaturePkg.dec
> 
> +  BeepDebugFeaturePkg/BeepDebugFeaturePkg.dec
> 
> +
> 
> +#
> 
> +# The section below sets all PCDs to FALSE in this DSC file so the feature is
> not enabled by default.
> 
> +# Board can set PCDs to TRUE in its DSC file to enable a subset of advanced
> features
> 
> +#
> 
> +[PcdsFeatureFlag]
> 
> +  gAcpiDebugFeaturePkgTokenSpaceGuid.PcdAcpiDebugFeatureEnable
> |FALSE
> 
> +  gIpmiFeaturePkgTokenSpaceGuid.PcdIpmiFeatureEnable
> |FALSE
> 
> +  gNetworkFeaturePkgTokenSpaceGuid.PcdNetworkFeatureEnable
> |FALSE
> 
> +  gS3FeaturePkgTokenSpaceGuid.PcdS3FeatureEnable                          |FALSE
> 
> +  gSmbiosFeaturePkgTokenSpaceGuid.PcdSmbiosFeatureEnable
> |FALSE
> 
> +  gUsb3DebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugFeatureEnable
> |FALSE
> 
> +
> gUserAuthFeaturePkgTokenSpaceGuid.PcdUserAuthenticationFeatureEnabl
> e    |FALSE
> 
> +  gLogoFeaturePkgTokenSpaceGuid.PcdLogoFeatureEnable
> |FALSE
> 
> +  gLogoFeaturePkgTokenSpaceGuid.PcdJpgEnable                              |FALSE
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg
> .dec
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg
> .dec
> new file mode 100644
> index 0000000000..4f4b36b091
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg
> .dec
> @@ -0,0 +1,36 @@
> +## @file
> 
> +# This package provides Beep 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      = BeepDebugFeaturePkg
> 
> +  PACKAGE_GUID      = DD88CEBB-E68F-4155-B754-D11E4FDF008D
> 
> +  PACKAGE_VERSION   = 0.1
> 
> +
> 
> +[Includes]
> 
> +  Include
> 
> +
> 
> +[LibraryClasses]
> 
> +  ##  @libraryclass     Provide the function to map the status code to beep
> value.
> 
> +  BeepMapLib|Include/Library/BeepMapLib.h
> 
> +
> 
> +  ##  @libraryclass     Provide the function to do the real beep.
> 
> +  BeepLib|Include/Library/BeepLib.h
> 
> +
> 
> +[Guids]
> 
> +  gBeepDebugFeaturePkgTokenSpaceGuid  =  {0x54f56fb5, 0xea0e, 0x4518,
> {0xa0, 0x3e, 0x1b, 0xeb, 0x56, 0x94, 0xd2, 0x16}}
> 
> +
> 
> +[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
> 
> +  # Beep is a legacy feature, disabled it by default
> 
> +
> gBeepDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUseBeep|FALSE|B
> OOLEAN|0x00000001
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg
> .dsc
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg
> .dsc
> new file mode 100644
> index 0000000000..47254f9974
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg
> .dsc
> @@ -0,0 +1,30 @@
> +## @file
> 
> +# This package provides Beep 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                  = BeepDebugFeaturePkg
> 
> +  PLATFORM_GUID                  = D716EDF2-77BB-4536-9C64-4D7EEF0F3896
> 
> +  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/BeepDebugFeature.dsc
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/BeepDebugFe
> ature.dsc
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/BeepDebugFe
> ature.dsc
> new file mode 100644
> index 0000000000..65e00b5979
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/BeepDebugFe
> ature.dsc
> @@ -0,0 +1,201 @@
> +## @file
> 
> +# This package provides Beep 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]
> 
> +#  gBeepDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUseBeep|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
> 
> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.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]
> 
> +  #####################################
> 
> +  # Beep Debug Feature Package
> 
> +  #####################################
> 
> +
> 
> +  # Add library instances here that are not included in package components
> and should be tested
> 
> +  # in the package build.
> 
> +
> BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/PeiBeepStatusC
> odeHandlerLib.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
> 
> +#     BeepLib|BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.inf
> 
> +#
> BeepMapLib|BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.inf
> 
> +#
> NULL|BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/PeiBeepSt
> atusCodeHandlerLib.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]
> 
> +  #####################################
> 
> +  # Beep Debug Feature Package
> 
> +  #####################################
> 
> +
> 
> +  # Add library instances here that are not included in package components
> and should be tested
> 
> +  # in the package build.
> 
> +
> BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/RuntimeDxeBee
> pStatusCodeHandlerLib.inf
> 
> +
> BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/SmmBeepStatus
> CodeHandlerLib.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
> 
> +#     BeepLib|BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.inf
> 
> +#
> BeepMapLib|BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.inf
> 
> +#
> NULL|BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/RuntimeD
> xeBeepStatusCodeHandlerLib.inf
> 
> +# }
> 
> +
> 
> +#
> MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSm
> m.inf {
> 
> +#   <LibraryClasses>
> 
> +#
> OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibN
> ull/OemHookStatusCodeLibNull.inf
> 
> +#
> SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.in
> f
> 
> +#     BeepLib|BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.inf
> 
> +#
> BeepMapLib|BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.inf
> 
> +#
> NULL|BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/SmmBeep
> StatusCodeHandlerLib.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/BeepDebugFeaturePkg/Include/Library/BeepLi
> b.h
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepLi
> b.h
> new file mode 100644
> index 0000000000..f768acc557
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepLi
> b.h
> @@ -0,0 +1,33 @@
> +/** @file
> 
> +  Provides services to send progress/error codes to Beep device.
> 
> +
> 
> +  Copyright (c) 2011 - 2020, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#ifndef __BEEP_LIB_H__
> 
> +#define __BEEP_LIB_H__
> 
> +
> 
> +/**
> 
> +  Sends a 32-bit value to Beep device.
> 
> +
> 
> +  Sends the 32-bit value specified by Value to Beep device, and returns
> Value.
> 
> +  Some implementations of this library function may perform I/O operations
> 
> +  directly to Beep device.  Other implementations may send Value to
> 
> +  ReportStatusCode(), and the status code reporting mechanism will
> eventually
> 
> +  display the 32-bit value on the status reporting device.
> 
> +
> 
> +  Beep() must actively prevent recursion.  If Beep() is called while
> 
> +  processing another Post Code Library function, then
> 
> +  Beep() must return Value immediately.
> 
> +
> 
> +  @param  Value  Beep count.
> 
> +**/
> 
> +VOID
> 
> +EFIAPI
> 
> +Beep (
> 
> +  IN UINT32  Value
> 
> +  );
> 
> +
> 
> +#endif
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepM
> apLib.h
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepM
> apLib.h
> new file mode 100644
> index 0000000000..7600d72ecd
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepM
> apLib.h
> @@ -0,0 +1,32 @@
> +/** @file
> 
> +  This library class provides Platform Beep Map.
> 
> +
> 
> +  Copyright (c) 2011 - 2020, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#ifndef __BEEP_MAP_LIB__
> 
> +#define __BEEP_MAP_LIB__
> 
> +
> 
> +/**
> 
> +  Get BeepValue 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 BeepValue
> 
> +
> 
> +**/
> 
> +UINT32
> 
> +EFIAPI
> 
> +GetBeepValueFromStatusCode (
> 
> +  IN EFI_STATUS_CODE_TYPE           CodeType,
> 
> +  IN EFI_STATUS_CODE_VALUE          Value
> 
> +  );
> 
> +
> 
> +#endif
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLi
> bNull.c
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLi
> bNull.c
> new file mode 100644
> index 0000000000..a0bd946b50
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLi
> bNull.c
> @@ -0,0 +1,37 @@
> +/** @file
> 
> +  BeepLib Null implementation.
> 
> +
> 
> +  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include <Base.h>
> 
> +#include <Uefi.h>
> 
> +
> 
> +/**
> 
> +  NULL implemented of Beep() function, just return directly.
> 
> +  Normal Beep() function will do the following:
> 
> +
> 
> +  Sends a 32-bit value to Beep device.
> 
> +
> 
> +  Sends the 32-bit value specified by Value to Beep device, and returns
> Value.
> 
> +  Some implementations of this library function may perform I/O operations
> 
> +  directly to Beep device.  Other implementations may send Value to
> 
> +  ReportStatusCode(), and the status code reporting mechanism will
> eventually
> 
> +  display the 32-bit value on the status reporting device.
> 
> +
> 
> +  Beep() must actively prevent recursion.  If Beep() is called while
> 
> +  processing another Post Code Library function, then
> 
> +  Beep() must return Value immediately.
> 
> +
> 
> +  @param  Value  Beep count.
> 
> +**/
> 
> +VOID
> 
> +EFIAPI
> 
> +Beep (
> 
> +  IN UINT32  Value
> 
> +  )
> 
> +{
> 
> +  return;
> 
> +}
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLi
> bNull.inf
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLi
> bNull.inf
> new file mode 100644
> index 0000000000..7f84dad082
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLi
> bNull.inf
> @@ -0,0 +1,26 @@
> +## @file
> 
> +#  Instance of Platform Beep Null Library.
> 
> +#
> 
> +# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION                    = 0x00010017
> 
> +  BASE_NAME                      = BeepLib
> 
> +  FILE_GUID                      = 319F24D8-9F3E-4BEC-B1C4-C54BE51F3FC2
> 
> +  VERSION_STRING                 = 1.0
> 
> +  MODULE_TYPE                    = BASE
> 
> +  LIBRARY_CLASS                  = BeepLib
> 
> +#
> 
> +# 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]
> 
> +  BeepLibNull.c
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/B
> eepMapLib.c
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/B
> eepMapLib.c
> new file mode 100644
> index 0000000000..26c32dfd9b
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/B
> eepMapLib.c
> @@ -0,0 +1,116 @@
> +/** @file
> 
> +  BeepMap implementation.
> 
> +
> 
> +  Copyright (c) 2012 - 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 mBeepProgressMap[] = {
> 
> +  //
> 
> +  // PEI
> 
> +  //
> 
> +  // Recovery
> 
> +  { PEI_RECOVERY_STARTED, 2 },
> 
> +
> 
> +  //
> 
> +  // DXE
> 
> +  //
> 
> +
> 
> +  {0,0}
> 
> +};
> 
> +
> 
> +STATUS_CODE_TO_DATA_MAP mBeepErrorMap[] = {
> 
> +  //
> 
> +  // PEI
> 
> +  //
> 
> +  // Regular boot
> 
> +  { PEI_MEMORY_NOT_DETECTED, 1 },
> 
> +  { PEI_MEMORY_INSTALLED_TWICE, 1 },
> 
> +  { PEI_DXEIPL_NOT_FOUND, 3 },
> 
> +  { PEI_DXE_CORE_NOT_FOUND, 3 },
> 
> +  { PEI_RESET_NOT_AVAILABLE, 7 },
> 
> +  // Recovery
> 
> +  { PEI_RECOVERY_FAILED, 4 },
> 
> +  // S3 Resume
> 
> +  { PEI_S3_RESUME_FAILED, 4 },
> 
> +
> 
> +  //
> 
> +  // DXE
> 
> +  //
> 
> +  { DXE_ARCH_PROTOCOL_NOT_AVAILABLE, 4 },
> 
> +  { DXE_NO_CON_OUT, 5 },
> 
> +  { DXE_NO_CON_IN, 5 },
> 
> +  { DXE_INVALID_PASSWORD, 1 },
> 
> +  { DXE_FLASH_UPDATE_FAILED, 6 },
> 
> +  { DXE_RESET_NOT_AVAILABLE, 7 },
> 
> +
> 
> +  {0,0}
> 
> +};
> 
> +
> 
> +STATUS_CODE_TO_DATA_MAP *mBeepStatusCodesMap[] = {
> 
> +  //#define EFI_PROGRESS_CODE 0x00000001
> 
> +  mBeepProgressMap,
> 
> +  //#define EFI_ERROR_CODE 0x00000002
> 
> +  mBeepErrorMap
> 
> +  //#define EFI_DEBUG_CODE 0x00000003
> 
> +};
> 
> +
> 
> +/**
> 
> +  Find the beep data from status code value.
> 
> +
> 
> +  @param  Map              The map used to find in.
> 
> +  @param  Value            The status code value.
> 
> +
> 
> +  @return BeepValue        0 for not found.
> 
> +
> 
> +**/
> 
> +UINT32
> 
> +FindBeepData (
> 
> +  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 BeepValue 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 BeepValue
> 
> +**/
> 
> +UINT32
> 
> +EFIAPI
> 
> +GetBeepValueFromStatusCode (
> 
> +  IN EFI_STATUS_CODE_TYPE           CodeType,
> 
> +  IN EFI_STATUS_CODE_VALUE          Value
> 
> +  )
> 
> +{
> 
> +  UINT32 CodeTypeIndex;
> 
> +
> 
> +  CodeTypeIndex = STATUS_CODE_TYPE (CodeType) - 1;
> 
> +
> 
> +  if (CodeTypeIndex >= sizeof (mBeepStatusCodesMap) /
> sizeof(mBeepStatusCodesMap[0])) {
> 
> +    return 0;
> 
> +  }
> 
> +
> 
> +  return FindBeepData (mBeepStatusCodesMap[CodeTypeIndex], Value);
> 
> +}
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/B
> eepMapLib.inf
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/B
> eepMapLib.inf
> new file mode 100644
> index 0000000000..b957eee07b
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/B
> eepMapLib.inf
> @@ -0,0 +1,27 @@
> +## @file
> 
> +#  Instance of Beep 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                      = BeepMapLib
> 
> +  FILE_GUID                      = 8BAFA82F-DA9E-4cce-8FA2-9DA189D7246D
> 
> +  VERSION_STRING                 = 2.0
> 
> +  MODULE_TYPE                    = BASE
> 
> +  LIBRARY_CLASS                  = BeepMapLib
> 
> +#
> 
> +# 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]
> 
> +  BeepMapLib.c
> 
> +  PlatformStatusCodesInternal.h
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/Pl
> atformStatusCodesInternal.h
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/Pl
> atformStatusCodesInternal.h
> new file mode 100644
> index 0000000000..a36134c933
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/Pl
> atformStatusCodesInternal.h
> @@ -0,0 +1,270 @@
> +/** @file
> 
> +  Beep 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_PC_BUS_ENUM)
> 
> +#define DXE_PCI_BUS_HPC_INIT                  (EFI_IO_BUS_PCI |
> EFI_IOB_PCI_PC_HPC_INIT)
> 
> +#define DXE_PCI_BUS_REQUEST_RESOURCES         (EFI_IO_BUS_PCI |
> EFI_IOB_PCI_PC_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/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/PeiBeepStatusCodeHandlerLib.c
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/PeiBeepStatusCodeHandlerLib.c
> new file mode 100644
> index 0000000000..a29d948951
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/PeiBeepStatusCodeHandlerLib.c
> @@ -0,0 +1,101 @@
> +/** @file
> 
> +  Beep 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/BeepMapLib.h>
> 
> +#include <Library/BeepLib.h>
> 
> +
> 
> +/**
> 
> +  Convert status code value to the times of beep.
> 
> +
> 
> +  @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 beep successfully.
> 
> +
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +BeepStatusCodeReportWorker (
> 
> +  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 BeepValue;
> 
> +
> 
> +  BeepValue = GetBeepValueFromStatusCode (CodeType, Value);
> 
> +  if (BeepValue != 0) {
> 
> +    Beep (BeepValue);
> 
> +  }
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Constructor function of PeiBeepStatusCodeHandlerLib.
> 
> +
> 
> +  This function is the constructor function of this Beep Status Code Handler
> Library for PEI Phase.
> 
> +  It check whether need beep, 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
> 
> +PeiBeepStatusCodeHandlerLibConstructor (
> 
> +  IN       EFI_PEI_FILE_HANDLE       FileHandle,
> 
> +  IN CONST EFI_PEI_SERVICES          **PeiServices
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS                  Status;
> 
> +  EFI_PEI_RSC_HANDLER_PPI     *RscHandlerPpi;
> 
> +
> 
> +  if (!PcdGetBool (PcdStatusCodeUseBeep)) {
> 
> +    return RETURN_SUCCESS;
> 
> +  }
> 
> +
> 
> +  Status = PeiServicesLocatePpi (
> 
> +             &gEfiPeiRscHandlerPpiGuid,
> 
> +             0,
> 
> +             NULL,
> 
> +             (VOID **) &RscHandlerPpi
> 
> +             );
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = RscHandlerPpi->Register (BeepStatusCodeReportWorker);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  return RETURN_SUCCESS;
> 
> +}
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/PeiBeepStatusCodeHandlerLib.inf
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/PeiBeepStatusCodeHandlerLib.inf
> new file mode 100644
> index 0000000000..421b246663
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/PeiBeepStatusCodeHandlerLib.inf
> @@ -0,0 +1,49 @@
> +## @file
> 
> +#  Beep 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                      = PeiBeepStatusCodeHandlerLib
> 
> +  FILE_GUID                      = C4210E71-0A38-4728-8D25-4876348AA380
> 
> +  MODULE_TYPE                    = PEIM
> 
> +  CONSTRUCTOR                    = PeiBeepStatusCodeHandlerLibConstructor
> 
> +  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]
> 
> +  PeiBeepStatusCodeHandlerLib.c
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  MdeModulePkg/MdeModulePkg.dec
> 
> +  BeepDebugFeaturePkg/BeepDebugFeaturePkg.dec
> 
> +
> 
> +[LibraryClasses]
> 
> +  PeiServicesLib
> 
> +  PcdLib
> 
> +  DebugLib
> 
> +  ReportStatusCodeLib
> 
> +  BeepMapLib
> 
> +  BeepLib
> 
> +
> 
> +[Pcd]
> 
> +  gBeepDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUseBeep
> ## CONSUMES
> 
> +
> 
> +[Ppis]
> 
> +  gEfiPeiRscHandlerPpiGuid                      ## CONSUMES
> 
> +
> 
> +[Depex]
> 
> +  TRUE
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.c
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.c
> new file mode 100644
> index 0000000000..631e2eecae
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.c
> @@ -0,0 +1,184 @@
> +/** @file
> 
> +  Beep 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/PcdLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Library/ReportStatusCodeLib.h>
> 
> +#include <Protocol/ReportStatusCodeHandler.h>
> 
> +
> 
> +#include <Library/BeepMapLib.h>
> 
> +#include <Library/BeepLib.h>
> 
> +
> 
> +EFI_RSC_HANDLER_PROTOCOL  *mRscHandlerProtocol       = NULL;
> 
> +EFI_EVENT                 mExitBootServicesEvent     = NULL;
> 
> +BOOLEAN                   mRegistered                = FALSE;
> 
> +
> 
> +/**
> 
> +  Convert status code value to the times of beep.
> 
> +
> 
> +  @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 beep successfully.
> 
> +
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +BeepStatusCodeReportWorker (
> 
> +  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 BeepValue;
> 
> +
> 
> +  BeepValue = GetBeepValueFromStatusCode (CodeType, Value);
> 
> +  if (BeepValue != 0) {
> 
> +    Beep (BeepValue);
> 
> +  }
> 
> +
> 
> +  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
> 
> +UnregisterBeepBootTimeHandlers (
> 
> +  IN EFI_EVENT        Event,
> 
> +  IN VOID             *Context
> 
> +  )
> 
> +{
> 
> +  if (mRegistered) {
> 
> +    mRscHandlerProtocol->Unregister (BeepStatusCodeReportWorker);
> 
> +  }
> 
> +}
> 
> +
> 
> +/**
> 
> +  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
> 
> +RegisterBeepBootTimeHandlers (
> 
> +  IN EFI_EVENT        Event,
> 
> +  IN VOID             *Context
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS                Status;
> 
> +
> 
> +  Status = gBS->LocateProtocol (
> 
> +                  &gEfiRscHandlerProtocolGuid,
> 
> +                  NULL,
> 
> +                  (VOID **) &mRscHandlerProtocol
> 
> +                  );
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  mRscHandlerProtocol->Register (BeepStatusCodeReportWorker,
> TPL_HIGH_LEVEL);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +  mRegistered = TRUE;
> 
> +
> 
> +  Status = gBS->CreateEventEx (
> 
> +                  EVT_NOTIFY_SIGNAL,
> 
> +                  TPL_NOTIFY,
> 
> +                  UnregisterBeepBootTimeHandlers,
> 
> +                  NULL,
> 
> +                  &gEfiEventExitBootServicesGuid,
> 
> +                  &mExitBootServicesEvent
> 
> +                  );
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +}
> 
> +
> 
> +/**
> 
> +  Constructor function of RuntimeDxeBeepStatusCodeHandlerLib.
> 
> +
> 
> +  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
> 
> +RuntimeDxeBeepStatusCodeHandlerLibConstructor (
> 
> +  IN EFI_HANDLE           ImageHandle,
> 
> +  IN EFI_SYSTEM_TABLE     *SystemTable
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS                Status;
> 
> +  EFI_EVENT                 RegisterStatusCodeHandlerEvent;
> 
> +  VOID                      *Registration;
> 
> +
> 
> +  if (!PcdGetBool (PcdStatusCodeUseBeep)) {
> 
> +    return EFI_SUCCESS;
> 
> +  }
> 
> +
> 
> +  Status = gBS->LocateProtocol (
> 
> +                  &gEfiRscHandlerProtocolGuid,
> 
> +                  NULL,
> 
> +                  (VOID **) &mRscHandlerProtocol
> 
> +                  );
> 
> +
> 
> +  if (!EFI_ERROR (Status)) {
> 
> +    RegisterBeepBootTimeHandlers (NULL, NULL);
> 
> +  } else {
> 
> +    Status = gBS->CreateEvent (
> 
> +                    EVT_NOTIFY_SIGNAL,
> 
> +                    TPL_NOTIFY,
> 
> +                    RegisterBeepBootTimeHandlers,
> 
> +                    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/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.inf
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.inf
> new file mode 100644
> index 0000000000..b9aae39128
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.inf
> @@ -0,0 +1,51 @@
> +## @file
> 
> +#  Beep 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                      = RuntimeDxeBeepStatusCodeHandlerLib
> 
> +  FILE_GUID                      = D05F43CE-7C70-4663-848F-8265C311A8A5
> 
> +  MODULE_TYPE                    = DXE_RUNTIME_DRIVER
> 
> +  VERSION_STRING                 = 1.0
> 
> +  CONSTRUCTOR                    =
> RuntimeDxeBeepStatusCodeHandlerLibConstructor
> 
> +  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]
> 
> +  RuntimeDxeBeepStatusCodeHandlerLib.c
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  MdeModulePkg/MdeModulePkg.dec
> 
> +  BeepDebugFeaturePkg/BeepDebugFeaturePkg.dec
> 
> +
> 
> +[LibraryClasses]
> 
> +  UefiBootServicesTableLib
> 
> +  UefiRuntimeLib
> 
> +  PcdLib
> 
> +  DebugLib
> 
> +  ReportStatusCodeLib
> 
> +  BeepMapLib
> 
> +  BeepLib
> 
> +
> 
> +[Pcd]
> 
> +  gBeepDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUseBeep
> ## CONSUMES
> 
> +
> 
> +[Protocols]
> 
> +  gEfiRscHandlerProtocolGuid                    ## CONSUMES
> 
> +
> 
> +[Depex]
> 
> +  TRUE
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/SmmBeepStatusCodeHandlerLib.c
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/SmmBeepStatusCodeHandlerLib.c
> new file mode 100644
> index 0000000000..6b1125f4c2
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/SmmBeepStatusCodeHandlerLib.c
> @@ -0,0 +1,138 @@
> +/** @file
> 
> +  Beep 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/PcdLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Library/ReportStatusCodeLib.h>
> 
> +#include <Protocol/SmmReportStatusCodeHandler.h>
> 
> +
> 
> +#include <Library/BeepMapLib.h>
> 
> +#include <Library/BeepLib.h>
> 
> +
> 
> +/**
> 
> +  Convert status code value to the times of beep.
> 
> +
> 
> +  @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 beep successfully.
> 
> +
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +BeepStatusCodeReportWorker (
> 
> +  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 BeepValue;
> 
> +
> 
> +  BeepValue = GetBeepValueFromStatusCode (CodeType, Value);
> 
> +  if (BeepValue != 0) {
> 
> +    Beep (BeepValue);
> 
> +  }
> 
> +
> 
> +  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
> 
> +RegisterBeepBootTimeHandlers (
> 
> +  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 (BeepStatusCodeReportWorker);
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Constructor function of SmmBeepStatusCodeHandlerLib.
> 
> +
> 
> +  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
> 
> +SmmBeepStatusCodeHandlerLibConstructor (
> 
> +  IN EFI_HANDLE           ImageHandle,
> 
> +  IN EFI_SYSTEM_TABLE     *SystemTable
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS                   Status;
> 
> +  VOID                         *Registration;
> 
> +  EFI_SMM_RSC_HANDLER_PROTOCOL *RscHandlerProtocol;
> 
> +
> 
> +  if (!PcdGetBool (PcdStatusCodeUseBeep)) {
> 
> +    return EFI_SUCCESS;
> 
> +  }
> 
> +
> 
> +  Status = gSmst->SmmLocateProtocol (
> 
> +                    &gEfiSmmRscHandlerProtocolGuid,
> 
> +                    NULL,
> 
> +                    (VOID **) &RscHandlerProtocol
> 
> +                    );
> 
> +  if (!EFI_ERROR (Status)) {
> 
> +    RegisterBeepBootTimeHandlers (NULL, NULL, NULL);
> 
> +  } else {
> 
> +    gSmst->SmmRegisterProtocolNotify (
> 
> +             &gEfiSmmRscHandlerProtocolGuid,
> 
> +             RegisterBeepBootTimeHandlers,
> 
> +             &Registration
> 
> +             );
> 
> +  }
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> diff --git
> a/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/SmmBeepStatusCodeHandlerLib.inf
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/SmmBeepStatusCodeHandlerLib.inf
> new file mode 100644
> index 0000000000..caa82264ae
> --- /dev/null
> +++
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCod
> eHandlerLib/SmmBeepStatusCodeHandlerLib.inf
> @@ -0,0 +1,50 @@
> +## @file
> 
> +#  Beep 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                      = SmmBeepStatusCodeHandlerLib
> 
> +  FILE_GUID                      = 2E2BC2D4-572D-4663-9A1E-FB52FA30922A
> 
> +  MODULE_TYPE                    = DXE_SMM_DRIVER
> 
> +  VERSION_STRING                 = 1.0
> 
> +  CONSTRUCTOR                    = SmmBeepStatusCodeHandlerLibConstructor
> 
> +  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]
> 
> +  SmmBeepStatusCodeHandlerLib.c
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  MdeModulePkg/MdeModulePkg.dec
> 
> +  BeepDebugFeaturePkg/BeepDebugFeaturePkg.dec
> 
> +
> 
> +[LibraryClasses]
> 
> +  SmmServicesTableLib
> 
> +  PcdLib
> 
> +  DebugLib
> 
> +  ReportStatusCodeLib
> 
> +  BeepMapLib
> 
> +  BeepLib
> 
> +
> 
> +[Pcd]
> 
> +  gBeepDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUseBeep
> ## CONSUMES
> 
> +
> 
> +[Protocols]
> 
> +  gEfiSmmRscHandlerProtocolGuid                 ## CONSUMES
> 
> +
> 
> +[Depex]
> 
> +  TRUE
> 
> diff --git a/Features/Intel/Debugging/BeepDebugFeaturePkg/Readme.md
> b/Features/Intel/Debugging/BeepDebugFeaturePkg/Readme.md
> new file mode 100644
> index 0000000000..ee254d0f99
> --- /dev/null
> +++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Readme.md
> @@ -0,0 +1,125 @@
> +# Overview
> 
> +* **Feature Name:** Beep Debug
> 
> +* **PI Phase(s) Supported:** PEI, DXE, SMM
> 
> +* **SMM Required?** Yes
> 
> +
> 
> +More Information:
> 
> +
> 
> +## Purpose
> 
> +The BeepDebugFeaturePkg include some useful beep debug libraries, such
> as get beep value from status code and beep.
> 
> +This is an important capability in firmware development to get and analyze
> the early error when there is not serial port.
> 
> +
> 
> +
> 
> +# High-Level Theory of Operation
> 
> +It provide a library BeepStatusCodeHandlerLib used by edk2
> StatusCodeHandler.efi, used to do beep if needed.
> 
> +It also provide a library of BeepMap lib, it map the status code to beep value.
> 
> +A library of Beep lib is needed by platform, and this pkg has a Null
> implementation.
> 
> +
> 
> +In the library contstructor function, BeepStatusCodeHandlerLib register the
> call back function for ReportStatusCode.
> 
> +When called, it call GetBeepFromStatusCode() in BeepMapLib to get beep
> value from status code, and call Beep() in BeepLib to beep.
> 
> +
> 
> +BeepStatusCodeHandlerLib include 3 libraries for PEI, RuntimeDxe, SMM:
> 
> +* PeiBeepStatusCodeHandlerLib
> 
> +* RuntimeDxeBeepStatusCodeHandlerLib
> 
> +* SmmBeepStatusCodeHandlerLib
> 
> +
> 
> +## Firmware Volumes
> 
> +Linked with StatusCodeHandler.efi, and make sure put the
> StatusCodeHandler.efi after the ReportStatusCodeRouter.efi.
> 
> +
> 
> +## Modules
> 
> +* BeepStatusCodeHandlerLib
> 
> +* BeepMapLib
> 
> +* BeepLibNull
> 
> +
> 
> +## BeepStatusCodeHandlerLib
> 
> +This library register the call back function for ReportStatusCode, and get
> beep valude from status code, and do beep.
> 
> +
> 
> +## BeepMapLib
> 
> +This library provide a function to get beep value from status code.
> 
> +
> 
> +## Key Functions
> 
> +* In PeiBeepStatusCodeHandlerLib:
> 
> +  EFI_STATUS
> 
> +  EFIAPI
> 
> +  BeepStatusCodeReportWorker (
> 
> +    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 RuntimeDxeBeepStatusCodeHandlerLib:
> 
> +  EFI_STATUS
> 
> +  EFIAPI
> 
> +  BeepStatusCodeReportWorker (
> 
> +    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 SmmBeepStatusCodeHandlerLib:
> 
> +  EFI_STATUS
> 
> +  EFIAPI
> 
> +  BeepStatusCodeReportWorker (
> 
> +    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 BeepMapLib:
> 
> +  UINT32
> 
> +  EFIAPI
> 
> +  GetBeepValueFromStatusCode (
> 
> +    IN EFI_STATUS_CODE_TYPE           CodeType,
> 
> +    IN EFI_STATUS_CODE_VALUE          Value
> 
> +  )
> 
> +
> 
> +* In BeepLib:
> 
> +  VOID
> 
> +  EFIAPI
> 
> +  Beep (
> 
> +    IN UINT32  Value
> 
> +  )
> 
> +
> 
> +## Configuration
> 
> +* Link the library to StatusCodeHandler.efi.
> 
> +  Example:
> 
> +
> MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHan
> dlerRuntimeDxe.inf {
> 
> +    <LibraryClasses>
> 
> +
> NULL|BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/RuntimeD
> xeBeepStatusCodeHandlerLib.inf
> 
> +    }
> 
> +  Refer to BeepDebugFeature.dsc for other example.
> 
> +* Config PCD
> gBeepDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUseBeep.
> 
> +  In platform .dsc file, need to config the type of
> gBeepDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUseBeep.
> 
> +  Use PcdsFixedAtBuild to save binary size, and use PcdsDynamic if want to
> enable/disable in runtime.
> 
> +* Implemented platform's special BeepMapLib if needed.
> 
> +* Provide the platform's special BeepLib.
> 
> +* Make sure put the StatusCodeHandler.efi after the
> ReportStatusCodeRouter.efi.
> 
> +
> 
> +## Data Flows
> 
> +Status Code (ReportStatusCode) -> Beep Value
> (GetBeepValueFromStatusCode).
> 
> +
> 
> +## Control Flows
> 
> +ReportStatusCode() -> BeepStatusCodeReportWorker() ->
> GetBeepValueFromStatusCode() -> Beep()
> 
> +
> 
> +## 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
> gBeepDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUseBeep to TRUE.
> 
> +* Plug out all the memory, check can here the beep.
> 
> +
> 
> +## Common Optimizations
> 
> +* Implemented platform's special BeepMapLib if needed.
> 
> --
> 2.24.0.windows.2
> 
> 
> -=-=-=-=-=-=
> Groups.io Links: You receive all messages sent to this group.
> 
> View/Reply Online (#61333): https://edk2.groups.io/g/devel/message/61333
> Mute This Topic: https://groups.io/mt/74913971/1768738
> Group Owner: devel+owner@edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub  [dandan.bi@intel.com]
> -=-=-=-=-=-=


  parent reply	other threads:[~2020-06-17  8:25 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-16 11:25 [PATCH v7 1/2] Features/Intel/BeepDebugFeaturePkg: add it Tan, Ming
2020-06-16 11:25 ` [PATCH v7 2/2] Features/Intel/PostCodeDebugFeaturePkg: " Tan, Ming
2020-06-18  0:46   ` [edk2-devel] " Dandan Bi
2020-06-17  8:25 ` Dandan Bi [this message]
2020-06-18  0:45   ` [edk2-devel] [PATCH v7 1/2] Features/Intel/BeepDebugFeaturePkg: " Dandan Bi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BN6PR11MB13930054DDCA01E5B7EEE71BEA9A0@BN6PR11MB1393.namprd11.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox